Description
The official OP Docs
需要注意的是,在Optimism和以太坊之间存在一些细微差异。 在构建基于Optimism或OP Stack代码库的应用程序时,您应该了解这些差异。
操作码 | Solidity等效操作 | 行为 |
---|---|---|
COINBASE | block.coinbase | 未定义 |
DIFFICULTY | block.difficulty | 随机值。由于该值由序列器设置,因此其随机性不如L1等效操作码可靠。 |
NUMBER | block.number | L2块编号 |
TIMESTAMP | block.timestamp | L2块的时间戳 |
ORIGIN | tx.origin | 如果交易是L1⇒L2交易,则tx.origin 设置为触发L1⇒L2交易的地址的别名地址。否则,此操作码的行为与正常情况下相同。 |
CALLER | msg.sender | 如果交易是L1⇒L2交易,并且这是初始调用(而不是一个合约之间的内部交易),则同样适用地址别名行为。 |
`tx.origin == msg.sender`
在L1以太坊上,只有当智能合约直接从外部拥有的账户(EOA)调用时,tx.origin
等于msg.sender
。
然而,在Optimism上,tx.origin
是在Optimism上的原始地址。
它可以是一个EOA。
然而,在来自L1的消息的情况下,一个来自L1上的智能合约的消息可能在L2上出现,其中tx.origin == msg.origin
。
这不太可能产生重大影响,因为L1智能合约不能直接操作L2状态。
然而,可能存在我们没有考虑到的边界情况,这可能会有所影响。
如果您需要从最新的L1区块获取等效信息,可以从L1Block合约 (opens new window)中获取。
该合约是一个预部署合约,地址为0x4200000000000000000000000000000000000015
(opens new window)。
您可以使用getter函数 (opens new window)获取这些参数:
number
:L2已知的最新L1区块号timestamp
:最新L1区块的时间戳basefee
:最新L1区块的基础费用hash
:最新L1区块的哈希值sequenceNumber
:L2区块在时期内的编号(当有新的L1区块时,时期会更改)由于CREATE
操作码的行为,用户可以在L1和L2上创建具有相同地址但具有不同字节码的合约。
这可能会破坏信任假设,因为一个合约可能被信任,而另一个合约可能不被信任(见下文)。
为了防止这个问题,在L1和L2之间,ORIGIN
和CALLER
操作码(tx.origin
和msg.sender
)的行为略有不同。
tx.origin
的值如下确定:
调用来源 | tx.origin |
---|---|
L2用户(外部拥有的账户) | 用户的地址(与以太坊相同) |
L1用户(外部拥有的账户) | 用户的地址(与以太坊相同) |
L1合约(使用CanonicalTransactionChain.enqueue ) | L1_contract_address + 0x1111000000000000000000000000000000001111 |
在顶层(即第一个被调用的合约)的msg.sender
的值始终等于tx.origin
。
因此,如果tx.origin
的值受到上述规则的影响,顶层的msg.sender
值也会受到影响。
请注意,通常情况下,tx.origin
不应用于授权 (opens new window)。
然而,这与地址别名是一个独立的问题,因为地址别名也会影响msg.sender
。
两个相同的源地址(L1合约和L2合约)的问题在于我们基于地址来扩展信任。 我们可能希望信任其中一个合约,但不信任另一个合约。
Helena Hacker分叉Uniswap (opens new window)创建了自己的交易所(在L2上),名为Hackswap。
**注意:**实际上Uniswap中有多个合约,所以这个解释有点简化。 如果您想要更多详细信息,请参阅此处 (opens new window)。
Helena Hacker为Hackswap提供了流动性,看起来可以进行有利可图的套利机会。 例如,她可以使您可以花费1个DAI (opens new window)购买1.1个USDT (opens new window)。 这两种代币都应该价值正好1美元。
Nimrod Naive知道如果某事看起来太好了,那可能就是假的。 然而,他检查了Hackswap合约的字节码,并验证它与Uniswap完全相同。 他决定这意味着该合约可以被信任,行为与Uniswap完全相同。
Nimrod为Hackswap合约批准了1000个DAI的津贴。 Nimrod期望调用Hackswap的交换函数,并收到近1100个USDT。
在Nimrod的交换交易发送到区块链之前,Helena Hacker从与Hackswap在L2上相同地址的L1合约发送了一笔交易。 该交易将1000个DAI从Nimrod的地址转移到Helena Hacker的地址。 如果这笔交易来自与之前步骤中Nimrod必须给Hackswap授权的相同地址,它将能够转移这1000个DAI。
尽管Nimrod很天真,但他受到了Optimism修改的交易的保护,其中的tx.origin
(也是初始的msg.sender
)被修改了。
该交易来自一个不同的地址,该地址没有这个津贴。
**注意:**在不同的链上创建两个不同的合约很简单。 但是几乎不可能创建两个相差指定数量的不同合约,所以Helena Hacker无法做到这一点。
在L1以太坊和Optimism Bedrock之间,区块的生成方式有几个不同之处。
参数 | L1以太坊 | Optimism Bedrock |
---|---|---|
区块之间的时间间隔 | 12秒(1) | 2秒 |
区块目标大小 | 15,000,000 gas | 待确定 |
区块最大大小 | 30,000,000 gas | 待确定 |
(1) 这是理想情况。 如果有任何区块被错过,可能是12秒的整数倍,如24秒、36秒等。
**注意:**L1以太坊的参数值取自ethereum.org (opens new window)。 Optimism Bedrock的参数值取自Optimism规范 (opens new window)。
OP Stack代码库使用与以太坊相同的JSON-RPC API (opens new window)。 还引入了一些OP Stack特定的方法。 有关更多信息,请参阅自定义JSON-RPC方法的完整列表 (opens new window)。
Pre-EIP-155 (opens new window)交易没有链ID,这意味着在一个以太坊区块链上的交易可以在其他区块链上重放。 这是一个安全风险,因此默认情况下OP Stack不支持Pre-EIP-155交易。
默认情况下,OP Stack链上的交易成本 (opens new window)包括L2执行费用 (opens new window)和L1数据费用 (opens new window)。
This app can be installed on your PC or mobile device. This will allow this web app to look and behave like any other installed app. You will find it in your app lists and be able to pin it to your home screen, start menus or task bars. This installed web app will also be able to safely interact with other apps and your operating system.
The official OP Docs