猛戳订阅学习专栏🍁🍁 👉 solidity系列合约源码+解析 👈 🍁🍁
1 介绍
函数选择器:
solidity调用函数时,calldata的前4个字节为指定要调用的函数,这4个字节称为函数选择器。
以下面的代码为例。它通过地址addr的调用合约的transfer方法。
addr.call(abi.encodeWithSignature("transfer(address,uint256)", 0xtoaddress, 123))
abi.encodeWithSignature(…)返回的前4个字节是函数选择器。
2 主要功能
计算要调用的方法的函数选择器
3 代码示例
下面是如何计算函数选择器。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
contract FunctionSelector {
/*
"transfer(address,uint256)"
0xa9059cbb
"transferFrom(address,address,uint256)"
0x23b872dd
*/
function getSelector(string calldata _func) external pure returns (bytes4) {
return bytes4(keccak256(bytes(_func)));
}
}
4 部署测试
先进行编译部署合约
我们首先测试来计算transfer方法的函数选择器
其得到的 0xa9059cbb 即为该方法的函数选择器
使用同样方法可以计算得出transferFrom的方法的函数选择器为:0x23b872dd