🔥 Gate 广场活动|#发帖赢Launchpad新币KDK 🔥
KDK|Gate Launchpad 最新一期明星代币
以前想参与? 先质押 USDT
这次不一样 👉 发帖就有机会直接拿 KDK!
🎁 Gate 广场专属福利:总奖励 2,000 KDK 等你瓜分
🚀 Launchpad 明星项目,走势潜力,值得期待 👀
📅 活动时间
2025/12/19 12:00 – 12/30 24:00(UTC+8)
📌 怎么参与?
在 Gate 广场发帖(文字、图文、分析、观点都行)
内容和 KDK上线价格预测/KDK 项目看法/Gate Launchpad 机制理解相关
帖子加上任一话题:#发帖赢Launchpad新币KDK 或 #PostToWinLaunchpadKDK
🏆 奖励设置(共 2,000 KDK)
🥇 第 1 名:400 KDK
🥈 前 5 名:200 KDK / 人(共 1,000 KDK)
🥉 前 15 名:40 KDK / 人(共 600 KDK)
📄 注意事项
内容需原创,拒绝抄袭、洗稿、灌水
获奖者需完成 Gate 广场身份认证
奖励发放时间以官方公告为准
Gate 保留本次活动的最终解释权
Solidity极简入门|第二十九讲:函数选择器Selector
我最近在重新学 solidity,巩固一下细节,也写一个「Solidity 极简入门」,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。
所有代码和教程开源在 github:github.com/AmazingAng/WTFSolidity
selector
当我们调用智能合约的函数时,发送的字节码的前 4 个字节是 selector(函数选择器)。这一讲,我们将介绍 selector 是什么,以及如何使用。
msg.data
msg.data 是 solidity 中的一个全局变量,值为完整的 calldata(调用函数的字节码)。
在下面的代码中,我们可以通过 Log 事件来输出调用 mint 函数的 calldata:
当参数为 0x2c44b726ADF1963cA47Af88B284C06f30380fC78 时,输出的 calldata 为
这段很乱的字节码可以分成两部分:
其实 calldata 就是告诉智能合约,我要调用哪个函数,以及参数是什么。
函数签名和 selector
selector 定义为函数签名的哈希的前 4 个字节,那么函数签名是什么?
其实在第 21 讲中,我们简单介绍了函数签名,为"函数名(逗号分隔的参数类型)“。举个例子,上面代码中 mint 的函数签名为"mint(address)”。在智能合约中,不同的函数有不同的函数签名,因此我们可以通过函数签名来确定要调用哪个函数。
注意,在函数签名中,uint 和 int 要写为 uint256 和 int256。
我们写一个函数,来验证 mint 函数的 selector 是否为 0x6a627842。大家可以运行下面的函数,看看结果。
使用 selector
我们可以利用 selector 来调用目标函数。例如我想调用 mint 函数,我只需要利用 abi.encodeWithSelector 将 mint 函数的 selector 和参数打包编码,传给 call 函数:
在日志中,我们可以看到 mint 函数被成功调用,并输出 Log 事件。
总结
这一讲,我们介绍了什么是函数选择器(selector),它和 msg.data、函数签名的关系,以及如何使用它调用目标函数。