Skip to content
Open
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
05f5790
feature-gate-threshold-automation init
buffalojoec Oct 12, 2023
c2493f7
bump to 0072
buffalojoec Oct 19, 2023
027c22a
address minor corrections
buffalojoec Oct 19, 2023
61c9f17
revise based on related SIMDs
buffalojoec Dec 15, 2023
49297a3
add garbage collection process
buffalojoec Dec 15, 2023
3ec0b88
add PDA details
buffalojoec Dec 15, 2023
26ce787
revise signal cadence
buffalojoec Dec 15, 2023
f2b796f
add instruction layout example
buffalojoec Dec 15, 2023
af88bfd
add state layout examples
buffalojoec Dec 15, 2023
46556dd
add multi-sig activation gate
buffalojoec Dec 15, 2023
28faf1a
add additional elaboration
buffalojoec Jan 25, 2024
daae4d4
init new version of 0072
buffalojoec Feb 5, 2024
828ecfb
add reusable support signal PDA
buffalojoec Mar 14, 2024
c04c84b
update to use validator epoch stake syscall
buffalojoec Mar 14, 2024
855950a
add updates from SIMD 0133
buffalojoec May 9, 2024
0fb9358
add some context and wording
buffalojoec May 13, 2024
d3ee197
add c struct for PDA layout
buffalojoec May 13, 2024
22cf22a
hard-coded threshold
buffalojoec May 16, 2024
be5cfc4
change deadline to 4500 slots
buffalojoec May 16, 2024
0420825
clarity suggestions
buffalojoec May 22, 2024
93cb9c8
add more program specification
buffalojoec May 22, 2024
92ea03f
one PDA per epoch
buffalojoec Jun 3, 2024
17afcf0
remove slots remaining constraint
buffalojoec Jun 3, 2024
3d3f535
Update proposals/0072-feature-gate-threshold-automation.md
buffalojoec Jun 3, 2024
092439f
instruction clarity
buffalojoec Jun 3, 2024
4b0db19
update `StageFeatureForActivation` instruction
buffalojoec Aug 14, 2024
da715bd
update `SignalSupportForStagedFeatures` instruction
buffalojoec Aug 14, 2024
f7d3420
update runtime step
buffalojoec Aug 14, 2024
ac97130
update state init requirement
buffalojoec Dec 9, 2024
7c33aa3
mark as idea
buffalojoec Dec 9, 2024
76b00f6
update design after discussions with justin
buffalojoec Jan 23, 2025
de04052
may: update v2 state
buffalojoec May 16, 2025
db662d8
may: enhance per-epoch signal cranking
buffalojoec May 16, 2025
e91d7d7
may: batch support signal instructions
buffalojoec May 16, 2025
50f2142
may: add more activation details
buffalojoec May 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add some context and wording
  • Loading branch information
buffalojoec committed May 16, 2025
commit 0fb93584296254f433fed0a29ea590b60ddf2cb9
31 changes: 26 additions & 5 deletions proposals/0072-feature-gate-threshold-automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,13 @@ be found here:

<https://github.com/buffalojoec/feature-gate-data-poc/blob/master/src/lib.rs>

The Staged Features PDA could be derived simply from one literal seed:
The Staged Features PDA will be derived simply from one literal seed:
`"staged_features"`.

### Step 3: Signaling Support for Staged Features

With an on-chain reference point to determine the features staged for activation
for a particular epoch, nodes can signal their support for the staged features
for a particular epoch, nodes will signal their support for the staged features
supported by their software.

A node signals its support for staged features by invoking the Feature Gate
Expand All @@ -128,6 +128,17 @@ expects:
- Staged Features PDA: writable
- Vote account: signer

A bit mask is used as a compressed ordered list of indices. This has two main
benefits:

- Minimizes transaction size for nodes, requiring only one byte to describe
256 bytes (8 * 32) of data. The alternative would be sending `n` number of
32-byte addresses in each instruction.
- Reduce compute required to search the list of staged features for a matching
address. The bitmask's format provides the Feature Gate program with the
indices it needs to store supported stake without searching through the staged
features for a match.

A `1` bit represents support for a feature. For example, for staged features
`[A, B, C, D, E, F, G, H]`, if a node wishes to signal support for all features
except `E` and `H`, their `u8` value would be 246, or `11110110`.
Expand All @@ -138,10 +149,16 @@ This is done by using the Get Epoch Stake Syscall.

Nodes should send a transaction containing this instruction at some arbitrary
point during the epoch at least 128 slots before the end of the epoch and on
startup after any reboot.
startup after any reboot. Transactions sent too late (< 128 slots before epoch
end) will be rejected by the Feature Gate program.

Note: If a feature is revoked, the list of staged features will not change, and
nodes may still signal support for this feature. However, the runtime will not
If a node does not send this transaction, or sends it too late in the epoch (>
128 slots before the end), their stake is not tallied. This is analogous to a
node sending this transaction in a valid point in the epoch signalling support
for zero features.

If a feature is revoked, the list of staged features will not change, and nodes
may still signal support for this feature. However, the runtime will not
activate this feature if its corresponding feature account no longer exists
on-chain.

Expand All @@ -155,6 +172,10 @@ Only features whose stake support meets the required threshold are activated.
This threshold shall be set to 95% initially, but future iterations on the
process could allow feature key-holders to set a custom threshold per-feature.

As mentioned previously, if a feature was revoked, it will no longer exist
on-chain, and therefore will be not activated by the runtime, regardless of
calculated stake support.

If a feature is not activated, either because it has been revoked or it did not
meet the required stake support, it must be resubmitted according to Step 2.

Expand Down