金色观察
文/OP Stack;译/金色财经xiaozou
2023年2月23日,Coinbase宣布推出基于OP Stack的Base测试网。同时,Optimism Collective(管理Optimism的DAO)宣布将升级为Optimism超级链。
但不管是Base测试网,还是Optimism超级链,都是基于OP Stack。那么OP Stack和以太坊主网有哪些差别呢?
目前的OP Stack版本为Bedrock,OP Stack官网文档详述了Bedrock和以太坊主网之间的差异。金色财经xiaozou翻译了本文档:
值得注意的是,Optimism和以太坊的行为间存在各种微小的差异。当你在Optimism或OP Stack代码库上建设应用程序时,你应该对这些差异有所了解。
Opcode(操作码)差异
`tx.origin == msg.sender`
在以太坊L1上,只有当智能合约直接从外部帐户(EOA)调用时,tx.origin才等于msg.sender。然而,在Optimism上,tx.origin是Optimism上的origin,也可能是一个EOA。然而,对于来自L1的消息,来自L1上的智能合约的消息有可能出现在L2上,这时tx.origin == msg.origin。这不太可能产生明显的差异,因为L1智能合约不能直接操纵L2状态。但是,也可能存在我们没有考虑到的边缘情况。
获取L1信息
如果你需要最新L1块的等效信息,你可以从L1Block合约中获得。该预部署合约是地址0x42000000000000000000000000000000000000000015。你可以使用getter函数获取这些参数:
-
number:L2已知的最新L1块号。
-
timestamp:最新L1块的时间戳。
-
basefee:最新L1块的基本费用。
-
hash:最新L1块的哈希值。
-
sequenceNumber:epoch内L2块的数量(当有新的L1块时,epoch随之变化)。
Address Aliasing(地址别名)
凭借CREATE操作码的behavior,用户可以在L1和L2上创建一个共享相同地址但具有不同字节码的合约。这可能会破坏信任假设,因为一个合约可能是可信的,而另一个合约可能是不可信的(见下文)。为了避免这个问题,L1和L2之间ORIGIN和CALLER操作码(tx.origin和msg.sender)的behavior略有不同。
tx.origin的值确定如下:
顶级(被调用的第一个合约)msg.sender值总是等于tx.origin。因此,如果tx.origin值受到上面定义的规则的影响,则msg.sender的顶级值也将受到影响。
注意,一般情况下,tx.origin不应该用于身份认证。但是,这与地址别名是不同的问题,因为地址别名也会影响msg.sender。
为什么地址别名是个问题?
两个相同的源地址(L1合约和L2合约)的问题是,我们是基于地址扩展信任。有可能我们想要信任其中一个合约,而不是另一个。
(1)Helena Hacker分叉Uniswap创建了她自己的交易所(在L2上),称为Hackswap。
注意:在Uniswap上实际上有多个合约,所以这个说明是个简化处理。
(2)Helena Hacker为Hackswap提供流动性,看起来可提供有利可图的套利机会。比如你可以花1 DAI买入1.1 USDT。这两种币的价值都是1美元。
(3)Nimrod Naive知道,如果一件事看起来好得令人难以置信,那么它很可能就是假的。但是,他检查了Hackswap合约的字节码,验证后确定其与Uniswap完全相同。他认为这意味着可以信任该合约的行为与Uniswap完全一致。
(4)Nimrod批准了Hackswap合约的1000 DAI交易。Nimrod希望在Hackswap上调用swap函数,并收到近1100 USDT。
(5)在Nimrod的swap交易被发送到区块链之前,Helena Hacker从与Hackswap地址相同的L1合约发送了一笔交易。这笔交易将1000 DAI从Nimrod的地址转移到Helena Hacker的地址。如果这个交易来自L2上的Hackswap相同的地址,它将能够转移该1000 DAI,因为Nimrod在上一步已经批准了Hackswap的代币交换。
尽管Nimrod很天真,但他受到了保护,因为Optimism修改了交易的tx.origin(也是初始的msg.sender)。这笔交易来自一个不同的地址,一个没有被批准的地址。
注意:在不同的链上,创建两个相同地址的不同合约很容易。但几乎不可能创建两个相同指定数额的不同合约,所以Helena Hacker不能这么做。
区块
L1以太坊和Optimism Bedrock之间产生区块的方式有几点不同之处。
(1) 这是理想状态。如果遗漏了任何块,则可能是整数倍数,如24秒、36秒等。
注意:L1以太坊参数值取自ethereum.org。Optimism Bedrock值取自Optimism参数。
网络规范
JSON-RPC差异
OP Stack代码库使用与以太坊相同的JSON-RPC API。引入了一些额外的OP Stack特定的方法。
是否支持Pre-EIP-155
Pre-EIP-155交易没有链ID,这意味着一个以太坊区块链上的交易可以在其他以太坊区块链上重播。这是一个安全风险,因此OP Stack默认不支持Pre-EIP-155交易。
交易成本
默认情况下,OP Stack链上的交易成本包括L2执行费用和L1数据费用。
共有 0 条评论