diff --git a/third_party/solana/Add_crypto_syscalls.patch b/third_party/solana/Add_crypto_syscalls.patch index cc80c3db..fbc2e1d2 100644 --- a/third_party/solana/Add_crypto_syscalls.patch +++ b/third_party/solana/Add_crypto_syscalls.patch @@ -3,8 +3,8 @@ IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== ---- Cargo.lock (revision d84010e4afe5f79c812ff7da349460dc690a8392) -+++ Cargo.lock (revision aa30fbafe08be98cfbea6772040d5f3b073877b0) +--- Cargo.lock (revision e2d66cf796484301668c2b45804e31610373a0e9) ++++ Cargo.lock (revision 26c89c185550ea921e19b040b08abd6811607d86) @@ -274,12 +274,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" @@ -211,8 +211,8 @@ IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== ---- programs/bpf_loader/Cargo.toml (revision d84010e4afe5f79c812ff7da349460dc690a8392) -+++ programs/bpf_loader/Cargo.toml (revision aa30fbafe08be98cfbea6772040d5f3b073877b0) +--- programs/bpf_loader/Cargo.toml (revision e2d66cf796484301668c2b45804e31610373a0e9) ++++ programs/bpf_loader/Cargo.toml (revision 26c89c185550ea921e19b040b08abd6811607d86) @@ -17,6 +17,10 @@ solana-sdk = { path = "../../sdk", version = "1.4.0" } solana_rbpf = "=0.1.28" @@ -229,8 +229,8 @@ IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== ---- programs/bpf_loader/src/crypto.rs (revision aa30fbafe08be98cfbea6772040d5f3b073877b0) -+++ programs/bpf_loader/src/crypto.rs (revision aa30fbafe08be98cfbea6772040d5f3b073877b0) +--- programs/bpf_loader/src/crypto.rs (revision 26c89c185550ea921e19b040b08abd6811607d86) ++++ programs/bpf_loader/src/crypto.rs (revision 26c89c185550ea921e19b040b08abd6811607d86) @@ -0,0 +1,171 @@ +pub extern crate secp256k1; + @@ -408,8 +408,8 @@ IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== ---- programs/bpf_loader/src/lib.rs (revision d84010e4afe5f79c812ff7da349460dc690a8392) -+++ programs/bpf_loader/src/lib.rs (revision aa30fbafe08be98cfbea6772040d5f3b073877b0) +--- programs/bpf_loader/src/lib.rs (revision e2d66cf796484301668c2b45804e31610373a0e9) ++++ programs/bpf_loader/src/lib.rs (revision 2c10215589be61459a5f22c2fff7f7575705f667) @@ -4,6 +4,10 @@ pub mod deprecated; pub mod serialization; @@ -421,13 +421,22 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP use crate::{ bpf_verifier::VerifierError, +@@ -65,7 +69,7 @@ + ) -> Result<(EbpfVm<'a, BPFError>, MemoryRegion), EbpfError> { + let mut vm = EbpfVm::new(None)?; + vm.set_verifier(bpf_verifier::check)?; +- vm.set_max_instruction_count(100_000)?; ++ vm.set_max_instruction_count(1_000_000)?; + vm.set_elf(&prog)?; + + let heap_region = syscalls::register_syscalls(&mut vm, parameter_accounts, invoke_context)?; Index: programs/bpf_loader/src/syscalls.rs IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== ---- programs/bpf_loader/src/syscalls.rs (revision d84010e4afe5f79c812ff7da349460dc690a8392) -+++ programs/bpf_loader/src/syscalls.rs (revision aa30fbafe08be98cfbea6772040d5f3b073877b0) +--- programs/bpf_loader/src/syscalls.rs (revision e2d66cf796484301668c2b45804e31610373a0e9) ++++ programs/bpf_loader/src/syscalls.rs (revision 26c89c185550ea921e19b040b08abd6811607d86) @@ -1,10 +1,23 @@ -use crate::{alloc, BPFError}; -use alloc::Alloc; @@ -505,28 +514,24 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP /// Default program heap size, allocators /// are expected to enforce this const DEFAULT_HEAP_SIZE: usize = 32 * 1024; -@@ -114,6 +120,20 @@ - invoke_context: invoke_context.clone(), - }), - )?; -+ +@@ -114,6 +120,16 @@ + )?; + } + + // Signature verification + vm.register_syscall_with_context_ex( + "sol_verify_ethschnorr", -+ Box::new(SyscallSchorrify { -+ invoke_context: invoke_context.clone(), -+ }), ++ Box::new(SyscallSchorrify {}), + )?; + vm.register_syscall_with_context_ex( + "sol_ecrecover", -+ Box::new(SyscallEcrecover { -+ invoke_context: invoke_context.clone(), -+ }), ++ Box::new(SyscallEcrecover {}), + )?; - ++ // Memory allocator let heap = vec![0_u8; DEFAULT_HEAP_SIZE]; -@@ -256,6 +276,7 @@ + let heap_region = MemoryRegion::new_from_slice(&heap, MM_HEAP_START); +@@ -255,6 +271,7 @@ pub struct SyscallLog { logger: Rc>, } @@ -534,7 +539,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl SyscallObject for SyscallLog { fn call( &mut self, -@@ -285,6 +306,7 @@ +@@ -284,6 +301,7 @@ pub struct SyscallLogU64 { logger: Rc>, } @@ -542,7 +547,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl SyscallObject for SyscallLogU64 { fn call( &mut self, -@@ -319,6 +341,7 @@ +@@ -318,6 +336,7 @@ pub struct SyscallSolAllocFree { allocator: BPFAllocator, } @@ -550,24 +555,15 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl SyscallObject for SyscallSolAllocFree { fn call( &mut self, -@@ -373,6 +396,105 @@ +@@ -380,6 +399,87 @@ Ok(0) } +/// Verify a ETH optimized Schnorr Signature -+pub struct SyscallEcrecover<'a> { -+ invoke_context: Rc>, ++pub struct SyscallEcrecover { +} + -+impl<'a> SyscallEcrecover<'a> { -+ fn get_context_mut(&self) -> Result, EbpfError> { -+ self.invoke_context -+ .try_borrow_mut() -+ .map_err(|_| SyscallError::InvokeContextBorrowFailed.into()) -+ } -+} -+ -+impl<'a> SyscallObject for SyscallEcrecover<'a> { ++impl SyscallObject for SyscallEcrecover { + fn call( + &mut self, + input: u64, @@ -606,7 +602,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP + &recovery_id) { + Ok(v) => { + let mut addr = [0u8; 20]; -+ addr.copy_from_slice(&sha3::Keccak256::digest(&v.serialize())[12..]); ++ addr.copy_from_slice(&sha3::Keccak256::digest(&v.serialize()[1..])[12..]); + output.address = addr; + } + Err(_) => { @@ -619,19 +615,10 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +} + +/// Verify a ETH optimized Schnorr Signature -+pub struct SyscallSchorrify<'a> { -+ invoke_context: Rc>, ++pub struct SyscallSchorrify { +} + -+impl<'a> SyscallSchorrify<'a> { -+ fn get_context_mut(&self) -> Result, EbpfError> { -+ self.invoke_context -+ .try_borrow_mut() -+ .map_err(|_| SyscallError::InvokeContextBorrowFailed.into()) -+ } -+} -+ -+impl<'a> SyscallObject for SyscallSchorrify<'a> { ++impl SyscallObject for SyscallSchorrify { + fn call( + &mut self, + addr: u64, @@ -656,7 +643,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP // Cross-program invocation syscalls struct AccountReferences<'a> { -@@ -415,6 +537,7 @@ +@@ -422,6 +522,7 @@ callers_keyed_accounts: &'a [KeyedAccount<'a>], invoke_context: Rc>, } @@ -664,7 +651,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl<'a> SyscallProcessInstruction<'a> for SyscallProcessInstructionRust<'a> { fn get_context_mut(&self) -> Result, EbpfError> { self.invoke_context -@@ -436,7 +559,7 @@ +@@ -443,7 +544,7 @@ ix.accounts.len(), ro_regions )? @@ -673,7 +660,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP let data = translate_slice!(u8, ix.data.as_ptr(), ix.data.len(), ro_regions)?.to_vec(); Ok(Instruction { program_id: ix.program_id, -@@ -551,6 +674,7 @@ +@@ -558,6 +659,7 @@ } } } @@ -681,7 +668,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl<'a> SyscallObject for SyscallProcessInstructionRust<'a> { fn call( &mut self, -@@ -626,6 +750,7 @@ +@@ -633,6 +735,7 @@ callers_keyed_accounts: &'a [KeyedAccount<'a>], invoke_context: Rc>, } @@ -689,7 +676,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl<'a> SyscallProcessInstruction<'a> for SyscallProcessSolInstructionC<'a> { fn get_context_mut(&self) -> Result, EbpfError> { self.invoke_context -@@ -763,6 +888,7 @@ +@@ -770,6 +873,7 @@ } } } @@ -697,7 +684,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP impl<'a> SyscallObject for SyscallProcessSolInstructionC<'a> { fn call( &mut self, -@@ -814,10 +940,10 @@ +@@ -821,10 +925,10 @@ } if account.is_signer && // If message indicates account is signed @@ -712,7 +699,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP return Err(SyscallError::PrivilegeEscalation.into()); } } -@@ -1034,7 +1160,7 @@ +@@ -1042,7 +1146,7 @@ assert_eq!(string, "Gaggablaghblagh!"); Ok(42) }) @@ -721,7 +708,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP ); } -@@ -1066,7 +1192,7 @@ +@@ -1074,7 +1178,7 @@ &[ro_region], &[rw_region], ) diff --git a/third_party/solana/Dockerfile b/third_party/solana/Dockerfile index 5a0c153a..d896a414 100644 --- a/third_party/solana/Dockerfile +++ b/third_party/solana/Dockerfile @@ -6,8 +6,8 @@ RUN rustup component add rustfmt WORKDIR /usr/src/solana -RUN git clone https://github.com/jackcmay/solana --depth=1 --branch cpi-create-account && \ - cd solana +RUN git clone https://github.com/solana-labs/solana --depth=1 --branch master && \ + cd solana && git checkout e2d66cf7 ADD *.patch .