文章目录
- 1 介绍
- 2 主要功能
- 3 代码示例
- 4 部署测试
猛戳订阅学习专栏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: MITpragma 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