第一种方式需要我们利用approve给合约地址给予一定的权限,但是如果我们把合约地址当成一个账户地址,给他转一些代币,那么空投合约就可以用自己地址当中的币进行转账了。

先写一个可以实现这种方式的合约代码

  1. pragma solidity ^0.4.18;
  2. contract Ownable {
  3. address public owner;
  4. function Ownable() public {
  5. owner = msg.sender;
  6. }
  7. modifier onlyOwner() {
  8. require(msg.sender == owner);
  9. _;
  10. }
  11. }
  12. interface Token {
  13. function balanceOf(address _owner) public constant returns (uint256 );
  14. function transfer(address _to, uint256 _value) public ;
  15. event Transfer(address indexed _from, address indexed _to, uint256 _value);
  16. }
  17. contract Airdropper is Ownable {
  18. function AirTransfer(address[] _recipients, uint[] _values, address _tokenAddress) onlyOwner public returns (bool) {
  19. require(_recipients.length > 0);
  20. Token token = Token(_tokenAddress);
  21. for(uint j = 0; j < _recipients.length; j++){
  22. token.transfer(_recipients[j], _values[j]);
  23. }
  24. return true;
  25. }
  26. }

从代码中可以看到我们是利用合约地址当中的代币进行交易的,按照之前部署代币的步骤我们进行部署

部署成功之后,向空投合约转一些代币,然后调用空投合约的方法进行空投,实施的步骤和第一种方式大同小异,就不在赘述了