Expand description
Collection of all runtime features.
Steps to add a new feature are outlined below. Note that these steps only cover the process of getting a feature into the core Solana code.
- For features that are unambiguously good (ie bug fixes), these steps are sufficient.
- For features that should go up for community vote (ie fee structure changes), more information on the additional steps to follow can be found at: https://spl.solana.com/feature-proposal#feature-proposal-life-cycle
- Generate a new keypair with
solana-keygen new --outfile feature.json --no-passphrase
- Keypairs should be held by core contributors only. If you’re a non-core contributor going through these steps, the PR process will facilitate a keypair holder being picked. That person will generate the keypair, provide pubkey for PR, and ultimately enable the feature.
- Add a public module for the feature, specifying keypair pubkey as the id with
solana_pubkey::declare_id!()
within the module. Additionally, add an entry toFEATURE_NAMES
map. - Add desired logic to check for and switch on feature availability.
For more information on how features are picked up, see comments for Feature
.
Modules§
- abort_
on_ invalid_ curve - account_
hash_ ignore_ slot - add_
compute_ budget_ program - add_
get_ minimum_ delegation_ instruction_ to_ stake_ program - add_
get_ processed_ sibling_ instruction_ syscall - add_
new_ reserved_ account_ keys - add_
set_ compute_ unit_ price_ ix - add_
set_ tx_ loaded_ accounts_ data_ size_ instruction - add_
shred_ type_ to_ shred_ seed - allow_
commission_ decrease_ at_ any_ time - allow_
votes_ to_ directly_ update_ vote_ state - apply_
cost_ tracker_ during_ replay - bank_
transaction_ count_ fix - better_
error_ codes_ for_ tx_ lamport_ check - blake3_
syscall_ enabled - bpf_
account_ data_ direct_ mapping - cap_
accounts_ data_ allocations_ per_ transaction - cap_
bpf_ program_ instruction_ accounts - cap_
transaction_ accounts_ data_ size - chained_
merkle_ conflict_ duplicate_ proofs - check_
init_ vote_ data - check_
physical_ overlapping - check_
slice_ translation_ size - check_
syscall_ outputs_ do_ not_ overlap - checked_
arithmetic_ in_ fee_ validation - clean_
up_ delegation_ errors - commission_
updates_ only_ allowed_ in_ first_ half_ of_ epoch - compact_
vote_ state_ updates - consume_
blockstore_ duplicate_ proofs - cost_
model_ requested_ write_ lock_ cost - credits_
auto_ rewind - curve25519_
restrict_ msm_ length - curve25519_
syscall_ enabled - dedupe_
config_ program_ signers - default_
units_ per_ instruction - delay_
visibility_ of_ program_ deployment - demote_
program_ write_ locks - deplete_
cu_ meter_ on_ vm_ failure - deprecate_
legacy_ vote_ ixs - deprecate_
rewards_ sysvar - deprecate_
unused_ legacy_ vote_ plumbing - disable_
account_ loader_ special_ case - disable_
bpf_ deprecated_ load_ instructions - disable_
bpf_ loader_ instructions - disable_
bpf_ unresolved_ symbols_ at_ runtime - disable_
builtin_ loader_ ownership_ chains - disable_
cpi_ setting_ executable_ and_ rent_ epoch - disable_
deploy_ of_ alloc_ free_ syscall - disable_
deprecated_ loader - disable_
fee_ calculator - disable_
fees_ sysvar - disable_
rehash_ for_ rent_ epoch - disable_
rent_ fees_ collection - disable_
sbpf_ v1_ execution - disable_
turbine_ fanout_ experiments - do_
support_ realloc - drop_
legacy_ shreds - drop_
redundant_ turbine_ path - ed25519_
precompile_ verify_ strict - ed25519_
program_ enabled - enable_
alt_ bn128_ compression_ syscall - enable_
alt_ bn128_ syscall - enable_
big_ mod_ exp_ syscall - enable_
bpf_ loader_ extend_ program_ ix - enable_
bpf_ loader_ set_ authority_ checked_ ix - enable_
chained_ merkle_ shreds - enable_
durable_ nonce - enable_
early_ verification_ of_ account_ modifications - enable_
get_ epoch_ stake_ syscall - enable_
gossip_ duplicate_ proof_ ingestion - enable_
partitioned_ epoch_ reward - enable_
poseidon_ syscall - enable_
program_ redeployment_ cooldown - enable_
program_ runtime_ v2_ and_ loader_ v4 - enable_
request_ heap_ frame_ ix - enable_
secp256r1_ precompile - enable_
tower_ sync_ ix - enable_
transaction_ loading_ failure_ fees - enable_
turbine_ extended_ fanout_ experiments - enable_
turbine_ fanout_ experiments - enable_
zk_ proof_ from_ account - enable_
zk_ transfer_ with_ fee - epoch_
accounts_ hash - error_
on_ syscall_ bpf_ function_ hash_ collisions - evict_
invalid_ stakes_ cache_ entries - executables_
incur_ cpi_ data_ cost - filter_
stake_ delegation_ accounts - filter_
votes_ outside_ slot_ hashes - fix_
recent_ blockhashes - fixed_
memcpy_ nonoverlapping_ check - full_
inflation - get_
sysvar_ syscall_ enabled - include_
account_ index_ in_ rent_ error - include_
loaded_ accounts_ data_ size_ in_ fee_ calculation - increase_
tx_ account_ lock_ limit - incremental_
snapshot_ only_ incremental_ hash_ calculation - index_
erasure_ conflict_ duplicate_ proofs - instructions_
sysvar_ owned_ by_ sysvar - last_
restart_ slot_ sysvar - leave_
nonce_ on_ success - libsecp256k1_
0_ 5_ upgrade_ enabled - libsecp256k1_
fail_ on_ bad_ count - libsecp256k1_
fail_ on_ bad_ count2 - limit_
max_ instruction_ trace_ length - limit_
secp256k1_ recovery_ id - loosen_
cpi_ size_ restriction - max_
tx_ account_ locks - merge_
nonce_ error_ into_ system_ error - merkle_
conflict_ duplicate_ proofs - migrate_
address_ lookup_ table_ program_ to_ core_ bpf - migrate_
config_ program_ to_ core_ bpf - migrate_
feature_ gate_ program_ to_ core_ bpf - migrate_
stake_ program_ to_ core_ bpf - move_
precompile_ verification_ to_ svm - move_
serialized_ len_ ptr_ in_ cpi - move_
stake_ and_ move_ lamports_ ixs - native_
programs_ consume_ cu - no_
overflow_ rent_ distribution - nonce_
must_ be_ advanceable - nonce_
must_ be_ authorized - nonce_
must_ be_ writable - on_
load_ preserve_ rent_ epoch_ for_ rent_ exempt_ accounts - optimize_
epoch_ boundary_ updates - partitioned_
epoch_ rewards_ superfeature - pico_
inflation - preserve_
rent_ epoch_ for_ rent_ exempt_ accounts - prevent_
calling_ precompiles_ as_ programs - prevent_
crediting_ accounts_ that_ end_ rent_ paying - prevent_
rent_ paying_ rent_ recipients - quick_
bail_ on_ panic - raise_
block_ limits_ to_ 50m - record_
instruction_ in_ transaction_ context_ push - reduce_
required_ deploy_ balance - reduce_
stake_ warmup_ cooldown - reenable_
sbpf_ v1_ execution - reject_
callx_ r10 - reject_
empty_ instruction_ without_ program - reject_
non_ rent_ exempt_ vote_ withdraws - reject_
vote_ account_ close_ unless_ zero_ credit_ epoch - relax_
authority_ signer_ check_ for_ lookup_ table_ creation - remaining_
compute_ units_ syscall_ enabled - remove_
bpf_ loader_ incorrect_ program_ id - remove_
congestion_ multiplier_ from_ fee_ calculation - remove_
deprecated_ request_ unit_ ix - remove_
native_ loader - remove_
rounding_ in_ fee_ calculation - rent_
for_ sysvars - requestable_
heap_ size - require_
custodian_ for_ locked_ stake_ authorize - require_
rent_ exempt_ accounts - require_
rent_ exempt_ split_ destination - require_
static_ program_ ids_ in_ transaction - reserve_
minimal_ cus_ for_ builtin_ instructions - return_
data_ syscall_ enabled - reward_
full_ priority_ fee - round_
up_ heap_ size - secp256k1_
program_ enabled - secp256k1_
recover_ syscall_ enabled - send_
to_ tpu_ vote_ port - separate_
nonce_ from_ blockhash - set_
exempt_ rent_ epoch_ max - simplify_
alt_ bn128_ syscall_ error_ codes - simplify_
writable_ program_ account_ check - skip_
rent_ rewrites - sol_
log_ data_ syscall_ enabled - spl_
associated_ token_ account_ v1_ 0_ 4 - spl_
associated_ token_ account_ v1_ 1_ 0 - spl_
token_ v2_ multisig_ fix - spl_
token_ v2_ self_ transfer_ fix - spl_
token_ v2_ set_ authority_ fix - spl_
token_ v3_ 3_ 0_ release - spl_
token_ v3_ 4_ 0 - stake_
allow_ zero_ undelegated_ amount - stake_
deactivate_ delinquent_ instruction - stake_
merge_ with_ unmatched_ credits_ observed - stake_
minimum_ delegation_ for_ rewards - stake_
program_ advance_ activating_ credits_ observed - stake_
raise_ minimum_ delegation_ to_ 1_ sol - stake_
split_ uses_ rent_ sysvar - stakes_
remove_ delegation_ if_ inactive - stop_
sibling_ instruction_ search_ at_ parent - stop_
truncating_ strings_ in_ syscalls - switch_
to_ new_ elf_ parser - syscall_
saturated_ math - system_
transfer_ zero_ check - timely_
vote_ credits - tx_
wide_ compute_ cap - update_
hashes_ per_ tick - update_
hashes_ per_ tick2 - update_
hashes_ per_ tick3 - update_
hashes_ per_ tick4 - update_
hashes_ per_ tick5 - update_
hashes_ per_ tick6 - update_
rewards_ from_ cached_ accounts - update_
syscall_ base_ costs - use_
default_ units_ in_ fee_ calculation - validate_
fee_ collector_ account - verify_
retransmitter_ signature - verify_
tx_ signatures_ len - versioned_
tx_ message_ enabled - vote_
authorize_ with_ seed - vote_
only_ full_ fec_ sets - vote_
only_ retransmitter_ signed_ fec_ sets - vote_
stake_ checked_ instructions - vote_
state_ add_ vote_ latency - vote_
state_ update_ credit_ per_ dequeue - vote_
state_ update_ root_ fix - vote_
withdraw_ authority_ may_ change_ authorized_ voter - warp_
timestamp_ again - warp_
timestamp_ with_ a_ vengeance - zk_
elgamal_ proof_ program_ enabled - zk_
token_ sdk_ enabled
Structs§
- FEATURE_
NAMES - Map of feature identifiers to user-visible description
- FULL_
INFLATION_ FEATURE_ PAIRS - Set of feature pairs that once enabled will trigger full inflation
- Feature
Set FeatureSet
holds the set of currently active/inactive runtime features- Full
Inflation Feature Pair - ID
- Unique identifier of the current software’s feature set