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); }