public AccountsState ExecuteBlock(Block block, AccountsState initialstate) { if (block.Transactions == null) { return(initialstate); } var state = initialstate; foreach (var tx in block.Transactions) { this.ExecuteTransaction(tx, state, ref state); } return(state); }
public BlockInfo(Block block, AccountsState state) { this.block = block; this.state = state; }
public bool ExecuteTransaction(Transaction transaction, AccountsState initialstate, ref AccountsState newstate) { var state = initialstate; try { var addr = transaction.Sender; var accstate = state.Get(addr); var newaccstate = accstate.SubtractFromBalance(transaction.Value); state = state.Put(addr, newaccstate); addr = transaction.Receiver; accstate = state.Get(addr); newaccstate = accstate.AddToBalance(transaction.Value); state = state.Put(addr, newaccstate); newstate = state; return(true); } catch (Exception) { return(false); } }