mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-08-27 04:11:08 +00:00
fix(lee): address PR #733 review comments
- RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID: restore the SHA256 derivation docstring that explains the constant instead of leaving it as an opaque byte array, and switch the array itself to a hex literal (hex-literal, already a workspace dependency) for readability. - Rename the loader/loader_core crate to program_loader/program_loader_core to disambiguate it, across the directory, package name, workspace members/dependency alias, both dependent crates, and every call site.
This commit is contained in:
Generated
+15
-14
@@ -5595,8 +5595,8 @@ dependencies = [
|
||||
"hex-literal 1.1.0",
|
||||
"k256 0.13.4",
|
||||
"lee_core",
|
||||
"loader_core",
|
||||
"log",
|
||||
"program_loader_core",
|
||||
"rand 0.8.6",
|
||||
"risc0-binfmt",
|
||||
"risc0-zkvm",
|
||||
@@ -5617,6 +5617,7 @@ dependencies = [
|
||||
"bytemuck",
|
||||
"bytesize",
|
||||
"chacha20",
|
||||
"hex-literal 1.1.0",
|
||||
"ml-kem",
|
||||
"risc0-zkvm",
|
||||
"serde",
|
||||
@@ -6366,18 +6367,6 @@ version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
|
||||
|
||||
[[package]]
|
||||
name = "loader_core"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"borsh",
|
||||
"bytemuck",
|
||||
"lee_core",
|
||||
"risc0-binfmt",
|
||||
"risc0-zkvm",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.14"
|
||||
@@ -9415,6 +9404,18 @@ dependencies = [
|
||||
"wallet",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "program_loader_core"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"borsh",
|
||||
"bytemuck",
|
||||
"lee_core",
|
||||
"risc0-binfmt",
|
||||
"risc0-zkvm",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "programs"
|
||||
version = "0.1.0"
|
||||
@@ -10987,7 +10988,6 @@ dependencies = [
|
||||
"lee",
|
||||
"lee_core",
|
||||
"libp2p",
|
||||
"loader_core",
|
||||
"log",
|
||||
"logos-blockchain-core",
|
||||
"logos-blockchain-http-api-common",
|
||||
@@ -10996,6 +10996,7 @@ dependencies = [
|
||||
"mempool",
|
||||
"num-bigint 0.4.6",
|
||||
"ping_core",
|
||||
"program_loader_core",
|
||||
"programs",
|
||||
"rand 0.8.6",
|
||||
"risc0-binfmt",
|
||||
|
||||
+2
-2
@@ -57,7 +57,7 @@ members = [
|
||||
"lez/programs/ping_sender",
|
||||
"lez/programs/ping_receiver",
|
||||
"lez/programs/sequencer_stake",
|
||||
"lez/programs/loader/core",
|
||||
"lez/programs/program_loader/core",
|
||||
"lez/cross_zone",
|
||||
|
||||
"test_programs",
|
||||
@@ -125,7 +125,7 @@ bridge_lock_core = { path = "lez/programs/bridge_lock/core" }
|
||||
wrapped_token_core = { path = "lez/programs/wrapped_token/core" }
|
||||
ping_core = { path = "lez/programs/ping_core" }
|
||||
sequencer_stake_core = { path = "lez/programs/sequencer_stake/core" }
|
||||
loader_core = { path = "lez/programs/loader/core" }
|
||||
program_loader_core = { path = "lez/programs/program_loader/core" }
|
||||
cross_zone = { path = "lez/cross_zone" }
|
||||
build_utils = { path = "build_utils" }
|
||||
test_programs = { path = "test_programs" }
|
||||
|
||||
@@ -22,7 +22,7 @@ hex.workspace = true
|
||||
k256.workspace = true
|
||||
risc0-binfmt = "3.0.2"
|
||||
log.workspace = true
|
||||
loader_core.workspace = true
|
||||
program_loader_core.workspace = true
|
||||
|
||||
[build-dependencies]
|
||||
build_utils.workspace = true
|
||||
|
||||
@@ -18,6 +18,7 @@ bytesize.workspace = true
|
||||
base58.workspace = true
|
||||
ml-kem = { workspace = true }
|
||||
chacha20 = { version = "0.10" }
|
||||
hex-literal = "1.0.0"
|
||||
|
||||
[dev-dependencies]
|
||||
serde_json.workspace = true
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use borsh::{BorshDeserialize, BorshSerialize};
|
||||
use hex_literal::hex;
|
||||
use risc0_zkvm::{DeserializeOwned, guest::env, serde::Deserializer};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -19,10 +20,12 @@ pub const DEFAULT_PROGRAM_OWNER: AccountId = AccountId::new([0; 32]);
|
||||
/// `program_owner` for program `Account`s.
|
||||
pub const PROGRAM_STORAGE_OWNER: AccountId = AccountId::new([0xFF; 32]);
|
||||
|
||||
pub const RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID: AccountId = AccountId::new([
|
||||
89, 158, 44, 108, 43, 137, 255, 57, 188, 48, 148, 179, 39, 111, 31, 202, 167, 23, 56, 0, 167,
|
||||
29, 152, 150, 161, 186, 155, 209, 69, 138, 145, 201,
|
||||
]);
|
||||
/// Reserved `AccountId` for the native "Deploy" dispatch shortcut.
|
||||
///
|
||||
/// `SHA256("/LEE/v0.3/AccountId/State/" || "DeploymentProgram")`, each padded to 32 bytes.
|
||||
pub const RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID: AccountId = AccountId::new(hex!(
|
||||
"599e2c6c2b89ff39bc3094b3276f1fcaa7173800a71d9896a1ba9bd1458a91c9"
|
||||
));
|
||||
|
||||
pub const MAX_NUMBER_CHAINED_CALLS: usize = 10;
|
||||
|
||||
|
||||
@@ -129,13 +129,13 @@ impl ValidatedStateDiff {
|
||||
== RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID
|
||||
{
|
||||
// Runs `Deploy` as native Rust instead of interpreting a guest ELF.
|
||||
let loader_core::Instruction::Deploy { bytecode } =
|
||||
let program_loader_core::Instruction::Deploy { bytecode } =
|
||||
risc0_zkvm::serde::from_slice(&chained_call.instruction_data).map_err(|e| {
|
||||
LeeError::InvalidInput(format!("invalid Deploy instruction: {e}"))
|
||||
})?;
|
||||
let deploy_pre_states = chained_call.pre_states.clone();
|
||||
let post_states = std::panic::catch_unwind(|| {
|
||||
loader_core::execute_deploy(program_id, deploy_pre_states, bytecode)
|
||||
program_loader_core::execute_deploy(program_id, deploy_pre_states, bytecode)
|
||||
})
|
||||
.map_err(|_panic_payload| {
|
||||
LeeError::ProgramExecutionFailed("Deploy rejected the given input".into())
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "loader_core"
|
||||
name = "program_loader_core"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
license = { workspace = true }
|
||||
@@ -70,5 +70,5 @@ lee = { workspace = true, features = ["test-utils"] }
|
||||
key_protocol.workspace = true
|
||||
token_core.workspace = true
|
||||
ping_core.workspace = true
|
||||
loader_core.workspace = true
|
||||
program_loader_core.workspace = true
|
||||
risc0-binfmt.workspace = true
|
||||
|
||||
@@ -3672,7 +3672,7 @@ fn deploy_transaction(target: AccountId, bytecode: Vec<u8>) -> PublicTransaction
|
||||
loader_id.into(),
|
||||
vec![target],
|
||||
vec![],
|
||||
loader_core::Instruction::Deploy { bytecode },
|
||||
program_loader_core::Instruction::Deploy { bytecode },
|
||||
)
|
||||
.unwrap();
|
||||
let witness_set = lee::public_transaction::WitnessSet::for_message(&message, &[]);
|
||||
@@ -3686,7 +3686,8 @@ fn loader_deploys_program() {
|
||||
|
||||
let bytecode = test_programs::claimer().elf().to_vec();
|
||||
let image_id: ProgramId = risc0_binfmt::compute_image_id(&bytecode).unwrap().into();
|
||||
let target = loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
let target =
|
||||
program_loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
|
||||
assert_eq!(state.get_account_by_id(target), Account::default());
|
||||
|
||||
@@ -3701,7 +3702,7 @@ fn loader_deploys_program() {
|
||||
RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID
|
||||
);
|
||||
|
||||
let program_data = loader_core::ProgramData::try_from(&deployed.data)
|
||||
let program_data = program_loader_core::ProgramData::try_from(&deployed.data)
|
||||
.expect("deployed account data should decode as ProgramData");
|
||||
assert_eq!(program_data.image_id, image_id);
|
||||
assert_eq!(program_data.segment_number, 0);
|
||||
@@ -3716,7 +3717,8 @@ fn loader_rejects_redeploying_an_already_deployed_program() {
|
||||
|
||||
let bytecode = test_programs::claimer().elf().to_vec();
|
||||
let image_id: ProgramId = risc0_binfmt::compute_image_id(&bytecode).unwrap().into();
|
||||
let target = loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
let target =
|
||||
program_loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
|
||||
let tx = deploy_transaction(target, bytecode.clone());
|
||||
state
|
||||
@@ -3774,14 +3776,15 @@ fn loader_rejects_wrong_number_of_accounts() {
|
||||
|
||||
let bytecode = test_programs::claimer().elf().to_vec();
|
||||
let image_id: ProgramId = risc0_binfmt::compute_image_id(&bytecode).unwrap().into();
|
||||
let target = loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
let target =
|
||||
program_loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
let extra = AccountId::new([9; 32]);
|
||||
|
||||
let message = lee::public_transaction::Message::try_new(
|
||||
loader_id.into(),
|
||||
vec![target, extra],
|
||||
vec![],
|
||||
loader_core::Instruction::Deploy { bytecode },
|
||||
program_loader_core::Instruction::Deploy { bytecode },
|
||||
)
|
||||
.unwrap();
|
||||
let witness_set = lee::public_transaction::WitnessSet::for_message(&message, &[]);
|
||||
@@ -3818,10 +3821,11 @@ fn loader_deploys_program_via_chained_call() {
|
||||
|
||||
let bytecode = test_programs::claimer().elf().to_vec();
|
||||
let image_id: ProgramId = risc0_binfmt::compute_image_id(&bytecode).unwrap().into();
|
||||
let target = loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
let target =
|
||||
program_loader_core::deploy_account_id(loader_id, image_id, 0, AccountId::default());
|
||||
|
||||
let inner_instruction_data =
|
||||
lee::program::Program::serialize_instruction(loader_core::Instruction::Deploy {
|
||||
lee::program::Program::serialize_instruction(program_loader_core::Instruction::Deploy {
|
||||
bytecode: bytecode.clone(),
|
||||
})
|
||||
.unwrap();
|
||||
@@ -3846,7 +3850,7 @@ fn loader_deploys_program_via_chained_call() {
|
||||
RESERVED_DEPLOYMENT_PROGRAM_ACCOUNT_ID
|
||||
);
|
||||
|
||||
let program_data = loader_core::ProgramData::try_from(&deployed.data)
|
||||
let program_data = program_loader_core::ProgramData::try_from(&deployed.data)
|
||||
.expect("deployed account data should decode as ProgramData");
|
||||
assert_eq!(program_data.image_id, image_id);
|
||||
assert_eq!(program_data.elf_segment, bytecode);
|
||||
|
||||
Reference in New Issue
Block a user