protected static void AddCyptoToBalanceFromExternal(string walletAddress, string walletKey = null) { var api = new BlockchainApi(BlockchainApi); var sign = new BlockchainSign(_currentSettings.Value.BlockchainSign); var transferSupported = api.Capabilities.GetCapabilities().GetResponseObject().IsTestingTransfersSupported; var recieveSupport = api.Capabilities.GetCapabilities().GetResponseObject().IsReceiveTransactionRequired; if (transferSupported != null && transferSupported.Value) { api.Balances.PostBalances(walletAddress); TestingTransferRequest request = new TestingTransferRequest() { amount = AMOUT_WITH_FEE, assetId = ASSET_ID, fromAddress = EXTERNAL_WALLET, fromPrivateKey = EXTERNAL_WALLET_KEY, toAddress = walletAddress }; var response = api.Testing.PostTestingTransfer(request); } else if (BlockChainName == "RaiBlocks" || (recieveSupport != null && recieveSupport.Value)) //raiblocks - temp. will be removed after capablities enabled { AddCryptoToWalletWithRecieveTransaction(walletAddress, walletKey); } else { api.Balances.PostBalances(walletAddress); var model = new BuildSingleTransactionRequest() { Amount = AMOUT_WITH_FEE, AssetId = ASSET_ID, FromAddress = EXTERNAL_WALLET, IncludeFee = false, OperationId = Guid.NewGuid(), ToAddress = walletAddress, FromAddressContext = EXTERNAL_WALLET_ADDRESS_CONTEXT }; var responseTransaction = api.Operations.PostTransactions(model).GetResponseObject(); string operationId = model.OperationId.ToString(); var signResponse = sign.PostSign(new SignRequest() { PrivateKeys = new List <string>() { EXTERNAL_WALLET_KEY }, TransactionContext = responseTransaction.TransactionContext }).GetResponseObject(); var response = api.Operations.PostTransactionsBroadcast(new BroadcastTransactionRequest() { OperationId = model.OperationId, SignedTransaction = signResponse.SignedTransaction }); var getResponse = api.Operations.GetOperationId(operationId); WaitForOperationGotCompleteStatus(operationId); } WaitForBalance(walletAddress); }
private void OpenView(TransactionModel tx) { this.ClearProps(); LoadingData = true; _tiview = new TxInfoView(); _net = Global.ActiveWallet.NetworkChoice; _blockapi = new BlockchainApi(_net); _qbit = new QBitNinjaClient(_net); _tx = tx; ConfigureTxInfo(); _tiview.ShowDialog(); }
protected static void AddCyptoToBalanceFromExternal(string walletAddress) { var api = new BlockchainApi(BlockchainApi); var sign = new BlockchainSign(_currentSettings.Value.BlockchainSign); bool transferSupported = api.Capabilities.GetCapabilities().GetResponseObject().IsTestingTransfersSupported; if (transferSupported) { api.Balances.PostBalances(EXTERNAL_WALLET); api.Balances.PostBalances(walletAddress); TestingTransferRequest request = new TestingTransferRequest() { amount = "100001", assetId = ASSET_ID, fromAddress = EXTERNAL_WALLET, fromPrivateKey = EXTERNAL_WALLET_KEY, toAddress = walletAddress }; var response = api.Testing.PostTestingTransfer(request); } else { api.Balances.PostBalances(walletAddress); var model = new BuildSingleTransactionRequest() { Amount = "100001", AssetId = ASSET_ID, FromAddress = EXTERNAL_WALLET, IncludeFee = false, OperationId = Guid.NewGuid(), ToAddress = walletAddress, FromAddressContext = EXTERNAL_WALLET_ADDRESS_CONTEXT }; var responseTransaction = api.Operations.PostTransactions(model).GetResponseObject(); string operationId = model.OperationId.ToString("N"); var signResponse = sign.PostSign(new SignRequest() { PrivateKeys = new List <string>() { EXTERNAL_WALLET_KEY }, TransactionContext = responseTransaction.TransactionContext }).GetResponseObject(); var response = api.Operations.PostTransactionsBroadcast(new BroadcastTransactionRequest() { OperationId = model.OperationId, SignedTransaction = signResponse.SignedTransaction }); var getResponse = api.Operations.GetOperationId(operationId); // response.Validate.StatusCode(HttpStatusCode.OK, "Could not update Balance from external wallet"); Assert.That(getResponse.GetResponseObject().OperationId, Is.EqualTo(model.OperationId)); } }
private void ClearProps() { this.ActionAmount = 0; this.ActionAmountCurr = 0; this.BlockHash = string.Empty; this.BlockHeight = string.Empty; this.IsBlockPresent = false; this.Confirmations = string.Empty; this.Date = string.Empty; this.Fee = Money.Zero; this.FeeCurr = 0; this.TxHash = string.Empty; this.TxStatus = string.Empty; _tx = null; _blockapi = null; _qbit = null; }
public static void WaitForBalance(string wallet) { int i = 0; var api = new BlockchainApi(BlockchainApi); while (i++ < 40) { if (!api.Balances.GetBalances("500", null).GetResponseObject().Items.Any(w => w.Address == wallet)) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } else { break; } } }
static void GetTransactionCompleteStatusTime(string operationId, out long time) { var sw = new Stopwatch(); var request = new BlockchainApi(BlockchainSpecificSettings().ApiUrl); time = 0; while (sw.Elapsed < TimeSpan.FromMinutes(10)) { var r = request.Operations.GetOperationId(operationId); if (r.GetResponseObject().State != BroadcastedTransactionState.InProgress) { time = DateTime.Now.Ticks; sw.Stop(); return; } } sw.Stop(); }
static void GetBalanceDissapearingTime(string startBalance, out long time) { var sw = new Stopwatch(); time = 0; var request = new BlockchainApi(BlockchainSpecificSettings().ApiUrl); while (sw.Elapsed < TimeSpan.FromMinutes(10)) { if (int.Parse(request.Balances.GetBalances("500", null).GetResponseObject().Items.ToList().Find(a => a.Address == WALLET_SINGLE_USE).Balance) < int.Parse(startBalance)) { time = DateTime.Now.Ticks; sw.Stop(); return; } } sw.Stop(); }
public static void WaitForOperationGotCompleteStatus(string operationId) { int i = 0; var api = new BlockchainApi(BlockchainApi); while (i++ < 60) { var currentState = api.Operations.GetOperationId(operationId).GetResponseObject().State; if (currentState != BroadcastedTransactionState.Completed) { if (currentState == BroadcastedTransactionState.Failed) { break; } System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } else { break; } } }
static void GetTransactionCompleteStatusTime(string operationId, out long time) { var sw = new Stopwatch(); var request = new BlockchainApi(BlockchainApi); time = 0; sw.Start(); while (sw.Elapsed < TimeSpan.FromMinutes(10)) { var r = request.Operations.GetOperationId(operationId); if (r.GetResponseObject().State != BroadcastedTransactionState.InProgress) { if (r.GetResponseObject().State == BroadcastedTransactionState.Failed) { Assert.Fail("Operation got 'Failed status'"); } time = DateTime.Now.Ticks; sw.Stop(); return; } } sw.Stop(); }
public GeneratedWallet GenerateWalletFile(string password) { GeneratedWallet wallet = new GeneratedWallet(); BlockchainApi blockchainApi = new BlockchainApi(); //Generate mnemonic string mnemonic = blockchainApi.GenerateMnemonic(); //Create wallet string walletName = Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); blockchainApi.CreateWallet(mnemonic, password, password, walletName); //Read wallet address string walletAddress = ReadWalletAddressFromFile(walletName); //Prepare output wallet.WalletName = walletName; wallet.WalletAddress = walletAddress; wallet.Mnemonic = mnemonic; return(wallet); }
static long?GetTransactionCompleteStatusTime(string operationId, string wallet) { var sw = new Stopwatch(); var request = new BlockchainApi(BlockchainApi); long?block = -1; sw.Start(); while (sw.Elapsed < TimeSpan.FromMinutes(BLOCKCHAIN_MINING_TIME)) { var r = request.Operations.GetOperationId(operationId); if (r.GetResponseObject().State != BroadcastedTransactionState.InProgress) { if (r.GetResponseObject().State == BroadcastedTransactionState.Failed) { Assert.Fail("Operation got 'Failed status'"); } block = request.Balances.GetBalances("500", null).GetResponseObject().Items.ToList().FirstOrDefault(a => a.Address == wallet)?.Block; break; } System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } sw.Stop(); return(block); }
public void Init() { instance = new BlockchainApi(); }
protected static void AddCryptoToWalletWithRecieveTransaction(string walletAddress, string walletKey) { var api = new BlockchainApi(BlockchainApi); var sign = new BlockchainSign(_currentSettings.Value.BlockchainSign); //build send transaction api.Balances.PostBalances(walletAddress); var model = new BuildSingleTransactionRequest() { Amount = AMOUT_WITH_FEE, AssetId = ASSET_ID, FromAddress = EXTERNAL_WALLET, IncludeFee = false, OperationId = Guid.NewGuid(), ToAddress = walletAddress, FromAddressContext = EXTERNAL_WALLET_ADDRESS_CONTEXT }; var responseTransaction = api.Operations.PostTransactions(model).GetResponseObject(); string operationId = model.OperationId.ToString(); var signResponse = sign.PostSign(new SignRequest() { PrivateKeys = new List <string>() { EXTERNAL_WALLET_KEY }, TransactionContext = responseTransaction.TransactionContext }).GetResponseObject(); var response = api.Operations.PostTransactionsBroadcast(new BroadcastTransactionRequest() { OperationId = model.OperationId, SignedTransaction = signResponse.SignedTransaction }); // wait for wallet present in history var history = api.Operations.GetTransactionHistorToAddress(walletAddress, "500").GetResponseObject(); int i = 0; while (i++ < 150 && api.Operations.GetTransactionHistorToAddress(walletAddress, "500").GetResponseObject().Length == 0) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } history = api.Operations.GetTransactionHistorToAddress(walletAddress, "500").GetResponseObject(); //BuildSingleReceiveTransactionRequest recieve transaction var reciveModel = new BuildSingleReceiveTransactionRequest() { operationId = Guid.NewGuid(), sendTransactionHash = history.ToList().First().hash }; var recieve = api.Operations.PostTranstactionSingleRecieve(reciveModel).GetResponseObject(); var signReciveResponse = sign.PostSign(new SignRequest() { PrivateKeys = new List <string>() { walletKey }, TransactionContext = recieve.transactionContext }).GetResponseObject(); var responseRecieve = api.Operations.PostTransactionsBroadcast(new BroadcastTransactionRequest() { OperationId = reciveModel.operationId, SignedTransaction = signReciveResponse.SignedTransaction }); WaitForBalance(walletAddress); }
public void Init() { _net = Network.Main; _blockapi = new BlockchainApi(_net); }