solidity函数签名的实现-solidity实现智能合约教程(8)

本文介绍了Solidity中函数选择器的概念,它是用于标识合约中特定函数的4字节标识符。通过示例展示了如何计算如`transfer`和`transferFrom`等方法的函数选择器,并提供了相关代码实现。在部署和测试阶段,强调了计算和使用函数选择器的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猛戳订阅学习专栏🍁🍁 👉 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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值