EIP-3520: 交易目标操作码
Authors | Alex Papageorgiou (@alex-ppg) |
---|---|
Created | 2021-04-16 |
Discussion Link | https://ethereum-magicians.org/t/eip-3520-transaction-destination-opcode/6058 |
Requires | EIP-3508 |
Table of Contents
简单总结
提供对交易原始接收者的访问。
摘要
此 EIP 引入了以下 EVM 指令:ENTRYPOINT
。
此指令旨在提供对交易的原始接收者(to
地址)的访问,从而能够结合 EIP-3508 应用新的内省方式。
动机
不可否认的是,智能合约之间的互连比以往任何时候都更加紧密。到目前为止,智能合约完全依赖于兼容的接口和内省,以在复杂的多合约交互的调用链中引入新步骤。但是,这提出了一种仅正向的方法,限制了可以实现的交互类型。
此 EIP 的目的是提供一种方法,通过该方法,合约能够识别区块链上交易的入口点,并通过对原始交易数据本身应用内省来推断交易的原始意图。
此 EIP 能够开发新型智能合约,因为它可以通过新的途径让 EIP-721 NFT 和 EIP-20 代币检测其交易所属的操作,例如检测向去中心化交易所提供的流动性或抵押贷款协议中的贷款。
规范
ENTRYPOINT (0x4a
)
ENTRYPOINT
指令使用 0 个堆栈参数,并将交易的原始 to
成员推送到堆栈上。该指令产生的地址是一个填充到 256 位的 160 位值。该操作的执行成本为 G_base
,类似于 ORIGIN
(0x32
)。
ENTRYPOINT
操作码返回的地址将等效于堆栈上最近的 AUTHCALL
中指定的 to
地址参数。如果堆栈中没有 AUTHCALL
,则 ENTRYPOINT
将检索原始交易的 to
字段。
原理
AUTHCALL (0xf7
) 交互
EIP-3074 引入了一个名为 AUTHCALL
(0xf7
) 的新调用指令,它将交易的 ORIGIN
(0x32
) 替换为上下文变量 authorized
。 AUTHCALL
的目的是防止智能合约和 EOA 之间的歧视,而 ORIGIN
最初促进了这种歧视。 ENTRYPOINT
操作码本身将歧视重新引入系统,因为它间接允许评估当前执行的智能合约代码是否由 EOA 完成,方法是验证 ENTRYPOINT == ADDRESS
,其中 ADDRESS
(0x30
) 检索当前执行的帐户地址。因此,将 ENTRYPOINT
操作码检索的值替换为 AUTHCALL
的目标也是合理的。
此交互可确保与 EIP-3074 的完全兼容性,并确保此 EIP 不会将任何形式的歧视重新引入系统。
命名约定
ENTRYPOINT
指令的出现是通过定义一个合理的名称,该名称立即清楚地描述了它的目标,即通过指示特定调用的第一次交互(即入口点)。
指令地址空间
等效于 EIP-3508。
Gas 成本
操作码 ENTRYPOINT (0x4a
) 本质上执行与操作码 ORIGIN (0x32
) 相同的事情,因此共享完全相同的 gas 成本。
对 EIP-3508 的依赖
ENTRYPOINT
(0x4a
) 指令本身没有明显的好处,因为它可以被 AUTHCALL
(0xf7
) 指令替换,因此,它应该仅与 EIP-3508 中定义的 ORIGINDATA*
操作码结合使用才能引入到系统中。
向后兼容性
EIP 不会更改或调整 EVM 提供的现有功能,因此不存在已知问题。
测试用例
待定。
安全考虑
自省合约
ENTRYPOINT
指令允许将 ORIGINDATALOAD
和 ORIGINDATACOPY
值与特定的智能合约地址和接口相关联,从而能够基于调用的函数签名和提供的参数应用内省,以可靠地推断调用特定智能合约的调用路径,并允许在这种特殊情况下定义更精细的交互级别。
但是,这种类型的内省应仅应用于预先批准的合约,而不是用户定义的合约,因为这种类型的内省所产生的价值完全依赖于合约代码的不可变性和适当的功能,而用户提供的合约可以轻松绕过这两者。
调用者歧视
本 EIP 的指令不应用作区分 EOA 调用者和智能合约的方式,因为这种类型的区分可以被规范章节中定义的 AUTHCALL
打破。
合约创建行为
在合约创建期间,ENTRYPOINT
操作码的行为将导致该操作码产生零地址,作为交易中第一个交互的地址。合约实现应以类似于处理 ecrecover
无效签名的方式来考虑这一点,以防止出现软件错误行为。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Alex Papageorgiou (@alex-ppg), "EIP-3520: 交易目标操作码 [DRAFT]," Ethereum Improvement Proposals, no. 3520, April 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3520.