---
# System prepended metadata

title: Untitled

---

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 以前的合約，就還是會有同樣的問題 
    



