diff --git a/Cargo.lock b/Cargo.lock index 0a0e58ada8..5ebeb720e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4039,7 +4039,6 @@ version = "1.7.0" dependencies = [ "bincode", "byteorder", - "curve25519-dalek 3.0.0", "log 0.4.11", "num-derive", "num-traits", diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index f6bb26a552..86bcdb84c5 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2714,7 +2714,6 @@ version = "1.7.0" dependencies = [ "bincode", "byteorder 1.3.4", - "curve25519-dalek 3.0.0", "log", "num-derive 0.3.0", "num-traits", @@ -2947,15 +2946,6 @@ dependencies = [ "solana-program 1.7.0", ] -[[package]] -name = "solana-bpf-rust-ristretto" -version = "1.7.0" -dependencies = [ - "curve25519-dalek 3.0.0", - "getrandom 0.1.14", - "solana-program 1.7.0", -] - [[package]] name = "solana-bpf-rust-ro-modify" version = "1.7.0" diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 113d9957b1..611fa9cc8f 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -68,7 +68,6 @@ members = [ "rust/param_passing", "rust/param_passing_dep", "rust/rand", - "rust/ristretto", "rust/ro_modify", "rust/sanity", "rust/sha256", diff --git a/programs/bpf/build.rs b/programs/bpf/build.rs index ecea5cb873..31dd4c58ef 100644 --- a/programs/bpf/build.rs +++ b/programs/bpf/build.rs @@ -82,7 +82,6 @@ fn main() { "panic", "param_passing", "rand", - "ristretto", "ro_modify", "sanity", "sha256", diff --git a/programs/bpf/rust/ristretto/Cargo.toml b/programs/bpf/rust/ristretto/Cargo.toml deleted file mode 100644 index 297fd037f3..0000000000 --- a/programs/bpf/rust/ristretto/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "solana-bpf-rust-ristretto" -version = "1.7.0" -description = "Solana BPF test program written in Rust" -authors = ["Solana Maintainers "] -repository = "https://github.com/solana-labs/solana" -license = "Apache-2.0" -homepage = "https://solana.com/" -documentation = "https://docs.rs/solana-bpf-rust-ristretto" -edition = "2018" - -[dependencies] -curve25519-dalek = "3" -getrandom = { version = "0.1.14", features = ["dummy"] } -solana-program = { path = "../../../../sdk/program", version = "=1.7.0" } - -[lib] -crate-type = ["cdylib"] - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/ristretto/src/lib.rs b/programs/bpf/rust/ristretto/src/lib.rs deleted file mode 100644 index 45167fb277..0000000000 --- a/programs/bpf/rust/ristretto/src/lib.rs +++ /dev/null @@ -1,46 +0,0 @@ -//! @brief Example Rust-based BPF program that performs a ristretto multiply - -pub mod ristretto; - -use crate::ristretto::ristretto_mul; -use curve25519_dalek::{constants::RISTRETTO_BASEPOINT_POINT, scalar::Scalar}; -use solana_program::{ - account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey, -}; - -fn test_ristretto_mul() -> ProgramResult { - let point = RISTRETTO_BASEPOINT_POINT; - let scalar = Scalar::zero(); - let result = ristretto_mul(&point, &scalar)?; - assert_ne!(point, result); - - let point = RISTRETTO_BASEPOINT_POINT; - let scalar = Scalar::one(); - let result = ristretto_mul(&point, &scalar)?; - assert_eq!(point, result); - - Ok(()) -} - -entrypoint!(process_instruction); -fn process_instruction( - _program_id: &Pubkey, - _accounts: &[AccountInfo], - _instruction_data: &[u8], -) -> ProgramResult { - msg!("Ristretto multiply"); - - test_ristretto_mul()?; - - Ok(()) -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_ristretto() { - test_ristretto_mul().unwrap(); - } -} diff --git a/programs/bpf/rust/ristretto/src/ristretto.rs b/programs/bpf/rust/ristretto/src/ristretto.rs deleted file mode 100644 index 9286e09798..0000000000 --- a/programs/bpf/rust/ristretto/src/ristretto.rs +++ /dev/null @@ -1,44 +0,0 @@ -use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar}; -use solana_program::program_error::ProgramError; - -/// Multiply a ristretto point with a scalar -/// -/// @param point - Ristretto point -/// @param scalar - Scalar to mulitply against -/// @return - result of the multiplication -#[inline] -pub fn ristretto_mul( - point: &RistrettoPoint, - scalar: &Scalar, -) -> Result { - // Perform the calculation inline, calling this from within a program is - // not supported - #[cfg(not(target_arch = "bpf"))] - { - Ok(point * scalar) - } - // Call via a system call to perform the calculation - #[cfg(target_arch = "bpf")] - { - extern "C" { - fn sol_ristretto_mul( - point_addr: *const u8, - scalar_addr: *const u8, - result_addr: *mut u8, - ) -> u64; - } - - let mut result = RistrettoPoint::default(); - let status = unsafe { - sol_ristretto_mul( - point as *const _ as *const u8, - scalar as *const _ as *const u8, - &mut result as *const _ as *mut u8, - ) - }; - match status { - solana_program::entrypoint::SUCCESS => Ok(result), - _ => Err(status.into()), - } - } -} diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index af5e27b567..cd8c7cc83e 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -30,7 +30,6 @@ use solana_sdk::{ client::SyncClient, clock::MAX_PROCESSING_AGE, entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS}, - feature_set::ristretto_mul_syscall_enabled, instruction::{AccountMeta, CompiledInstruction, Instruction, InstructionError}, keyed_account::KeyedAccount, message::Message, @@ -443,7 +442,6 @@ fn test_program_bpf_sanity() { ("solana_bpf_rust_panic", false), ("solana_bpf_rust_param_passing", true), ("solana_bpf_rust_rand", true), - ("solana_bpf_rust_ristretto", true), ("solana_bpf_rust_sanity", true), ("solana_bpf_rust_sha256", true), ]); @@ -1258,7 +1256,6 @@ fn assert_instruction_count() { ("solana_bpf_rust_noop", 472), ("solana_bpf_rust_param_passing", 46), ("solana_bpf_rust_rand", 475), - ("solana_bpf_rust_ristretto", 19220), ("solana_bpf_rust_sanity", 869), ("solana_bpf_rust_sha256", 10830), ]); @@ -2319,44 +2316,6 @@ fn test_program_upgradeable_locks() { } } -#[cfg(feature = "bpf_rust")] -#[test] -fn test_program_bpf_syscall_feature_activation() { - solana_logger::setup(); - - let GenesisConfigInfo { - genesis_config, - mint_keypair, - .. - } = create_genesis_config(50); - let mut bank = Bank::new(&genesis_config); - bank.deactivate_feature(&ristretto_mul_syscall_enabled::id()); - let (name, id, entrypoint) = solana_bpf_loader_program!(); - bank.add_builtin(&name, id, entrypoint); - let bank = Arc::new(bank); - let bank_client = BankClient::new_shared(&bank); - - let program_id = load_bpf_program( - &bank_client, - &bpf_loader::id(), - &mint_keypair, - "solana_bpf_rust_noop", - ); - let instruction = Instruction::new_with_bytes(program_id, &[0], vec![]); - let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction); - assert!(result.is_ok()); - - let mut bank = Bank::new_from_parent(&bank, &Pubkey::default(), 1); - bank.activate_feature(&ristretto_mul_syscall_enabled::id()); - - let bank = Arc::new(bank); - let bank_client = BankClient::new_shared(&bank); - let instruction = Instruction::new_with_bytes(program_id, &[1], vec![]); - let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction); - println!("result: {:?}", result); - assert!(result.is_ok()); -} - #[cfg(feature = "bpf_rust")] #[test] fn test_program_bpf_finalize() { diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index a6ba4c649c..cd1e8ec382 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -12,7 +12,6 @@ edition = "2018" [dependencies] bincode = "1.3.1" byteorder = "1.3.4" -curve25519-dalek = "3" log = "0.4.11" num-derive = "0.3" num-traits = "0.2" diff --git a/programs/bpf_loader/src/syscalls.rs b/programs/bpf_loader/src/syscalls.rs index 0e5ec43e84..3b76625ef2 100644 --- a/programs/bpf_loader/src/syscalls.rs +++ b/programs/bpf_loader/src/syscalls.rs @@ -1,6 +1,5 @@ use crate::{alloc, BpfError}; use alloc::Alloc; -use curve25519_dalek::{ristretto::RistrettoPoint, scalar::Scalar}; use solana_rbpf::{ aligned_memory::AlignedMemory, ebpf::MM_HEAP_START, @@ -21,8 +20,7 @@ use solana_sdk::{ epoch_schedule::EpochSchedule, feature_set::{ cpi_data_cost, cpi_share_ro_and_exec_accounts, demote_sysvar_write_locks, - enforce_aligned_host_addrs, ristretto_mul_syscall_enabled, - set_upgrade_authority_via_cpi_enabled, sysvar_via_syscall, + enforce_aligned_host_addrs, set_upgrade_authority_via_cpi_enabled, sysvar_via_syscall, }, hash::{Hasher, HASH_BYTES}, ic_msg, @@ -128,11 +126,6 @@ pub fn register_syscalls( syscall_registry.register_syscall_by_name(b"sol_sha256", SyscallSha256::call)?; - if invoke_context.is_feature_active(&ristretto_mul_syscall_enabled::id()) { - syscall_registry - .register_syscall_by_name(b"sol_ristretto_mul", SyscallRistrettoMul::call)?; - } - if invoke_context.is_feature_active(&sysvar_via_syscall::id()) { syscall_registry .register_syscall_by_name(b"sol_get_clock_sysvar", SyscallGetClockSysvar::call)?; @@ -258,17 +251,6 @@ pub fn bind_syscall_context_objects<'a>( None, )?; - bind_feature_gated_syscall_context_object!( - vm, - invoke_context.is_feature_active(&ristretto_mul_syscall_enabled::id()), - Box::new(SyscallRistrettoMul { - cost: 0, - compute_meter: invoke_context.get_compute_meter(), - loader_id, - enforce_aligned_host_addrs, - }), - ); - let is_sysvar_via_syscall_active = invoke_context.is_feature_active(&sysvar_via_syscall::id()); let invoke_context = Rc::new(RefCell::new(invoke_context)); @@ -951,59 +933,6 @@ impl<'a> SyscallObject for SyscallSha256<'a> { } } -/// Ristretto point multiply -pub struct SyscallRistrettoMul<'a> { - cost: u64, - compute_meter: Rc>, - loader_id: &'a Pubkey, - enforce_aligned_host_addrs: bool, -} -impl<'a> SyscallObject for SyscallRistrettoMul<'a> { - fn call( - &mut self, - point_addr: u64, - scalar_addr: u64, - result_addr: u64, - _arg4: u64, - _arg5: u64, - memory_mapping: &MemoryMapping, - result: &mut Result>, - ) { - question_mark!(self.compute_meter.consume(self.cost), result); - - let point = question_mark!( - translate_type::( - memory_mapping, - point_addr, - self.loader_id, - self.enforce_aligned_host_addrs, - ), - result - ); - let scalar = question_mark!( - translate_type::( - memory_mapping, - scalar_addr, - self.loader_id, - self.enforce_aligned_host_addrs, - ), - result - ); - let output = question_mark!( - translate_type_mut::( - memory_mapping, - result_addr, - self.loader_id, - self.enforce_aligned_host_addrs, - ), - result - ); - *output = point * scalar; - - *result = Ok(0); - } -} - fn get_sysvar( id: &Pubkey, var_addr: u64, diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 04e6a17c9d..cc88d76eef 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -51,10 +51,6 @@ pub mod no_overflow_rent_distribution { solana_sdk::declare_id!("4kpdyrcj5jS47CZb2oJGfVxjYbsMm2Kx97gFyZrxxwXz"); } -pub mod ristretto_mul_syscall_enabled { - solana_sdk::declare_id!("HRe7A6aoxgjKzdjbBv6HTy7tJ4YWqE6tVmYCGho6S9Aq"); -} - pub mod pull_request_ping_pong_check { solana_sdk::declare_id!("5RzEHTnf6D7JPZCvwEzjM19kzBsyjSU3HoMfXaQmVgnZ"); } @@ -153,7 +149,6 @@ lazy_static! { (full_inflation::devnet_and_testnet::id(), "full inflation on devnet and testnet"), (spl_token_v2_multisig_fix::id(), "spl-token multisig fix"), (no_overflow_rent_distribution::id(), "no overflow rent distribution"), - (ristretto_mul_syscall_enabled::id(), "ristretto multiply syscall"), (pull_request_ping_pong_check::id(), "ping-pong packet check #12794"), (stake_program_v2::id(), "solana_stake_program v2"), (rewrite_stake::id(), "rewrite stake"),