以太坊EVM智能合约交易信息中Input和Logs解码

这篇具有很好参考价值的文章主要介绍了以太坊EVM智能合约交易信息中Input和Logs解码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、以太坊交易获取

以太坊交易获取一般通过两种方式:getTransaction、getTransactionReceipt
web3.eth.getTransaction:

{
  blockHash: '0x61b488038c4e08298b4970a50a07cd795bad6e84bd82f280fb1227b0ab4eb19c',
  blockNumber: 17835097,
  from: '0xF73d8f5BFb7f03b0AF375b1b5cF6581C367890e8',
  gas: 36922,
  gasPrice: '10000000000',
  hash: '0xb2e675f13b895e159d8a14ad39dae9ff90d043e459a1341481e196b1bcea98b6',
  input: '0x40c10f190000000000000000000000009c97efb29a3d453af239d133e867bf4c647a313c00000000000000000000000000000000000004ee2d6d415b85acef8100000000',
  nonce: 405,
  to: '0x20948400E68434010cFcfC978b66CFa656629D9b',
  transactionIndex: 7,
  value: '0',
  type: 0,
  v: '0xe6',
  r: '0x546e3662631e683574d098506604dda2ae13d1f10da6a25d60e462acb29f28b9',
  s: '0x548db669b21310288ace2e5a7557df78c3de83a037092de2328d65cad8ed8188'
}

web3.eth.getTransactionReceipt:

{
  blockHash: '0x61b488038c4e08298b4970a50a07cd795bad6e84bd82f280fb1227b0ab4eb19c',
  blockNumber: 17835097,
  contractAddress: null,
  cumulativeGasUsed: 753442,
  from: '0xf73d8f5bfb7f03b0af375b1b5cf6581c367890e8',
  gasUsed: 36922,
  logs: [
    {
      address: '0x20948400E68434010cFcfC978b66CFa656629D9b',
      topics: [Array],
      data: '0x00000000000000000000000000000000000004ee2d6d415b85acef8100000000',
      blockNumber: 17835097,
      transactionHash: '0xb2e675f13b895e159d8a14ad39dae9ff90d043e459a1341481e196b1bcea98b6',
      transactionIndex: 7,
      blockHash: '0x61b488038c4e08298b4970a50a07cd795bad6e84bd82f280fb1227b0ab4eb19c',
      logIndex: 11,
      removed: false,
      id: 'log_b7283928'
    }
  ],
  logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408000000000000000000000000000000000000000000000000020000000000000000000800004000000000000000000010000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000002000000000000000800000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000',
  status: true,
  to: '0x20948400e68434010cfcfc978b66cfa656629d9b',
  transactionHash: '0xb2e675f13b895e159d8a14ad39dae9ff90d043e459a1341481e196b1bcea98b6',
  transactionIndex: 7,
  type: '0x0'
}

二、使用abi-parser解析input和logs

abi-parser 是一个用于解析ethereum/web3 日志、事件和方法的 NodeJS/JS 库。文章来源地址https://www.toymoban.com/news/detail-550337.html

安装

npm i abi-parser

实例

const AbiParser = require('abi-parser');
const abiParser = new AbiParser();

// Add the abis
const testABI1 = [
    {
        "inputs":[
            {
                "type":"address",
                "name":""
            }
        ],
        "constant":true,
        "name":"isInstantiation",
        "payable":false,
        "outputs":[
            {
                "type":"bool",
                "name":""
            }
        ],
        "type":"function"
    },
    {
        "inputs":[
            {
                "type":"address[]",
                "name":"_owners"
            },
            {
                "type":"uint256",
                "name":"_required"
            },
            {
                "type":"uint256",
                "name":"_dailyLimit"
            }
        ],
        "constant":false,
        "name":"create",
        "payable":false,
        "outputs":[
            {
                "type":"address",
                "name":"wallet"
            }
        ],
        "type":"function"
    },
    {
        "inputs":[
            {
                "type":"address",
                "name":""
            },
            {
                "type":"uint256",
                "name":""
            }
        ],
        "constant":true,
        "name":"instantiations",
        "payable":false,
        "outputs":[
            {
                "type":"address",
                "name":""
            }
        ],
        "type":"function"
    },
    {
        "inputs":[
            {
                "type":"address",
                "name":"creator"
            }
        ],
        "constant":true,
        "name":"getInstantiationCount",
        "payable":false,
        "outputs":[
            {
                "type":"uint256",
                "name":""
            }
        ],
        "type":"function"
    },
    {
        "inputs":[
            {
                "indexed":false,
                "type":"address",
                "name":"sender"
            },
            {
                "indexed":false,
                "type":"address",
                "name":"instantiation"
            }
        ],
        "type":"event",
        "name":"ContractInstantiation",
        "anonymous":false
    }
]
const testABI2 = [
    {
        "anonymous":false,
        "inputs":[
            {
                "indexed":true,
                "internalType":"address",
                "name":"from",
                "type":"address"
            },
            {
                "indexed":true,
                "internalType":"address",
                "name":"to",
                "type":"address"
            },
            {
                "indexed":false,
                "internalType":"uint256",
                "name":"value",
                "type":"uint256"
            }
        ],
        "name":"Transfer",
        "type":"event"
    }
];

abiParser.addABI(testABI1);
abiParser.addABI(testABI2);



// Decode an encoded method
const testMethod = "0x53d9d91000000000000000000000000000000000000000000000000000000000000000
6000000000000000000000000000000000000000000000000000000000000000010000000
0000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000002000000000000000000000000a
6d9c5f7d4de3cef51ad3b7235d79ccc95114de5000000000000000000000000a6d9c5f7d4
de3cef51ad3b7235d79ccc95114daa";
const decodedMethod = abiParser.decodeMethod(testMethod, true);
console.log('Decoded Method:', decodedMethod);




//Decode an encoded log
const testLog = {
    "address":"0x8076C74C5e3F5852037F31Ff0093Eeb8c8ADd8D3",
    "topics":[
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
        "0x000000000000000000000000ff3dd404afba451328de089424c74685bf0a43c9",
        "0x0000000000000000000000008591aa322b6ce54a781b025a594fcf5b0cc20d22"
    ],
    "data":"0x000000000000000000000000000000000000000000000000005af314c8ef9900",
    "blockNumber":11951393,
    "transactionHash":"0x7a125d37e18a3f37924970a08f0449a82be1cf15fabdf7631dbdc221330fba41",
    "transactionIndex":67,
    "blockHash":"0x5a0837ffcd732c23974878d70e4e3742299b34e05f1e1e4c14cf12fd5b4431ef",
    "logIndex":155,
    "removed":false,
    "id":"log_bd721dfd"
};


const decodedLog = abiParser.decodeLog(testLog, true);
console.log('Decoded Log:', decodedLog);

到了这里,关于以太坊EVM智能合约交易信息中Input和Logs解码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(49)
  • 1-完全理解以太坊智能合约

    区块链技术的核心概念是分布式账本,它是许多参与者共享的特定类型的数据库。 这个特殊的数据库只是一个交易列表,记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份,再加上强有力的货币激励措施消除各方之间信任成本。 使用区块链,可以把信任

    2024年02月04日
    浏览(44)
  • 以太坊 – 部署智能合约到Ganache

    目录 1. Ganache本地区块链 1.1 主界面 1.2 设置 2. 开发智能合约 2.1 初始化项目 2.2 添加package.json文件 2.3 添加智能合约源文件 2.4 编译项目 3. 部署智能合约到Ganache 3.1 更新配置文件 3.2 创建迁移脚本  3.3 执行迁移命令 首先启动Ganache,创建本地的以太坊区块链网络。 本地

    2024年02月16日
    浏览(53)
  • go语言操作以太坊智能合约

    操作中要注意版本问题 geth版本、golang版本等 在remix环境中写好合约后,进行编译得到abi文件 简单举例 Hello.sol合约 编译后abi文件(Hello.abi)内容 然后需要一个 abigen工具 可以将abi、bin等编译后的智能合约文件内容生成go代码 abigen可以在geth官网下载geth的时候下载GethTools版本

    2024年02月09日
    浏览(37)
  • 以太坊智能合约语言Solidity - 3 数组

    1字节(Byte) = 8位 (bit), bytes32 = 256位,bytes1 实质上就等于 int8 固定长度的数组一旦被定义就无法再更改,并且长度在一开始就会被显式定义 我们再来创建一个新的文件用来编写代码 字节数组无法进行基本运算,但是可以比较 字节数组还支持其他一些逻辑运算,具体计算结果

    2023年04月08日
    浏览(62)
  • 以太坊–智能合约开发介绍及环境搭建

    目录 1. 智能合约的概念 2. 智能合约的优点  3. 智能合约开发 3.1 支持智能合约的区块链 3.2 以太坊智能合约开发工具 3.3 以太坊智能合约开发语言 4. 智能合约开发环境搭建 4.1 准备工作 4.2 Node 与 NPM 4.3 Truffle 框架 4.4 Ganache 4.5 Metamask 4.6 VS code 与 Solidity插件 智能合约 (

    2024年02月05日
    浏览(45)
  • 第四章 以太坊智能合约solidity介绍

    Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言,设计的目的是能在以太坊虚拟机上运行。 本章大概介绍合约的基本信息,合约的组成,语法方面不做过多的介绍,个人建议多阅读官方文档效果更佳,后续的章节会开发ERC20代币合约案例以便于更好的学习智

    2024年02月06日
    浏览(52)
  • 以太坊 – 使用truffle console访问智能合约

    🍁 博主简介 :         🏅云计算领域优质创作者         🏅2022年CSDN新星计划python赛道第一名         🏅2022年CSDN原力计划优质作者         🏅阿里云ACE认证高级工程师         🏅阿里云开发者社区专家博主 💊 交流社区 :CSDN云计算交流社区欢迎您的

    2024年02月02日
    浏览(48)
  • 以太坊智能合约开发:Solidity 语言快速入门

    在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识。最后,我们将该智能合约样例在 Remix 合约编译器中编译、部署,观察其执行结果。 在开始之前,我们先对Solidity有个初步的了解,即Solidity是

    2023年04月09日
    浏览(51)
  • 11M 以太坊 ethereum OpenZeppelin : 开发智能合约

    • 设置项目 • 第一份合同 • 编译 Solidity • 添加更多合约 • 使用 OpenZeppelin 合约 • OpenZeppelin Tutorials 教程 • Contact 联系方式 创建项目后的第一步是安装开发工具。 以太坊最流行的开发框架是Hardhat,我们用ethers.js介绍了它最常见的用途。下一个最受欢迎的是使用web3.js的

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包