我已经创建了一个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
有人能解释一下为什么失败吗?
非常感谢。
发布于 2018-11-11 23:32:19
我自己想出来的。
唯一能够执行令牌传输的是令牌契约的所有者。
在我的例子中,我首先使用另一个帐户创建契约,并将令牌地址作为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()){}
}希望它能帮助其他人:)
https://stackoverflow.com/questions/53247997
复制相似问题