Contract-Development
approveAndCall() 函式和 _extraData 的主要用途是什麼?
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 來獲取令牌並註意您的呼叫來響應。
一般來說,這將是例如用代幣交換服務(交換代幣、購買產品等)的方式。