Javascript

有沒有辦法從函式 ABI 中檢索十六進制方法 ID?

  • June 7, 2022

我正在製作一個簡單的反編譯器,但我正在努力將我的函式編碼為簽名。例如,我有一個函式"transfer(address recipient, uint256 amount)",我想將其編碼為一個 4 字節簽名,也稱為 MethodID,用於傳輸的是0xa9059cbb. 有沒有辦法做到這一點?我正在使用ethers.js

您可以使用該ethers.utils.id功能。

const { utils } = require('ethers')

console.log(utils.id('transfer(address,uint256)').substring(0, 10))

https://docs.ethers.io/v5/api/utils/hashing/#utils-id

const iface = new ethers.utils.Interface(abi)
const selector = iface.getSighash('transfer')

您還可以從對Contract像中獲取介面:const iface = contract.interface.

如果函式中存在歧義,則必須為getSighash:添加參數const selector = iface.getSighash('transfer(address recipient, uint256 amount)'),ethers 會為您找到正確的函式。

引用自:https://ethereum.stackexchange.com/questions/129760