當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] Constantinopole預(yù)計于區(qū)塊708000(2019/1/16)進(jìn)行主鏈的分叉。此次硬分叉除了新的CREATE2 opcode,并沒有帶來太多讓人振奮的新東西。 Constan

Constantinopole預(yù)計于區(qū)塊708000(2019/1/16)進(jìn)行主鏈的分叉。此次硬分叉除了新的CREATE2 opcode,并沒有帶來太多讓人振奮的新東西。

ConstanTInopole硬分叉所包含的EIP如下:

EIP 145: 在EVM里新增Bitwise shifTIng的opcode

EIP 1014:新增CREATE2 opcode

EIP 1052:新增EXTCODEHASH opcode

EIP 1283:調(diào)整SSTORE opcode的計價方式

EIP 1234:延后難度炸彈并調(diào)降區(qū)塊獎賞

以下沒有按照號碼而是從簡單的EIP開始介紹。

EIP 1234:延后難度炸彈并調(diào)降區(qū)塊獎賞

基本上和上次的拆解差不多—延后一年并調(diào)降獎賞。

其中有三個提案:

1. 將獎賞由原本的3 ETH降到1 ETH

2. 將獎賞降到2 ETH

3. 維持3 ETH但調(diào)整uncle reward并移除nephew reward以借此降低ETH發(fā)行量。

最后由第二個方案勝出。

EIP 1052:新增EXTCODEHASH opcode

由于很多情況在合約里會限制使用者必須是單純的帳戶(External Owned Account,EOA)或是一個合約,這時我們需要去檢查該地址是不是一個合約?;蚴窍M臀覀冞M(jìn)行互動的合約要符合特定的模式,從而避免和未知、惡意的合約來往,這時我們需要去取回該地址的合約并檢查。

如果是要單純檢查該地址是不是合約,則使用EXTCODESIZE這個opcode來取得指定地址的合約代碼大小,若回傳結(jié)果不為零,代表該地址是一個合約。

如果要檢查合約內(nèi)容是不是我們預(yù)期的,則透過EXTCODECOPY這個opcode來取回指定地址的合約代碼,把回傳結(jié)果拿去做哈希,并把哈希結(jié)果和我們事先存在合約里的哈希值做比對。

EXTCODESIZE花費700 gas,而EXTCODECOPY除了基本的700 gas之外,還要加收把合約代碼復(fù)制到內(nèi)存的成本(每四個byte收3 gas),所以若是對方合約代碼非常龐大,則每次要做這個檢查都要額外再花費不少gas。

因此提出了EXTCODEHASH opcode,直接回傳指定地址的合約代碼的哈希值。

其opcode值為0x3F,固定花費400 gas,如果指定位址不存在(即在鏈上沒任何數(shù)據(jù)),則回傳0;如果存在但是是單純的帳戶(EOA),則回傳對empty data做哈希的結(jié)果。

EIP 145:在EVM里新增Bitwise shifTIng的opcode

目前EVM里沒有原生的左右移運算子,而是要靠其他算術(shù)運算子組合來模擬(雖然在Solidity里有平移運算的寫法,但實際編譯的bytecode是用指數(shù)搭配乘法/除法來模擬的)。而每一次的模擬共需要花費35 gas。

這個EIP新增了左移(SHL)、邏輯右移(SHR)和算術(shù)右移(SAR)三個指令,三個opcode的值分別為0x1b 0x1c 0x1d,每個運算都只需花費3 gas。

EIP 1283:調(diào)整SSTORE opcode的計價方式

這個EIP是以EIP 1087為基礎(chǔ)做的改進(jìn),目的都是讓某些情況下使用storage的成本能更合理、更便宜。

目前SSTORE opcode的計價方式是

1. 從0設(shè)為非0的值:20000 gas

2. 從非0修改為非0:5000 gas

3. 從非0改為0:-10000 gas(即退還)

