Ich setze entweder Token und Crowdsale ohne Probleme ein, der Crowdsale-Vertrag basiert auf dem openzeppelin PostDeliveryCrowdsale.
Crowdsale:
contract PorrolhoTokenCrowdsale is PostDeliveryCrowdsale {
constructor(uint256 _openingTime, uint256 _closingTime, uint256 _rate, address _wallet, uint256 _goal, ERC20 _token) public
Crowdsale(_rate, _wallet, _token)
TimedCrowdsale(_openingTime, _closingTime)
{
}
}
NachlieferungCrowdsale:
contract PostDeliveryCrowdsale is TimedCrowdsale {
using SafeMath for uint256;
mapping(address => uint256) public balances;
/**
* @dev Withdraw tokens only after crowdsale ends.
*/
function withdrawTokens() public {
require(hasClosed());
uint256 amount = balances[msg.sender];
require(amount > 0);
balances[msg.sender] = 0;
_deliverTokens(msg.sender, amount);
}
/**
* @dev Overrides parent by storing balances instead of issuing tokens right away.
* @param _beneficiary Token purchaser
* @param _tokenAmount Amount of tokens purchased
*/
function _processPurchase(
address _beneficiary,
uint256 _tokenAmount
)
internal
{
balances[_beneficiary] = balances[_beneficiary].add(_tokenAmount);
}
}
Ich kann Token kaufen, aber wenn ich die FunktiondrawTokens() aufrufe , wird ein Fehler ausgegeben. Die Saldenzuordnung des Crowdsale-Vertrags gibt den Token-Betrag zurück, den ich bereits gekauft habe.
Jede Idee wird geschätzt!
Ich habe das Problem gefunden! Ich musste das Guthaben (Token) des Token-Vertrags auf den Crowdsale-Vertrag übertragen. Okay, ich erkenne einen Noob-Fehler.
Benutzer19510
hasClosed()
tut es, und ist es möglich, dass es zurückkehrtfalse
?Mick Marosky
Benutzer19510
require(amount > 0)
. Vielleichtamount == 0
. Wenn das nicht der Fall ist,_deliverTokens(msg.sender, amount)
schlägt es vermutlich fehl, aber ich sehe den Code für diese Funktion nicht, also wissen nur Sie, wie das fehlschlagen könnte.