{"content":{"title":"WhatsABI 简介","body":"# WhatsABI 简介\r\n从 EVM 字节码中猜测出 ABI（和其他元数据），即使没有源代码。[Github](https://github.com/shazow/whatsabi)\r\n\r\n## 特点\r\nWhatsABI 在一些重要方面与其他 EVM 分析工具不同：\r\n- 使用 TypeScript 构建，依赖最小化，以便在浏览器中运行并嵌入钱包中\r\n- 所使用的算法仅限于具有较小常数因子的算法，以确保复杂的合同不会导致超时或使用无限内存\r\n- 不依赖于源代码，因此可以与未经验证的合约一起使用。\r\n- 不假设源语言，因此可以适用于除 Solidity（Vyper，甚至手写汇编）之外的源语言\r\n- 开放源代码（MIT 许可证），以便任何人都可以使用它\r\n\r\n## 可以做什么\r\n- 从字节码返回选择器\r\n- 从选择器中查找函数签名\r\n- 解决代理合同\r\n\r\n## 使用方法\r\n### 安装\r\n```\r\nyarn add @shazow/whatsabi ethers\r\n```\r\n\r\n### 使用\r\n```\r\nimport { ethers } from \"ethers\";\r\nimport { whatsabi } from \"@shazow/whatsabi\";\r\n\r\n// Or your fav contract address\r\nconst address = \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"; // USDC\r\n\r\n\r\nlet result = await whatsabi.autoload(address, {\r\n  provider: new ethers.getDefaultProvider(),\r\n\r\n  // * Optional loaders:\r\n  abiLoader: whatsabi.loaders.defaultABILoader,\r\n  signatureLoader: whatsabi.loaders.defaultSignatureLookup,\r\n\r\n  // * Optional hooks:\r\n  // onProgress: (phase: string) => { ... }\r\n  // onError: (phase: string, context: any) => { ... }\r\n\r\n  // * Optional settings:\r\n  followProxies: true,\r\n  // enableExperimentalMetadata: false,\r\n});\r\n\r\nconsole.log(result);\r\n```\r\n控制台将打印合约地址、abi 等数据\r\n\r\n（完整项目见 [whatsabi](https://github.com/0xdwong/blockchain/tree/main/whatsabi)）\r\n\r\n### 其它方法\r\n- `selectorsFromBytecode`:  从合约字节码中获取函数选择器  \r\n    whatsabi.selectorsFromBytecode(code)\r\n- `abiFromBytecode`： 从合约字节码中获取 ABI  \r\n    whatsabi.abiFromBytecode(code)\r\n- `loadFunctions`： 获取函数选择器匹配的函数签名  \r\n    new whatsabi.loaders.OpenChainSignatureLookup().loadFunctions(\"0x06fdde03\")\r\n- `loadEvents`： 获取函数选择器匹配的函数签名  \r\n  new whatsabi.loaders.OpenChainSignatureLookup().loadEvents(\"0x721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f\")\r\n\r\n## 注意事项\r\n- 不一定能找到有效的函数选择器\r\n- 有一些参数存在的猜测，不够可靠\r\n- 事件解析有些不稳定\r\n\r\n> 本文首发于：https://dwong.xyz/tool/guide-to-whatsabi"},"author":{"user":"https://learnblockchain.cn/people/4845","address":"0x014EeCfA2E58d4975991F46026A2332561161912"},"history":"QmZQrcaUc3aDPmC6TZEgNnZyAaP6bT4THz6qP57A19H9J1","timestamp":1693269298,"version":1}