Simplify register and bind (#24724)
* Revert "Bumps solana_rbpf to v0.2.27 (#24694)"
This reverts commit f3d27cc400
.
* Simplify syscall register and bind (#24546)
* declare syscalls with macro (#24564)
This commit is contained in:
parent
1168b9f9ab
commit
224e0b27a1
|
@ -6119,9 +6119,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana_rbpf"
|
name = "solana_rbpf"
|
||||||
version = "0.2.27"
|
version = "0.2.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3dec11db92171a996e44d36fb1d223233f2cefacf9ba6884b33e5baa92a81d37"
|
checksum = "bec5c1525c69ec74323d6a2d145a29b51844c4153a2cd5e4ac0d08b3fe81c806"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"combine",
|
"combine",
|
||||||
|
|
|
@ -42,7 +42,7 @@ solana-sdk = { path = "../sdk", version = "=1.11.0" }
|
||||||
solana-transaction-status = { path = "../transaction-status", version = "=1.11.0" }
|
solana-transaction-status = { path = "../transaction-status", version = "=1.11.0" }
|
||||||
solana-version = { path = "../version", version = "=1.11.0" }
|
solana-version = { path = "../version", version = "=1.11.0" }
|
||||||
solana-vote-program = { path = "../programs/vote", version = "=1.11.0" }
|
solana-vote-program = { path = "../programs/vote", version = "=1.11.0" }
|
||||||
solana_rbpf = "=0.2.27"
|
solana_rbpf = "=0.2.26"
|
||||||
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
|
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
|
||||||
thiserror = "1.0.30"
|
thiserror = "1.0.30"
|
||||||
tiny-bip39 = "0.8.2"
|
tiny-bip39 = "0.8.2"
|
||||||
|
|
|
@ -5376,9 +5376,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana_rbpf"
|
name = "solana_rbpf"
|
||||||
version = "0.2.27"
|
version = "0.2.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3dec11db92171a996e44d36fb1d223233f2cefacf9ba6884b33e5baa92a81d37"
|
checksum = "bec5c1525c69ec74323d6a2d145a29b51844c4153a2cd5e4ac0d08b3fe81c806"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder 1.4.3",
|
"byteorder 1.4.3",
|
||||||
"combine",
|
"combine",
|
||||||
|
|
|
@ -33,7 +33,7 @@ solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.1
|
||||||
solana-cli-output = { path = "../../cli-output", version = "=1.11.0" }
|
solana-cli-output = { path = "../../cli-output", version = "=1.11.0" }
|
||||||
solana-logger = { path = "../../logger", version = "=1.11.0" }
|
solana-logger = { path = "../../logger", version = "=1.11.0" }
|
||||||
solana-measure = { path = "../../measure", version = "=1.11.0" }
|
solana-measure = { path = "../../measure", version = "=1.11.0" }
|
||||||
solana_rbpf = "=0.2.27"
|
solana_rbpf = "=0.2.26"
|
||||||
solana-runtime = { path = "../../runtime", version = "=1.11.0" }
|
solana-runtime = { path = "../../runtime", version = "=1.11.0" }
|
||||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.11.0" }
|
solana-program-runtime = { path = "../../program-runtime", version = "=1.11.0" }
|
||||||
solana-sdk = { path = "../../sdk", version = "=1.11.0" }
|
solana-sdk = { path = "../../sdk", version = "=1.11.0" }
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
extern crate solana_program;
|
extern crate solana_program;
|
||||||
#[allow(deprecated)]
|
#[allow(deprecated)]
|
||||||
|
use solana_program::sysvar::fees::Fees;
|
||||||
|
#[allow(deprecated)]
|
||||||
use solana_program::sysvar::recent_blockhashes::RecentBlockhashes;
|
use solana_program::sysvar::recent_blockhashes::RecentBlockhashes;
|
||||||
use solana_program::{
|
use solana_program::{
|
||||||
account_info::AccountInfo,
|
account_info::AccountInfo,
|
||||||
|
@ -21,7 +23,7 @@ solana_program::entrypoint!(process_instruction);
|
||||||
pub fn process_instruction(
|
pub fn process_instruction(
|
||||||
program_id: &Pubkey,
|
program_id: &Pubkey,
|
||||||
accounts: &[AccountInfo],
|
accounts: &[AccountInfo],
|
||||||
_instruction_data: &[u8],
|
instruction_data: &[u8],
|
||||||
) -> ProgramResult {
|
) -> ProgramResult {
|
||||||
// Clock
|
// Clock
|
||||||
{
|
{
|
||||||
|
@ -54,7 +56,7 @@ pub fn process_instruction(
|
||||||
instruction,
|
instruction,
|
||||||
Instruction::new_with_bytes(
|
Instruction::new_with_bytes(
|
||||||
*program_id,
|
*program_id,
|
||||||
&[] as &[u8],
|
instruction_data,
|
||||||
vec![
|
vec![
|
||||||
AccountMeta::new(*accounts[0].key, true),
|
AccountMeta::new(*accounts[0].key, true),
|
||||||
AccountMeta::new(*accounts[1].key, false),
|
AccountMeta::new(*accounts[1].key, false),
|
||||||
|
@ -66,6 +68,7 @@ pub fn process_instruction(
|
||||||
AccountMeta::new_readonly(*accounts[7].key, false),
|
AccountMeta::new_readonly(*accounts[7].key, false),
|
||||||
AccountMeta::new_readonly(*accounts[8].key, false),
|
AccountMeta::new_readonly(*accounts[8].key, false),
|
||||||
AccountMeta::new_readonly(*accounts[9].key, false),
|
AccountMeta::new_readonly(*accounts[9].key, false),
|
||||||
|
AccountMeta::new_readonly(*accounts[10].key, false),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -110,5 +113,15 @@ pub fn process_instruction(
|
||||||
sysvar::stake_history::id().log();
|
sysvar::stake_history::id().log();
|
||||||
let _ = StakeHistory::from_account_info(&accounts[9]).unwrap();
|
let _ = StakeHistory::from_account_info(&accounts[9]).unwrap();
|
||||||
|
|
||||||
|
// Fees
|
||||||
|
#[allow(deprecated)]
|
||||||
|
if instruction_data[0] == 1 {
|
||||||
|
msg!("Fee identifier:");
|
||||||
|
sysvar::fees::id().log();
|
||||||
|
let fees = Fees::from_account_info(&accounts[10]).unwrap();
|
||||||
|
let got_fees = Fees::get()?;
|
||||||
|
assert_eq!(fees, got_fees);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,12 @@ use {
|
||||||
solana_bpf_rust_sysvar::process_instruction,
|
solana_bpf_rust_sysvar::process_instruction,
|
||||||
solana_program_test::*,
|
solana_program_test::*,
|
||||||
solana_sdk::{
|
solana_sdk::{
|
||||||
|
feature_set::disable_fees_sysvar,
|
||||||
instruction::{AccountMeta, Instruction},
|
instruction::{AccountMeta, Instruction},
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
signature::Signer,
|
signature::Signer,
|
||||||
sysvar::{
|
sysvar::{
|
||||||
clock, epoch_schedule, instructions, recent_blockhashes, rent, slot_hashes,
|
clock, epoch_schedule, fees, instructions, recent_blockhashes, rent, slot_hashes,
|
||||||
slot_history, stake_history,
|
slot_history, stake_history,
|
||||||
},
|
},
|
||||||
transaction::Transaction,
|
transaction::Transaction,
|
||||||
|
@ -16,6 +17,7 @@ use {
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_sysvars() {
|
async fn test_sysvars() {
|
||||||
let program_id = Pubkey::new_unique();
|
let program_id = Pubkey::new_unique();
|
||||||
|
|
||||||
let program_test = ProgramTest::new(
|
let program_test = ProgramTest::new(
|
||||||
"solana_bpf_rust_sysvar",
|
"solana_bpf_rust_sysvar",
|
||||||
program_id,
|
program_id,
|
||||||
|
@ -26,7 +28,7 @@ async fn test_sysvars() {
|
||||||
let mut transaction = Transaction::new_with_payer(
|
let mut transaction = Transaction::new_with_payer(
|
||||||
&[Instruction::new_with_bincode(
|
&[Instruction::new_with_bincode(
|
||||||
program_id,
|
program_id,
|
||||||
&(),
|
&[0u8],
|
||||||
vec![
|
vec![
|
||||||
AccountMeta::new(payer.pubkey(), true),
|
AccountMeta::new(payer.pubkey(), true),
|
||||||
AccountMeta::new(Pubkey::new_unique(), false),
|
AccountMeta::new(Pubkey::new_unique(), false),
|
||||||
|
@ -39,6 +41,41 @@ async fn test_sysvars() {
|
||||||
AccountMeta::new_readonly(slot_hashes::id(), false),
|
AccountMeta::new_readonly(slot_hashes::id(), false),
|
||||||
AccountMeta::new_readonly(slot_history::id(), false),
|
AccountMeta::new_readonly(slot_history::id(), false),
|
||||||
AccountMeta::new_readonly(stake_history::id(), false),
|
AccountMeta::new_readonly(stake_history::id(), false),
|
||||||
|
#[allow(deprecated)]
|
||||||
|
AccountMeta::new_readonly(fees::id(), false),
|
||||||
|
],
|
||||||
|
)],
|
||||||
|
Some(&payer.pubkey()),
|
||||||
|
);
|
||||||
|
transaction.sign(&[&payer], recent_blockhash);
|
||||||
|
banks_client.process_transaction(transaction).await.unwrap();
|
||||||
|
|
||||||
|
let mut program_test = ProgramTest::new(
|
||||||
|
"solana_bpf_rust_sysvar",
|
||||||
|
program_id,
|
||||||
|
processor!(process_instruction),
|
||||||
|
);
|
||||||
|
program_test.deactivate_feature(disable_fees_sysvar::id());
|
||||||
|
let (mut banks_client, payer, recent_blockhash) = program_test.start().await;
|
||||||
|
|
||||||
|
let mut transaction = Transaction::new_with_payer(
|
||||||
|
&[Instruction::new_with_bincode(
|
||||||
|
program_id,
|
||||||
|
&[1u8],
|
||||||
|
vec![
|
||||||
|
AccountMeta::new(payer.pubkey(), true),
|
||||||
|
AccountMeta::new(Pubkey::new_unique(), false),
|
||||||
|
AccountMeta::new_readonly(clock::id(), false),
|
||||||
|
AccountMeta::new_readonly(epoch_schedule::id(), false),
|
||||||
|
AccountMeta::new_readonly(instructions::id(), false),
|
||||||
|
#[allow(deprecated)]
|
||||||
|
AccountMeta::new_readonly(recent_blockhashes::id(), false),
|
||||||
|
AccountMeta::new_readonly(rent::id(), false),
|
||||||
|
AccountMeta::new_readonly(slot_hashes::id(), false),
|
||||||
|
AccountMeta::new_readonly(slot_history::id(), false),
|
||||||
|
AccountMeta::new_readonly(stake_history::id(), false),
|
||||||
|
#[allow(deprecated)]
|
||||||
|
AccountMeta::new_readonly(fees::id(), false),
|
||||||
],
|
],
|
||||||
)],
|
)],
|
||||||
Some(&payer.pubkey()),
|
Some(&payer.pubkey()),
|
||||||
|
|
|
@ -264,7 +264,7 @@ fn run_program(name: &str) -> u64 {
|
||||||
if config.enable_instruction_tracing {
|
if config.enable_instruction_tracing {
|
||||||
if i == 1 {
|
if i == 1 {
|
||||||
if !Tracer::compare(tracer.as_ref().unwrap(), vm.get_tracer()) {
|
if !Tracer::compare(tracer.as_ref().unwrap(), vm.get_tracer()) {
|
||||||
let analysis = Analysis::from_executable(&executable).unwrap();
|
let analysis = Analysis::from_executable(&executable);
|
||||||
let stdout = std::io::stdout();
|
let stdout = std::io::stdout();
|
||||||
println!("TRACE (interpreted):");
|
println!("TRACE (interpreted):");
|
||||||
tracer
|
tracer
|
||||||
|
@ -278,7 +278,7 @@ fn run_program(name: &str) -> u64 {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(false);
|
assert!(false);
|
||||||
} else if log_enabled!(Trace) {
|
} else if log_enabled!(Trace) {
|
||||||
let analysis = Analysis::from_executable(&executable).unwrap();
|
let analysis = Analysis::from_executable(&executable);
|
||||||
let mut trace_buffer = Vec::<u8>::new();
|
let mut trace_buffer = Vec::<u8>::new();
|
||||||
tracer
|
tracer
|
||||||
.as_ref()
|
.as_ref()
|
||||||
|
|
|
@ -19,7 +19,7 @@ solana-metrics = { path = "../../metrics", version = "=1.11.0" }
|
||||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.11.0" }
|
solana-program-runtime = { path = "../../program-runtime", version = "=1.11.0" }
|
||||||
solana-sdk = { path = "../../sdk", version = "=1.11.0" }
|
solana-sdk = { path = "../../sdk", version = "=1.11.0" }
|
||||||
solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.0" }
|
solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.0" }
|
||||||
solana_rbpf = "=0.2.27"
|
solana_rbpf = "=0.2.26"
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -28,10 +28,9 @@ use {
|
||||||
},
|
},
|
||||||
solana_rbpf::{
|
solana_rbpf::{
|
||||||
aligned_memory::AlignedMemory,
|
aligned_memory::AlignedMemory,
|
||||||
ebpf::{HOST_ALIGN, MM_INPUT_START},
|
ebpf::HOST_ALIGN,
|
||||||
elf::Executable,
|
elf::Executable,
|
||||||
error::{EbpfError, UserDefinedError},
|
error::{EbpfError, UserDefinedError},
|
||||||
memory_region::MemoryRegion,
|
|
||||||
static_analysis::Analysis,
|
static_analysis::Analysis,
|
||||||
verifier::{self, VerifierError},
|
verifier::{self, VerifierError},
|
||||||
vm::{Config, EbpfVm, InstructionMeter},
|
vm::{Config, EbpfVm, InstructionMeter},
|
||||||
|
@ -263,8 +262,7 @@ pub fn create_vm<'a, 'b>(
|
||||||
}
|
}
|
||||||
let mut heap =
|
let mut heap =
|
||||||
AlignedMemory::new_with_size(compute_budget.heap_size.unwrap_or(HEAP_LENGTH), HOST_ALIGN);
|
AlignedMemory::new_with_size(compute_budget.heap_size.unwrap_or(HEAP_LENGTH), HOST_ALIGN);
|
||||||
let parameter_region = MemoryRegion::new_writable(parameter_bytes, MM_INPUT_START);
|
let mut vm = EbpfVm::new(program, heap.as_slice_mut(), parameter_bytes)?;
|
||||||
let mut vm = EbpfVm::new(program, heap.as_slice_mut(), vec![parameter_region])?;
|
|
||||||
syscalls::bind_syscall_context_objects(&mut vm, invoke_context, heap)?;
|
syscalls::bind_syscall_context_objects(&mut vm, invoke_context, heap)?;
|
||||||
Ok(vm)
|
Ok(vm)
|
||||||
}
|
}
|
||||||
|
@ -1199,7 +1197,7 @@ impl Executor for BpfExecutor {
|
||||||
);
|
);
|
||||||
if log_enabled!(Trace) {
|
if log_enabled!(Trace) {
|
||||||
let mut trace_buffer = Vec::<u8>::new();
|
let mut trace_buffer = Vec::<u8>::new();
|
||||||
let analysis = Analysis::from_executable(&self.executable).unwrap();
|
let analysis = Analysis::from_executable(&self.executable);
|
||||||
vm.get_tracer().write(&mut trace_buffer, &analysis).unwrap();
|
vm.get_tracer().write(&mut trace_buffer, &analysis).unwrap();
|
||||||
let trace_string = String::from_utf8(trace_buffer).unwrap();
|
let trace_string = String::from_utf8(trace_buffer).unwrap();
|
||||||
trace!("BPF Program Instruction Trace:\n{}", trace_string);
|
trace!("BPF Program Instruction Trace:\n{}", trace_string);
|
||||||
|
@ -1360,7 +1358,7 @@ mod tests {
|
||||||
0x05, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, // goto -2
|
0x05, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, // goto -2
|
||||||
0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // exit
|
0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // exit
|
||||||
];
|
];
|
||||||
let mut input_mem = [0x00];
|
let input = &mut [0x00];
|
||||||
let config = Config::default();
|
let config = Config::default();
|
||||||
let syscall_registry = SyscallRegistry::default();
|
let syscall_registry = SyscallRegistry::default();
|
||||||
let mut bpf_functions = std::collections::BTreeMap::<u32, (usize, String)>::new();
|
let mut bpf_functions = std::collections::BTreeMap::<u32, (usize, String)>::new();
|
||||||
|
@ -1380,10 +1378,8 @@ mod tests {
|
||||||
bpf_functions,
|
bpf_functions,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let input_region = MemoryRegion::new_writable(&mut input_mem, MM_INPUT_START);
|
|
||||||
let mut vm =
|
let mut vm =
|
||||||
EbpfVm::<BpfError, TestInstructionMeter>::new(&program, &mut [], vec![input_region])
|
EbpfVm::<BpfError, TestInstructionMeter>::new(&program, &mut [], input).unwrap();
|
||||||
.unwrap();
|
|
||||||
let mut instruction_meter = TestInstructionMeter { remaining: 10 };
|
let mut instruction_meter = TestInstructionMeter { remaining: 10 };
|
||||||
vm.execute_program_interpreted(&mut instruction_meter)
|
vm.execute_program_interpreted(&mut instruction_meter)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -22,4 +22,4 @@ solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.
|
||||||
solana-logger = { path = "../logger", version = "=1.11.0" }
|
solana-logger = { path = "../logger", version = "=1.11.0" }
|
||||||
solana-program-runtime = { path = "../program-runtime", version = "=1.11.0" }
|
solana-program-runtime = { path = "../program-runtime", version = "=1.11.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "=1.11.0" }
|
solana-sdk = { path = "../sdk", version = "=1.11.0" }
|
||||||
solana_rbpf = "=0.2.27"
|
solana_rbpf = "=0.2.26"
|
||||||
|
|
|
@ -427,6 +427,6 @@ impl<'a> LazyAnalysis<'a> {
|
||||||
return analysis;
|
return analysis;
|
||||||
}
|
}
|
||||||
self.analysis
|
self.analysis
|
||||||
.insert(Analysis::from_executable(self.executable).unwrap())
|
.insert(Analysis::from_executable(self.executable))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,8 +139,8 @@ pub(crate) fn sol_get_epoch_schedule_sysvar(var_addr: *mut u8) -> u64 {
|
||||||
.sol_get_epoch_schedule_sysvar(var_addr)
|
.sol_get_epoch_schedule_sysvar(var_addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn sol_get_fees_sysvar(_var_addr: *mut u8) -> u64 {
|
pub(crate) fn sol_get_fees_sysvar(var_addr: *mut u8) -> u64 {
|
||||||
UNSUPPORTED_SYSVAR
|
SYSCALL_STUBS.read().unwrap().sol_get_fees_sysvar(var_addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn sol_get_rent_sysvar(var_addr: *mut u8) -> u64 {
|
pub(crate) fn sol_get_rent_sysvar(var_addr: *mut u8) -> u64 {
|
||||||
|
|
Loading…
Reference in New Issue