Solidity

當地址 A 批准合約 S 從中花費 X ERC20 代幣時,任何人都可以呼叫該花費,還是只是地址 A?

  • November 2, 2022

假設事件的標準流程

  1. 作為地址所有者的使用者A批准使用來自地址的智能合約的方法來X使用 ERC20 代幣。approve``S``A
  2. 然後,使用者要求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/

引用自:https://ethereum.stackexchange.com/questions/138597