diff --git a/crates/generator/src/generator.rs b/crates/generator/src/generator.rs index e0e9ecaac..8f8417e5a 100644 --- a/crates/generator/src/generator.rs +++ b/crates/generator/src/generator.rs @@ -50,6 +50,7 @@ use ckb_vm::{DefaultMachineBuilder, SupportMachine}; #[cfg(not(has_asm))] use ckb_vm::TraceMachine; +use gw_utils::script_log::GW_LOG_POLYJUICE_SYSTEM; use tracing::instrument; pub struct ApplyBlockArgs { @@ -641,6 +642,7 @@ impl Generator { } } else { // revert tx + let last_run_result_log = run_result.write.logs.pop(); run_result.revert_write(); // sender address @@ -683,6 +685,12 @@ impl Generator { TypedRawTransaction::Meta(tx) => tx.consumed(), TypedRawTransaction::SimpleUDT(tx) => tx.consumed(), TypedRawTransaction::Polyjuice(ref tx) => { + // push polyjuice system log back to run_result + if let Some(log) = last_run_result_log + .filter(|log| log.service_flag() == GW_LOG_POLYJUICE_SYSTEM.into()) + { + run_result.write.logs.push(log); + } let args = tx.extract_tx_args().ok_or(TransactionError::NoCost)?; let gas_used = match read_polyjuice_gas_used(&run_result) { Some(gas_used) => gas_used, @@ -769,6 +777,7 @@ fn build_challenge_target( fn read_polyjuice_gas_used(run_result: &RunResult) -> Option { // read polyjuice system log match run_result + .write .logs .iter() .find(|item| u8::from(item.service_flag()) == gw_utils::script_log::GW_LOG_POLYJUICE_SYSTEM) diff --git a/crates/generator/src/syscalls/mod.rs b/crates/generator/src/syscalls/mod.rs index a6da08089..181779511 100644 --- a/crates/generator/src/syscalls/mod.rs +++ b/crates/generator/src/syscalls/mod.rs @@ -434,7 +434,7 @@ impl<'a, S: State, C: ChainView, Mac: SupportMachine> Syscalls for L2Syscal let data_addr = machine.registers()[A3].to_u64(); let data = load_bytes(machine, data_addr, data_len as usize)?; - self.result.logs.push( + self.result.write.logs.push( LogItem::new_builder() .account_id(account_id.pack()) .service_flag(service_flag.into()) diff --git a/crates/jsonrpc-types/src/godwoken.rs b/crates/jsonrpc-types/src/godwoken.rs index 951ba704e..2bfccb478 100644 --- a/crates/jsonrpc-types/src/godwoken.rs +++ b/crates/jsonrpc-types/src/godwoken.rs @@ -1169,11 +1169,11 @@ pub struct RunResult { impl From for RunResult { fn from(data: offchain::RunResult) -> RunResult { let offchain::RunResult { - return_data, logs, .. + return_data, write, .. } = data; RunResult { return_data: JsonBytes::from_bytes(return_data), - logs: logs.into_iter().map(Into::into).collect(), + logs: write.logs.into_iter().map(Into::into).collect(), } } } diff --git a/crates/rpc-server/src/registry.rs b/crates/rpc-server/src/registry.rs index 6e351c133..3891edb63 100644 --- a/crates/rpc-server/src/registry.rs +++ b/crates/rpc-server/src/registry.rs @@ -795,7 +795,7 @@ async fn execute_l2transaction( tx_hash: tx_hash.into(), block_number: number, return_data: run_result.return_data, - last_log: run_result.logs.pop(), + last_log: run_result.write.logs.pop(), exit_code: run_result.exit_code, }; @@ -904,7 +904,7 @@ async fn execute_raw_l2transaction( tx_hash, block_number, return_data: run_result.return_data, - last_log: run_result.logs.pop(), + last_log: run_result.write.logs.pop(), exit_code: run_result.exit_code, }; diff --git a/crates/types/src/offchain/extension.rs b/crates/types/src/offchain/extension.rs index 2914a1f2b..7af55d482 100644 --- a/crates/types/src/offchain/extension.rs +++ b/crates/types/src/offchain/extension.rs @@ -46,7 +46,7 @@ impl TxReceipt { .collect::>() .pack(), ) - .logs(run_result.logs.pack()) + .logs(run_result.write.logs.pack()) .build() } } diff --git a/crates/types/src/offchain/run_result.rs b/crates/types/src/offchain/run_result.rs index 737890ca2..2b0ae89c8 100644 --- a/crates/types/src/offchain/run_result.rs +++ b/crates/types/src/offchain/run_result.rs @@ -16,6 +16,8 @@ pub struct RunResultWriteState { pub account_count: Option, pub new_scripts: HashMap, pub write_data: HashMap, + // log data + pub logs: Vec, } #[derive(Debug, Clone, Default)] @@ -26,8 +28,6 @@ pub struct RunResult { pub get_scripts: HashMap, // data hash -> data full size pub read_data: HashMap, - // log data - pub logs: Vec, // used cycles pub used_cycles: u64, pub exit_code: i8,