调用数据
定义
Calldata 是一种只读数据,在与以太坊上的智能合约交互时随交易一起发送。它包含智能合约执行功能所需的指令和输入值,但不能被合约修改或永久储存。
简单来说,calldata 是您发送给智能合约的消息,告诉它要做什么以及使用什么信息。
Calldata 有何用途?
Calldata 主要用于将信息传递到智能合约中。这包括:
- 要调用的函数
- 运行该函数所需的参数
- 来自用户或应用程序的编码交易数据
由于 calldata 不储存在合约储存中,因此它比永久储存更便宜,使其成为在执行期间提供临时数据的有效方式。
Calldata 如何工作
当用户向智能合约提交交易时,该交易包含指定要执行操作的 calldata。以太坊虚拟机 (EVM) 读取此数据,执行请求的函数,然后在执行完成后丢弃 calldata。
例如,当用户在去中心化交易所上交换代币时,交易的 calldata 包含代币地址、交换数量和接收者地址等详细信息。智能合约读取此信息,完成交换,之后不保留 calldata。
以太坊扩容中的 Calldata
Calldata 在以太坊扩容中扮演着重要角色,特别是对于 Rollup。Rollup 使用 calldata 将压缩的交易数据发布到以太坊,以便在需要时任何人都可以验证链下交易。
然而,当发布大量数据时,calldata 可能会变得昂贵。这就是为什么正在开发数据 Blob 和外部数据可用性层等新解决方案以降低成本的原因。
Calldata 与储存和内存
Calldata 与以太坊中的其他数据位置不同:
Calldata :只读、临时,用于函数输入。
内存 :临时且在执行期间可修改。
储存 :储存在区块链上的持久数据,使用成本最高。
为何重要
了解 calldata 有助于用户和开发人员理解智能合约如何接收指令以及交易成本为何不同。它还解释了 Rollup 为何依赖 calldata 来实现透明度,以及优化数据使用对于以太坊的可扩展性为何至关重要。
Calldata 对大多数用户来说可能不可见,但它是智能合约和扩容解决方案在以太坊上运行的核心组成部分。