本文將介紹?SELFDESTRUCT?對以太坊生態弊大于利的一些理由,正是因為這些理由,我們應該以某種方式移除?SELFDESTRUCT?。鑒于有些合約已經使用了?SELFDESTRUCT?,我提出了一些只需要付出最小的代價就能消除?SELFDESTRUCT?危害的方法。
一段歷史:?SELFDESTRUCT?已經沒有必要了
SELFDESTRUCT?早在以太坊的極早期便已引入。實際上,它在2013年12月發布的以太坊協議“規范”預告中就已經出現了。那時候,幾乎沒人仔細考慮過狀態規模管理的長遠問題。但是,有個想法我大概還有些印象,為了防止沒用的垃圾狀態不受限制地膨脹,我們需要讓任何創建出來的對象都可以被銷毀。具體的思路是,當外部賬戶的余額為零時觸發自毀,而合約在沒用后可以調用代碼里的一行自毀語句觸發自毀。還有一個gas退款機制用于激勵大家銷毀沒用的狀態。
2014年1月,AndrewMiller指出了一個非常嚴重的問題:在2013年12月的規范設計中,EOA很容易被重放攻擊。如果我有100個幣,我通過一筆交易發給你10個幣,你可以簡單地在鏈上重放這筆交易十次,從而轉走我的全部余額。這個問題很快就修復了,為此我們增加了nonce字段。然而,nonce字段的引入讓刪除EOA的愿望徹底破滅了:nonce是不能被重置為零的一旦該賬戶被再次使用,nonce又要從零開始,就會被重放攻擊)。
觀點:美聯儲加息周期接近結束,提振加密市場:7月29日消息,隨著全球市場風險偏好的復蘇以及對以太坊網絡升級的樂觀情緒,比特幣和以太坊或迎來自2021年以來表現最好的月份。行情顯示,比特幣7月份上漲了28%,以太坊上漲了72%。
美國經濟放緩正讓投資者認為,美聯儲將在年底前結束加息,并在2023年轉向降低借貸成本,為投機性資產創造更有利的流動性背景。
咨詢公司Venn Link Partners首席執行官Cici Lu表示:“有跡象表明,美聯儲可能正在接近加息周期的結束,這提振了所有風險資產,加密貨幣也從中受益。杠桿頭寸的平倉似乎已經結束,市場可能已經見底。”
加密貨幣正試圖從今年的暴跌中恢復過來,該暴跌導致MVIS CryptoCompare數字資產100指數下跌超過50%。而以太坊區塊鏈也將轉向更節能的權益證明系統。
Fundstrat技術策略主管Mark Newton表示,未來幾天,以太坊可能會漲至1915至2000美元,并稱以太坊在短期內看起來比比特幣更有吸引力。(彭博社)[2022/7/29 2:45:57]
2015年,有人提出了一些方案試圖繞過這個問題,使余額為零的賬戶可以被安全地刪除。然而,當時很明顯,幾乎沒有合約開發者真正使用自毀功能:因為要弄清楚什么時候自毀太難了,而獎勵也太少了。
觀點:區塊鏈能讓支付服務更加高效 需要行業競爭以改變數字貨幣角色:加密行業專家表示,隨著在線支付公司Wirecard本月進入破產程序,主流金融服務商,如VISA、PayPal和Mastercard都在爭先恐后地填補數字支付的空白,并成為第一家提供加密支付卡的公司。區塊鏈服務提供商TAAL首席執行官Jerry Chan和虛擬貨幣平臺Coincurve總裁兼聯合創始人Rod Hsu都認為,要改變數字貨幣被用作支付或技術手段的方式,這個行業所需要的正是競爭。Jerry Chan指出,除了主流加密意識需要之外,區塊鏈還能讓支付服務更加高效。Rod Hsu表示,在Wirecard事件之后,加密部門應該學習“透明度”。他補充說,區塊鏈是一種不可改變的開放技術,可以在“任何時候”對資金流動進行全面審計。(Cointelegraph)[2020/9/6]
到2019-21年,事情已經變得很明顯了,我們需要的是其他形式的狀態管理,比如租金機制或者是長期未動的狀態“到期作廢””)。而如果我們采用這兩個方案中的任何一個,只要它是有效的,那么合約是否有能力主動刪除自己就一點兒也不重要了。
觀點:ETH與標普500指數高度相關,更適合衡量山寨幣市場整體健康狀況:自3月中旬新冠病引發市場崩潰以來,比特幣一直與標普500指數高度相關,迄今一直是許多分析師關注的焦點。這是在假設BTC支配加密市場的情況下完成的。不過,以太坊與標普500指數的相關性也非常明顯,可能比BTC更好地衡量山寨幣市場的整體健康狀況。后者在加密市場中的主導地位經常波動,而以太坊是衡量山寨幣投資市場整體健康狀況的更好指標。只有時間才能證明以太坊與傳統市場的相關性是否會成為分析師關注的焦點、甚至產生以太坊自己的S2F模型。
數據顯示,以太坊與比特幣的相關性高達0.89。以太坊與標普500指數的相關性與比特幣與標普500指數的相關性相似。以太坊和標普500指數之間的相關性(0.31)高于比特幣和標普500指數之間的相關性(0.197)。(Ethereum World News)[2020/6/25]
SELFDESTRUCT?是唯一一個破壞重要恒常性質的操作碼
SELFDESTRUCT?不僅沒什么用,還會產生危害。它破壞了一些重要的恒常性質,這些性質本來是很好的,但是僅僅因為這一個操作碼,我們就失去了這些性質。
觀點:埃及央行限制提現,比特幣可以解決此類問題:據《紐約時報》周日報道,埃及央行已指示全國各銀行實施臨時的每日存取款限額。這一最新舉措旨在控制該國的通貨膨脹,并防止民眾在新冠疫情期間囤積現金。據悉,個人每日提款限額已降至1萬埃及鎊(635美元),公司則降至5萬埃及鎊(3100美元)。只有那些需要提取現金來支付員工工資的企業將不受此限制。這些措施是在該國銀行掀起一波大規模取款潮之后出臺的。埃及央行行長Tarek Amer周日表示,在過去三周中,有300億埃及鎊(約合19.1億美元)從該國銀行取出。加密貨幣倡導者Vis在推特上就此發表評論稱:“這就是比特幣被創造出來的原因……如果有人能加以限制,那就不是你的錢。”(Bitcoinist)[2020/4/2]
SELFDESTRUCT?是唯一一個能在單個區塊中變更無限個狀態對象的操作碼
其他所有的操作碼都只能操作賬戶中的單個值或者存儲樹上的單個key,所以它們能變更多少固定大小的對象是有限制的。但是,SELFDESTRUCT可以刪除整棵存儲樹。
觀點:加拿大將執行新反洗錢法規,前期做好準備的加密公司或受益匪淺:此前報道,加拿大金融交易與報告分析中心(FINTRAC)3月初發布的一份部門報告稱,6月1日FATF新規生效后,該中心將開始更加嚴格地監管虛擬貨幣公司、交易和活動。對此,加拿大加密貨幣交易所Bitbuy財務與合規主管Dean Skurka表示,“對虛擬貨幣交易商的最大影響之一將是其內部報告和外部報告要求。過去幾年一直在為這一制度做準備的公司將受益匪淺,因為其系統將在2020年6月1日截止日期前建立。那些沒有這樣做的人將不得不大幅增加投入,因為這是一項很大的努力,不應該掉以輕心。”Skurka表示,最終該法令將通過減輕與加密相關的一些洗錢風險來改善消費者的環境。盡管如此,Skurka在稱贊引入監管透明度的同時,推斷加密公司可能會面臨與傳統MSB相同的銀行業挑戰。執行轉移規則(travel rule)不僅僅是技術難題,對于那些有隱私意識的人來說是主要痛點。不過,據Skurka稱,只要轉移規則得到正確應用,并以保護用戶隱私的方式,它可能會迎來一個透明的新時代,因為“它將解決許多與現金、SWIFT電匯和執法部門無法追蹤犯罪分子有關的問題”。(Cointelegraph)[2020/3/30]
在目前的狀態樹結構中,這是可以容忍的。但是,考慮一種特殊的情況:當調用SELFDESTRUCT刪除許多存儲插槽后,下一個事務又在同一個地址上創建一個合約并訪問同一些存儲槽。為了處理這種情況,需要額外設計復雜的緩存機制。此外,SELFDESTRUCT還阻礙了我們變更狀態存儲格式。
以SELFDESTRUCT會阻礙的兩類狀態存儲格式為例:
任意的“單層”方案
存儲槽可以存儲在一些地址“附近”,而不是存儲在合約里的方案有用,比如在ERC20轉賬或Uniswap交易的場景下)
請注意,這不是在空想,從根本上變更狀態存儲格式的討論已經開始了,如果狀態存儲的數據結構能夠接近單一的的鍵/值存儲結構,并且單個區塊中可以變更的狀態數量有一個較低的上限,那將大大擴展我們的選擇空間。
SELFDESTRUCT?是唯一一個會導致合約代碼變動的操作碼
如果在一個特定的地址上存儲了一段代碼,那么這段代碼就會永遠保留在鏈上。這樣的恒常性質是有用的,因為在構建應用時不需要擔心這些代碼會出現變動。
賬戶抽象化非常依賴該恒常性質用以支持庫調用。因為代碼存在變動的可能,還會導致應用的安全性變得復雜很多:2017年Parity的多簽錢包就曾因為其引用的庫代碼合約被偶然刪除而徹底癱瘓。
而唯一破壞代碼不變性的操作碼就是?SELFDESTRUCT?。
SELFDESTRUCT?是唯一一個可以未經賬戶同意就能修改賬戶余額的操作碼
SELFDESTRUCT?有一個內置的“轉賬”的功能,其并不走正常的轉賬流程,因而可以繞過避免合約地址接收Ether的守護功能,以及對轉賬事件的日志記錄。這為智能合約錢包埋下了隱患,讓一些潛在有用的技巧沒法使用,加重了開發者和審計者的心智負擔。
SELFDESTRUCT?當前的用例
如今?SELFDESTRUCT?有兩類重要的應用:
GasToken:當gas價格低時通過創建合約用掉gas,當gas價格高時通過調用?SELFDESTRUCT?獲得gas退款。
利用SELFDESTRUCT實現代碼的動態變更:這可用于dApp或DAO及其他類似用例的“升級”。
可以被安全地銷毀。GasToken的開發者已經發出了警告“雖然對以太坊網絡的變更會導致GasToken無法使用、不可贖回、不能互換以及/或毫無價值,但是GasToken的開發者極可能會擁護該變更”。移除selfdestruct退款只會導致有些操作的費用變得更貴。
從長遠來看,是沒必要的,還有其他一些被廣泛使用的范式可用于支持動態代碼變更。最容易實現的是?DELEGATECALL?轉發器,合約從一個存儲插槽中獲取一個代碼地址,然后調用對應地址的代碼;修改這個存儲插槽就能更新代碼。不過,從短期來看,有少數應用已經使用了。
提案1:完全移除?SELFDESTRUCT
從某個區塊開始,完全停用?SELFDESTRUCT?。在這個及之后的區塊里,如果EVM在執行時遇到?0xff?操作碼,只要拋出異常直接退出即可,就像EVM執行時遇到不存在的操作碼一樣。
在完全停用前,為了警示用戶避免使用?SELFDESTRUCT?,我們可以漸進式地增加其gas費用:如果?block.number10**6>=FLAG_BLOCK?,則?SELFDESTRUCT?的gas費用增加到?10**10//(FLAG_BLOCK-block.number)?。
提案2:閹割?SELFDESTRUCT
我們也可以保留這個操作碼,但是改變其行為,一方面消除其對狀態樹的破壞,另一方面增加一個新特性,讓合約可以標識為不可自毀,從而確保代碼不可變。
暫時提議新增的行為包括:
當一個合約調用?SELFDESTRUCT?時,并不會刪除合約賬戶,而是清空代碼,并且將nonce值增加?2**40?。沒有退款。
通過調用將合約中的ETH轉移到目標地址。
可以在代碼為空的地址上創建合約。
在合約里調用?SSTORE?和?SLOAD?操作地址?A?時,實際操作的是?A_offset=(AA.nonce//2**40)%2**160?的存儲樹。
注意,從EIP-2929的角度來看,?A_offset?需要“可達”。如果該賬戶不在可達賬戶集合中,則需要額外支付2600gas以加入可達集合。
另一種選擇是調整將storagekey轉換為treekey的哈希函數,用?sha3(storage_keycontract_nonce//2**40)?代替?sha3(storage_key)?。需要注意的是,無論如何都需要做一些類似的調整,以方便合約級別的無狀態key空間擴展。
合約可以在代碼中指定?0xA8?作為第一個字節,EVM會將其識別為無操作,但使用它來開啟一個標志,在執行過程中完全禁用?SELFDESTRUCT?的功能。
這兩種解決方案也可以結合起來:當前立即閹割,將來完全移除。或者,這個操作碼也可以永遠不被完全移除,但是最終只保留一個功能,即向目標地址發送合約當前的全部ETH余額,我們可以將這個操作碼重命名為?CLEAR?。
原文鏈接:
https://hackmd.io/@HWeNw8hNRimMm2m2GH56Cw/selfdestruct
作者:??Vitalik
翻譯&校對:戡亂&?阿劍
DeFi周刊是金色財經推出的一檔每周DeFi領域的總結欄目,內容涵蓋本周重要的DeFi數據、DeFi項目動態等.
1900/1/1 0:00:00尊敬的用戶: HuobiGlobal已于3月18日完成“Huobi用戶KAVA5主網上線福利,交易KAVA贏取特斯拉和2萬美元KAVA”活動的獎勵發放.
1900/1/1 0:00:00尊敬的用戶: HuobiGlobal即將開啟“DOT限時挖礦”活動!即刻鎖倉,領取豐厚獎勵!認購開始時間:2021年03月22日11:00(GMT8)認購截止時間:2021年04月02日23:5.
1900/1/1 0:00:00NFT的狂瀾不但席卷藝術界,也正在顛覆體育、音樂、游戲等領域,甚至傳統上沒有收藏價值的東西。這對投資市場將會形成怎樣的風暴?在經過兩周瘋狂的在線競標后,3月11日化名Beeple的藝術家在佳士得.
1900/1/1 0:00:00TokenInsightCEOWayne:請您簡單介紹一下Bit.com,和現有的其他衍生品交易所比.
1900/1/1 0:00:00為了歡迎首次在幣安合約交易的新用戶,幣安合約推出新手大獎活動,獎勵每周一、周二首次交易的新手用戶.
1900/1/1 0:00:00