From 214ed3667c0776b535ac88853a856829b427ac47 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Tue, 4 Dec 2018 15:37:11 -0800 Subject: [PATCH] Move system_transaction out of src/ --- benches/bank.rs | 2 +- benches/banking_stage.rs | 2 +- benches/ledger.rs | 2 +- benches/sigverify.rs | 2 +- sdk/src/lib.rs | 1 + {src => sdk/src}/system_transaction.rs | 85 +++----------------------- src/bank.rs | 4 +- src/banking_stage.rs | 2 +- src/bin/bench-tps.rs | 2 +- src/crds_value.rs | 2 +- src/entry.rs | 2 +- src/leader_scheduler.rs | 2 +- src/lib.rs | 2 +- src/mint.rs | 2 +- src/packet.rs | 2 +- src/poh_recorder.rs | 2 +- src/rpc.rs | 2 +- src/rpc_pubsub.rs | 2 +- src/sigverify.rs | 68 ++++++++++++++++++++- src/test_tx.rs | 11 ++++ src/thin_client.rs | 2 +- src/tvu.rs | 2 +- src/wallet.rs | 2 +- tests/multinode.rs | 2 +- tests/programs.rs | 2 +- 25 files changed, 106 insertions(+), 103 deletions(-) rename {src => sdk/src}/system_transaction.rs (64%) create mode 100644 src/test_tx.rs diff --git a/benches/bank.rs b/benches/bank.rs index 9ea15b771e..6a70d888e9 100644 --- a/benches/bank.rs +++ b/benches/bank.rs @@ -7,9 +7,9 @@ extern crate test; use solana::bank::*; use solana::mint::Mint; -use solana::system_transaction::SystemTransaction; use solana_sdk::hash::hash; use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::transaction::Transaction; use test::Bencher; diff --git a/benches/banking_stage.rs b/benches/banking_stage.rs index 4ba256bae0..db8b22787f 100644 --- a/benches/banking_stage.rs +++ b/benches/banking_stage.rs @@ -13,10 +13,10 @@ use solana::banking_stage::{BankingStage, NUM_THREADS}; use solana::entry::Entry; use solana::mint::Mint; use solana::packet::to_packets_chunked; -use solana::system_transaction::SystemTransaction; use solana_sdk::hash::hash; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{KeypairUtil, Signature}; +use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::transaction::Transaction; use std::iter; use std::sync::mpsc::{channel, Receiver}; diff --git a/benches/ledger.rs b/benches/ledger.rs index 514b8e5529..8bfa8f19cf 100644 --- a/benches/ledger.rs +++ b/benches/ledger.rs @@ -5,9 +5,9 @@ extern crate test; use solana::entry::reconstruct_entries_from_blobs; use solana::ledger::{next_entries, Block}; -use solana::system_transaction::SystemTransaction; use solana_sdk::hash::{hash, Hash}; use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::transaction::Transaction; use test::Bencher; diff --git a/benches/sigverify.rs b/benches/sigverify.rs index e4687f8c7c..5601bcbd04 100644 --- a/benches/sigverify.rs +++ b/benches/sigverify.rs @@ -6,7 +6,7 @@ extern crate test; use solana::packet::to_packets; use solana::sigverify; -use solana::system_transaction::test_tx; +use solana::test_tx::test_tx; use test::Bencher; #[bench] diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 60ca5005a3..e674a02e83 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -16,6 +16,7 @@ pub mod signature; pub mod storage_program; pub mod system_instruction; pub mod system_program; +pub mod system_transaction; pub mod timing; pub mod token_program; pub mod transaction; diff --git a/src/system_transaction.rs b/sdk/src/system_transaction.rs similarity index 64% rename from src/system_transaction.rs rename to sdk/src/system_transaction.rs index 21a617b87a..7fd00a6dc4 100644 --- a/src/system_transaction.rs +++ b/sdk/src/system_transaction.rs @@ -1,11 +1,11 @@ //! The `system_transaction` module provides functionality for creating system transactions. -use solana_sdk::hash::Hash; -use solana_sdk::pubkey::Pubkey; -use solana_sdk::signature::{Keypair, KeypairUtil}; -use solana_sdk::system_instruction::SystemInstruction; -use solana_sdk::system_program; -use solana_sdk::transaction::{Instruction, Transaction}; +use hash::Hash; +use pubkey::Pubkey; +use signature::Keypair; +use system_instruction::SystemInstruction; +use system_program; +use transaction::{Instruction, Transaction}; pub trait SystemTransaction { fn system_create( @@ -133,82 +133,11 @@ impl SystemTransaction for Transaction { } } -pub fn test_tx() -> Transaction { - let keypair1 = Keypair::new(); - let pubkey1 = keypair1.pubkey(); - let zero = Hash::default(); - Transaction::system_new(&keypair1, pubkey1, 42, zero) -} - -#[cfg(test)] -pub fn memfind(a: &[A], b: &[A]) -> Option { - assert!(a.len() >= b.len()); - let end = a.len() - b.len() + 1; - for i in 0..end { - if a[i..i + b.len()] == b[..] { - return Some(i); - } - } - None -} - #[cfg(test)] mod tests { use super::*; - use bincode::{deserialize, serialize}; - use packet::PACKET_DATA_SIZE; - use sigverify; - use solana_sdk::transaction::SIG_OFFSET; + use signature::KeypairUtil; - #[test] - fn test_layout() { - let tx = test_tx(); - let tx_bytes = serialize(&tx).unwrap(); - let sign_data = tx.get_sign_data(); - let packet = sigverify::make_packet_from_transaction(tx.clone()); - - let (sig_len, sig_start, msg_start_offset, pubkey_offset) = - sigverify::get_packet_offsets(&packet, 0); - - assert_eq!( - memfind(&tx_bytes, &tx.signatures[0].as_ref()), - Some(SIG_OFFSET) - ); - assert_eq!( - memfind(&tx_bytes, &tx.account_keys[0].as_ref()), - Some(pubkey_offset as usize) - ); - assert_eq!( - memfind(&tx_bytes, &sign_data), - Some(msg_start_offset as usize) - ); - assert_eq!( - memfind(&tx_bytes, &tx.signatures[0].as_ref()), - Some(sig_start as usize) - ); - assert_eq!(sig_len, 1); - assert!(tx.verify_signature()); - } - - #[test] - fn test_userdata_layout() { - let mut tx0 = test_tx(); - tx0.instructions[0].userdata = vec![1, 2, 3]; - let sign_data0a = tx0.get_sign_data(); - let tx_bytes = serialize(&tx0).unwrap(); - assert!(tx_bytes.len() < PACKET_DATA_SIZE); - assert_eq!( - memfind(&tx_bytes, &tx0.signatures[0].as_ref()), - Some(SIG_OFFSET) - ); - let tx1 = deserialize(&tx_bytes).unwrap(); - assert_eq!(tx0, tx1); - assert_eq!(tx1.instructions[0].userdata, vec![1, 2, 3]); - - tx0.instructions[0].userdata = vec![1, 2, 4]; - let sign_data0b = tx0.get_sign_data(); - assert_ne!(sign_data0a, sign_data0b); - } #[test] fn test_move_many() { let from = Keypair::new(); diff --git a/src/bank.rs b/src/bank.rs index 74cc6a8b56..43db3efa2f 100644 --- a/src/bank.rs +++ b/src/bank.rs @@ -41,7 +41,7 @@ use std::result; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Arc, Mutex, RwLock}; use std::time::Instant; -use system_transaction::SystemTransaction; +use solana_sdk::system_transaction::SystemTransaction; use tokio::prelude::Future; /// The number of most recent `last_id` values that the bank will track the signatures @@ -1433,7 +1433,7 @@ mod tests { use solana_sdk::signature::KeypairUtil; use solana_sdk::transaction::Instruction; use std; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; use tokio::prelude::{Async, Stream}; #[test] diff --git a/src/banking_stage.rs b/src/banking_stage.rs index 024b50843a..8e86b00833 100644 --- a/src/banking_stage.rs +++ b/src/banking_stage.rs @@ -258,7 +258,7 @@ mod tests { use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::transaction::Transaction; use std::thread::sleep; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; #[test] fn test_banking_stage_shutdown1() { diff --git a/src/bin/bench-tps.rs b/src/bin/bench-tps.rs index 7c846429dd..17871d6caa 100644 --- a/src/bin/bench-tps.rs +++ b/src/bin/bench-tps.rs @@ -16,13 +16,13 @@ use solana::logger; use solana::ncp::Ncp; use solana::service::Service; use solana::signature::GenKeys; -use solana::system_transaction::SystemTransaction; use solana::thin_client::{poll_gossip_for_leader, ThinClient}; use solana::window::default_window; use solana_drone::drone::{request_airdrop_transaction, DRONE_PORT}; use solana_metrics::influxdb; use solana_sdk::hash::Hash; use solana_sdk::signature::{read_keypair, Keypair, KeypairUtil}; +use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::timing::timestamp; use solana_sdk::timing::{duration_as_ms, duration_as_s}; use solana_sdk::transaction::Transaction; diff --git a/src/crds_value.rs b/src/crds_value.rs index 8b043f863c..c39c13d6eb 100644 --- a/src/crds_value.rs +++ b/src/crds_value.rs @@ -233,7 +233,7 @@ mod test { use contact_info::ContactInfo; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::timing::timestamp; - use system_transaction::test_tx; + use test_tx::test_tx; #[test] fn test_labels() { diff --git a/src/entry.rs b/src/entry.rs index da879bc986..3d78c9f582 100644 --- a/src/entry.rs +++ b/src/entry.rs @@ -278,7 +278,7 @@ mod tests { use solana_sdk::hash::hash; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::transaction::Transaction; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; #[test] fn test_entry_verify() { diff --git a/src/leader_scheduler.rs b/src/leader_scheduler.rs index 0329384cf5..c0b55e3dbf 100644 --- a/src/leader_scheduler.rs +++ b/src/leader_scheduler.rs @@ -15,7 +15,7 @@ use solana_sdk::vote_program::{self, Vote, VoteProgram}; use solana_sdk::vote_transaction::VoteTransaction; use std::collections::HashSet; use std::io::Cursor; -use system_transaction::SystemTransaction; +use solana_sdk::system_transaction::SystemTransaction; pub const DEFAULT_BOOTSTRAP_HEIGHT: u64 = 1000; pub const DEFAULT_LEADER_ROTATION_INTERVAL: u64 = 100; diff --git a/src/lib.rs b/src/lib.rs index a294bc500c..3ed69e99e0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -66,7 +66,7 @@ pub mod sigverify_stage; pub mod storage_stage; pub mod store_ledger_stage; pub mod streamer; -pub mod system_transaction; +pub mod test_tx; pub mod thin_client; pub mod tpu; pub mod tpu_forwarder; diff --git a/src/mint.rs b/src/mint.rs index fd15bb1e9d..1566add7ce 100644 --- a/src/mint.rs +++ b/src/mint.rs @@ -6,7 +6,7 @@ use solana_sdk::hash::{hash, Hash}; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::transaction::Transaction; -use system_transaction::SystemTransaction; +use solana_sdk::system_transaction::SystemTransaction; use untrusted::Input; #[derive(Serialize, Deserialize, Debug)] diff --git a/src/packet.rs b/src/packet.rs index a15869b6d0..2722a94fb1 100644 --- a/src/packet.rs +++ b/src/packet.rs @@ -473,7 +473,7 @@ mod tests { use std::io; use std::io::Write; use std::net::UdpSocket; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; #[test] pub fn packet_send_recv() { diff --git a/src/poh_recorder.rs b/src/poh_recorder.rs index 31c5296904..8ced07916f 100644 --- a/src/poh_recorder.rs +++ b/src/poh_recorder.rs @@ -122,7 +122,7 @@ mod tests { use solana_sdk::hash::hash; use std::sync::mpsc::channel; use std::sync::Arc; - use system_transaction::test_tx; + use test_tx::test_tx; #[test] fn test_poh() { diff --git a/src/rpc.rs b/src/rpc.rs index 4559b5b201..3398dcd8f3 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -378,7 +378,7 @@ mod tests { use solana_sdk::transaction::Transaction; use std::fs::remove_dir_all; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; fn start_rpc_handler_with_tx(pubkey: Pubkey) -> (MetaIoHandler, Meta, Hash, Keypair) { let alice = Mint::new(10_000); diff --git a/src/rpc_pubsub.rs b/src/rpc_pubsub.rs index b306828b4d..516551df20 100644 --- a/src/rpc_pubsub.rs +++ b/src/rpc_pubsub.rs @@ -253,7 +253,7 @@ mod tests { use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::transaction::Transaction; use std::net::{IpAddr, Ipv4Addr}; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; use tokio::prelude::{Async, Stream}; #[test] diff --git a/src/sigverify.rs b/src/sigverify.rs index 66e16baaba..447a065024 100644 --- a/src/sigverify.rs +++ b/src/sigverify.rs @@ -322,7 +322,7 @@ pub fn make_packet_from_transaction(tx: Transaction) -> Packet { #[cfg(test)] mod tests { - use bincode::serialize; + use bincode::{deserialize, serialize}; use packet::{Packet, SharedPackets}; use sigverify; use solana_sdk::budget_program; @@ -330,8 +330,19 @@ mod tests { use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_instruction::SystemInstruction; use solana_sdk::system_program; - use solana_sdk::transaction::{Instruction, Transaction}; - use system_transaction::{memfind, test_tx}; + use solana_sdk::transaction::{Instruction, Transaction, SIG_OFFSET}; + use test_tx::test_tx; + + pub fn memfind(a: &[A], b: &[A]) -> Option { + assert!(a.len() >= b.len()); + let end = a.len() - b.len() + 1; + for i in 0..end { + if a[i..i + b.len()] == b[..] { + return Some(i); + } + } + None + } #[test] fn test_layout() { @@ -342,6 +353,57 @@ mod tests { assert_matches!(memfind(&packet, &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), None); } + #[test] + fn test_system_transaction_layout() { + let tx = test_tx(); + let tx_bytes = serialize(&tx).unwrap(); + let sign_data = tx.get_sign_data(); + let packet = sigverify::make_packet_from_transaction(tx.clone()); + + let (sig_len, sig_start, msg_start_offset, pubkey_offset) = + sigverify::get_packet_offsets(&packet, 0); + + assert_eq!( + memfind(&tx_bytes, &tx.signatures[0].as_ref()), + Some(SIG_OFFSET) + ); + assert_eq!( + memfind(&tx_bytes, &tx.account_keys[0].as_ref()), + Some(pubkey_offset as usize) + ); + assert_eq!( + memfind(&tx_bytes, &sign_data), + Some(msg_start_offset as usize) + ); + assert_eq!( + memfind(&tx_bytes, &tx.signatures[0].as_ref()), + Some(sig_start as usize) + ); + assert_eq!(sig_len, 1); + assert!(tx.verify_signature()); + } + + #[test] + fn test_system_transaction_userdata_layout() { + use packet::PACKET_DATA_SIZE; + let mut tx0 = test_tx(); + tx0.instructions[0].userdata = vec![1, 2, 3]; + let sign_data0a = tx0.get_sign_data(); + let tx_bytes = serialize(&tx0).unwrap(); + assert!(tx_bytes.len() < PACKET_DATA_SIZE); + assert_eq!( + memfind(&tx_bytes, &tx0.signatures[0].as_ref()), + Some(SIG_OFFSET) + ); + let tx1 = deserialize(&tx_bytes).unwrap(); + assert_eq!(tx0, tx1); + assert_eq!(tx1.instructions[0].userdata, vec![1, 2, 3]); + + tx0.instructions[0].userdata = vec![1, 2, 4]; + let sign_data0b = tx0.get_sign_data(); + assert_ne!(sign_data0a, sign_data0b); + } + #[test] fn test_get_packet_offsets() { let tx = test_tx(); diff --git a/src/test_tx.rs b/src/test_tx.rs new file mode 100644 index 0000000000..dd25f14ce6 --- /dev/null +++ b/src/test_tx.rs @@ -0,0 +1,11 @@ +use solana_sdk::hash::Hash; +use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::system_transaction::*; +use solana_sdk::transaction::Transaction; + +pub fn test_tx() -> Transaction { + let keypair1 = Keypair::new(); + let pubkey1 = keypair1.pubkey(); + let zero = Hash::default(); + Transaction::system_new(&keypair1, pubkey1, 42, zero) +} diff --git a/src/thin_client.rs b/src/thin_client.rs index da3eb21fb5..54b065a163 100644 --- a/src/thin_client.rs +++ b/src/thin_client.rs @@ -30,7 +30,7 @@ use std::sync::{Arc, RwLock}; use std::thread::sleep; use std::time::Duration; use std::time::Instant; -use system_transaction::SystemTransaction; +use solana_sdk::system_transaction::SystemTransaction; /// An object for querying and sending transactions to the network. pub struct ThinClient { diff --git a/src/tvu.rs b/src/tvu.rs index 8b42d8a3b1..06214c3327 100644 --- a/src/tvu.rs +++ b/src/tvu.rs @@ -187,7 +187,7 @@ pub mod tests { use std::sync::{Arc, RwLock}; use std::time::Duration; use streamer; - use system_transaction::SystemTransaction; + use solana_sdk::system_transaction::SystemTransaction; use tvu::Tvu; use window::{self, SharedWindow}; diff --git a/src/wallet.rs b/src/wallet.rs index 8b47439ed9..a4813d15f4 100644 --- a/src/wallet.rs +++ b/src/wallet.rs @@ -26,7 +26,7 @@ use std::str::FromStr; use std::thread::sleep; use std::time::Duration; use std::{error, fmt, mem}; -use system_transaction::SystemTransaction; +use solana_sdk::system_transaction::SystemTransaction; use thin_client::poll_gossip_for_leader; const PLATFORM_SECTION_C: &str = ".text.entrypoint"; diff --git a/tests/multinode.rs b/tests/multinode.rs index 9e20075964..74ae809c57 100644 --- a/tests/multinode.rs +++ b/tests/multinode.rs @@ -24,12 +24,12 @@ use solana::packet::SharedBlob; use solana::poh_service::NUM_TICKS_PER_SECOND; use solana::result; use solana::service::Service; -use solana::system_transaction::SystemTransaction; use solana::thin_client::{retry_get_balance, ThinClient}; use solana::window::default_window; use solana_sdk::hash::Hash; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::timing::{duration_as_ms, duration_as_s}; use solana_sdk::transaction::Transaction; use std::collections::{HashSet, VecDeque}; diff --git a/tests/programs.rs b/tests/programs.rs index 8fc12fee9c..a5fc1de095 100644 --- a/tests/programs.rs +++ b/tests/programs.rs @@ -8,12 +8,12 @@ use solana::bank::Bank; use solana::logger; use solana::mint::Mint; use solana::native_loader; -use solana::system_transaction::SystemTransaction; #[cfg(feature = "bpf_c")] use solana_sdk::bpf_loader; use solana_sdk::loader_transaction::LoaderTransaction; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::transaction::Transaction; #[cfg(feature = "bpf_c")] use std::env;