文章目录

  • 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