讀懂以太坊君士坦丁堡升級:到底是什麼
前言:以太坊君士坦丁堡升級即將到來,這次更新主要涉及五個提案:EIP145、EIP1014、EIP1052、EIP1283、EIP1234。這些改進利於讓鏈上的特定操作更便宜更容易,同時也推遲了難度炸彈和調整了區塊獎勵。作者是Mycrypto,來源於medium.com,由“藍狐筆記”公眾號社群“Leo”翻譯。
以太坊君士坦丁堡分叉即將到來,很多人都想了解這意味著什麼,以及是否應該做些什麼準備。(如果你只是ETH長期持有者,則無需為此更新做準備。)
什麼是分叉?
簡單來說,分叉是對網路的更新。它跟你更新你的計算機或應用類似,升級後可以變得更安全或擁有新功能。
你有沒有遇到過這樣的情況:開啟一個Word文件或其他檔案時,它看上去很怪異?因為它是在新版中建立的文件,可能會導致評論丟失,也可能顯示出怪異字型。硬分叉也類似。如果人們同時執行新版和舊版軟體,當它們嘗試溝通時,事情就會變得不穩定,且可能導致資訊丟失。
由於區塊鏈是去中心化的,且同時在無數的計算機上執行。每個人都可以同時執行最新版本,而不是像Word文件一樣,從一個人傳送到另外一個人。
因此,為了確保事情順利,每個區塊鏈的軟體(節點)必須升級更新。這樣,每個參與者都有相同的新功能和安全,遵循相同的規則。
來源:
https://cryptographics.info/cryptographics/blockchain/hard-soft-forks/
為什麼叫分叉?
它之所為被稱為分叉,是因為跟道路上的分叉類似,單條鏈的區塊分裂成為兩條鏈的獨立區塊。一條鏈上還是按舊規則執行,第二條鏈按新規則執行。
如果是沒有爭議的硬分叉,大多數人都停止執行舊版軟體。沒有人會在這條舊鏈上新增新區塊。這樣,該鏈條自然減速然後死亡。舊鏈上的代幣也就沒有價值。
然而,如果升級分叉是有爭議的,這意味著有些人不贊同要更新的內容。這樣,分叉後的兩條“路”可能會繼續存在,價值也會持續。正如ETC從ETH分叉出來,BCH從BTC中分叉出來一樣。
什麼是君士坦丁堡?
君士坦丁堡只是這次以太坊網路更新的名稱。這次升級沒有爭議,預計每人都同意採用新版本。
由此,就像之前以太坊的無爭議升級一樣(2016年的Homestead和2017的Byzantium),這次硬分叉產生兩條鏈,舊鏈死掉,而新鏈持續。此外,跟之前的更新一樣,普通人不會注意到任何變化或不同路徑的分叉。
這次新的ETH區塊鏈包括一些新以太坊改進提案(EIP)的實施,目的是優化以太坊。
我是否必須對這個新的以太坊區塊鏈做點什麼,或者移走我的ETH?
不用。你的ETH將會同時存在於新的ETH區塊鏈和舊的ETH區塊鏈上。所有的交易所、服務錢包或節點提供商都會升級它們的節點,因此,你只需使用更新的節點/軟體,而不會有什麼影響。
如果你執行節點(例如,你為Infura工作,或用家用計算機執行Geth或Parity),則需要升級到最新最好的軟體。而對於普通使用者來說,你無需做什麼事情,這會是平穩的過渡。
如果硬分叉有爭議,那麼,這會是不同的故事。
君士坦丁堡包括哪些EIP?
EIP145:EVM中的按位移位指令
提供原生的按位移位,其成本與其他算術運算相當。
l EVM缺少按位移位運算子,但支援其他邏輯和算術運算子。移位操作可以通過算術運算子實現,但是它成本更高,且需要更多來自主機的處理時間。
l 使用算術運算實施SHL和SHR,每個花費35gas,而所提議的指令僅花費3gas。
l TL;DR:向協議新增本地功能,以便在鏈上執行某些操作更便宜且更簡單。
EIP1014: Skinny CREATE2
l 在0xf5中新增新的操作碼,它需要4個堆疊引數:endowment,memory_start,memory_length,salt。行為與CREATE相同,除了使用keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:],而不是通常的sender-and-nonce-hash作為初始化合約的地址。
l 允許與鏈上還不存在但可依賴的地址進行互動,但最終可能只包含由特定init程式碼建立的程式碼。
l 對涉及與合約反事實互動的狀態通道的用例很重要。
l TL;DR:可讓你與由於狀態通道而尚未建立的地址互動。
EIP 1052:EXTCODEHASH 操作碼
l EIP 1052指定一個新的操作碼,它返回合約程式碼的keccak256雜湊值。
l 很多合約需要對合約的位元組碼執行檢查,但不一定需要位元組碼本身。例如,合約可能想要檢查另外一個合約的位元組碼是否是一組允許的實現之一,或者它可對程式碼執行分析,並且如果分析通過,它可將與位元組碼相匹配的任何合約列入白名單。
l 合約目前通過使用EXTCODECOPY操作碼來執行此操作,但這很貴,特別是對於大型合約,這種情況下只需雜湊值。由此,提出一個新操作碼EXTCODEHASH,它返回合約位元組碼的keccak256雜湊值。
l TL;DR:使得鏈上執行某些操作更便宜(需要更少gas)。
EIP 1283: SSTORE的淨gas計量(無dirty maps)
l EIP 1283 提議對SSTORE操作碼進行淨gas計量變更,這樣可以為合約儲存提供新的用途,同時在它不符合大多數實施工作時減少過多的gas成本。
l TL;DR:使得在鏈上執行某些操作更便宜(需要更少的gas),特別是對於目前費用“太貴”的操作。
EIP1234:君士坦丁堡難度炸彈延遲和區塊獎勵調整
l 由於難度炸彈(也稱為“冰河時代”)緩慢加速,平均出塊時間在增加。EIP1234提議將難度炸彈推遲大約12個月,並在君士坦丁堡分叉時減少區塊回報(Metropolis 分叉第二部分)。
l TL;DR:確保在PoS準備好並實施之前不凍結區塊鏈。
這會影響交易/確認時間嗎?
出塊時間會保持在15秒左右。未來的全PoS可能會有所改變,但有PoW時會存在一些延遲,且更快的交易速度可能會產生不可靠交易的區塊。ETH目前使用叔父區塊來解決這個問題。
這會影響交易費用嗎?
費用取決於交易數量。一些EIP會優化智慧合約互動,因此,智慧合約的交易費用可能會降低。但是,我們不清楚如果有類似於加密貓這樣的DApp出現,這會讓堵塞網路並增加費用。
這會影響每秒的交易次數嗎?
會有相同的平均每秒交易次數,但考慮EIP1024(譯註:應該是EIP1014,這裡估計是作者筆誤)將如何優化狀態通道,我們可以看到一些layer 2 解決方案開始走向舞臺(想想OmiseGo、LoomNetwork、Raiden等)。
這是PoS的更新嗎?
還不是。在這之前還有很多測試需要進行。EIP-1234的理由之一減少區塊獎勵以延遲難度炸彈。最終來說,未來會有beacon鏈和分片鏈。
這裡是君士坦丁堡的進度跟蹤(https://github.com/ethereum/pm/wiki/Constantinople-Progress-Tracker)。如果你希望從技術層面瞭解EIP,這還不錯。
附錄:
(以太坊EIP部分進度圖,截止到2019.1.14)
------