Flag-Day Values

This page is generated from xchain-indexer/src/protocol_changes.js and the time-keyed activation modules beside it. Do not edit it by hand: run node bin/generate-flag-days.js from the repository root and commit the result.

Every other page in this documentation set names the gate and links here instead of quoting a date, because a flag-day value is not a fact about the protocol, it is the current setting of a constant, and it has been repinned before. One generated page moves on a repin; a dozen sentences do not.

For what a flag day is, how isEnabled evaluates it, which cohort a gate belongs to, and what happens to a node that misses one, see Protocol Activation.

Contract-era flag day

The coordinated instant that the Cohort A contract-era rules switch on, simultaneously on Bitcoin, Litecoin, and Dogecoin.

Mainnet block time 1786060800
UTC instant 2026-08-07 00:00:00 UTC
Gates riding it 37

5 gates do not ride it and carry a date of its own: BATCH_ISSUANCE_LIMITS at 2026-08-16 00:00:00 UTC, CONTRACT_DELEGATION_MATERIALIZE at 2026-09-15 00:00:00 UTC, DISPENSER_ORACLE_PER_TOKEN_PRICE at 2026-09-15 00:00:00 UTC, CROSS_CHAIN_ROYALTY at 2027-01-01 00:00:00 UTC, REST_PATTERN_METER at 2027-01-01 00:00:00 UTC. Each carries the reason it is armed separately in its registration comment, in the file the Declared in column names below. For how a gate is evaluated and what happens to a node that misses one, see Protocol Activation.

One gate is UNARMED on mainnet (UNCAPPED_MAX_SUPPLY_ZERO): each parks the sentinel rather than an instant, so mainnet has never run the post-activation behavior and will not until an operator names a date. They carry no row in the table below, because publishing the sentinel as a flag day would put a commitment on this page that nobody made. Each names its reason in its registration comment in protocol_changes.js. This note covers the registry only; a sibling *_activation.js module can park a mainnet sentinel too, and those are not enumerated here.

Testnet and regtest are genesis-active for the time-keyed gates: they carry threshold 0, so a testnet or regtest stack has always run the post-activation behavior. 4 gates are the exception: ISSUE_INHERITED_MINT_WINDOW arms testnet at 1787961600 (2026-08-29 00:00:00 UTC), DEPLOY_DEFERRED_ASSEMBLY arms testnet at 1788868800 (2026-09-08 12:00:00 UTC), CONTRACT_META_REQUIRED arms testnet at 1789257600 (2026-09-13 00:00:00 UTC), UNIFIED_FEES_SWEEP_CALLBACK arms testnet at 1790812800 (2026-10-01 00:00:00 UTC). The reason it cannot be genesis-active there is written in its registration comment in protocol_changes.js. The values on this page are otherwise mainnet values only.

Mainnet time-keyed gates

Gate Block time UTC instant Rides Declared in
ATTEST_CANONICAL_LOWERCASE_ID 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
ATTEST_RELAY_ORIGIN 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
BATCH_SUBACTION_NORMALIZATION 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
COINPAY_EXPIRE_TOKEN_AMOUNT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
COINPAY_NATIVE_RECIPROCITY 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
CONTRACT_INDEX_CANONICAL 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
CONTROLLER_GUARD 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
COOLDOWN_BLOCKS_INTEGER 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
DELEGATE_REVOKE_NO_REINSERT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
DEPLOY_BASE64_CODE 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
DEPLOY_INIT_STRICT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
DEPLOY_SLASH_DEST_ADDRESS_VALID 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
DISPENSE_CANCELLING_MATCH_ACTIVATION 1786060800 2026-08-07 00:00:00 UTC contract-era flag day dispense_cancelling_match_activation.js
DISPENSER_CAPS_ACTIVATION 1786060800 2026-08-07 00:00:00 UTC contract-era flag day dispenser_caps_activation.js
DISPENSER_CLOSE_PER_UNIT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
DISPENSER_OWNERSHIP_CANCEL_ACTIVATION 1786060800 2026-08-07 00:00:00 UTC contract-era flag day dispenser_ownership_cancel_activation.js
FIX_OUTPUT_FANOUT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
ISSUANCE_FEE_EMISSION_EXEMPT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
ISSUE_MINT_SUPPLY_CUMULATIVE_CAP 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
LEGACY_FEE_NUMERIC_DBHITS 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
LOCK_MAX_SUPPLY_EXACT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
MINT_SELF_MINTED_ONLY 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
NATIVE_FEE_PRICE_TIME_GATE 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
PARTIAL_UNSTAKE_COLLECT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
SLEEP_RESPECTS_LOCK_SLEEP 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
SYNTH_EXEC_TX_HASH 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
UNSTAKE_CONTRACT_COOLDOWN_STRICT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
UNSTAKE_COOLDOWN_COMPLETION_ACTION 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VM_ATTESTATION_GETRESPONSE 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VM_BALANCE_TOKENINFO 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VM_BANNED_ASYNC 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VM_LINT_HARDENING 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VOTE_BINDING_MINIMUMS 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VOTE_CALLBACK_TIMELOCK 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VOTE_POLL_TICK_VISIBLE 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
VOTE_RESPECTS_SLEEP 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
XCALL_RESULT_ORPHAN_RETIREMENT 1786060800 2026-08-07 00:00:00 UTC contract-era flag day protocol_changes.js
BATCH_ISSUANCE_LIMITS 1786838400 2026-08-16 00:00:00 UTC own date protocol_changes.js
CONTRACT_DELEGATION_MATERIALIZE 1789430400 2026-09-15 00:00:00 UTC own date protocol_changes.js
DISPENSER_ORACLE_PER_TOKEN_PRICE 1789430400 2026-09-15 00:00:00 UTC own date protocol_changes.js
CROSS_CHAIN_ROYALTY 1798761600 2027-01-01 00:00:00 UTC own date protocol_changes.js
REST_PATTERN_METER 1798761600 2027-01-01 00:00:00 UTC own date protocol_changes.js

Thresholds keyed on a block height rather than a block time (the validator-era Cohort B rules and the per-chain Cohort C rules) are not listed here; they are inventoried on Protocol Activation.

Edit this page on GitHub ↗