Erc-20
ERC20 - transfer 與 transferFrom 有什麼區別?
我一直在查看OpenZeppelin ERC20 文件,我注意到有兩種方法可以轉移 ERC20 令牌:
- 使用
transfer(address recipient, uint256 amount) → bool
- 結合
approve(address spender, uint256 amount) → bool
_transferFrom(address sender, address recipient, uint256 amount) → bool
有什麼不同?為什麼使用一種方法與另一種方法?
我正在建構一個 dapp,它可以讓使用者將他們的一些代幣投資到 de-fi 收益協議中,我注意到他們實施了方法 2,但我不確定他們的理由。
免責聲明:我是智能合約開發的菜鳥,所以我正在努力提高我的理解。
如果您需要將代幣從您的地址轉移到另一個地址,請使用
transfer()
,如果您需要將代幣從一個地址(不是您)轉移到另一個地址,請使用transferFrom
。例如,如果您的函式需要amount
從呼叫者那裡獲取令牌,您會這樣做IERC20(token).transferFrom(msg.sender, address(this), amount);