20230619 合約安全 ### Unbounded For loop - Loop 所花的 gas超過一個區塊的 gas 上限 - 如果有合約function 依賴這個 function 回傳值,就可能會有錯 - 嘟嘟房事件, whitelist 名單高達八百多個,但前端把 gas limit 設好了,導致交易沒辦法進行 ### External Call - transfer / send 時,如果賣 NFT 的人是 contract wallet 且沒有實作 reciver / fallback,整筆交易就會被 revert,攻擊方可以用這種行為來攻擊 market place - 解法:這種 ether 相關的轉帳,不要直接轉給 user ,讓 user 可以去 claim - opensea 上是用 wrapped ether 作為買賣貨幣,因為 erc20 轉帳可以避開這個問題 ### Akutars NFT Salve - 荷蘭式拍賣, 在 for 迴圈裡面寫了 transfer ,有潛在的問題,可能會遇到上述 External Call 的問題,但因為合約有檢查 gas 消耗,所以不會有 Unbounded For loop 的問題 ### Parity 資金凍結 - Parity Multisig wallet - Parity Technologies 開發 - 當時最著名的多簽錢包 - 如果使用 proxy ,記得 implement contract本身的function盡量不要直接使用 self descruct,不然就要記得 ini 以免被取得 owner 身份 ### Reentry Attack - 重入攻擊,利用 receive 函式來在合約狀態更新之前,就再呼叫一次合約同一個 function - 如果是在 call 完轉移函數後,去 -= user balance ,這時還會有一樣的問題? - 如果合約是 0.8.0 以上的版本去寫的,那會有 over/underflow 保護, call 就會失敗,重送就會失敗,但如就是 0.7.0 以前的合約,就還是會有同樣的問題