如今,以太坊網絡正蓬勃發(fā)展,開發(fā)人員計劃引入新的系統把目前每秒20個交易量擴展到每秒數十萬交易量,這也正是21世紀探索開發(fā)區(qū)塊鏈的大勢所趨。
對于智能合約開發(fā)人員來說,這意味著需要持續(xù)跟蹤以太坊更新的情況,了解每個代碼的更改形式。聽起來這似乎大幅增加了智能合約開發(fā)人員的工作量,但是別忘了CertiK就是在這個時候來為大家提供幫助的,因此完全不需要擔心此次的以太坊網絡升級。
伊斯坦布爾V1:
屬于以太坊硬分叉的伊斯坦布爾v1,將于10月16日,即下周三發(fā)布!
伊斯坦布爾v1包含了對EVM (Ethereum虛擬機)的6個修改,其中大部分是對更高級的技術部分進行了以優(yōu)化為目的的微調,這些微調與智能合約開發(fā)者無關。此次更改使得一部分操作燃料的花費變少了,但是另一部分操作花費卻更多了。而在一些有限的特定場景中,燃料的增加也會導致某些已部署智能合約被破壞的危險增加。
如果使用回退函數接收并讀取Ether的話,智能合約違約的風險就會增加。如果上述情況并未對你產生影響,你可以直接跳過以下兩部分內容。如果有影響,那就不妨繼續(xù)閱讀以下內容。
回退函數
當智能合約接收到Ether時,回退函數可以用來運行特定的邏輯。舉個例子說明:
如果一個智能合約正在向智能合約發(fā)送Ether,它可能會使用.transfer或.send方法來傳輸Ether。如果你已設置在合約中使用回退函數,此時,這個函數便會發(fā)揮作用。但是根據設計規(guī)范,只有2300燃料會被“轉發(fā)”到回退函數之中。這種情況下只允許合約中記錄一個事件。(如果這個限制不存在,你就可以讓別人為 “貪婪”的回退函數買單,并以此來破壞他們的智能合約!)
這個方式在過去可能適用,然而,這次以太坊內的更新使這個方法不再可行了。
讀取狀態(tài)
第二個問題出現在系統讀取操作上。這是因為這些操作占用了與以太坊系統大小相關的計算資源:系統越大,所需的資源就越多。以太坊系統現在相當龐大,所以價格非常高昂。尤其是SLOAD指令,用于從系統讀取,其成本將從200燃料漲到800燃料。你可通過訪問此鏈接:https://eips.ethereum.org/EIPS/eip-1884,查看所有將會受到影響的特定操作碼列表,此列表顯示了燃料成本將會發(fā)生怎樣的變化。
這意味著,即使是一兩個簡單的系統讀取也可能將回退函數推至2300的上限,而其他智能合約可能無法再將數據傳輸到你的合約之中。過去可能可以在回退函數中檢查某個狀態(tài),但是目前,以太坊更新有破壞函數功能的風險。
如果你認為你的智能合約可能受到影響,可以直接通過文末的方式聯系我們,來幫助你確定你的合約是否確實受到潛在升級/恢復解決方案的影響。縱觀整個事件發(fā)展過程,我們得出結論:我們不應編寫任何代碼來期望燃料成本不隨時間改變。以太坊的核心開發(fā)者也希望等到合適的時機再去改變這些變量。
未來的變化
我們可以從以太坊的發(fā)展路線中得到什么信息呢?開發(fā)人員如何邁出下一步呢?雖然目前正在籌備中的系統是伊斯坦布爾v2(以太坊硬分叉),但以太坊2.0才是下一次網絡全面檢修的預定更新系統。
伊斯坦布爾v2
伊斯坦布爾v2沒有確定的發(fā)布日期,但有八個已被批準的初級更新項。其中7項是對EVM技術的進一步調整,這些調整中沒有涉及到提高燃料成本,且沒有一項調整會打破邊界之外的智能合約。更令人欣喜的是,其中一項調整提議涉及在智能合約中添加“版本號”。這意味著在硬分叉之后,有舊版本號的智能合約依舊可以按照舊規(guī)則運行,而新的智能合約可以使用新規(guī)則運行。
一旦此項更新成功,將來就可以免于錯誤更新項的困擾。
第八項更新更稱得上是翻天覆地,因此頗具爭議。它需要把以太坊挖掘算法從Ethash改成一個叫做ProgPoWin的新算法,從而防止建立ASICs并保持GPU挖掘的可行性。
雖然目前還不清楚這一更新項是否會通過,但它已經成為以太坊社區(qū)沖突與矛盾產生的原因之一。
不過它并不會影響到智能合約開發(fā)人員或網絡安全,我們也不必杞人憂天。
以太坊 2.0
隨著以太坊2.0的到來,智能合約開發(fā)人員也許會擔心即將可能發(fā)生的復雜變化。好消息是,以太坊的核心開發(fā)人員正在采取措施來確保更新的無縫連接性。
前幾天,Vitalik去了ethresear.ch論壇,并向社區(qū)保證,更新不會出現丟失數據或功能的問題。智能合約將自動轉移數據,許多人甚至不會注意到系統更新了。下面是Vitalik舉的一個例子:
“你在MakerDAO上有CDP。當夜晚進入夢鄉(xiāng),次日醒來時,系統早已不知不覺更新完畢。你可以自然的像以前一樣通過發(fā)送交易來進行CDP的交互和清算,同時更新的優(yōu)點也在逐步體現:客戶端代碼可以看到轉換過程并將數據添加到交易記錄中,再將它發(fā)送到eth2網絡而不是從前的eth1網絡。”
此次更新目前仍有一些需要注意的問題:
1. 燃料價格仍有可能上漲,尤其是從系統數據來看,上漲趨勢格外明顯。因此,我們應該嘗試限制系統讀取合約執(zhí)行的次數,并將復雜任務分解為多個函數。(關注支票賬戶余額也屬于系統讀取哦!)
2. 更新時,網絡可能會停機一至兩個小時。請?zhí)崆鞍才藕孟嚓P事項!
3. 如果你使用block hash作為隨機性的來源,那么一旦有權益證明,這種情況就可能會中斷。(請注意:無論怎樣,這樣做都是有害無益的。)
此外,以太坊 2.0的功能投入使用后我們該如何加以利用呢?。Vitalik就如何在另一個ethresear.ch上工作提了一些建議,他多次強調,雖然更新相對來說是無縫的,但請務必提前安排好計劃以免出現任何問題。
來源: CertiK
評論
查看更多