如果一個交易里對同一個storage slot做了多次改動,則以目前的計價方式,每一次改動都會被收費,即便交易完成后它們才會被一次寫入磁盤里(對storage做的改動只有在交易成功完成后才會寫入磁盤里)。

所以假設(shè)你的交易在過程中

· 對某個原本為0的storage slot做了5次修改,則你會被收取20000 + 5 * 5000 = 45000 gas

· 或是把某個storage slot從0改為非0,又從非0改為0(例如Mutex的使用),則你會被收取20000 + 5000–10000 = 15000 gas

· 或是做了兩次的代幣交換,把代幣從A身上轉(zhuǎn)到B,再轉(zhuǎn)到C身上,則你會被收取5000 * 4 = 20000 gas

EIP 1087的做法

在每筆交易執(zhí)行的時候,建立一個暫時的對應(yīng)表來記錄每個被修改到的storage slot,交易的最后再一次結(jié)算(看是收費還是退費)。

EIP 1283的做法

在每一次SSTORE執(zhí)行時,比對storage slot的

(1)原始值(即交易執(zhí)行前這個storage slot的值)

(2)目前的值(即交易執(zhí)行到一半,當(dāng)下該storage slot的值,可能和原始值相同,也可能不同)

(3)新的值(即這個SSTORE動作會賦予該storage slot的值)如果需要退還gas,則當(dāng)下就會記錄該退還多少,而不是等到交易的最后。

兩者的不同

EIP 1087和EIP 1283的不同在于,EIP 1087是以整個交易為一個單位,建立一個對應(yīng)表,交易執(zhí)行的過程中每個SSTORE執(zhí)行時會來對這個表做修改,最后再做結(jié)算;而EIP 1283則是以每個SSTORE為一個單位,有可能當(dāng)下這個SSTORE就是該筆交易最后一個SSTORE了,也有可能不是,但每個SSTORE執(zhí)行完都會去做結(jié)算的動作。

而EIP 1283的優(yōu)點在于不需要額外建立并維護一個對應(yīng)表,而且不需要對原本客戶端的SSTORE代碼做太大修改,只需要新增一些判斷式而已。

注:兩個做法在每次SSTORE執(zhí)行時都會收取最基本的200 gas(看修改的內(nèi)容和原始值而定,有可能是收取5000 gas或20000 gas,但最少就是200 gas)。

將新的計價方式套用在上面的例子,假設(shè)你的交易在過程中

· 對某個原本為0的storage slot做了5次修改,則你會被收取20000 + 5 * 200 = 21000 gas

· 或是把某個storage slot從0改為非0,又從非0改為0,則你會被收取20000 + 200–19800= 400 gas

· 或是做了兩次的代幣交換,把代幣從A身上轉(zhuǎn)到B,再轉(zhuǎn)到C身上,則你會被收取5000 * 3 + 200–4800= 10400 gas

EIP 1014:新增CREATE2 opcode

原本Metropolis規(guī)劃的新功能?—?帳戶抽象化(Account AbstracTIon)除了CREATE2 opcode本身,還包含了ENTRY POINT(是一個帳戶,地址是0xfff…fff,可以把它視為系統(tǒng)的代理人)。

Account Abstraction

在Account Abstraction的世界中,沒有EOA,每個帳戶都是一個合約。每個人需要為自己建立一個合約來處理交易的細(xì)節(jié)(而不再是由系統(tǒng)去幫你處理):這個合約要持有足夠的以太幣(或代幣)以支付交易手續(xù)費、要驗證合約主人的身份、要記錄并檢查nonce值(也可以不做nonce值檢查)、要選擇使用哪種簽章或加密算法(而不是像現(xiàn)在只能用ECDSA)。

注:需要nonce值來避免交易重放攻擊(transaction replay attack)的使用者可以自己在合約里實現(xiàn)這個功能:在合約內(nèi)自己記錄一個nonce值、或甚至多個。

