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