Skip to content

Commit cd54428

Browse files
authored
Merge pull request #242 from anza-xyz/merge-4.0-main
agave-4.0: merge main
2 parents 753c681 + 4ea8ffc commit cd54428

13 files changed

Lines changed: 236 additions & 83 deletions

File tree

Cargo.lock

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ mollusk-svm-programs-memo = { path = "programs/memo", version = "0.12.1-agave-4.
4242
mollusk-svm-result = { path = "result", version = "0.12.1-agave-4.0" }
4343
mollusk-svm-programs-token = { path = "programs/token", version = "0.12.1-agave-4.0" }
4444
num-format = "0.4.4"
45-
openssl = "0.10.76"
45+
openssl = "0.10.77"
4646
prost = "0.14"
4747
prost-build = "0.14"
4848
prost-types = "0.14"
@@ -89,6 +89,7 @@ solana-secp256r1-program = "3.0.0"
8989
solana-slot-hashes = "3.0.1"
9090
solana-stake-interface = "2.0.2"
9191
solana-svm-callback = "4.0.0-beta.6"
92+
solana-svm-feature-set = "4.0.0-beta.6"
9293
solana-svm-log-collector = "4.0.0-beta.6"
9394
solana-svm-timings = "4.0.0-beta.6"
9495
solana-svm-transaction = "4.0.0-beta.6"
@@ -104,4 +105,4 @@ solana-zk-elgamal-proof-program = "4.0.0-beta.6"
104105
spl-associated-token-account-interface = "2.0.0"
105106
spl-token-interface = "2.0.0"
106107
thiserror = "2.0.17"
107-
tokio = "1.51.0"
108+
tokio = "1.51.1"

harness/Cargo.toml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ all-builtins = [
1818
"dep:solana-zk-elgamal-proof-program",
1919
]
2020
fuzz = [
21+
"dep:agave-feature-set",
2122
"dep:mollusk-svm-fuzz-fixture",
2223
"dep:mollusk-svm-fuzz-fs",
2324
"mollusk-svm-result/fuzz",
2425
]
2526
fuzz-fd = [
27+
"dep:agave-feature-set",
2628
"dep:mollusk-svm-fuzz-fixture-firedancer",
2729
"dep:mollusk-svm-fuzz-fs",
2830
]
@@ -31,7 +33,10 @@ inner-instructions = [
3133
"dep:solana-transaction-status-client-types",
3234
]
3335
invocation-inspect-callback = []
34-
precompiles = ["dep:agave-precompiles"]
36+
precompiles = [
37+
"dep:agave-feature-set",
38+
"dep:agave-precompiles",
39+
]
3540
register-tracing = [
3641
"invocation-inspect-callback",
3742
"dep:hex",
@@ -44,7 +49,7 @@ serde = [
4449
]
4550

4651
[dependencies]
47-
agave-feature-set = { workspace = true, features = ["agave-unstable-api"] }
52+
agave-feature-set = { workspace = true, features = ["agave-unstable-api"], optional = true }
4853
agave-precompiles = { workspace = true, features = ["agave-unstable-api"], optional = true }
4954
agave-syscalls = { workspace = true, features = ["agave-unstable-api"] }
5055
bincode = { workspace = true }
@@ -81,6 +86,7 @@ solana-sdk-ids = { workspace = true }
8186
solana-slot-hashes = { workspace = true }
8287
solana-stake-interface = { workspace = true }
8388
solana-svm-callback = { workspace = true, features = ["agave-unstable-api"] }
89+
solana-svm-feature-set = { workspace = true, features = ["agave-unstable-api"] }
8490
solana-svm-log-collector = { workspace = true, features = ["agave-unstable-api"] }
8591
solana-svm-timings = { workspace = true, features = ["agave-unstable-api"] }
8692
solana-svm-transaction = { workspace = true, features = ["agave-unstable-api"] }

harness/src/feature_set.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
//! Conversion between the SVM-level feature set and the full Agave feature set.
2+
//!
3+
//! Required for fixtures, precompiles, and other APIs that may come from Agave
4+
//! libraries higher than or external to SVM.
5+
6+
use {agave_feature_set::FeatureSet, solana_svm_feature_set::SVMFeatureSet};
7+
8+
pub fn svm_feature_set_to_feature_set(svm: &SVMFeatureSet) -> FeatureSet {
9+
let mut fs = FeatureSet::all_enabled();
10+
macro_rules! gate {
11+
($($field:ident),* $(,)?) => {
12+
$(
13+
if !svm.$field {
14+
fs.deactivate(&agave_feature_set::$field::id());
15+
}
16+
)*
17+
};
18+
}
19+
gate! {
20+
move_precompile_verification_to_svm,
21+
syscall_parameter_address_restrictions,
22+
virtual_address_space_adjustments,
23+
account_data_direct_mapping,
24+
enable_bpf_loader_set_authority_checked_ix,
25+
enable_loader_v4,
26+
deplete_cu_meter_on_vm_failure,
27+
abort_on_invalid_curve,
28+
blake3_syscall_enabled,
29+
curve25519_syscall_enabled,
30+
disable_deploy_of_alloc_free_syscall,
31+
disable_fees_sysvar,
32+
disable_sbpf_v0_execution,
33+
enable_alt_bn128_compression_syscall,
34+
enable_alt_bn128_syscall,
35+
enable_big_mod_exp_syscall,
36+
enable_get_epoch_stake_syscall,
37+
enable_poseidon_syscall,
38+
enable_sbpf_v1_deployment_and_execution,
39+
enable_sbpf_v2_deployment_and_execution,
40+
enable_sbpf_v3_deployment_and_execution,
41+
get_sysvar_syscall_enabled,
42+
last_restart_slot_sysvar,
43+
reenable_sbpf_v0_execution,
44+
remaining_compute_units_syscall_enabled,
45+
remove_bpf_loader_incorrect_program_id,
46+
move_stake_and_move_lamports_ixs,
47+
deprecate_legacy_vote_ixs,
48+
simplify_alt_bn128_syscall_error_codes,
49+
fix_alt_bn128_multiplication_input_length,
50+
increase_tx_account_lock_limit,
51+
enable_extend_program_checked,
52+
formalize_loaded_transaction_data_size,
53+
disable_zk_elgamal_proof_program,
54+
reenable_zk_elgamal_proof_program,
55+
delay_commission_updates,
56+
raise_cpi_nesting_limit_to_8,
57+
provide_instruction_data_offset_in_vm_r2,
58+
increase_cpi_account_info_limit,
59+
vote_state_v4,
60+
poseidon_enforce_padding,
61+
fix_alt_bn128_pairing_length_check,
62+
alt_bn128_little_endian,
63+
create_account_allow_prefund,
64+
bls_pubkey_management_in_vote_account,
65+
enable_alt_bn128_g2_syscalls,
66+
commission_rate_in_basis_points,
67+
custom_commission_collector,
68+
enable_bls12_381_syscall,
69+
block_revenue_sharing,
70+
vote_account_initialize_v2,
71+
direct_account_pointers_in_program_input,
72+
}
73+
fs
74+
}

harness/src/fuzz/firedancer.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
//! Only available when the `fuzz-fd` feature is enabled.
66
77
use {
8-
crate::{compile_accounts::compile_accounts, Mollusk, DEFAULT_LOADER_KEY},
9-
agave_feature_set::FeatureSet,
8+
crate::{
9+
compile_accounts::compile_accounts, feature_set::svm_feature_set_to_feature_set, Mollusk,
10+
DEFAULT_LOADER_KEY,
11+
},
1012
mollusk_svm_fuzz_fixture_firedancer::{
1113
context::{
1214
Context as FuzzContext, EpochContext as FuzzEpochContext,
@@ -21,6 +23,7 @@ use {
2123
solana_compute_budget::compute_budget::ComputeBudget,
2224
solana_instruction::{error::InstructionError, AccountMeta, Instruction},
2325
solana_pubkey::Pubkey,
26+
solana_svm_feature_set::SVMFeatureSet,
2427
solana_transaction_context::instruction_accounts::InstructionAccount,
2528
std::collections::HashMap,
2629
};
@@ -58,7 +61,7 @@ fn num_to_instr_err(num: i32, custom_code: u32) -> InstructionError {
5861
fn build_fixture_context(
5962
accounts: &[(Pubkey, Account)],
6063
compute_budget: &ComputeBudget,
61-
feature_set: &FeatureSet,
64+
feature_set: &SVMFeatureSet,
6265
instruction: &Instruction,
6366
slot: u64,
6467
) -> FuzzContext {
@@ -114,15 +117,15 @@ fn build_fixture_context(
114117
compute_units_available: compute_budget.compute_unit_limit,
115118
slot_context: FuzzSlotContext { slot },
116119
epoch_context: FuzzEpochContext {
117-
feature_set: feature_set.clone(),
120+
feature_set: svm_feature_set_to_feature_set(feature_set),
118121
},
119122
}
120123
}
121124

122125
pub struct ParsedFixtureContext {
123126
pub accounts: Vec<(Pubkey, Account)>,
124127
pub compute_budget: ComputeBudget,
125-
pub feature_set: FeatureSet,
128+
pub feature_set: SVMFeatureSet,
126129
pub instruction: Instruction,
127130
pub slot: u64,
128131
}
@@ -168,7 +171,7 @@ pub(crate) fn parse_fixture_context(context: &FuzzContext) -> ParsedFixtureConte
168171
ParsedFixtureContext {
169172
accounts,
170173
compute_budget,
171-
feature_set: epoch_context.feature_set.clone(),
174+
feature_set: epoch_context.feature_set.runtime_features(),
172175
instruction,
173176
slot: slot_context.slot,
174177
}

harness/src/fuzz/mollusk.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
//! Only available when the `fuzz` feature is enabled.
66
77
use {
8-
crate::{sysvar::Sysvars, Mollusk},
9-
agave_feature_set::FeatureSet,
8+
crate::{feature_set::svm_feature_set_to_feature_set, sysvar::Sysvars, Mollusk},
109
mollusk_svm_fuzz_fixture::{
1110
context::Context as FuzzContext, effects::Effects as FuzzEffects,
1211
sysvars::Sysvars as FuzzSysvars, Fixture as FuzzFixture,
@@ -17,6 +16,7 @@ use {
1716
solana_instruction::Instruction,
1817
solana_pubkey::Pubkey,
1918
solana_slot_hashes::SlotHashes,
19+
solana_svm_feature_set::SVMFeatureSet,
2020
solana_sysvar::last_restart_slot::LastRestartSlot,
2121
};
2222

@@ -54,15 +54,15 @@ impl From<&FuzzSysvars> for Sysvars {
5454
pub struct ParsedFixtureContext {
5555
pub accounts: Vec<(Pubkey, Account)>,
5656
pub compute_budget: ComputeBudget,
57-
pub feature_set: FeatureSet,
57+
pub feature_set: SVMFeatureSet,
5858
pub instruction: Instruction,
5959
pub sysvars: Sysvars,
6060
}
6161

6262
fn build_fixture_context(
6363
accounts: &[(Pubkey, Account)],
6464
compute_budget: &ComputeBudget,
65-
feature_set: &FeatureSet,
65+
feature_set: &SVMFeatureSet,
6666
instruction: &Instruction,
6767
sysvars: &Sysvars,
6868
) -> FuzzContext {
@@ -72,7 +72,7 @@ fn build_fixture_context(
7272

7373
FuzzContext {
7474
compute_budget: *compute_budget,
75-
feature_set: feature_set.clone(),
75+
feature_set: svm_feature_set_to_feature_set(feature_set),
7676
sysvars: sysvars.into(),
7777
program_id: instruction.program_id,
7878
instruction_accounts,
@@ -98,7 +98,7 @@ pub(crate) fn parse_fixture_context(context: &FuzzContext) -> ParsedFixtureConte
9898
ParsedFixtureContext {
9999
accounts: accounts.clone(),
100100
compute_budget: *compute_budget,
101-
feature_set: feature_set.clone(),
101+
feature_set: feature_set.runtime_features(),
102102
instruction,
103103
sysvars: sysvars.into(),
104104
}

0 commit comments

Comments
 (0)