public BlockTreeBuilder WithBlocks(params Block[] blocks) { int counter = 0; if (blocks.Length == 0) { return(this); } if (blocks[0].Number != 0) { throw new ArgumentException("First block does not have block number 0."); } foreach (Block block in blocks) { if (block.Number != counter++) { throw new ArgumentException("Block numbers are not consecutively increasing."); } TestObjectInternal.SuggestBlock(block); TestObjectInternal.UpdateMainChain(new[] { block }, true); } return(this); }
public BlockTreeBuilder OfChainLength(int chainLength, int splitVariant = 0) { Block current = _genesisBlock; for (int i = 0; i < chainLength; i++) { TestObjectInternal.SuggestBlock(current); TestObjectInternal.UpdateMainChain(current); current = Build.A.Block.WithNumber((ulong)i + 1).WithParent(current).WithDifficulty(BlockHeaderBuilder.DefaultDifficulty - (ulong)splitVariant).TestObject; } return(this); }
public BlockTreeBuilder WithOnlySomeBlocksProcessed(int chainLength, int processedChainLength) { Block current = _genesisBlock; for (int i = 0; i < chainLength; i++) { TestObjectInternal.SuggestBlock(current); if (current.Number < processedChainLength) { TestObjectInternal.UpdateMainChain(current); } current = Build.A.Block.WithNumber(i + 1).WithParent(current).WithDifficulty(BlockHeaderBuilder.DefaultDifficulty).TestObject; } return(this); }
public BlockTreeBuilder OfChainLength(out Block headBlock, int chainLength, int splitVariant = 0, int splitFrom = 0, params Address[] blockBeneficiaries) { Block current = _genesisBlock; headBlock = _genesisBlock; bool skipGenesis = TestObjectInternal.Genesis != null; for (int i = 0; i < chainLength; i++) { Address beneficiary = blockBeneficiaries.Length == 0 ? Address.Zero : blockBeneficiaries[i % blockBeneficiaries.Length]; headBlock = current; if (_onlyHeaders) { if (!(current.IsGenesis && skipGenesis)) { TestObjectInternal.SuggestHeader(current.Header); } Block parent = current; current = CreateBlock(splitVariant, splitFrom, i, parent, beneficiary); } else { if (!(current.IsGenesis && skipGenesis)) { AddBlockResult result = TestObjectInternal.SuggestBlock(current); Assert.AreEqual(AddBlockResult.Added, result, $"Adding {current.ToString(Block.Format.Short)} at split variant {splitVariant}"); TestObjectInternal.UpdateMainChain(current); } Block parent = current; current = CreateBlock(splitVariant, splitFrom, i, parent, beneficiary); } } return(this); }
public BlockTreeBuilder OfChainLength(out Block headBlock, int chainLength, int splitVariant = 0) { Block current = _genesisBlock; headBlock = _genesisBlock; bool skipGenesis = TestObjectInternal.Head != null; for (int i = 0; i < chainLength; i++) { headBlock = current; if (_onlyHeaders) { if (!(current.IsGenesis && skipGenesis)) { TestObjectInternal.SuggestHeader(current.Header); } current = Build.A.Block.WithNumber(i + 1).WithParent(current).WithDifficulty(BlockHeaderBuilder.DefaultDifficulty - (ulong)splitVariant).TestObject; } else { if (!(current.IsGenesis && skipGenesis)) { AddBlockResult result = TestObjectInternal.SuggestBlock(current); Assert.AreEqual(AddBlockResult.Added, result, $"Adding {current.ToString(Block.Format.Short)} at split variant {splitVariant}"); TestObjectInternal.UpdateMainChain(current); } current = Build.A.Block.WithNumber(i + 1).WithParent(current).WithDifficulty(BlockHeaderBuilder.DefaultDifficulty - (ulong)splitVariant).TestObject; } } return(this); }