[FAQ] Solidity 並發執行 ? 重入攻擊 ?


 

Solidity 實現的合約中,函數操作都是原子操作,曠工本地執行,取得共識后發布到區塊鏈上。

實際發布到區塊鏈上的不存在並發,全節點同步狀態到本地。

 

Solidity 中有三種方式進行轉賬,address.transfer、address.send、address.call。

Solidity 重入攻擊是當我們用 address.call 的形式進行轉賬時,如果合約制定者沒有指定 fallback 函數,

有惡意的外部合約 可能會 調用當前合約的這個轉賬函數時 自定義一個 fallback,在 fallback 中再次轉賬,

這樣就陷入了不斷取款的循環,直到我們的合約沒有余額、Gas 不夠、調用棧超出。

這種情況下將陷入災難,著名案例事件是 TheDAO。

 

有幾種處理方式我們可以做到更安全,第一就是在轉賬前,把取款者能取的余額設為 0,第二就是使用 transfer 的轉賬方式。

 

Link:https://www.cnblogs.com/farwish/p/12567468.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM