一、什么是MethodID?
以太坊依靠一个唯一标识符(称为MethodID或函数选择器function selector)来区分智能合约中的不同函数或方法。
MethodID 是函数签名的 Keccak-256 哈希的前 4 个字节(8 个字符,包括0x也就是取前10个字符),用于指定要调用哪些函数。函数签名包括函数名称及其参数类型,它们之间用逗号分隔,中间没有空格。
接下来以transfer函数为例,进行说明:
const { keccak256 } = require("ethers/lib/utils");
// 函数签名
const functionSignature = "transfer(address,uint256)";
// 计算 Keccak256 哈希
const hash = keccak256(Buffer.from(functionSignature));
// 获取前 4 字节(8 个字符)
const methodID = hash.slice(0, 10);
console.log(methodID); // 输出: 0xa9059cbb
在