Move system_transaction out of src/
This commit is contained in:
parent
122627dda2
commit
214ed3667c
|
@ -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;
|
||||
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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: Eq>(a: &[A], b: &[A]) -> Option<usize> {
|
||||
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();
|
|
@ -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]
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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>, Meta, Hash, Keypair) {
|
||||
let alice = Mint::new(10_000);
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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: Eq>(a: &[A], b: &[A]) -> Option<usize> {
|
||||
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();
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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};
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue