Policy

September 26, 2025 ยท View on GitHub

// index using powers of 2 for efficient bitmasking
enum PolicyType : uint32 {
    Tip = 1,
    WitnessLimit = 2,
    Maturity = 4,
    MaxFee = 8,
    Expiration = 16,
    Owner = 32,
}
nametypedescription
dataOne of Tip, WitnessLimit, Maturity, Expiration or OwnerPolicy data.

Tip

nametypedescription
tipuint64Additional, optional fee in BASE_ASSET to incentivize block producer to include transaction

WitnessLimit

nametypedescription
witnessLimituint64The maximum amount of witness data allowed for the transaction

Given helper len() that returns the number of bytes of a field.

Transaction is invalid if:

  • len(tx.witnesses) > witnessLimit

Maturity

nametypedescription
maturityuint32Block until which the transaction cannot be included.

Transaction is invalid if:

  • blockheight() < maturity

Expiration

nametypedescription
expirationuint32Block after which the transaction cannot be included.

Transaction is invalid if:

  • blockheight() > expiration

MaxFee

nametypedescription
max_feeuint64Required policy to specify the maximum fee payable by this transaction using BASE_ASSET. This is used to check transactions before the actual gas_price is known.

Transaction is invalid if:

  • max_fee > sum_inputs(tx, BASE_ASSET_ID) - sum_outputs(tx, BASE_ASSET_ID)
  • max_fee < max_fee(tx, BASE_ASSET_ID, gas_price)

Owner

nametypedescription
owneruint64Index of the transaction input that we nominate as owner

Transaction is invalid if:

  • owner >= inputs.len()
  • inputs[owner] != InputType::Message && inputs[owner] != InputType::Coin (must point to an input type that supports ownership)