本文將介紹?SELFDESTRUCT?對以太坊生態弊大于利的一些理由,正是因為這些理由,我們應該以某種方式移除?SELFDESTRUCT?。鑒于有些合約已經使用了?SELFDESTRUCT?,我提出了一些只需要付出最小的代價就能消除?SELFDESTRUCT?危害的方法。
一段歷史:?SELFDESTRUCT?已經沒有必要了
SELFDESTRUCT?早在以太坊的極早期便已引入。實際上,它在2013年12月發布的以太坊協議“規范”預告中就已經出現了。那時候,幾乎沒人仔細考慮過狀態規模管理的長遠問題。但是,有個想法我大概還有些印象,為了防止沒用的垃圾狀態不受限制地膨脹,我們需要讓任何創建出來的對象都可以被銷毀。具體的思路是,當外部賬戶的余額為零時觸發自毀,而合約在沒用后可以調用代碼里的一行自毀語句觸發自毀。還有一個gas退款機制用于激勵大家銷毀沒用的狀態。
2014年1月,AndrewMiller指出了一個非常嚴重的問題:在2013年12月的規范設計中,EOA很容易被重放攻擊。如果我有100個幣,我通過一筆交易發給你10個幣,你可以簡單地在鏈上重放這筆交易十次,從而轉走我的全部余額。這個問題很快就修復了,為此我們增加了nonce字段。然而,nonce字段的引入讓刪除EOA的愿望徹底破滅了:nonce是不能被重置為零的一旦該賬戶被再次使用,nonce又要從零開始,就會被重放攻擊)。
觀點:在FATF審查之前,加密合規性太慢:貿易集團全球數字金融咨詢委員會主席馬爾科姆·賴特(Malcolm Wright)在星期四的2021年共識講話中對即將進行的審查感到悲觀。他說,“每個國家都在做自己的事,這實際上使我們很難遵守法規。”注:設立反洗錢措施標準的政府間機構金融行動特別工作組(FATF)將于下個月舉行全體會議。議程上正在評估的是,FATF的39個成員(37個司法管轄區和兩個地區組織)在采納其監管加密貨幣的建議方面取得了多大的進步,其中包括有爭議的“旅行規則”,要求企業共享客戶信息。預計不久后將有一份最終指導文件。(CoinDesk)[2021/5/28 22:51:23]
2015年,有人提出了一些方案試圖繞過這個問題,使余額為零的賬戶可以被安全地刪除。然而,當時很明顯,幾乎沒有合約開發者真正使用自毀功能:因為要弄清楚什么時候自毀太難了,而獎勵也太少了。
到2019-21年,事情已經變得很明顯了,我們需要的是其他形式的狀態管理,比如租金機制或者是長期未動的狀態“到期作廢””)。而如果我們采用這兩個方案中的任何一個,只要它是有效的,那么合約是否有能力主動刪除自己就一點兒也不重要了。
觀點:由于美國對全球匯款市場的重要性,SEC對Ripple的訴訟或產生深遠影響:12月28日,Cinneamhain Ventures合伙人兼專業分析師Adam Cochran研究了如果Ripple輸掉訴訟,不再被允許在美國市場使用XRP將會發生什么。他指出,有“很多支持XRP的聲音”表示,如果Ripple被切斷在美國市場的業務,那也“沒什么大不了的”。Cochran對此表示懷疑:“美國占全球境外匯款的33%,70%的交易對手結算代理是美國公司。換句話說,如果沒有美國,幾乎不可能有一個匯款市場。那么你仍然需要在處于對手方劣勢的情況下,與TransferWise、WorldRemit(Stripe)、http://Coins、Abra、Stellar、Dwolla等競爭剩余市場。”
匯款市場的運作方式是,公司通過在兩種貨幣之間進行套利來賺錢。正因如此,供應商需要最好的流動性來進行結算,而結算大多是由美國商業銀行完成的。Cochran表示:“如果美國公司不能與你打交道,你的出價將比競爭對手更高。”XRP本應作為銀行之間的轉賬媒介被創建,SEC的勝利也可能對這個用例產生影響。此外他還表示,Kraken也有可能下架XRP。(Crypto News Flash)[2020/12/28 15:53:22]
SELFDESTRUCT?是唯一一個破壞重要恒常性質的操作碼
觀點:最符合SEC標準的就是那些無IXO(預售)方式的POW幣:微博用戶“BCH愛好者BruceLee”通過微博表示:從SEC起訴XRP這事里面我們可以看出,所有加密幣里面,最符合SEC標準就是那些無IXO(預售)方式的POW幣。所以我們看到灰度和PayPal的F4,都是POW幣: BTC、ETH、BCH和LTC。而星展銀行估計是被XRP的公關給忽悠了(XRP很擅長和銀行打交道),把F4里面的LTC換成了XRP,開局就踩雷,真是悲劇。而ETH初始發行方式其實本質是和IXO是一樣的,都是預售模式。不過ETH生態強大,綁定了太多利益方,光是穩定幣市值就差不多200億刀。SEC要動XRP,大家都上去踩一腳。SEC如果想動ETH,估計會遭到幣圈強烈反對,所以ETH安全的很。
但是其他搞預售的幣(現在大多數幣都是預售模式發行的),都有被SEC起訴的風險,只不過當市值很小的時候,SEC應該注意不上。
如果SEC這次搞完XRP就暫時消停了,大家可以松口氣。如果搞完XRP立馬搞下一個(有傳聞說要搞Link,不知真假),那么對幣圈所有搞預售起家的幣都是重大利空。大家可以檢查一下自己的投資組合里面,有哪些幣當初是IXO方式發行的,提前做好準備。[2020/12/24 16:23:27]
SELFDESTRUCT?不僅沒什么用,還會產生危害。它破壞了一些重要的恒常性質,這些性質本來是很好的,但是僅僅因為這一個操作碼,我們就失去了這些性質。
觀點:企業對加密貨幣的態度轉變可從小公司逐步過渡到大公司:加密貨幣金融服務公司Unchained Capital業務發展主管Parker Lewis日前在接受采訪時表示,就大公司而言,使用和投資加密貨幣的轉變不會像小公司那樣容易。但是,他還指出,這種態度轉變可以從較小的公司開始,最終向較大的實體過渡。他說:“我認為,這首先將從中小企業開始,然后逐步發展到微軟、谷歌和Facebook等企業。即使是已采用比特幣的大型公司,他們也將開始持有比特幣。”(AMBCrypto)[2020/10/11]
SELFDESTRUCT?是唯一一個能在單個區塊中變更無限個狀態對象的操作碼
其他所有的操作碼都只能操作賬戶中的單個值或者存儲樹上的單個key,所以它們能變更多少固定大小的對象是有限制的。但是,SELFDESTRUCT可以刪除整棵存儲樹。
在目前的狀態樹結構中,這是可以容忍的。但是,考慮一種特殊的情況:當調用SELFDESTRUCT刪除許多存儲插槽后,下一個事務又在同一個地址上創建一個合約并訪問同一些存儲槽。為了處理這種情況,需要額外設計復雜的緩存機制。此外,SELFDESTRUCT還阻礙了我們變更狀態存儲格式。
聲音 | 觀點:嘉楠科技的IPO可能“更具象征意義” 而非實質意義:Iterative Capital Management負責人Leo Zhang表示,雖然嘉楠科技的IPO是整個行業的一個“里程碑”,但這一IPO可能“更具象征意義”,而非實質意義。Leo Zhang表示,雖然礦機是嘉楠的兩大主要業務之一(另一個是人工智能芯片),但該公司的重點是電路設計,而非完全集成的加密貨幣公司。隨著其技術落后于比特大陸以及神馬,隨著時間的推移,嘉楠的影響力將會逐漸減弱,“盡管它擁有巨大的市場份額”。(The Block)[2019/12/11]
以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
翻譯&校對:戡亂&?阿劍
Tags:DESSTRTRUCUCTDUDES幣StrongerRSK Infrastructure Frameworkauction幣黑客
親愛的用戶:幣安創新區將于2021年03月19日16:00上線PerpetualProtocol,并開放PERP/BTC、PERP/BUSD、PERP/USDT交易對,PERP充值通道現已開放.
1900/1/1 0:00:00致力于構建新一代金融網絡基礎設施的Findora主網預計將在一季度上線,Findora主網相較于其他成熟的公鏈都有哪些不同,它又會為行業帶來哪些改變?3月17日16:00.
1900/1/1 0:00:00一、關于EAC新版錢包說明國外首席開發SK根據EAC社區治理和發展的要求,在現有Earthcoin區塊鏈上進行錢包升級了,本次升級錢包新增功能如下:1、聯合挖礦功能.
1900/1/1 0:00:00尊敬的中幣用戶: ????中幣將于香港時間2021年3月19日上線DNT。具體安排如下:????1、2021年3月19日16:00開啟DNT充值;????2、2021年3月20日16:00開始D.
1900/1/1 0:00:00尊敬的XT用戶: VSYS錢包升級維護,XT現已暫停VSYS充值與提現業務。給您帶來的不便。敬請諒解!感謝您對XT.COM的支持與信任.
1900/1/1 0:00:00各位聽友大家好,我是盯盤寶-選幣,自盯盤寶團隊成立以來,一直秉持“專業、負責、公平、公正”的原則服務廣大用戶.
1900/1/1 0:00:00