CrowdSale智能合约不接受付款

时间:2018-11-11 10:52:01

标签: ethereum solidity smartcontracts

我已经创建了一个以太坊智能合约,并且正在与Zepplin库一起创建一个ERC20代币合约和一个CrowdSale合约,以允许人们购买我的代币。

令牌合约

pragma solidity ^0.4.24;

import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/master/contracts/token/ERC20/ERC20.sol";

contract NourToken is ERC20 {
   string public symbol = "NOR";
   string public name = "Nourreddine Token";
   uint8 public decimals = 18;
   uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals));

   constructor() public {
      _mint(msg.sender, INITIAL_SUPPLY);
   }
}

众包合同

pragma solidity ^0.4.24;

import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/master/contracts/crowdsale/Crowdsale.sol";
import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/master/contracts/token/ERC20/ERC20.sol";

contract NourCrowdSale is Crowdsale {

  constructor (
    uint256 rate,
    address wallet,
    ERC20 token) public 
  Crowdsale(rate, wallet, token)
  {}
}

当我尝试使用Crowdsale合同付款时,交易失败,我不知道为什么。

这是一个失败的示例事务:https://ropsten.etherscan.io/tx/0x8777f2fa58988419bbfc22c96c50470ea242db4ea865d0e85aaa9f2dd1206dbe

谁能解释它为什么失败?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我自己弄清楚了。

唯一可以执行令牌转移的人是令牌合约的所有者

在我的情况下,我首先使用另一个帐户创建合同,然后将令牌地址作为CrowdSale合同的参数传递。因此,CrowdSale合同不是令牌合同的所有者。

我这样更改合同:

pragma solidity ^0.4.24;

import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/release-v2.0.0/contracts/crowdsale/Crowdsale.sol";
import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/release-v2.0.0/contracts/token/ERC20/ERC20.sol";
import "browser/NourToken.sol";

contract NourCrowdSale is Crowdsale {

   constructor (
      uint256 rate,
      address wallet) public 
   Crowdsale(rate, wallet, new NourToken()){}
}

希望它会对其他人有所帮助:-)