diff --git a/Cargo.lock b/Cargo.lock index ed7c2a05bb..885c3cf748 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4093,7 +4093,6 @@ version = "1.6.7" 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 687674f433..ada5253d89 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2671,7 +2671,6 @@ version = "1.6.7" dependencies = [ "bincode", "byteorder 1.3.4", - "curve25519-dalek 3.0.0", "log", "num-derive 0.3.0", "num-traits", @@ -2903,15 +2902,6 @@ dependencies = [ "solana-program 1.6.7", ] -[[package]] -name = "solana-bpf-rust-ristretto" -version = "1.6.7" -dependencies = [ - "curve25519-dalek 3.0.0", - "getrandom 0.1.14", - "solana-program 1.6.7", -] - [[package]] name = "solana-bpf-rust-ro-modify" version = "1.6.7" diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index c20e6dc4c1..d2cd6f39d0 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -67,7 +67,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 03a436acee..117a45f525 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 81806ad46d..0000000000 --- a/programs/bpf/rust/ristretto/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "solana-bpf-rust-ristretto" -version = "1.6.7" -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.6.7" } - -[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 4e9b804569..0060aff773 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -27,7 +27,6 @@ use solana_sdk::{ client::SyncClient, clock::{DEFAULT_SLOTS_PER_EPOCH, 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, @@ -438,7 +437,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), ("solana_bpf_rust_sysvar", true), @@ -1260,7 +1258,6 @@ fn assert_instruction_count() { ("solana_bpf_rust_many_args", 237), ("solana_bpf_rust_noop", 472), ("solana_bpf_rust_param_passing", 46), - ("solana_bpf_rust_ristretto", 19220), ("solana_bpf_rust_sanity", 894), ]); } @@ -2232,44 +2229,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 f5070bfb6f..f9a4ac0df2 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 63c55dfaa7..a0e67642b6 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,7 +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, sysvar_via_syscall, + enforce_aligned_host_addrs, sysvar_via_syscall, }, hash::{Hasher, HASH_BYTES}, ic_msg, @@ -127,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 +252,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)); @@ -953,59 +936,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 3ccac9de37..ae345f9587 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"); } @@ -150,7 +146,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"),