【Solidity Yul Assembly】3.1 | Calldata

  • 0xE
  • 发布于 2024-08-28 15:03
  • 阅读 938

在 Solidity 中关于 tx.data 有约定俗成的用法。

约定俗成

  • Solidity 的普及已经促成了一种关于如何使用交易数据 (tx.data) 的约定。
  • 当向一个钱包地址发送交易时,通常不会在 tx.data 中添加任何数据,除非你想发送一条消息给该地址的所有者。
  • 而在向一个智能合约发送交易时,tx.data 的前四个字节(即前8个十六进制字符)用来指定你要调用的函数。这四个字节被称为函数选择器(function selector)。随后的字节是按ABI编码的函数参数。关于ABI的更多信息,可以参考这里
  • Solidity 期望函数选择器后的字节长度始终是 32 的倍数。这是一种约定,便于解析交易数据。如果发送的字节长度不是 32 的倍数,Solidity会忽略多余的字节。
  • 相较之下,Yul 合约可以根据需要自由地处理任意长度的交易数据。

概述

  • 函数选择器是函数签名经过 Keccak-256 哈希计算后的前四个字节。
  • 例子1(ERC20)
    • balanceOf(address _address) -> keccak256("balanceO...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
0xE
0xE
0x59f6...a17e
17年进入币圈,Web3 开发者。刨根问底探链上真相,品味坎坷悟 Web3 人生。有工作机会可加v:__0xE__