RUST:如何从 ethers 库的 U256 结构中打印十六进制字符串?

问题描述 投票:0回答:0

我正在使用 RUST 和 crate

ethers
通过从 EVM 链读取日志,我正在处理交易哈希和地址。这些表示为
U256
H160
对象。考虑下面的示例代码:

use ethers::prelude::{Log};
use ethers::types::{Address, H160, H256, U256};

async fn print_log_details(&self, log: &Log) {
    let block_number = log.block_number.unwrap();
    let from: H160 = Address::from(log.topics[1]);
    let to: H160 = Address::from(log.topics[2]);
    let token_id: U256 = U256::decode(log.topics[3]).unwrap();
    let transaction_hash: H256 = log.transaction_hash.unwrap();

    dbg!(log.clone());
    println!(
        "block_number = {}, from = {}, to = {}, tokenId = {}, transactionHash = {}",
        block_number, from, to, token_id, transaction_hash
    );
}

像这样生成输出:

[src/main.rs:54] log.clone() = Log {
address: 0x7ea3cca10668b8346aec0bf1844a49e995527c8b,
topics: [
    0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,
    0x000000000000000000000000603503a11a37acb6e9d8ff2423c29d135255df49,
    0x0000000000000000000000004a6ead6446265533b6b5257bbfb450e1cdfae5ec,
    0x0000000000000000000000000000000000000000000000000000000000000bf5,
],
data: Bytes(0x),
block_hash: Some(
    0xd6da518349a24d4414163bd4b51678c7b8629bd8e0fa9b59e57fcbe2a8e93a98,
),
block_number: Some(
    13032069,
),
transaction_hash: Some(
    0xa520f3d255140abeb8cec33764a3a1c0ccbcf9496a934e25f1bbf004667cbddf,
),
transaction_index: Some(
    383,
),
log_index: Some(
    321,
),
transaction_log_index: None,
log_type: None,
removed: Some(
    false,
),
}

block_number = 13032069, from = 0x6035…df49, to = 0x4a6e…e5ec, tokenId = 3061, transactionHash = 0xa520…bddf

我希望看到 println 中的

from
to
transaction
的完整十六进制形式,而不是这种截断形式。我怎样才能做到这一点?似乎这些结构上的
Display
特征正在截断输出。

rust hex byte
© www.soinside.com 2019 - 2024. All rights reserved.