即將來臨的君士坦丁堡硬分叉詳情(2019年1月)

君士坦丁堡分叉包含5個EIP

EIP145

EVM目前只有算數和邏輯運算,缺少原生移位運算,這個提案裏補充上了,將之前通過算術運算實現的左移和右移運算的gas成本從35減少到3gas。向後兼容對之前創建的合約沒有影響。

新增棧操作碼:0x1b左移,0x1c邏輯右移,0x1d算術右移。

EIP1014

這個提案改變了合約地址的生成算法,原來的只需要對交易發起地址和這筆交易的nonce進行keccak256就可以了,現在加了幾個參數變成:keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:],主要是爲了避免生成的地址發生碰撞。

新增棧操作碼:0xf5 Create2。

EIP1052

新增一個操作EXTCODEHASH,可以直接返回合約的字節碼Hash,而以前獲取合約字節碼Hash的操作是EXTCODECOPY,gas比較昂貴。

新增棧操作碼:0x3f EXTCODEHASH。

EIP1283

EVM存儲很貴,這個提案就是要優化SSTORE操作指令,改變這個操作消耗gas的測算算法。SSTORE是EVM將數據存入內存槽的主要指令。

EIP1234

這個提案調整難度炸彈、降低挖礦獎勵。

1、這次分叉並不包含Casper,POS的切換也被推遲了,還是採用POW機制,只不過調整下POW的難度計算規則,我們看下之前的難度計算規則:

//根據父塊和最新塊的時間差動態調整難度,小於10增加難度,大於等於20減小難度。

block_diff = parent_diff + 難度調整 + 難度炸彈
難度調整 = parent_diff // 2048 * MAX(1 - (block_timestamp - parent_timestamp) // 10, -99)
難度炸彈 = INT(2^((block_number // 100000) - 2))

從上面可以看到,難度炸彈是指數曲線增長的,到一定區塊高度會陡增,從而減慢出塊時間,而本次分叉不再用區塊高度了,而是用一個僞區塊高度計算,從而將難度炸彈延遲大約12個月,以太坊系統還保持以往15秒一塊的穩定速率,等到2019年冬季結束的時候,平均出塊時間會是30秒。

看一下替換區塊高度的那個僞區塊高度:

fake_block_number = max(0, block.number - 5_000_000) if block.number >= CNSTNTNPL_FORK_BLKNUM else block.number

CNSTNTNPL_FORK_BLKNUM是本次君士坦丁堡分叉生效的高度:第708萬塊。

2、爲了減小以後切換到POS,礦工發生分叉的概率,本次也減小了區塊獎勵提前讓大家適應下。

具體每塊的獎勵由3eth降到2eth,叔塊獎勵也調整爲:

new_uncle_reward = (8 - k) * new_block_reward / 8
k = block.number - uncle.number

侄塊的獎勵:

new_nephew_reward = new_block_reward / 32

分叉史

最後梳理一下以太坊分叉史,以太坊規劃了四個升級階段:

1、Froniter(邊境)\
2、Homestead(家園)\
3、Metropolis(大都會)

大都會分兩個階段:拜占庭和君士坦丁堡。\
本次君士坦丁堡分叉就位於大都會的第二階段,預計2019年1月實施。

4、Serenity(寧靜)

未來實施。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章