Solidity

接受 ERC20 代幣作為付款

  • May 18, 2021

假設我已經部署了我的 ERC20 代幣,並且供應已經分散,是否有任何方法可以創建一個單獨的合約來接受該 ERC20 代幣作為付款並具有向合約發送特定資訊的使用者欄位?

有點像帶有代幣和一些資訊的合約。

如果您想將 ERC20 代幣連同數據一起接收到新合約中,您可以使用 ERC 223 代幣標準創建新合約。在這裡閱讀(不要混淆命名法,它的 ERC223 而不是 ERC23)

轉賬代幣時,也可以在函式中發送數據

transfer(address to, uint value, bytes data)

並且由於 ERC223 向後兼容 ERC20,因此不會出現違約。

範例函式可以是

function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) {
   if (balanceOf(msg.sender) < _value) throw;
   balances[msg.sender] = safeSub(balanceOf(msg.sender), _value);
   balances[_to] = safeAdd(balanceOf(_to), _value);
   ContractReceiver reciever = ContractReceiver(_to);
   reciever.tokenFallback(msg.sender, _value, _data);
   Transfer(msg.sender, _to, _value, _data);
   StateChanged(true,"Transfer to contract successful");
   return true;
}

您可以使用以下 3 種方法:

  1. 在您的第一個契約(契約 A)中,您可以添加程式碼,在轉移到已批准的契約 (B) 時,您可以對契約 (B) 進行委託呼叫以執行某些操作,並且您可以傳遞您從契約中獲得的任何資訊一種。
  2. 您可以創建一個 dApp 來監聽合約 A 上的 Transfer 事件,然後向合約 B 發出交易請求以執行某些操作。
  3. 除了在 A 上偵聽 Approved 事件之外,您可以執行類似於 #2 的操作,然後自己呼叫 A 上的轉移以確保將令牌轉移到您想要的任何地址,並呼叫 B 以執行您想要的任何功能還有。

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