public static bool Sell(StorageContext context, byte[] owner, byte[] investor, BigInteger _amount) { if (owner.Length != 20 || investor.Length != 20) { return(false); } if (_amount <= 0) { return(false); } if (!Runtime.CheckWitness(owner)) { return(false); } BigInteger buyPrice = BuyPrice(context); BigInteger amount = _amount * Token.Factor() / buyPrice; uint stage = Stage(context); if (stage == 1) { amount += WithDiscount(amount, Discount(context)); } else if (stage == 2) { if (DateTime.Now.Ticks <= (int)Storage.Get(context, START_TIME_KEY).AsBigInteger() + 24 * 60 * 60) { if (DiscountFirstDay(context) == 0) { SetDiscountFirstDay(context, 20); } amount += WithDiscount(amount, DiscountFirstDay(context)); } else { amount += WithDiscount(amount, Discount(context)); } } else if (stage == 3) { amount += WithDiscount(amount, Discount(context)); } if (Tokens(context) < amount) { CrowdsaleFinished(CrowdsaleStatus(context)); Pausable.Pause(context); return(false); } SetTokens(context, Tokens(context) - amount); Token.SetAvailableSupply(context, Token.AvailableSupply(context) - amount); return(Token.Transfer(context, owner, investor, amount)); }
public static bool StartCrowd(StorageContext context, BigInteger tokens, uint startTime, uint endTime, uint discount, uint discountFirstDay) { SetTokens(context, tokens * Token.Factor()); SetStartTime(context, startTime); SetEndTime(context, endTime); SetDiscount(context, discount); SetDiscountFirstDay(context, discountFirstDay); SetStage(context, 1); Pausable.Unpause(context); return(true); }