Blockcore.Networks.Stratis.Rules.StratisHeaderVersionRule.Run C# (CSharp) Method

Run() public method

Thrown if block's version is outdated or otherwise invalid.
public Run ( RuleContext context ) : void
context RuleContext
return void
        public override void Run(RuleContext context)
        {
            Guard.NotNull(context.ValidationContext.ChainedHeaderToValidate, nameof(context.ValidationContext.ChainedHeaderToValidate));

            ChainedHeader chainedHeader = context.ValidationContext.ChainedHeaderToValidate;

            // A version of precisely 7 is what is currently generated by the legacy C++ nodes.

            // The stratisX block validation rules mandate if (!IsProtocolV3(nTime)) && (nVersion > 7), then reject block.
            // Further, if (IsProtocolV2(nHeight) && nVersion < 7), then reject block.
            // And lastly, if (!IsProtocolV2(nHeight) && nVersion > 6), then reject block.

            // Protocol version determination is based on either the block height or timestamp as shown:
            // IsProtocolV2(nHeight) { return TestNet() || nHeight > 0; }
            // IsProtocolV3(nTime) { return TestNet() || nTime > 1470467000; }

            // The mainnet genesis block has nTime = 1470713393, so V3 is applied immediately and this supersedes V2.
            // The block versions have therefore been version 7 since genesis on Stratis mainnet.

            // Whereas BIP9 mandates that the top bits of version be 001. So a standard node should never generate
            // block versions above 7 and below 0x20000000.

            // The acceptable common subset of the rules is therefore that the block version must be >= 7.

            if (chainedHeader.Header.Version < 7)
            {
                this.Logger.LogTrace("(-)[BAD_VERSION]");
                ConsensusErrors.BadVersion.Throw();
            }
        }
    }
StratisHeaderVersionRule