您的位置:首頁>正文

ERC20智慧合約安全問題引熱議,乙太坊帳戶模型遭質疑

大家都在聊, 你豈能錯過?

今天的“SMT遭到與BEC類似的溢出攻擊”的新聞想必大家都知道了,

部分幣友還沒反應過來怎麼回事,

TimYang:

最近的ERC20的轉帳的安全問題, 直接原因都是代碼安全性漏洞, 由程式師背鍋, 但大家比較少討論其深層次的原因, 為什麼乙太坊比較容易出安全問題?

乙太坊只是一個記錄dapp執行結果的區塊鏈, 其本身並沒有加密貨幣複式記帳所需的utxo模型。 乙太坊自身的乙太幣也是由balance來表示帳號餘額, 用餘額的區塊鏈有一個明顯的缺陷, 很容易遭受重放攻擊(交易的請求再發送一次)。 乙太坊用了nonce等tricky的做法避免主鏈貨幣重放,

但對於基於dapp的代幣, 就需要依賴開發者自己來保障其安全邏輯。

採用複試記帳的utxo則所有的轉帳需要檢查輸入來源, 如果這個來源已經被使用過一次, 則表示這次轉帳是一個雙花嘗試, 而比特幣最主要的架構設計邏輯比如PoW以及長鏈勝出就是用於防止雙花攻擊。

乙太坊智慧合約運行的大致流程是, 取得寫區塊的節點運行dapp並記錄運行結果到新的區塊, 當這個結果被其他節點驗證之後這個新區塊就被整個網路認可, 驗證的方法也是執行一遍這個合約腳本, 智慧合約的設計約束是deterministic,但並無其他機制可保證這個執行的安全性及正確性。 即使有bug, 只要bug能被其他節點運行出相同結果,

記錄就會上鏈, erc20或erc721是一個智慧合約介面的約定, 方便通用的錢包可以訪問這些合約。

從dao到bec,smt這些問題都是程式師的問題嗎?在數位貨幣的時代, 重要的token資產本身是需要貨幣級別的安全程度, 乙太坊目前的設計更適合遊戲積分之類的合約運行結果, 我的看法是, 重要的token資產不適合構建在erc20基礎之上。 它沒有任何貨幣安全設計的考慮。

再重複一下, 重要的token資產不適合構建在erc20體系基礎之上。

眾幣圈大佬紛紛轉發表示認同:

長鋏:這就是為什麼Bytom要使用BUTXO[偷笑]

姚遠BTCT:論UTXO的重要性。

有網友表示不認可結論:“最安全的代碼是no code。 uxto能用於token的擴展麼?應該是批評solidity語言的一些設計細節吧?”

Tim Yang回復:“再怎麼設計細節, 再怎麼 review, 憑空出 token 的現象都不會停止,

如果發行量之外的 token 能夠從代碼中不小心蹦出來, 而且還能被區塊鏈認可, 那 token 上這個區塊鏈有何用?”

其實關於UTXO和Account模式孰優孰劣的討論早已有之, 而且也早已有可發行Token的UTXO公鏈的實現。

早在《Qtum量子鏈:選擇比特幣UTXO模型的原因及其優勢》一文中, 量子鏈闡述了自己選擇比特幣UTXO模型的原因及其優勢:

“我們選擇UTXO僅僅是因為這是最好的技術, 有很多文章極力想把Account模式打造成與UTXO模式一樣的高性能和安全, 然而事實並非如此。 不多贅述細節, Account模式過於不成熟也過於簡單, 並且沒有無法進行併發處理。 它總是讓我想到紙杯連線通話的交易模式。 對Qtum而言, 使用Hyperledger的混合模式(hybrid model)將是一個錯誤的選擇, 因為它無法與比特幣和乙太坊相容,

而這正是我們在量子鏈中需要實現的目標。 ”

比原鏈也是底層選擇使用UTXO模式的公鏈之一, 在《比原鏈設計思考: 擴展性UTXO模型》一文中, 開發者說道了UTXO的優點:

“UTXO 具有天然的匿名效果, 一個帳戶所對應的未花費交易是難以發現的, 如門羅幣就是採用混幣的方式實現隱私的。

在性能方面, 由於UTXO是獨立的資料記錄, 那麼就存在極大的並行性可以提升區塊鏈交易驗證速度。

乙太坊的帳戶模型很容易的實現了超級電腦模型。 然而, 性能一直是一道難以逾越的坎。 在性能方面, utxo天然的可以並行運行, 而基於世界狀態的乙太坊難以擴展。 ”

那麼乙太坊為什麼棄用UTXO呢, 作者說道:

“正是因為智慧合約的考慮, Gavin Wood要基於UTXO去實現圖靈完備的智慧合約(功能多樣性的超級電腦)是困難的。

而帳戶模型是天然的物件導向的, 對每一筆交易, 都會在相對應帳戶上進行記錄(nonce++)。 為了易於管理帳戶, 而引入了世界狀態, 每一筆交易都會改變這個世界狀態。 這和現實世界是相對應的, 每一個微小的改變, 都會改變這個世界。 ”

你怎麼看?歡迎去巴比特論壇討論:8btc.com

版權聲明:

作者保留權利。 文章為作者獨立觀點, 不代表巴比特立場。

發文時比特幣價格 ¥57867.29

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示