Erc-20
為特定的 ERC20 代幣支付功能?
當一個方法是
payable
時,可以在呼叫它的同時向合約發送乙太幣,並且該函式可以檢查通過 發送的金額msg.value
。如何讓函式接收乙太以外的東西,例如 ERC20 代幣?
ERC20 代幣只是另一個合約。ERC20 標準為您提供了兩個共同作用以幫助支付契約的功能:
approve()
和transferFrom()
.如果代幣合約稱為“token”,而您嘗試支付的合約稱為“store”,則流程如下所示:
- 使用者呼叫
token.approve(store, amount);
Thisstore
授予轉移amount
使用者代幣的權限。- 使用者呼叫
store.buy();
,它呼叫token.transferFrom()
來執行實際的傳輸。該
buy()
函式可能如下所示:function buy() external { require(token.transferFrom(msg.sender, this, amount)); // having now received <amount> tokens from the sender, deliver whatever was // purchased, etc. }