CrowdSale умный контракт не принимает платеж - PullRequest
0 голосов
/ 11 ноября 2018

Я создал умный контракт Ethereum и играю с библиотекой 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 голосов
/ 12 ноября 2018

Я сам понял.

Единственным, кто может выполнить передачу токена, является владелец контракта токена .

В моем случае я сначала создавал контракт с другой учетной записью и передавал адрес токена в качестве параметра контракта 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()){}
}

Надеюсь, это поможет кому-то еще: -)

...