Move system_transaction out of src/

This commit is contained in:
Michael Vines 2018-12-04 15:37:11 -08:00
parent 122627dda2
commit 214ed3667c
25 changed files with 106 additions and 103 deletions

View File

@ -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;

View File

@ -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};

View File

@ -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;

View File

@ -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]

View File

@ -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;

View File

@ -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();

View File

@ -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]

View File

@ -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() {

View File

@ -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;

View File

@ -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() {

View File

@ -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() {

View File

@ -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;

View File

@ -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;

View File

@ -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)]

View File

@ -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() {

View File

@ -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() {

View File

@ -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);

View File

@ -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]

View File

@ -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();

11
src/test_tx.rs Normal file
View File

@ -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)
}

View File

@ -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 {

View File

@ -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};

View File

@ -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";

View File

@ -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};

View File

@ -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;