Exemplo n.º 1
0
        /// <summary>	Gets bitshares address from bitcoin deposit. </summary>
        ///
        /// <remarks>	Paul, 25/01/2015. </remarks>
        ///
        /// <param name="t">	The TransactionSinceBlock to process. </param>
        ///
        /// <returns>	The bitshares address from bitcoin deposit. </returns>
        protected override AddressOrAccountName GetBitsharesAddressFromBitcoinDeposit(TransactionSinceBlock t)
        {
            // look up the deposit address in our map of sender->deposit
            SenderToDepositRow senderToDeposit = GetSenderDepositFromDeposit(t.Address);

            if (senderToDeposit != null)
            {
                return(new AddressOrAccountName {
                    m_text = senderToDeposit.receiving_address, m_isAddress = false
                });
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 2
0
        /// <summary>	Bitshares transaction to bitcoin address. </summary>
        ///
        /// <remarks>	Paul, 31/01/2015. </remarks>
        ///
        /// <param name="l">	The BitsharesLedgerEntry to process. </param>
        /// <param name="t">	The TransactionSinceBlock to process. </param>
        ///
        /// <returns>	A string. </returns>

        /*protected override string BitsharesTransactionToBitcoinAddress(BitsharesLedgerEntry l, BitsharesTransaction t)
         * {
         *      // look up the BTS address this transaction was sent to
         *      BitsharesOperation op = t.trx.operations.First(o => o.type == BitsharesTransactionOp.deposit_op_type);
         *
         *      string depositAddress = op.data.condition.data.owner;
         *
         *      // look that address up in our map of sender->deposit address
         *      SenderToDepositRow senderToDeposit = GetSenderDepositFromDeposit(depositAddress);
         *      if (senderToDeposit != null)
         *      {
         *              return senderToDeposit.sender;
         *      }
         *      else
         *      {
         *              return null;
         *      }
         * }*/

        /// <summary>	Bitshares transaction to bitcoin address. </summary>
        ///
        /// <remarks>	Paul, 31/01/2015. </remarks>
        ///
        /// <param name="l">	The BitsharesLedgerEntry to process. </param>
        /// <param name="t">	The TransactionSinceBlock to process. </param>
        ///
        /// <returns>	A string. </returns>
        protected override string BitsharesTransactionToBitcoinAddress(BitsharesLedgerEntry l, BitsharesTransaction t)
        {
            // look up the BTS address this transaction was sent to

            // look that address up in our map of sender->deposit address
            SenderToDepositRow senderToDeposit = GetSenderDepositFromDeposit(l.memo);

            if (senderToDeposit != null)
            {
                return(senderToDeposit.receiving_address);
            }
            else
            {
                throw new RefundBitsharesException("Missing memo!");
            }
        }
Exemplo n.º 3
0
        /// <summary>	Executes the submit address action. </summary>
        ///
        /// <remarks>	Paul, 25/01/2015. </remarks>
        ///
        /// <exception cref="ApiExceptionMessage">		    Thrown when an API exception message error
        ///                                                 condition occurs. </exception>
        /// <exception cref="ApiExceptionMissingParameter">	Thrown when an API exception missing
        ///                                                 parameter error condition occurs. </exception>
        ///
        /// <param name="ctx">      The context. </param>
        /// <param name="dummy">	The dummy. </param>
        ///
        /// <returns>	A Task. </returns>
        Task OnSubmitAddress(RequestContext ctx, IDummy dummy)
        {
            CurrencyTypes fromCurrency     = RestHelpers.GetPostArg <CurrencyTypes, ApiExceptionMissingParameter>(ctx, WebForms.kFromCurrency);
            CurrencyTypes toCurrency       = RestHelpers.GetPostArg <CurrencyTypes, ApiExceptionMissingParameter>(ctx, WebForms.kToCurrency);
            string        receivingAddress = RestHelpers.GetPostArg <string, ApiExceptionMissingParameter>(ctx, WebForms.kReceivingAddress);

            SubmitAddressResponse response;

            if (fromCurrency == CurrencyTypes.BTC && toCurrency == CurrencyTypes.bitBTC)
            {
                string accountName = receivingAddress;

                // try and retrieve a previous entry
                SenderToDepositRow senderToDeposit = m_database.Query <SenderToDepositRow>("SELECT * FROM sender_to_deposit WHERE receiving_address=@s;", accountName).FirstOrDefault();
                if (senderToDeposit == null || !BitsharesWallet.IsValidAccountName(accountName))
                {
                    // no dice, create a new entry

                    // validate bitshares account name
                    try
                    {
                        BitsharesAccount account = m_bitshares.WalletGetAccount(accountName);

                        // generate a new bitcoin address and tie it to this account
                        string depositAdress = m_bitcoin.GetNewAddress();
                        senderToDeposit = InsertSenderToDeposit(account.name, depositAdress);
                    }
                    catch (BitsharesRpcException)
                    {
                        throw new ApiExceptionMessage(accountName + " is not an existing account! Are you sure it is registered?");
                    }
                }

                response = new SubmitAddressResponse {
                    deposit_address = senderToDeposit.deposit_address
                };
            }
            else if (fromCurrency == CurrencyTypes.bitBTC && toCurrency == CurrencyTypes.BTC)
            {
                string bitcoinAddress = receivingAddress;

                // try and retrieve a previous entry
                SenderToDepositRow senderToDeposit = m_database.Query <SenderToDepositRow>("SELECT * FROM sender_to_deposit WHERE receiving_address=@s;", bitcoinAddress).FirstOrDefault();
                if (senderToDeposit == null)
                {
                    // validate bitcoin address
                    byte[] check = Util.Base58CheckToByteArray(bitcoinAddress);
                    if (check == null)
                    {
                        throw new ApiExceptionMessage(bitcoinAddress + " is not a valid bitcoin address!");
                    }

                    // generate a memo field to use instead
                    string start = "meta-";
                    string memo  = start + bitcoinAddress.Substring(0, BitsharesWallet.kBitsharesMaxMemoLength - start.Length);
                    senderToDeposit = InsertSenderToDeposit(bitcoinAddress, memo);
                }

                response = new SubmitAddressResponse {
                    deposit_address = m_bitsharesAccount, memo = senderToDeposit.deposit_address
                };
            }
            else
            {
                throw new ApiExceptionUnsupportedTrade(fromCurrency, toCurrency);
            }

            ctx.Respond <SubmitAddressResponse>(response);

            return(null);
        }