📜 [專欄新文章] EIP-1014 產生可控的智能合約地址
✍️ 飛天的狸貓
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
先前在 Solidity Taiwan 讀書會 群中看到一個討論,裡面應該是一個套利機器人,打開他的合約會發現 Contract 標記著 Reinit,大致上意思是在相同地址上曾經 Self Destruct 後又佈署新的 Byte Code。這其中就用到了 Vitalik 提出的 EIP-1014,來達成在固定的地址上佈署。
合約地址是怎麼產生的
如果對於以太坊智能合約佈署不陌生,應該會知道合約地址是依據佈署者的地址和他的 Nonce 來決定的。假如地址 0xa1 在 Nonce 為 1 的交易中建立了合約,合約地址是 0x01,則當他到了其他鏈而再次使用 Nonce 1 建立合約時,就也會得到相同的合約地址 0x01。
而在以太坊中,Nonce 是嚴格遞增的,這主要是為了避免雙花攻擊,因此很顯然的,再次佈署到同一個地址是不可行的。而在 EIP-1014 以前,在合約中建立的子合約也是透過這個方式達成。
EIP-1014 做了什麼
前面說到合約中可以建立子合約,通常使用的指令是 create,這個指令便會根據主合約的地址與合約本身的 Nonce 來算出子合約的地址。在 EIP-1014 中,提出了另外一個指令 create2,接受的參數是一個 salt 和 init code(建立合約的 Byte Code)。這個指令會透過 keccak256 雜湊,混和參數和主合約的地址來算出子合約地址。
可以留意到,salt 和 init code 都是可控的,主合約地址是固定的,因此就讓子合約地址是可控制的(當然不是說想要產生在哪裡就在哪裡)。在 create 中,Nonce 是漸次增加的,所以無法重複,並且若要控制到特定 Nonce 需要發起多筆交易。
但是當再次佈署到相同地址時,EIP-684 說明若該地址 Nonce 不為零或者存在 Byte Code 時將直接拋出錯誤,因此若要佈署到同一個位置,就必須利用 Self Destruct 來抹去 Nonce 和 Byte Code。
為什麼要 EIP-1014
EIP-1014 在起初是基於 State Channel 的需求,主要是因為某些狀況下可能還沒有要和合約做互動,但需要先知道合約地址。因此只要是需要先知道地址,但沒有要立即使用的合約就十分適合通過這個指令來建立。
例如對於交易所來說,替所有要入金的人建立私鑰有管理上的問題,若透過智能合約則相對有彈性,但卻不是所有申請地址的人都真的會入金,此時就適合利用這個指令先行取得地址,當真的有入金時再佈署合約。
如何使用 EIP-1014
除了直接寫 Opcode 以外,Solidity 0.6.2 加入了利用 create2 建立合約的語法。使用方式是 new Contract{salt: someByte}(...args),其中 new Contract(...args) 就是傳統的佈署方式,而 someByte 是一個 bytes32。
資安疑慮
回到開頭,Etherscan 之所以會標記 Reinit 則是因為可能有資安的疑慮。回顧地址產生的過程,兩個參數都沒有限制條件,因此碰撞的可能也是存在的。如果不肖人士先佈署一個正常的合約,接著通過 Self Destruct 刪除後再佈署假的合約,就可能讓沒注意到的使用者上當。
但或許因為碰撞的機會太低,所以並不太構成問題。而若真的要從使用者的角度防範,可以通過檢查合約有沒有 Self Destruct、Delegate Call、Call Code 指令(如果沒有的話無法刪除合約,再次 create2 時就會被 revert)來避免。
2021/4/23 補充
後來看了幾個討論,也想了一下,資安的疑慮應該遠不只上面這麼簡單。
例如一個宣稱鎖定 ERC-20 代幣的合約,雖然使用者可以檢閱程式碼,並確認其中解鎖 function unlock() 必須在 uint256 block 之後才能執行,並且 block 是無法變更的,但攻擊者可能透過上述方法來消除 block 狀態,進而提前執行 unlock。
參考資料
https://consensys.net/diligence/blog/2019/02/smart-contract-security-newsletter-16-create2-faq/
https://www.chainnews.com/zh-hant/articles/803272341363.htm
如有錯誤敬請指正,原文載於:https://limaois.me/archives/265
EIP-1014 產生可控的智能合約地址 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
「eip意思」的推薦目錄:
- 關於eip意思 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於eip意思 在 動區動趨 BlockTempo - 由社群而生的區塊鏈媒體 - Media for Blockchain Facebook 的最佳解答
- 關於eip意思 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於eip意思 在 Re: [挖礦] 乙太坊2.0到底要怎麼升級? - 看板DigiCurrency 的評價
- 關於eip意思 在 Join - Facebook 的評價
- 關於eip意思 在 [閒聊] EIP-1559 真的有實際用處嗎? - DigiCurrency - PTT情感 ... 的評價
- 關於eip意思 在 以太坊EIP-1559 升级是什么意思?Gas 费用会下降吗? 的評價
- 關於eip意思 在 Re: [挖礦] 乙太坊2.0到底要怎麼升級? - DigiCurrency - PTT網頁版 的評價
eip意思 在 動區動趨 BlockTempo - 由社群而生的區塊鏈媒體 - Media for Blockchain Facebook 的最佳解答
#以太坊 #Vitalik #技術專欄
【ETHFANS 專欄|借鑑 V 神,以太坊 2020 路線圖與展望】
⚡️前陣子你可能錯過了一條消息,Vitalik Buterin 在推特上發了一個 <個人心中的以太坊路線圖>,僅此內文試著從這份路線圖預覽以太坊 2020 年可能出現的亮點
從當前來看,以太坊上可能發生的進展的粗略順序如下,而 #信標鏈 是最多人致力於在 2020 年實現的項目
1. 信標鏈(Eth2 Phase 0)在 2020 年推出
2. LS12-381 曲線預編譯在 2020 年推出(也許這個才是最早推出的)
3. 如果有人來推動帳戶抽象化和 EIP 1559,他們有可能會在 2020 年推出
4. Eth2 Phase 1
5. Eth 1.x 無狀態性
6. eth1 -> eth2 大合併
7. (後續)執行模式、隱私和安全性提升、高級密碼學元件
eip意思 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] What do ERC and EIP stand for?
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC stands for Ethereum Request for Comment
最近流行 CryptoKitties , 上次 Taipei Ethereum Meetup 社團活動 討論它的原始碼程式時, 發現 github 裡 cryptokitties-bounty 程式碼提到它是用 ERC-721 token 標準來定義每隻加密貓. 也就是:
“CryptoKitties are non-fungible tokens (see ERC #721) that are indivisible and unique.”
也許大家比較熟悉的是 ERC #20. 它是比較早期訂出的 Token 標準. 所以後來想要在一般虛擬幣交易所能交易的 tokens (代幣), 就會用這個標準來寫程式. 也就是後來 ICO 快速延燒的主要原因.
那麼, ERC-721 跟 ERC-20 有什麼不同, 簡單說就是: ERC-721 是用來定義 Non-fungible token (不可替代的代幣). 每個 token 是 unique (唯一的), 不像 ERC-20 每個 token 都相同.
以上用加密貓舉例, 是讓大家體會一下什麼是 ERC, 但 ERC 不是只用來討論代幣, 還有其他各式各樣的 ERCs, 因為它是 Ethereum Request for Comment 的縮寫, request for comment 是徵求大家意見 的意思.
EIP stands for Ethereum Improvement Proposals
很像有人寫過類似的 EIP 介紹, 但我還是從 ERC 的角度再介紹一次.
它的清單在 EIPs 裡. 你可以看到討論的過程, 追蹤這些 EIPs 的新訊息, 也許有幫助理解 Ethereum 開發團隊的未來動向; 甚至你也可以全程參與.
大家都希望 Ethereum 網路的未來技術走向不要集中在幾個硏發人員的手裡, 所以才開放給大家提出 Proposals (建議), 用來改進 Ethereum, 決定未來開發方向. 這就是每個人每件跟 Ethereum 未來發展有關的事情, 都能用 EIP 建議格式 (EIP template) 提出來. 只要被大家選上, 就會正式列入 EIPs 清單.
而, 你會看到 EIP 定義或討論 issues 裡, 常常會看到它相關的 ERC, 也就是, 討論過程中, 有一些要徵求更多人意見時, 就會把它細節定義放在 ERC 裡. 而且他們會用同一個號碼, 比如 ERC-20 就是對應到 EIP-20.
簡單講, 討論項目, 一開始會用 EIP 提出建議, 結果與細節會定義在 ERC, 最後會 final (拍板定案), 放在 EIP 清單裡 Finalized EIPs 區.
(這是我的個人研究與認知, 如果不對, 請留言)
What do ERC and EIP stand for? was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
eip意思 在 Join - Facebook 的推薦與評價
查詢網址:https://swis.mohw.gov.tw/eip ➡109 年申請符合及申請不符重審者:免申請 ... Chang Delia. 請問這是什麼意思 . May be an image of text. 7 mos Report. ... <看更多>
eip意思 在 [閒聊] EIP-1559 真的有實際用處嗎? - DigiCurrency - PTT情感 ... 的推薦與評價
看了一些EIP-1559 的資料感覺1559 根本沒啥實際用處啊? ... 的附帶效應而非目的升級前是手續費升級後基本費+小費感覺上意思只是以前的手續費加上一比額外稅收而已? ... <看更多>
eip意思 在 Re: [挖礦] 乙太坊2.0到底要怎麼升級? - 看板DigiCurrency 的推薦與評價
這邊就先不提乙太坊的去中心化,因為乙太坊本來就是精英領導制。
是以Vitalike為核心的開發者共識決。
礦工?你們是來打工的,從第一天埋入難度炸彈的就是如此了。
PoW可以切換成PoS就代表礦工完全沒有話語權,礦工打工仔再反對EIP-1559也是沒用的。
我這邊主要解釋早期Bitcoin是怎麼達成最高程度的去中心化。
不要說那些機房幣,ICO的PoS幣啦,那些都是球員兼裁判,以去中心化來說就是笑話。
機房在我專案項目方,幣也是我項目方爽發就發,當然驗證也是我項目方說了算。
連現在的BTC其實也早就沒有早期Bitcoin那樣去中心化了。
美國能成為民主自由的資本主義強國,在於他們的開國元勳幹了一件嚇死人的事情。
就是把聯邦政府大卸三塊,變成行政、立法、司法互相"制衡"。三權分立。
也就是把政府去中心化了。從而可避免政府因為權力過度集中造成腐化。
很顯然這也是中本聰想的事情,權力不可只集中在開發者身上。所以也大卸三塊。
中本聰替驗證者設計出礦工角色、替社群一般使用者設計出SPV錢包。
而礦工是準備好硬體後,幾乎無門檻就可以加入的,實際上也無法知道哪些人是礦工。
不像是現在的PoS幣大都會需要一定的質押數量才可加入,甚至還有那種搞miner ID的。
中本聰甚至明白地在白皮書中寫到了one-CPU-one-vote,代表礦工可用算力投票。
在早期Bitcoiner社群的想法裡:
開發者、礦工、社群都會依照自己的利益去投票去"互相制衡"
開發者:規則的制定者。
為了理念與為了自己大量持有的幣。
用人月工時去投票。選擇想要的開發的提案投入精力去開發。
礦工:規則的選擇與遵循者。
為了自己的挖礦利益,用算力去投票,選擇規則。
ASIC況機的沉沒成本可是相當驚人的。
譬如這就是segwit2x要實施前的算力投票。
社群:幣價市場的參與者。幣圈生態系主力推手。
為了自己未來利益或是現在的商業交易利益。用資金去投票。
而這一切互相制衡的程序都要完全透明公開,不能有任何一點藏私。
早期Bitcoin就是白皮書公開,程式碼完全公開,不註冊任何專利。
甚至直接做成開源軟體讓任何有意見不爽的人可以自己去fork成想要的形狀。
中本聰自己還順便弄了一個Bitcoin論壇,讓大家暢所欲言
https://bitcointalk.org/
這也就是為什麼早期Bitcoin會如此無敵的原因。
因為這種去中心化與透明公開可以保證Bitcoin不會腐化。
你不爽就去論壇大聲嗆出來,才不像現在的r/Bitcoin禁語一大堆。
至於現在喔,99%的幣真的是看不到早期的Bitcoin的車尾燈啦。
區塊鏈與去中心化只是個buzzword,拿來拜的罷了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.127.156 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1640544512.A.C35.html
※ 編輯: DarkerDuck (36.237.127.156 臺灣), 12/27/2021 03:19:12
※ 編輯: DarkerDuck (36.237.127.156 臺灣), 12/27/2021 03:19:33
... <看更多>