Contract-Development

approveAndCall() 函式和 _extraData 的主要用途是什麼?

  • January 2, 2019
 function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
   allowed[msg.sender][_spender] = _value;
   Approval(msg.sender, _spender, _value);

   if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; }
   return true;
}

if 條件有什麼作用?bytes4、byte32 和 _spender.call 有什麼用?

  • bytes4 是 32 位 Solidity 函式簽名receiveApproval(address,uint256,address,bytes)
  • 這將呼叫receiveApproval()目標地址中的函式。如果目標地址沒有此功能,則條件確保交易失敗 - 這approveAndCall只能呼叫具有receiveApproval()介面的合約 - 不是普通的乙太坊賬戶或不兼容的智能合約
  • extraData可以將上下文資訊傳遞給目標合約這個呼叫是關於什麼的

主要用途是呼叫智能合約並讓它知道您正在發送代幣。這是因為一般情況下,向智能合約發送 ERC20 代幣時不會觸發智能合約(轉移代幣只是代幣合約餘額的變化)。

要讓合約知道你為它批准了一些代幣,然後在其中呼叫一個函式。目標合約將通過使用 transferFrom 來獲取令牌並註意您的呼叫來響應。

一般來說,這將是例如用代幣交換服務(交換代幣、購買產品等)的方式。

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