Browse Source

Use pending transactions pool

rust-port
garritfra 6 years ago
parent
commit
e6d65fe640
  1. 23
      src/core/blockchain.rs
  2. 1
      src/core/mod.rs
  3. 1
      src/core/transaction.rs
  4. 20
      src/core/tx_pool.rs
  5. 13
      src/main.rs

23
src/core/blockchain.rs

@ -1,7 +1,10 @@
use core::block;
use core::transaction::Transaction;
use core::tx_pool;
pub struct Blockchain {
pub blocks: Vec<block::Block>,
pub tx_pool: tx_pool::Tx_pool,
}
pub fn new() -> Blockchain {
println!("New blockchain\n");
@ -10,12 +13,30 @@ pub fn new() -> Blockchain {
let blockchain = Blockchain {
blocks: vec![genesis],
tx_pool: tx_pool::new(),
};
return blockchain;
}
impl Blockchain {
pub fn add_block(&mut self, block: block::Block) {
pub fn mine_block(&mut self) -> &block::Block {
let mut block = block::new();
block.transactions = self.tx_pool.transactions.clone();
self.clear_transactions();
self.blocks.push(block);
&self.blocks.last().unwrap()
}
fn clear_transactions(&mut self) {
&self.tx_pool.transactions.clear();
}
pub fn add_pending_transaction(&mut self, transaction: Transaction) {
self.tx_pool.transactions.push(transaction);
}
pub fn get_blocks(&mut self) -> &Vec<block::Block> {
&self.blocks
}
}

1
src/core/mod.rs

@ -1,3 +1,4 @@
pub mod block;
pub mod blockchain;
pub mod transaction;
pub mod tx_pool;

1
src/core/transaction.rs

@ -1,3 +1,4 @@
#[derive(Clone)]
pub struct Transaction {
pub from: String,
pub to: String,

20
src/core/tx_pool.rs

@ -0,0 +1,20 @@
use core::transaction::Transaction;
pub struct Tx_pool {
pub transactions: Vec<Transaction>,
}
pub fn new() -> Tx_pool {
Tx_pool {
transactions: Vec::new(),
}
}
impl Tx_pool {
pub fn add(&mut self, transaction: Transaction) {
self.transactions.push(transaction);
}
pub fn sanatize(&mut self) {
self.transactions.clear();
}
}

13
src/main.rs

@ -1,17 +1,16 @@
mod core;
use core::block;
use core::transaction;
fn main() {
let mut blockchain = core::blockchain::new();
let transaction = transaction::new_with_amount("Me".to_string(), "You".to_string(), 10);
let mut block = block::new();
block.add_transaction(transaction);
blockchain.add_block(block);
for block in blockchain.blocks {
for transaction in block.transactions {
blockchain.add_pending_transaction(transaction);
blockchain.mine_block();
for block in blockchain.get_blocks() {
for transaction in &block.transactions {
println!("{}", transaction.from);
}
}

Loading…
Cancel
Save