public StampPeer(Guid peerGuid) { PeerGuid = peerGuid; _genesisBlock = new StampBlock(Guid.Empty, null, null, DateTime.Now); Blocks = new Dictionary <string, StampBlock>() { { _genesisBlock.BlockHash, _genesisBlock } }; LatestBlock = _genesisBlock; }
public void AddBlock(StampBlock block) { if (LatestBlock.BlockHash != block.PreviousHash) { throw new Exception("Invalid previous block hash"); } var blockHash = block.BlockHash; if (CalculateBlockHash(block) != blockHash) { throw new Exception("Invalid new block hash"); } if (Blocks.ContainsKey(blockHash)) { throw new Exception("Duplicate block in chain"); } Blocks.Add(blockHash, block); LatestBlock = block; }
private String CalculateBlockHash(StampBlock block) { var data = String.Concat(block.BlockGuid.ToString(), block.PreviousHash, block.CreatedAt.ToUniversalTime(), block.UserCode, block.StampAt.ToUniversalTime(), block.Note); return(CalculateHash(data)); }