假設(shè)今天你要產(chǎn)生一筆用來發(fā)送代幣的交易,這筆交易的發(fā)送者要填上ENTRY POINT(而不是你的帳戶),交易的接收者才是填入你的合約地址,交易內(nèi)容會包含你身份的證明(例如簽章)、要送到代幣合約的相關(guān)數(shù)據(jù)等等,但不會附帶Ether(因為ENTRY POINT本身也不會有錢),也不會有發(fā)送者對這筆交易的簽章(原本這種簽章是用來證明的確是發(fā)送者產(chǎn)生這筆交易的,因此交易如果不再附帶這種簽章則表示任何人都可以偽造其他人交易)。

礦工收到這筆交易后會先去試跑這筆交易做檢查,看你的合約會不會付手續(xù)費、看交易內(nèi)容里的數(shù)據(jù)有沒有通過你自己設(shè)的身份檢查和nonce值檢查,檢查都通過后就會去呼叫代幣合約發(fā)送代幣。

Account Abstraction的問題

Account Abstraction大大提升了使用者的自由度,但也大大提高了使用的門坎,使用者和開發(fā)者得要習(xí)慣全新一套運作的機制。另外因為任何人都可以偽造交易,礦工要先試跑每一筆交易來確認(rèn)是否會收到手續(xù)費,這大大增加了礦工被無效交易DoS攻擊的可能性。

目前ENTRY POINT的功能被推延到未來的升級中。

CREATE2

留下來的CREATE2 opcode基本上和原本的CREATE opcode差異不大,目的都是用來產(chǎn)生新的合約,但不同的地方在于,藉由CREATE2你可以自由地控制合約產(chǎn)生的地址。CREATE2的opcode值為0xF5。

CREATE計算新的合約該部署在哪個地址的時候會受到交易發(fā)起人(即sender)和發(fā)起人當(dāng)下的nonce值決定:

new_address =

keccak256( 0xff ++ sender ++ salt ++ keccak256(init_code)))[12:]

· 0xff是用來區(qū)分新舊地址產(chǎn)生的方式,舊的方式因為會先對sender和nonce做rlp編碼,編碼完后最前面會是一個0x01~0xff之間的值,但0xff只有在被編碼的數(shù)據(jù)超級大才有可能出現(xiàn),所以新的方式在最前面加了一個0xff來和舊的方式做區(qū)分。

· init_code是你要部署的合約的代碼。

· salt是使用者可以任意指定的值,讓你可以把同一份合約部署在不同地址(如果沒有這個salt值,而且大家部署的init_code又都一樣,則大家都會部署到相同的地址)。

有了CREATE2之后,你可以預(yù)先知道你的合約會部署到哪個地址且不用耗費太多成本,這對許多應(yīng)用有不小的影響,像是State Channel或是用來躲避Front Running攻擊的Submarine Send。

測試鏈(Testnet)測試狀況

這次部署到Ropsten測試鏈進(jìn)行硬分叉預(yù)演的時候出了點差錯而導(dǎo)致測試鏈出現(xiàn)多條分叉:

· Parity和Geth在計算SSTORE的gas收費上有不同(是Parity這邊的問題)

· 原先的測試鏈?zhǔn)褂谜邲]有更新版本

· Parity和Geth各自實作了不同的內(nèi)存塊回溯(revert)限制(可以視為他們自己加上的Finality條件),所以Parity的分叉鏈在距離分叉點超過一定數(shù)量的內(nèi)存塊后就再也沒辦法切換回正確的鏈了(除非刪掉原本的鏈的數(shù)據(jù)并重新同步一次)。

不過這次的插曲也凸顯了在測試鏈預(yù)演、同時有不同的客戶端軟件參加的重要性。Lane Rettig在Ethereum Magicians的論壇上也整理了許多從這個事件所記取的教訓(xùn)及能改進(jìn)的地方。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