Solidity
如何在智能合約中實現空投功能
我有一個 Erc20 代幣 X 和一個智能合約 A
智能合約 A 包含 1000 個 X 代幣。
使用者如何從該智能合約中獲得定義數量的 X 代幣?(類似於空投)
所以基本上使用者應該呼叫如下方法:
getAirdrop()
然後應該從 A 的錢包中獲取 100 個 X 代幣我嘗試了以下方法:
function getAirdrop(){ erc20TOken.transferFrom(this, msg.sender, 10000000000000000000); }
… 和…
function getAirdrop(){ erc20TOken.increaseApproval(msg.sender, 100000000000000000000); }
…但不工作。
如果合約 A 擁有所需的代幣,您可以簡單地使用
transfer
ERC20 代幣合約中的功能。所以像這樣(假設你有
erc20TOken
對實際代幣合約的引用):function getAirdrop() public { erc20TOken.transfer(msg.sender, 100); }
很簡單,我為你做了這個例子:
pragma solidity ^0.4.18; //Made to Stackexchange question contract ERC20 { function transfer(address _to, uint256 _value)public returns(bool); function balanceOf(address tokenOwner)public view returns(uint balance); function transferFrom(address from, address to, uint tokens)public returns(bool success); } contract SimpleAirdrop { ERC20 public token; function SimpleAirdrop(address _tokenAddr) public { token = ERC20(_tokenAddr); } function getAirdrop() public { token.transfer(msg.sender, 100000000000000000000); //18 decimals token }
}
請記住,您需要發送代幣來簽訂契約。
你可以在這裡看到這個編譯:https ://ethfiddle.com/EIxLLnYFDJ