rel*_*l1x 9 javascript ethereum solidity smartcontracts truffle
我用这个例子写了Crowdsale .但我无法发送事务,我的测试失败并出现错误:
Contract: Crowdsale should accept payments after start:
AssertionError: expected promise to be fulfilled but it was rejected with 'Error: VM Exception while processing the transaction: revert'
Run Code Online (Sandbox Code Playgroud)
我试图将汽油价格设置为这样的交易,crowdsale.sendTransaction({value, from: buyer, gas: 4712388})但它对我没有帮助.
我的众筹:
pragma solidity ^0.4.16;
interface token {
function transfer(address receiver, uint amount) external;
}
contract Crowdsale {
address public beneficiary;
uint public fundingGoal;
uint public amountRaised;
uint public deadline;
uint public price;
token public tokenReward;
mapping(address => uint256) public balanceOf;
event FundTransfer(address backer, uint amount, bool isContribution);
function Crowdsale(
address ifSuccessfulSendTo,
uint fundingGoalInEthers,
uint durationInMinutes,
uint etherCostOfEachToken,
address addressOfTokenUsedAsReward
) public {
beneficiary = ifSuccessfulSendTo;
fundingGoal = fundingGoalInEthers * 1 ether;
deadline = now + durationInMinutes * 1 minutes;
price = etherCostOfEachToken * 1 ether;
tokenReward = token(addressOfTokenUsedAsReward);
}
function () public payable {
uint amount = msg.value;
balanceOf[msg.sender] += amount;
amountRaised += amount;
tokenReward.transfer(msg.sender, amount / price);
FundTransfer(msg.sender, amount, true);
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试(我以这些测试为例):
// You can find all those helpers here: https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/test/helpers
import ether from '../helpers/ether';
import { advanceBlock } from '../helpers/advanceToBlock';
import { increaseTimeTo, duration } from '../helpers/increaseTime';
import latestTime from '../helpers/latestTime';
const BigNumber = web3.BigNumber;
const should = require('chai')
.use(require('chai-as-promised'))
.use(require('chai-bignumber')(BigNumber))
.should();
const Crowdsale = artifacts.require('Crowdsale');
const Coin = artifacts.require('Coin');
contract('Crowdsale', accounts => {
let startTime;
let crowdsale;
let token;
const value = ether(8);
const buyer = accounts[1];
const tokenReward = accounts[2];
const beneficiary = accounts[2];
before(async () => {
// Advance to the next block to correctly read time in the solidity "now" function interpreted by testrpc
await advanceBlock();
});
beforeEach(async () => {
token = await Coin.new();
// Transfer an amount to address of token used as reward
const tokenRewardAmount = 1000000;
token.transfer(tokenReward, tokenRewardAmount);
startTime = latestTime() + duration.minutes(1);
crowdsale = await Crowdsale.new(beneficiary, 200, 30, 1, tokenReward);
});
it('should accept payments after start', async () => {
await increaseTimeTo(startTime);
await crowdsale.sendTransaction({value, from: buyer, gas: 4712388}).should.be.fulfilled;
});
});
Run Code Online (Sandbox Code Playgroud)
我的硬币:
pragma solidity ^0.4.19;
import 'zeppelin-solidity/contracts/token/ERC20/MintableToken.sol';
contract Coin is MintableToken {
uint8 public decimals = 0;
uint public initialSupply = 1000000 * 10 ** uint(decimals); // 1,000,000;
string public name = "My Coin";
string public symbol = "XMY";
function Coin() public {
totalSupply_ = initialSupply;
balances[msg.sender] = totalSupply_;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在开发一个"博彩公司",其中一个众筹代表一个事件.这意味着我将创建数十个众筹,我不能使用Zeppelin的众筹,因为它标记了一个令牌.那么,有没有其他方法来创建一个没有铸造令牌的众筹?我认为应该有其他的方式,因为以太坊的网页上的例子没有铸造工作,但由于某种原因,它对我不起作用.我的错误在哪里?我该如何解决这个问题?
据我了解您的问题,您正在尝试向您的众筹合同发送一些资金。
更改这一行:
await crowdsale.sendTransaction({value, from: buyer, gas: 4712388}).should.be.fulfilled;
Run Code Online (Sandbox Code Playgroud)
对此:
await web3.eth.sendTransaction({
from: buyer,
to: crowdsale,
value: value,
gas: 4712388
}).should.be.fulfilled;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |