diff --git a/ethers-core/src/types/trace/geth.rs b/ethers-core/src/types/trace/geth.rs index a65c0c04..d18632c9 100644 --- a/ethers-core/src/types/trace/geth.rs +++ b/ethers-core/src/types/trace/geth.rs @@ -1,5 +1,5 @@ use crate::types::{Bytes, H256, U256}; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize, Serializer}; use std::collections::BTreeMap; // https://github.com/ethereum/go-ethereum/blob/a9ef135e2dd53682d106c6a2aede9187026cc1de/eth/tracers/logger/logger.go#L406-L411 @@ -7,7 +7,7 @@ use std::collections::BTreeMap; pub struct GethTrace { pub failed: bool, pub gas: u64, - #[serde(rename = "returnValue")] + #[serde(serialize_with = "serialize_bytes", rename = "returnValue")] pub return_value: Bytes, #[serde(rename = "structLogs")] pub struct_logs: Vec, @@ -54,3 +54,11 @@ pub struct GethDebugTracingOptions { #[serde(default, skip_serializing_if = "Option::is_none")] pub timeout: Option, } + +fn serialize_bytes(x: T, s: S) -> Result +where + S: Serializer, + T: AsRef<[u8]>, +{ + s.serialize_str(&hex::encode(x.as_ref())) +}