Example #1
0
        public override DepositInfo GetNeededDeposit(ToBeConnectedTokenInfo input)
        {
            Assert(IsValidSymbol(input.TokenSymbol), "Invalid symbol.");

            var toConnector = State.Connectors[input.TokenSymbol];

            Assert(toConnector != null, "[GetNeededDeposit]Can't find to connector.");
            Assert(!string.IsNullOrEmpty(toConnector.RelatedSymbol), "can't find related symbol'");
            var fromConnector = State.Connectors[toConnector.RelatedSymbol];

            Assert(fromConnector != null, "[GetNeededDeposit]Can't find from connector.");
            var tokenInfo = State.TokenContract.GetTokenInfo.Call(
                new GetTokenInfoInput
            {
                Symbol = input.TokenSymbol,
            });
            var balance = State.TokenContract.GetBalance.Call(
                new GetBalanceInput
            {
                Owner  = Context.Self,
                Symbol = input.TokenSymbol
            }).Balance;
            var  amountOutOfTokenConvert = tokenInfo.TotalSupply - balance - input.AmountToTokenConvert;
            long needDeposit             = 0;

            if (amountOutOfTokenConvert > 0)
            {
                var fb = fromConnector.VirtualBalance;

                var tb = toConnector.IsVirtualBalanceEnabled
                    ? toConnector.VirtualBalance.Add(tokenInfo.TotalSupply)
                    : tokenInfo.TotalSupply;
                needDeposit =
                    BancorHelper.GetAmountToPayFromReturn(fb, GetWeight(fromConnector),
                                                          tb, GetWeight(toConnector), amountOutOfTokenConvert);
            }

            return(new DepositInfo
            {
                NeedAmount = needDeposit,
                AmountOutOfTokenConvert = amountOutOfTokenConvert
            });
        }
Example #2
0
        public override Empty EnableConnector(ToBeConnectedTokenInfo input)
        {
            Assert(IsValidSymbol(input.TokenSymbol), "Invalid symbol.");
            var fromConnector = State.Connectors[input.TokenSymbol];

            Assert(fromConnector != null, "[EnableConnector]Can't find from connector.");
            Assert(!string.IsNullOrEmpty(fromConnector.RelatedSymbol), "can't find related symbol'");
            var toConnector = State.Connectors[fromConnector.RelatedSymbol];

            Assert(toConnector != null, "[EnableConnector]Can't find to connector.");
            var needDeposit = GetNeededDeposit(input);

            if (needDeposit.NeedAmount > 0)
            {
                State.TokenContract.TransferFrom.Send(
                    new TransferFromInput
                {
                    Symbol = State.BaseTokenSymbol.Value,
                    From   = Context.Sender,
                    To     = Context.Self,
                    Amount = needDeposit.NeedAmount,
                });
            }

            if (input.AmountToTokenConvert > 0)
            {
                State.TokenContract.TransferFrom.Send(
                    new TransferFromInput
                {
                    Symbol = input.TokenSymbol,
                    From   = Context.Sender,
                    To     = Context.Self,
                    Amount = input.AmountToTokenConvert
                });
            }

            State.DepositBalance[toConnector.Symbol] = needDeposit.NeedAmount;
            toConnector.IsPurchaseEnabled            = true;
            fromConnector.IsPurchaseEnabled          = true;
            return(new Empty());
        }
Example #3
0
        private async Task InitialBuildConnector(string symbol)
        {
            var token = (await TokenContractStub.GetTokenInfo.CallAsync(new GetTokenInfoInput
            {
                Symbol = symbol,
            }));
            var tokenInfo = new ToBeConnectedTokenInfo
            {
                TokenSymbol          = symbol,
                AmountToTokenConvert = 0
            };
            var issueRet = (await TransactionFeeChargingContractStub.IssueToTokenConvert.SendAsync(
                                new IssueAmount
            {
                Symbol = symbol,
                Amount = token.TotalSupply - token.Supply
            })).TransactionResult;

            issueRet.Status.ShouldBe(TransactionResultStatus.Mined);
            var buildConnector = (await TokenConverterContractStub.EnableConnector.SendAsync(tokenInfo)).TransactionResult;

            buildConnector.Status.ShouldBe(TransactionResultStatus.Mined);
        }