文/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合約中獲得。該預部署合約是地址0×42000000000000000000000000000000000000000015。你可以使用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資料費用。