Solidity

如何在智能合約中實現空投功能

  • April 9, 2022

我有一個 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 擁有所需的代幣,您可以簡單地使用transferERC20 代幣合約中的功能。

所以像這樣(假設你有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

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