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