Ejemplo n.º 1
0
        public void Pow_Test()
        {
            var result1 = BancorHelpers.Pow(1.5m, 1);

            result1.ShouldBe(1.5m);

            BancorHelpers.Pow(1.5m, 2);
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        private long SellOperation(long paidRes)
        {
            var getReturnFromPaid = BancorHelpers.GetReturnFromPaid(
                _ramConnector.VirtualBalance, Decimal.Parse(_ramConnector.Weight),
                _elfConnector.VirtualBalance, Decimal.Parse(_elfConnector.Weight),
                paidRes);

            return(getReturnFromPaid);
        }
Ejemplo n.º 5
0
        private long BuyOperation(long paidElf)
        {
            var getAmountToPayout = BancorHelpers.GetAmountToPayFromReturn(
                _elfConnector.VirtualBalance, Decimal.Parse(_elfConnector.Weight),
                _ramConnector.VirtualBalance, Decimal.Parse(_ramConnector.Weight),
                paidElf);

            return(getAmountToPayout);
        }
Ejemplo n.º 6
0
 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));
 }