public static void AddBranch(this BlockTree blockTree, int branchLength, int splitBlockNumber)
        {
            int       splitVariant = 0;
            BlockTree alternative  = Build.A.BlockTree(blockTree.FindBlock(0, BlockTreeLookupOptions.RequireCanonical) !).OfChainLength(branchLength, splitVariant).TestObject;
            Block?    parent       = null;

            for (int i = splitBlockNumber + 1; i < branchLength; i++)
            {
                Block block = alternative.FindBlock(i, BlockTreeLookupOptions.RequireCanonical) !;
                if (i == splitBlockNumber + 1)
                {
                    Block?mainBlock = blockTree.FindBlock(i - 1, BlockTreeLookupOptions.RequireCanonical);
                    if (mainBlock != null)
                    {
                        parent = mainBlock;
                    }
                }

                block.Header.ParentHash = parent?.Hash;
                block.Header.StateRoot  = parent?.StateRoot;
                block.Header.Hash       = block.Header.CalculateHash();
                parent = block;
                bool shouldProcess = i == branchLength - 1;
                BlockTreeSuggestOptions options = BlockTreeSuggestOptions.ForceDontSetAsMain;
                options |= shouldProcess ? BlockTreeSuggestOptions.ShouldProcess : BlockTreeSuggestOptions.None;
                blockTree.SuggestBlock(block, options);
            }
        }
Exemplo n.º 2
0
 public static bool ContainsFlag(this BlockTreeSuggestOptions value, BlockTreeSuggestOptions flag) => (value & flag) == flag;