Skip to content

feat(chainspec): add FeatureRegistry precompile with admin killswitch#2891

Open
decofe wants to merge 1 commit intozygis/feature-flagsfrom
arsenii/feature-flags-killswitch
Open

feat(chainspec): add FeatureRegistry precompile with admin killswitch#2891
decofe wants to merge 1 commit intozygis/feature-flagsfrom
arsenii/feature-flags-killswitch

Conversation

@decofe
Copy link
Member

@decofe decofe commented Feb 26, 2026

Adds a FeatureRegistry precompile (0xFEA7...0000) on top of the feature flags branch. Stores a bitmap of active features with admin-controlled activation, deactivation, and timestamp-scheduled activation with killswitch support.

Key design decisions:

  • deactivate(featureId) clears both the bitmap bit AND any pending schedule — acts as a universal killswitch
  • cancelScheduledActivation(featureId) for surgical schedule removal without touching the bitmap
  • activate(featureId) also clears any pending schedule (feature is now active, schedule is moot)
  • is_active(featureId) checks both the bitmap and scheduled activation timestamps
  • Admin ownership follows the same pattern as ValidatorConfigV2 (owner + transferOwnership)
  • TempoFeatures::from_state(sload) reads the feature bitmap directly from on-chain storage via SLOAD for per-block feature resolution

Prompted by: arsenii

Adds a FeatureRegistry precompile at 0xFEA7...0000 that stores a bitmap
of active features and supports:

- Immediate activate/deactivate by the admin (owner)
- Timestamp-scheduled activations with admin killswitch
- deactivate() clears both the bitmap bit AND any pending schedule
- cancelScheduledActivation() for surgical schedule removal
- transferOwnership() for admin rotation

Also adds TempoFeatures::from_state() to read the feature bitmap
directly from on-chain storage via SLOAD, enabling per-block feature
resolution without full EVM execution.

Co-authored-by: Arsenii Kulikov <klkvr@users.noreply.github.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019c9bc1-ca89-701e-9632-452eefceccdc
Co-authored-by: Amp <amp@ampcode.com>
@github-actions
Copy link

📊 Tempo Precompiles Coverage

precompiles

Coverage: 21335/22406 lines (95.22%)

File details
File Lines Coverage
src/account_keychain/dispatch.rs 36/41 87.80%
src/account_keychain/mod.rs 1131/1150 98.35%
src/error.rs 141/160 88.12%
src/feature_registry/dispatch.rs 96/101 95.05%
src/feature_registry/mod.rs 390/392 99.49%
src/ip_validation.rs 10/10 100.00%
src/lib.rs 364/375 97.07%
src/nonce/dispatch.rs 19/23 82.61%
src/nonce/mod.rs 252/260 96.92%
src/stablecoin_dex/dispatch.rs 349/353 98.87%
src/stablecoin_dex/error.rs 51/51 100.00%
src/stablecoin_dex/mod.rs 2997/3093 96.90%
src/stablecoin_dex/order.rs 362/362 100.00%
src/stablecoin_dex/orderbook.rs 651/683 95.31%
src/storage/evm.rs 321/347 92.51%
src/storage/hashmap.rs 128/140 91.43%
src/storage/mod.rs 5/5 100.00%
src/storage/packing.rs 526/552 95.29%
src/storage/thread_local.rs 146/195 74.87%
src/storage/types/array.rs 211/262 80.53%
src/storage/types/bytes_like.rs 323/338 95.56%
src/storage/types/mapping.rs 148/148 100.00%
src/storage/types/mod.rs 67/91 73.63%
src/storage/types/primitives.rs 564/567 99.47%
src/storage/types/set.rs 454/474 95.78%
src/storage/types/slot.rs 282/296 95.27%
src/storage/types/vec.rs 1078/1095 98.45%
src/test_util.rs 194/231 83.98%
src/tip20/dispatch.rs 584/616 94.81%
src/tip20/mod.rs 1783/1854 96.17%
src/tip20/rewards.rs 444/487 91.17%
src/tip20/roles.rs 187/206 90.78%
src/tip20_factory/dispatch.rs 26/29 89.66%
src/tip20_factory/mod.rs 543/555 97.84%
src/tip403_registry/dispatch.rs 406/443 91.65%
src/tip403_registry/mod.rs 1338/1423 94.03%
src/tip_fee_manager/amm.rs 1111/1147 96.86%
src/tip_fee_manager/dispatch.rs 330/343 96.21%
src/tip_fee_manager/mod.rs 501/516 97.09%
src/validator_config/dispatch.rs 210/221 95.02%
src/validator_config/mod.rs 606/692 87.57%
src/validator_config_v2/dispatch.rs 201/214 93.93%
src/validator_config_v2/mod.rs 1769/1865 94.85%

contracts

Coverage: 232/406 lines (57.14%)

File details
File Lines Coverage
src/lib.rs 1/71 1.41%
src/precompiles/account_keychain.rs 24/30 80.00%
src/precompiles/feature_registry.rs 23/23 100.00%
src/precompiles/nonce.rs 9/18 50.00%
src/precompiles/stablecoin_dex.rs 36/48 75.00%
src/precompiles/tip20.rs 52/70 74.29%
src/precompiles/tip20_factory.rs 6/12 50.00%
src/precompiles/tip403_registry.rs 12/15 80.00%
src/precompiles/tip_fee_manager.rs 21/45 46.67%
src/precompiles/validator_config.rs 12/26 46.15%
src/precompiles/validator_config_v2.rs 36/48 75.00%

Total: 21567/22812 lines (94.54%)

📦 Download full HTML report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants