尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

逆向0x与1inch链上订单逻辑:ethereum-input-data-decoder解码DEX交易实战

逆向0x与1inch链上订单逻辑:ethereum-input-data-decoder解码DEX交易实战 逆向0x与1inch链上订单逻辑ethereum-input-data-decoder解码DEX交易实战【免费下载链接】ethereum-input-data-decoderEthereum smart contract transaction input data decoder项目地址: https://gitcode.com/gh_mirrors/et/ethereum-input-data-decoderethereum-input-data-decoder 是一款开源的以太坊智能合约交易输入数据解码器Ethereum smart contract transaction input data decoder。它能把你看到的一长串 0x 开头的十六进制字符串还原成可读的函数名、参数名和参数值。本文用项目中真实收录的 0x 与 1inch 两条 DEX 交易做实战带你逆向链上订单的完整逻辑 为什么解码 DEX 交易需要它在链上浏览一笔交易时input字段通常长这样0x7e1d98080000000000000000000000000000000000000000000000000000000000000060...对人来说毫无意义但对以太坊合约来说这就是函数调用说明书前 4 字节函数选择器selector由keccak256(方法签名)的前 4 字节得到剩余字节按照 ABI 编码规则打包的参数ethereum-input-data-decoder 的核心工作就是拿着合约的ABI 文件用前 4 字节匹配出是哪个方法再按 ABI 规则把参数逐个解包。源码入口在 index.js核心方法decodeData的逻辑非常清晰——遍历 ABI 里的每个方法用genMethodId生成选择器比对命中后调用 ethers 的defaultAbiCoder.decode完成解码。 想生成 ABI用 Solidity 编译器即可solc --abi MyContract.sol -o build快速上手一条命令完成解码通过 npm 安装后即可在终端直接使用无需写任何代码npm install -g ethereum-input-data-decoderCLI 的使用方式很简单只需提供 ABI 文件和输入数据支持文件、字符串、管道三种方式命令实现见 cli.jsethereum_input_data_decoder --abi token.abi 0x23b872dd...解码成功后终端会输出对齐整齐的表格方法名 每个参数的类型、名称、值。类型定义TypeScript在 index.d.ts 中返回结构固定为method / types / inputs / names四个字段方便程序化处理。实战一逆向 0x 的 marketSellOrders 卖单项目中收录了一笔真实的 0x 交易所卖单涉及ABIEncoderV2 的 tuple[] 结构DEX 订单数组正是典型场景。数据文件ABItest/data/0x_exchange.json交易输入数据test/data/0x_exchange_data.txt对应测试用例test/index.js解码结果还原出的订单逻辑一目了然字段值含义methodmarketSellOrders市价卖出订单makerAddress0x6f02E6d4...下单者挂单方makerAssetAmount4.65 WETH卖出数量takerAssetAmount约 423,833 DAI期望收入expirationTimeSeconds1566855042订单过期时间salt0x016d1e79ae50随机盐值防订单哈希碰撞makerAssetData / takerAssetData0xf47261b0.../0xf47261b0...资产标识0x 的 assetData 编码一个关键细节订单本体被编码成tuple[]订单结构体数组解码器会把嵌套结构自动拍平成数组names字段中 tuple 表示为[名称, [子字段名...]]的二级结构。测试代码里还能看到takerAssetFillAmount本次实际成交 2,500 DAI和signaturesEIP-712 签名这正是 0x 协议链下签名、链上撮合设计的证据 实战二逆向 1inch 的 swap 调用1inch V2 的测试数据同样收录在项目中ABItest/data/1inch_exchange_v2_abi.json含 WETH 路由的输入test/data/1inch_exchange_v2_abi_with_eth.txt纯 ERC20 路由的输入test/data/1inch_exchange_v2_abi_no_eth.txt解码后得到三个参数caller调用者地址desc订单描述结构体srcToken / dstToken / amount / minReturnAmount / guaranteedAmount / flags / referrer / permitcalls多跳调用数组每一步的targetWithMandatory / gasLimit / value / data以无 WETH 的交易为例用户以19.6 USDC买入0xF970b8...代币calls数组里藏着完整的路由链——USDC 授权、1inch Router 执行、中间池子 swap、最后safeTransfer到收款地址。每步的data字段本身就是一段新的 calldata可以递归解码这正是 DEX 路由逆向的核心玩法。测试代码见 test/index.js作者特意区分了路由中走 WETH与纯 ERC20两种情况因为 WETH 的permit签名会让参数编码产生差异。新手避坑指南 大数用 BN 表示所有uint256都返回 bn.js 的 BigNumber防止精度丢失。展示时记得toString(10)转十进制直接toNumber()超大数会报错tuple 编码规则types里 tuple 表示为(uint256,address)形式的字符串inputs里则是数组嵌套 tuple[] 会被递归拍平ABIEncoderV2支持但偶有 bug0x/1inch 的 tuple 场景已修复遇到问题可提交 issue找不到匹配方法CLI 会输出No matches通常是 ABI 版本不对或该交易是合约创建合约创建数据可用decodeConstructor解码ABI 从哪来合约官方文档、区块链浏览器或用 solc 从源码编译生成项目结构速览文件作用index.js解码核心选择器匹配 ABI 解码 tuple 拍平cli.js命令行入口格式化输出解码结果index.d.tsTypeScript 类型定义InputData接口test/index.js含 0x、1inch、Set Protocol 等真实交易用例test/data/各类 ABI 与真实链上输入数据样本example/main.js浏览器端使用示例想要更多真实样本test/data/ 目录下还有 ERC721 转账test/data/erc721_abi.json、Set Protocol 再平衡test/data/set_issuance.txt、Solo Margin 可支付代理等数十份数据配合 README.md 中的 FAQ 基本能覆盖绝大多数解码场景。小结ethereum-input-data-decoder 让 DEX 交易逆向从读天书变成查表格给它一份 ABI 和一串 input它就能告诉你这是谁的订单、买卖什么、金额多少、走哪条路由。对于链上数据分析师、反洗钱AML工具和交易监控开发者来说这是解码以太坊 calldata 最轻量的选择之一 ✅【免费下载链接】ethereum-input-data-decoderEthereum smart contract transaction input data decoder项目地址: https://gitcode.com/gh_mirrors/et/ethereum-input-data-decoder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表