Solidity
當地址 A 批准合約 S 從中花費 X ERC20 代幣時,任何人都可以呼叫該花費,還是只是地址 A?
假設事件的標準流程
- 作為地址所有者的使用者
A
批准使用來自地址的智能合約的方法來X
使用 ERC20 代幣。approve``S``A
- 然後,使用者要求
S
花費該金額X
並完成其工作。如果在 1 和 2 之間,可以呼叫的其他人
S
將從 address 呼叫支出A
怎麼辦?ETH 本身是否有任何保護措施,例如檢查是否
S
由批准的使用者(而不是其他人)呼叫?如果有人在監視我,例如當我使用 uniswap 並呼叫它的智能合約**而不是我時怎麼辦?**在我批准之後,但在交換 tx 匯入之前?
如果存在這種風險,處理這種風險的標準方法是什麼?
是的,批准功能基於您的地址。
通常形式為
approve(spender, amount)
這意味著合約可以花費“花費者”錢包中的“數量”代幣。
其他使用者不能代表您批准的智能合約行事。(記住:您同意合約使用您錢包中的資金)
有人可以使用它的唯一方法是,如果他們以某種方式破解智能合約,然後呼叫智能合約中的一個函式來轉移你的資金。這樣,“區塊鏈”就會認為合約正在轉移資金。
這不是微不足道的,但可以看看 anyswap hacks。更不用說許多合約的管理員具有控制權限和可能被利用的“救援”功能。許多使用者使用具有可升級代理合約的協議。如果你擔心這樣的事情,你應該格外小心。
處理此問題的一種方法是擁有多個錢包並限制它們的曝光量。有一個不授予任何津貼並充當保險庫,另一個可以緩衝您的津貼和 dapp 互動。
我寫了一篇簡短的文章,涉及到這一點:https ://toshokan.samurais.io/web3-safety-the-hot-the-hard-the-cold/