From e59c74315a0a7677d63e7461c890466bb6e473ca Mon Sep 17 00:00:00 2001 From: zhangsoledad <787953403@qq.com> Date: Mon, 24 Feb 2025 20:28:59 +0800 Subject: [PATCH 1/8] chore: lock cargo-deny version --- devtools/ci/ci_main.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devtools/ci/ci_main.sh b/devtools/ci/ci_main.sh index 33242b3035..16d2e6a5ea 100755 --- a/devtools/ci/ci_main.sh +++ b/devtools/ci/ci_main.sh @@ -83,7 +83,7 @@ case $GITHUB_WORKFLOW in ;; ci_cargo_deny*) echo "ci_security_audit_licenses" - cargo deny --version || cargo +stable install cargo-deny --locked + cargo deny --version || cargo +stable install cargo-deny --locked --version 0.17.0 make security-audit make check-crates make check-licenses From 05375088994c35e6cd7b3105385e7e82937738fa Mon Sep 17 00:00:00 2001 From: zhangsoledad <787953403@qq.com> Date: Mon, 24 Feb 2025 20:42:12 +0800 Subject: [PATCH 2/8] fix: wasm build --- network/src/network.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/network/src/network.rs b/network/src/network.rs index 651f6e8012..b3726618cf 100644 --- a/network/src/network.rs +++ b/network/src/network.rs @@ -183,7 +183,6 @@ impl NetworkState { bootnodes, peer_registry: RwLock::new(peer_registry), dialing_addrs: RwLock::new(HashMap::default()), - pending_dns_addrs: RwLock::new(HashMap::default()), public_addrs: RwLock::new(public_addrs), listened_addrs: RwLock::new(Vec::new()), pending_observed_addrs: RwLock::new(HashSet::default()), From bf4814cca39d82e7fa7dfbe21f92416c5639df53 Mon Sep 17 00:00:00 2001 From: Jan Xie Date: Tue, 25 Feb 2025 19:15:44 +0800 Subject: [PATCH 3/8] improve assume-valid-target info logs --- shared/src/shared_builder.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/src/shared_builder.rs b/shared/src/shared_builder.rs index 4c671d63d2..8f97def62e 100644 --- a/shared/src/shared_builder.rs +++ b/shared/src/shared_builder.rs @@ -437,7 +437,7 @@ impl SharedBuilder { .filter(|&target_hash| { let exists = snapshot.block_exists(&target_hash.pack()); if exists { - info!("assume valid target 0x{} already exists in db", target_hash); + info!("assume-valid target 0x{} exists in local db", target_hash); } !exists }) @@ -449,7 +449,7 @@ impl SharedBuilder { .as_ref() .is_some_and(|targets| targets.is_empty()) { - info!("all assume valid targets is already in db, CKB will do full verification from now on"); + info!("all assume-valid targets synchronized, enter full verification mode"); None } else { not_exists_targets From 219313cbb20b384bd4a1eb0faf5d5f81a860dc3d Mon Sep 17 00:00:00 2001 From: mohanson Date: Mon, 24 Feb 2025 17:28:29 +0800 Subject: [PATCH 4/8] script: make DataLocation public --- script/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/src/lib.rs b/script/src/lib.rs index 2016aeb3b1..d77f75b8ca 100644 --- a/script/src/lib.rs +++ b/script/src/lib.rs @@ -12,8 +12,8 @@ pub use crate::error::{ScriptError, TransactionScriptError}; pub use crate::scheduler::{Scheduler, ROOT_VM_ID}; pub use crate::syscalls::generator::generate_ckb_syscalls; pub use crate::types::{ - ChunkCommand, CoreMachine, DataPieceId, RunMode, ScriptGroup, ScriptGroupType, ScriptVersion, - TransactionState, TxData, VerifyResult, VmIsa, VmState, VmVersion, + ChunkCommand, CoreMachine, DataLocation, DataPieceId, RunMode, ScriptGroup, ScriptGroupType, + ScriptVersion, TransactionState, TxData, VerifyResult, VmIsa, VmState, VmVersion, }; pub use crate::verify::TransactionScriptsVerifier; pub use crate::verify_env::TxVerifyEnv; From 4610f6b2dd0c3efbea0af49a32c289b8ed0e711a Mon Sep 17 00:00:00 2001 From: mohanson Date: Mon, 24 Feb 2025 20:27:14 +0800 Subject: [PATCH 5/8] Add documents for DataLocation --- script/src/types.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/script/src/types.rs b/script/src/types.rs index a7c9cdfbac..127919f786 100644 --- a/script/src/types.rs +++ b/script/src/types.rs @@ -346,10 +346,14 @@ pub enum VmState { WaitForRead(ReadState), } +/// Used to specify the location of script data. #[derive(Clone, Debug)] pub struct DataLocation { + /// A pointer to the data. pub data_piece_id: DataPieceId, + /// Data offset. pub offset: u64, + /// Data length. pub length: u64, } From 032865768bc0cc1aee39809ddda9f59173a4a2a5 Mon Sep 17 00:00:00 2001 From: mohanson Date: Tue, 25 Feb 2025 17:36:07 +0800 Subject: [PATCH 6/8] script: refactored vmargs to accept a vector array to initialize the stack --- script/src/lib.rs | 2 +- script/src/scheduler.rs | 22 ++++++++++------------ script/src/types.rs | 7 +++++++ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/script/src/lib.rs b/script/src/lib.rs index d77f75b8ca..c50468a7c5 100644 --- a/script/src/lib.rs +++ b/script/src/lib.rs @@ -13,7 +13,7 @@ pub use crate::scheduler::{Scheduler, ROOT_VM_ID}; pub use crate::syscalls::generator::generate_ckb_syscalls; pub use crate::types::{ ChunkCommand, CoreMachine, DataLocation, DataPieceId, RunMode, ScriptGroup, ScriptGroupType, - ScriptVersion, TransactionState, TxData, VerifyResult, VmIsa, VmState, VmVersion, + ScriptVersion, TransactionState, TxData, VerifyResult, VmArgs, VmIsa, VmState, VmVersion, }; pub use crate::verify::TransactionScriptsVerifier; pub use crate::verify_env::TxVerifyEnv; diff --git a/script/src/scheduler.rs b/script/src/scheduler.rs index 348b5caeaa..dc6cc73e37 100644 --- a/script/src/scheduler.rs +++ b/script/src/scheduler.rs @@ -6,7 +6,7 @@ use crate::syscalls::{ use crate::types::{ CoreMachineType, DataLocation, DataPieceId, DebugContext, Fd, FdArgs, FullSuspendedState, - Machine, Message, ReadState, RunMode, SgData, VmContext, VmId, VmState, WriteState, + Machine, Message, ReadState, RunMode, SgData, VmArgs, VmContext, VmId, VmState, WriteState, FIRST_FD_SLOT, FIRST_VM_ID, }; use ckb_traits::{CellDataProvider, ExtensionProvider, HeaderProvider}; @@ -240,7 +240,7 @@ where offset: 0, length: u64::MAX, }, - None + VmArgs::Vector(vec![]), )?, ROOT_VM_ID ); @@ -401,7 +401,7 @@ where &mut new_machine, &args.location, program, - Some((vm_id, args.argc, args.argv)), + VmArgs::Reader(vm_id, args.argc, args.argv), )?; // The insert operation removes the old vm instance and adds the new vm instance. debug_assert!(self.instantiated.contains_key(&vm_id)); @@ -420,7 +420,7 @@ where continue; } let spawned_vm_id = - self.boot_vm(&args.location, Some((vm_id, args.argc, args.argv)))?; + self.boot_vm(&args.location, VmArgs::Reader(vm_id, args.argc, args.argv))?; // Move passed fds from spawner to spawnee for fd in &args.fds { self.fds.insert(*fd, spawned_vm_id); @@ -811,11 +811,7 @@ where } /// Boot a vm by given program and args. - pub fn boot_vm( - &mut self, - location: &DataLocation, - args: Option<(u64, u64, u64)>, - ) -> Result { + pub fn boot_vm(&mut self, location: &DataLocation, args: VmArgs) -> Result { let id = self.next_vm_id; self.next_vm_id += 1; let (context, mut machine) = self.create_dummy_vm(&id)?; @@ -848,16 +844,18 @@ where machine: &mut Machine, location: &DataLocation, program: Bytes, - args: Option<(u64, u64, u64)>, + args: VmArgs, ) -> Result { let metadata = parse_elf::(&program, machine.machine.version())?; let bytes = match args { - Some((vm_id, argc, argv)) => { + VmArgs::Reader(vm_id, argc, argv) => { let (_, machine_from) = self.ensure_get_instantiated(&vm_id)?; let argv = FlattenedArgsReader::new(machine_from.machine.memory_mut(), argc, argv); machine.load_program_with_metadata(&program, &metadata, argv)? } - None => machine.load_program_with_metadata(&program, &metadata, vec![].into_iter())?, + VmArgs::Vector(data) => { + machine.load_program_with_metadata(&program, &metadata, data.into_iter().map(Ok))? + } }; let mut sc = context.snapshot2_context.lock().expect("lock"); sc.mark_program( diff --git a/script/src/types.rs b/script/src/types.rs index 127919f786..063e3429ba 100644 --- a/script/src/types.rs +++ b/script/src/types.rs @@ -1012,6 +1012,13 @@ where } } +/// When the vm is initialized, arguments are loaded onto the stack. +/// This enum specifies how to locate these arguments. +pub enum VmArgs { + Reader(u64, u64, u64), + Vector(Vec), +} + /// Mutable data at virtual machine level #[derive(Clone)] pub struct VmContext
From 506133921b4ad3ab3e8962fc494efad5c75e483e Mon Sep 17 00:00:00 2001 From: mohanson Date: Wed, 26 Feb 2025 15:51:43 +0800 Subject: [PATCH 7/8] Give those fields names --- script/src/scheduler.rs | 18 ++++++++++++++---- script/src/types.rs | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/script/src/scheduler.rs b/script/src/scheduler.rs index dc6cc73e37..807b7ce5b2 100644 --- a/script/src/scheduler.rs +++ b/script/src/scheduler.rs @@ -401,7 +401,11 @@ where &mut new_machine, &args.location, program, - VmArgs::Reader(vm_id, args.argc, args.argv), + VmArgs::Reader { + vm_id, + argc: args.argc, + argv: args.argv, + }, )?; // The insert operation removes the old vm instance and adds the new vm instance. debug_assert!(self.instantiated.contains_key(&vm_id)); @@ -419,8 +423,14 @@ where machine.machine.set_register(A0, MAX_VMS_SPAWNED as u64); continue; } - let spawned_vm_id = - self.boot_vm(&args.location, VmArgs::Reader(vm_id, args.argc, args.argv))?; + let spawned_vm_id = self.boot_vm( + &args.location, + VmArgs::Reader { + vm_id, + argc: args.argc, + argv: args.argv, + }, + )?; // Move passed fds from spawner to spawnee for fd in &args.fds { self.fds.insert(*fd, spawned_vm_id); @@ -848,7 +858,7 @@ where ) -> Result { let metadata = parse_elf::(&program, machine.machine.version())?; let bytes = match args { - VmArgs::Reader(vm_id, argc, argv) => { + VmArgs::Reader { vm_id, argc, argv } => { let (_, machine_from) = self.ensure_get_instantiated(&vm_id)?; let argv = FlattenedArgsReader::new(machine_from.machine.memory_mut(), argc, argv); machine.load_program_with_metadata(&program, &metadata, argv)? diff --git a/script/src/types.rs b/script/src/types.rs index 063e3429ba..dbfa632484 100644 --- a/script/src/types.rs +++ b/script/src/types.rs @@ -1015,7 +1015,7 @@ where /// When the vm is initialized, arguments are loaded onto the stack. /// This enum specifies how to locate these arguments. pub enum VmArgs { - Reader(u64, u64, u64), + Reader { vm_id: u64, argc: u64, argv: u64 }, Vector(Vec), } From b2ad0299d452eb01cdce7fdba5dba6ce91a6958b Mon Sep 17 00:00:00 2001 From: mohanson Date: Wed, 26 Feb 2025 16:34:47 +0800 Subject: [PATCH 8/8] Add more documents --- script/src/types.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/script/src/types.rs b/script/src/types.rs index dbfa632484..812da09850 100644 --- a/script/src/types.rs +++ b/script/src/types.rs @@ -1014,8 +1014,18 @@ where /// When the vm is initialized, arguments are loaded onto the stack. /// This enum specifies how to locate these arguments. +#[derive(Clone, Debug, Eq, Hash, PartialEq)] pub enum VmArgs { - Reader { vm_id: u64, argc: u64, argv: u64 }, + /// Represents reading arguments from other vm. + Reader { + /// An identifier for the virtual machine/process. + vm_id: u64, + /// The number of arguments provided. + argc: u64, + /// The pointer of the actual arguments. + argv: u64, + }, + /// Represents reading arguments from a vector. Vector(Vec), }