public void Pow_Test() { var result1 = BancorHelpers.Pow(1.5m, 1); result1.ShouldBe(1.5m); BancorHelpers.Pow(1.5m, 2); }
public override Empty Sell(SellInput input) { Assert(IsValidSymbol(input.Symbol), "Invalid symbol."); var fromConnector = State.Connectors[input.Symbol]; Assert(fromConnector != null, "Can't find connector."); var toConnector = State.Connectors[State.BaseTokenSymbol.Value]; var amountToReceive = BancorHelpers.GetReturnFromPaid( GetSelfBalance(fromConnector), GetWeight(fromConnector), GetSelfBalance(toConnector), GetWeight(toConnector), input.Amount ); var fee = Convert.ToInt64(amountToReceive * GetFeeRate()); var amountToReceiveLessFee = amountToReceive.Sub(fee); Assert(input.ReceiveLimit == 0 || amountToReceiveLessFee >= input.ReceiveLimit, "Price not good."); // Pay fee if (fee > 0) { State.TokenContract.Transfer.Send( new TransferInput() { Symbol = State.BaseTokenSymbol.Value, To = State.FeeReceiverAddress.Value, Amount = fee }); } // Transafer base token State.TokenContract.Transfer.Send( new TransferInput() { Symbol = State.BaseTokenSymbol.Value, To = Context.Sender, Amount = amountToReceiveLessFee }); // Transafer sold token State.TokenContract.TransferFrom.Send( new TransferFromInput() { Symbol = input.Symbol, From = Context.Sender, To = Context.Self, Amount = input.Amount }); Context.Fire(new TokenSold() { Symbol = input.Symbol, SoldAmount = input.Amount, BaseAmount = amountToReceive, FeeAmount = fee }); return(new Empty()); }
public override Empty Buy(BuyInput input) { Assert(IsValidSymbol(input.Symbol), "Invalid symbol."); var fromConnector = State.Connectors[State.BaseTokenSymbol.Value]; var toConnector = State.Connectors[input.Symbol]; Assert(toConnector != null, "Can't find connector."); var amountToPay = BancorHelpers.GetAmountToPayFromReturn( GetSelfBalance(fromConnector), GetWeight(fromConnector), GetSelfBalance(toConnector), GetWeight(toConnector), input.Amount); var fee = Convert.ToInt64(amountToPay * GetFeeRate()); var amountToPayPlusFee = amountToPay.Add(fee); Assert(input.PayLimit == 0 || amountToPayPlusFee <= input.PayLimit, "Price not good."); // Pay fee if (fee > 0) { State.TokenContract.TransferFrom.Send( new TransferFromInput() { Symbol = State.BaseTokenSymbol.Value, From = Context.Sender, To = State.FeeReceiverAddress.Value, Amount = fee }); } // Transafer base token State.TokenContract.TransferFrom.Send( new TransferFromInput() { Symbol = State.BaseTokenSymbol.Value, From = Context.Sender, To = Context.Self, Amount = amountToPay }); // Transafer bought token State.TokenContract.Transfer.Send( new TransferInput() { Symbol = input.Symbol, To = Context.Sender, Amount = input.Amount }); Context.Fire(new TokenBought() { Symbol = input.Symbol, BoughtAmount = input.Amount, BaseAmount = amountToPay, FeeAmount = fee }); return(new Empty()); }
private long SellOperation(long paidRes) { var getReturnFromPaid = BancorHelpers.GetReturnFromPaid( _ramConnector.VirtualBalance, Decimal.Parse(_ramConnector.Weight), _elfConnector.VirtualBalance, Decimal.Parse(_elfConnector.Weight), paidRes); return(getReturnFromPaid); }
private long BuyOperation(long paidElf) { var getAmountToPayout = BancorHelpers.GetAmountToPayFromReturn( _elfConnector.VirtualBalance, Decimal.Parse(_elfConnector.Weight), _ramConnector.VirtualBalance, Decimal.Parse(_ramConnector.Weight), paidElf); return(getAmountToPayout); }
public void GetAmountToPay_GetReturnFromPaid_Failed() { //fromConnectorBalance <= 0 Should.Throw <InvalidValueException>(() => BancorHelpers.GetAmountToPayFromReturn(0, 1000, 1000, 1000, 1000)); //paidAmount <= 0 Should.Throw <InvalidValueException>(() => BancorHelpers.GetAmountToPayFromReturn(1000, 1000, 1000, 1000, 0)); //toConnectorBalance <= 0 Should.Throw <InvalidValueException>(() => BancorHelpers.GetReturnFromPaid(1000, 1000, 0, 1000, 1000)); //amountToReceive <= 0 Should.Throw <InvalidValueException>(() => BancorHelpers.GetReturnFromPaid(1000, 1000, 1000, 1000, 0)); }