Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
43bf80e
SBPF v0.14.1 (#10164)
Lichtso Jan 23, 2026
e391677
perf: avoid cloning errored error units in ProgramTiming (#10243)
sashass1315 Jan 29, 2026
3eec1c6
clippy: fix or silence rust 1.92 signaled warnings (#10245)
kskalski Jan 29, 2026
d125df8
sbpf-debugger: control the debug port through the invocation context …
procdump Jan 29, 2026
4d226d3
Prepare `transaction-context` to be compiled for SBF/BPF (#10241)
LucasSte Jan 30, 2026
82aa839
Fix `get_current_instruction_index` (#10387)
LucasSte Feb 5, 2026
47b5e70
svm-test-harness: add more program helpers (#10398)
buffalojoec Feb 5, 2026
f7ccb05
SIMD-0464: Vote Account Initialize V2 (#10397)
buffalojoec Feb 11, 2026
772f1da
refactor: remove the `reloading` `bool` argument thread (#10447)
nagisa Feb 9, 2026
4c982c8
clippy(svm): fix sort_by lint (#10531)
kskalski Feb 11, 2026
97c93ca
Switch from `UnsafeCell<Box<[ITEM]>>` to `Box<[UnsafeCell<ITEM>]>` in…
LucasSte Feb 11, 2026
ada00ff
clippy: clean up redundant clones in runtime/svm (#10570)
nagisa Feb 12, 2026
03be4cc
svm: add metrics feature (#10529)
buffalojoec Feb 14, 2026
5721d14
sbpf-debugger: pass debug_metadata to sbpf (#10408)
procdump Feb 17, 2026
62a6503
ABIv2: Rename variables and add new method (#10637)
LucasSte Feb 17, 2026
3b3ea62
refactor: non-functional program-runtime changes for clarity (#10510)
nagisa Feb 18, 2026
e6cffb4
ABIv2: Create `configure_instruction_at_index` (#10647)
LucasSte Feb 18, 2026
fd35266
programs/system: Rename `payer` to `from` (#10658)
febo Feb 18, 2026
c25970a
Revert #10510 (#10667)
Lichtso Feb 18, 2026
4fa8da7
Revert "Revert #10510 (#10667)" (#10670)
nagisa Feb 18, 2026
722b512
Refactor - Rename serialization functions according to ABI versions (…
Lichtso Feb 19, 2026
6e879e4
ABIv2: Improve test coverage (#10668)
LucasSte Feb 20, 2026
9e67d46
fix(svm): remove redundant Box allocation in program loader (#10748)
sashass1315 Feb 23, 2026
fb76445
chore: bump agave rev to 59f07b49bf, patch builtins to use local prog…
mircea-c Feb 23, 2026
976bb77
fix: allow deprecated Rent fields in tests
mircea-c Feb 23, 2026
71e57cd
clippy: update workspace to Rust 2024 style (#10197)
kskalski Feb 21, 2026
a8ce0df
fmt: apply Rust 2024 import sorting
mircea-c Feb 23, 2026
fb2fdd4
chore: advance agave rev to cc74332e59
mircea-c Feb 23, 2026
2aaa387
chore: apply cargo-sort 2.1.0 formatting (collapse single-item featur…
mircea-c Mar 6, 2026
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
931 changes: 545 additions & 386 deletions Cargo.lock

Large diffs are not rendered by default.

46 changes: 23 additions & 23 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ level = "warn"
check-cfg = [
'cfg(target_os, values("solana"))',
'cfg(feature, values("frozen-abi", "no-entrypoint"))',
'cfg(target_arch, values("sbf"))',
]

# Clippy lint configuration that can not be applied in clippy.toml
Expand All @@ -65,12 +66,12 @@ manual_let_else = "deny"
used_underscore_binding = "deny"

[workspace.dependencies]
agave-feature-set = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
agave-logger = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
agave-precompiles = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
agave-reserved-account-keys = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
agave-syscalls = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
agave-validator = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
agave-feature-set = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
agave-logger = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
agave-precompiles = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
agave-reserved-account-keys = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
agave-syscalls = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
agave-validator = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
ahash = "0.8.12"
anyhow = "1.0.100"
arbitrary = "1.4.2"
Expand Down Expand Up @@ -105,10 +106,7 @@ hex = "0.4.3"
hmac = "0.12.1"
itertools = "0.14.0"
libc = "0.2.180"
libsecp256k1 = { version = "0.6.0", default-features = false, features = [
"std",
"static-context",
] }
libsecp256k1 = { version = "0.6.0", default-features = false, features = ["std", "static-context"] }
log = "0.4.29"
memmap2 = "0.9.9"
num-derive = "0.4"
Expand All @@ -131,19 +129,19 @@ sha2 = "0.10.9"
sha3 = "0.10.8"
shuttle = "0.7.1"
solana-account = "3.4.0"
solana-account-decoder = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-account-decoder = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-account-info = "3.1.0"
solana-accounts-db = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-accounts-db = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-big-mod-exp = "3.0.0"
solana-bincode = "3.1.0"
solana-bn254 = "3.2.1"
solana-borsh = "3.0.0"
solana-bpf-loader-program = { path = "programs/bpf_loader", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-builtins = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-cli-output = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-builtins = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-cli-output = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-clock = "3.0.0"
solana-compute-budget = { path = "compute-budget", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-compute-budget-instruction = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-compute-budget-instruction = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-compute-budget-interface = "3.0.0"
solana-compute-budget-program = { path = "programs/compute-budget", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-curve25519 = "4.0.0"
Expand All @@ -163,11 +161,11 @@ solana-instruction-error = "2.1.0"
solana-instructions-sysvar = "3.0.0"
solana-keypair = "3.1.0"
solana-last-restart-slot = "3.0.0"
solana-ledger = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-ledger = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-loader-v3-interface = "6.1.0"
solana-loader-v4-interface = "3.1.0"
solana-loader-v4-program = { path = "programs/loader-v4", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-measure = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-loader-v4-program = { path = "programs/loader-v4", version = "=4.0.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
solana-measure = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-message = "3.0.1"
solana-native-token = "3.0.0"
solana-nonce = "3.0.0"
Expand All @@ -185,8 +183,8 @@ solana-program-pack = "3.0.0"
solana-program-runtime = { path = "program-runtime", version = "=4.0.0-alpha.0", features = ["agave-unstable-api"] }
solana-pubkey = "4.0.0"
solana-rent = "3.0.0"
solana-runtime = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-runtime-transaction = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-runtime = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-runtime-transaction = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-sanitize = "3.0.1"
solana-sbpf = "0.14.1"
solana-sdk-ids = "3.1.0"
Expand Down Expand Up @@ -221,11 +219,11 @@ solana-sysvar-id = "3.1.0"
solana-transaction = "3.0.2"
solana-transaction-context = { path = "transaction-context", version = "=4.0.0-alpha.0", features = ["agave-unstable-api", "bincode"] }
solana-transaction-error = "3.0.0"
solana-transaction-status = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-transaction-status = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-version = "3.1.0"
solana-vote = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", features = ["agave-unstable-api"] }
solana-vote = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", features = ["agave-unstable-api"] }
solana-vote-interface = "3.0.0"
solana-vote-program = { git = "https://github.com/anza-xyz/agave", rev = "a48940a24d", default-features = false, features = ["agave-unstable-api"] }
solana-vote-program = { git = "https://github.com/anza-xyz/agave", rev = "cc74332e59", default-features = false, features = ["agave-unstable-api"] }
solana-zk-elgamal-proof-program = "3.0.0"
solana-zk-sdk = "5.0.0"
solana-zk-token-proof-program = "3.0.0"
Expand All @@ -244,3 +242,5 @@ solana-svm-measure = { path = "measure" }
solana-program-runtime = { path = "program-runtime" }
solana-transaction-context = { path = "transaction-context" }
solana-svm-type-overrides = { path = "type-overrides" }
solana-bpf-loader-program = { path = "programs/bpf_loader" }
solana-loader-v4-program = { path = "programs/loader-v4" }
4 changes: 1 addition & 3 deletions compute-budget/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ frozen-abi = ["dep:solana-frozen-abi", "solana-fee-structure/frozen-abi"]
[dependencies]
qualifier_attr = { workspace = true, optional = true }
solana-fee-structure = { workspace = true }
solana-frozen-abi = { workspace = true, optional = true, features = [
"frozen-abi",
] }
solana-frozen-abi = { workspace = true, optional = true, features = ["frozen-abi"] }
solana-program-runtime = { workspace = true }

[lints]
Expand Down
4 changes: 2 additions & 2 deletions compute-budget/src/compute_budget.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pub use solana_program_runtime::execution_budget::{
SVMTransactionExecutionBudget, SVMTransactionExecutionCost, MAX_CALL_DEPTH,
MAX_INSTRUCTION_STACK_DEPTH, STACK_FRAME_SIZE,
MAX_CALL_DEPTH, MAX_INSTRUCTION_STACK_DEPTH, STACK_FRAME_SIZE, SVMTransactionExecutionBudget,
SVMTransactionExecutionCost,
};
use {
solana_fee_structure::FeeDetails,
Expand Down
2 changes: 2 additions & 0 deletions feature-set/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ pub struct SVMFeatureSet {
pub custom_commission_collector: bool,
pub enable_bls12_381_syscall: bool,
pub block_revenue_sharing: bool,
pub vote_account_initialize_v2: bool,
}

impl SVMFeatureSet {
Expand Down Expand Up @@ -106,6 +107,7 @@ impl SVMFeatureSet {
custom_commission_collector: true,
enable_bls12_381_syscall: true,
block_revenue_sharing: true,
vote_account_initialize_v2: true,
}
}
}
12 changes: 3 additions & 9 deletions program-runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,8 @@ solana-clock = { workspace = true }
solana-epoch-rewards = { workspace = true }
solana-epoch-schedule = { workspace = true }
solana-fee-structure = { workspace = true }
solana-frozen-abi = { workspace = true, optional = true, features = [
"frozen-abi",
] }
solana-frozen-abi-macro = { workspace = true, optional = true, features = [
"frozen-abi",
] }
solana-frozen-abi = { workspace = true, optional = true, features = ["frozen-abi"] }
solana-frozen-abi-macro = { workspace = true, optional = true, features = ["frozen-abi"] }
solana-hash = { workspace = true }
solana-instruction = { workspace = true }
solana-last-restart-slot = { workspace = true }
Expand Down Expand Up @@ -83,9 +79,7 @@ solana-program-runtime = { path = ".", features = ["dev-context-only-utils"] }
solana-pubkey = { workspace = true, features = ["rand"] }
solana-signer = { workspace = true }
solana-transaction = { workspace = true, features = ["dev-context-only-utils"] }
solana-transaction-context = { workspace = true, features = [
"dev-context-only-utils",
] }
solana-transaction-context = { workspace = true, features = ["dev-context-only-utils"] }
test-case = { workspace = true }

[lints]
Expand Down
6 changes: 3 additions & 3 deletions program-runtime/src/cpi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ pub fn cpi_common<S: SyscallInvokeSigned>(
check_aligned,
)?;
check_authorized_program(&instruction.program_id, &instruction.data, invoke_context)?;
invoke_context.prepare_next_instruction(instruction, &signers)?;
invoke_context.prepare_next_cpi_instruction(instruction, &signers)?;

let mut accounts = S::translate_accounts(
account_infos_addr,
Expand Down Expand Up @@ -1454,7 +1454,7 @@ mod tests {
);
$invoke_context
.transaction_context
.configure_next_instruction_for_tests(
.configure_top_level_instruction_for_tests(
$program_account,
instruction_accounts,
instruction_data.to_vec(),
Expand Down Expand Up @@ -1968,7 +1968,7 @@ mod tests {

invoke_context
.transaction_context
.configure_next_instruction_for_tests(
.configure_next_cpi_for_tests(
0,
vec![
InstructionAccount::new(1, false, true),
Expand Down
73 changes: 17 additions & 56 deletions program-runtime/src/deploy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,51 +45,6 @@ fn morph_into_deployment_environment_v1<'a>(
Ok(result)
}

#[allow(clippy::too_many_arguments)]
pub fn load_program_from_bytes(
log_collector: Option<Rc<RefCell<LogCollector>>>,
#[cfg(feature = "metrics")] load_program_metrics: &mut LoadProgramMetrics,
programdata: &[u8],
loader_key: &Pubkey,
account_size: usize,
deployment_slot: Slot,
program_runtime_environment: Arc<BuiltinProgram<InvokeContext<'static, 'static>>>,
reloading: bool,
) -> Result<ProgramCacheEntry, InstructionError> {
let effective_slot = deployment_slot.saturating_add(DELAY_VISIBILITY_SLOT_OFFSET);
let loaded_program = if reloading {
// Safety: this is safe because the program is being reloaded in the cache.
unsafe {
ProgramCacheEntry::reload(
loader_key,
program_runtime_environment,
deployment_slot,
effective_slot,
programdata,
account_size,
#[cfg(feature = "metrics")]
load_program_metrics,
)
}
} else {
ProgramCacheEntry::new(
loader_key,
program_runtime_environment,
deployment_slot,
effective_slot,
programdata,
account_size,
#[cfg(feature = "metrics")]
load_program_metrics,
)
}
.map_err(|err| {
ic_logger_msg!(log_collector, "{}", err);
InstructionError::InvalidAccountData
})?;
Ok(loaded_program)
}

/// Directly deploy a program using a provided invoke context.
/// This function should only be invoked from the runtime, since it does not
/// provide any account loads or checks.
Expand Down Expand Up @@ -145,17 +100,23 @@ pub fn deploy_program(
load_program_metrics.verify_code_us = verify_code_time.as_us();
}
// Reload but with program_runtime_environment
let executor = load_program_from_bytes(
log_collector,
#[cfg(feature = "metrics")]
load_program_metrics,
programdata,
loader_key,
account_size,
deployment_slot,
program_runtime_environment,
true,
)?;
let executor = unsafe {
// SAFETY: The executable has been verified just above.
ProgramCacheEntry::reload(
loader_key,
program_runtime_environment,
deployment_slot,
deployment_slot.saturating_add(DELAY_VISIBILITY_SLOT_OFFSET),
programdata,
account_size,
#[cfg(feature = "metrics")]
load_program_metrics,
)
}
.map_err(|err| {
ic_logger_msg!(log_collector, "{}", err);
InstructionError::InvalidAccountData
})?;
if let Some(old_entry) = program_cache_for_tx_batch.find(program_id) {
executor.tx_usage_counter.store(
old_entry.tx_usage_counter.load(Ordering::Relaxed),
Expand Down
Loading
Loading