批准合同a代表合同b使用令牌的一般流程是什么?一个成功实现这一点的充分的功能实现是什么样子的?
例如,让我们考虑下面的场景。我创建了一个标准的ERC20令牌,并将令牌提供给合同a。现在我希望允许合同b代表合同a使用ERC20令牌。
发布于 2019-07-31 21:27:19
如果合同A拥有令牌,并且希望合同B花费,那么合同A必须使用approve合同B,合同B必须与transferFrom一起使用。
contract A {
ERC20 token; // <--- generic ERC20 token contract
B seller; // <--- ticket seller accepts ERC20 tokens
event TicketPurchased(uint);
function buyTicket(uint amount) public {
// Contract A approves the seller to transfer tokens
token.approve(address(seller), amount);
// Call seller for it to transfer tokens
uint ticketId = seller.buyTicket(amount);
// Generate event with ticket id to capture from UI
emit TicketPurchased(ticketId);
}
}
contract B {
address wallet; // <--- wallet where tokens from purchases will be moved to
ERC20 token; // <--- generic erc20 token
function buyTicket(uint amount) public returns (uint) {
// Transfer tokens from the caller to wallet
// (here msg.sender will be Contract A)
token.transferFrom(msg.sender, wallet, amount);
return 1; // <--- ticket id
}
}https://ethereum.stackexchange.com/questions/73493
复制相似问题