From c98d19eb814ffcfe0304fa45635564d8133cd2f7 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 20 Oct 2016 17:25:05 +0300 Subject: [PATCH] lost file --- test-data/src/chain_builder.rs | 125 +++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 test-data/src/chain_builder.rs diff --git a/test-data/src/chain_builder.rs b/test-data/src/chain_builder.rs new file mode 100644 index 00000000..c5dc8a1e --- /dev/null +++ b/test-data/src/chain_builder.rs @@ -0,0 +1,125 @@ +use hash::H256; +use ser::Serializable; +use primitives::bytes::Bytes; +use chain::{Transaction, TransactionInput, TransactionOutput, OutPoint}; + +#[derive(Debug, Default, Clone)] +pub struct ChainBuilder { + pub transactions: Vec, +} + +#[derive(Debug, Default, Clone)] +pub struct TransactionBuilder { + pub transaction: Transaction, +} + +impl ChainBuilder { + pub fn new() -> ChainBuilder { + ChainBuilder { + transactions: Vec::new(), + } + } + + pub fn at(&self, transaction_index: usize) -> Transaction { + self.transactions[transaction_index].clone() + } + + pub fn hash(&self, transaction_index: usize) -> H256 { + self.transactions[transaction_index].hash() + } + + pub fn size(&self, transaction_index: usize) -> usize { + self.transactions[transaction_index].serialized_size() + } +} + +impl Into for TransactionBuilder { + fn into(self) -> Transaction { + self.transaction + } +} + +impl TransactionBuilder { + pub fn with_version(version: i32) -> TransactionBuilder { + let builder = TransactionBuilder::default(); + builder.set_version(version) + } + + pub fn with_output(value: u64) -> TransactionBuilder { + let builder = TransactionBuilder::default(); + builder.add_output(value) + } + + pub fn with_default_input(output_index: u32) -> TransactionBuilder { + let builder = TransactionBuilder::default(); + builder.add_input(&Transaction::default(), output_index) + } + + pub fn as_input(self, output_index: u32) -> TransactionBuilder { + let builder = TransactionBuilder::default(); + builder.add_input(&self.transaction, output_index) + } + + pub fn set_version(mut self, version: i32) -> TransactionBuilder { + self.transaction.version = version; + self + } + + pub fn add_output(mut self, value: u64) -> TransactionBuilder { + self.transaction.outputs.push(TransactionOutput { + value: value, + script_pubkey: Bytes::new_with_len(0), + }); + self + } + + pub fn set_output(mut self, value: u64) -> TransactionBuilder { + self.transaction.outputs = vec![TransactionOutput { + value: value, + script_pubkey: Bytes::new_with_len(0), + }]; + self + } + + pub fn add_default_input(self, output_index: u32) -> TransactionBuilder { + self.add_input(&Transaction::default(), output_index) + } + + + pub fn add_input(mut self, transaction: &Transaction, output_index: u32) -> TransactionBuilder { + self.transaction.inputs.push(TransactionInput { + previous_output: OutPoint { + hash: transaction.hash(), + index: output_index, + }, + script_sig: Bytes::new_with_len(0), + sequence: 0, + }); + self + } + + pub fn set_default_input(self, output_index: u32) -> TransactionBuilder { + self.set_input(&Transaction::default(), output_index) + } + + pub fn set_input(mut self, transaction: &Transaction, output_index: u32) -> TransactionBuilder { + self.transaction.inputs = vec![TransactionInput { + previous_output: OutPoint { + hash: transaction.hash(), + index: output_index, + }, + script_sig: Bytes::new_with_len(0), + sequence: 0, + }]; + self + } + + pub fn store(self, chain: &mut ChainBuilder) -> Self { + chain.transactions.push(self.transaction.clone()); + self + } + + pub fn hash(self) -> H256 { + self.transaction.hash() + } +} \ No newline at end of file