public static async Task <string[]> DoPow(this string[] trytes, string trunkTransaction, string branchTransaction, int minWeightMagnitude, int numberOfThreads, CancellationToken cancellationToken) { var trunk = trunkTransaction; var branch = branchTransaction; List <string> resultTrytes = new List <string>(); for (int i = 0; i < trytes.Length; i++) { if (i == 0) { branch = branchTransaction; } else { branch = trunkTransaction; } var tryte = trytes[i]; tryte = tryte.SetApproveTransactions(trunk, branch); var diver = new PowDiver(); var tryteWithNonce = await diver.DoPow(tryte, minWeightMagnitude, numberOfThreads, cancellationToken); var transaction = new TransactionItem(tryteWithNonce); trunk = transaction.Hash; resultTrytes.Add(tryteWithNonce); } return(resultTrytes.ToArray()); }
public async Task <string> ApproveTransaction(string transactionHash, ApproveTransactionType approveType) { var api = CreateIotaClient(); //var address = await api.GetAddress(TestSeed2, 8); var emptyAddress = IotaUtils.GenerateRandomTrytes(81); // "".Pad(81); var transfer = new TransferItem() { Address = emptyAddress, Value = 0, Message = "", Tag = "" }; while (true) { try { CancellationTokenSource cts = new CancellationTokenSource(); var transactions = transfer.CreateTransactions(); var trytesToPow = transactions.GetTrytes().Single(); var toApproveResult = await api.IriApi.GetTransactionsToApprove(9); var toApprove = toApproveResult.Result; var diver = new PowDiver(); cts.CancelAfter(20000); var trunk = toApprove.TrunkTransaction; var branch = toApprove.BranchTransaction; if (approveType == ApproveTransactionType.Trunk) { trunk = transactionHash; } else { branch = transactionHash; } var trytesToSend = await diver.DoPow(trytesToPow.SetApproveTransactions(trunk, branch), 15, cts.Token); await api.IriApi.BroadcastTransactions(trytesToSend); await api.IriApi.StoreTransactions(trytesToSend); var transaction = new TransactionItem(trytesToSend); return(transaction.Hash); } catch (OperationCanceledException) { continue; } } }
public async Task <string> Rebroadcast(string trytes, CancellationToken cancellationToken) { var api = CreateIotaClient(); while (true) { try { CancellationTokenSource cts = new CancellationTokenSource(); cancellationToken.Register(() => cts.Cancel()); var toApproveResult = await api.IriApi.GetTransactionsToApprove(9); var toApprove = toApproveResult.Result; var diver = new PowDiver(); cts.CancelAfter(15000); var trunk = toApprove.TrunkTransaction; var branch = toApprove.BranchTransaction; trytes = trytes.SetApproveBranch(trunk); var trytesToSend = await diver.DoPow(trytes, 15, cts.Token); if (cts.IsCancellationRequested) { continue; } await api.IriApi.BroadcastTransactions(trytesToSend); await api.IriApi.StoreTransactions(trytesToSend); var transaction = new TransactionItem(trytesToSend); return(transaction.Hash); } catch (OperationCanceledException) { if (cancellationToken.IsCancellationRequested) { throw; } continue; } } }
public async Task SendVeryEmptyTransactionTest() { var api = CreateIotaClient(); var emptyAddress = IotaUtils.GenerateRandomTrytes(81); // "".Pad(81); var transfer = new TransferItem() { Address = emptyAddress, Value = 0, Message = null, Tag = null }; while (true) { try { CancellationTokenSource cts = new CancellationTokenSource(); var transactions = transfer.CreateTransactions(); var trytesToPow = transactions.GetTrytes().Single(); var toApproveResult = await api.IriApi.GetTransactionsToApprove(9); var toApprove = toApproveResult.Result; var diver = new PowDiver(); //cts.CancelAfter(15000); var trunk = toApprove.TrunkTransaction; var branch = toApprove.BranchTransaction; var trytesToSend = await diver.DoPow(trytesToPow.SetApproveTransactions(trunk, branch), 15, cts.Token); await api.IriApi.BroadcastTransactions(trytesToSend); await api.IriApi.StoreTransactions(trytesToSend); var transaction = new TransactionItem(trytesToSend); } catch (OperationCanceledException) { continue; } } }
public async Task SendEmptyTransferWithPowTest() { var api = CreateIotaClient(); var address = await api.GetAddress(TestSeed2, 20); var transfer = new TransferItem() { Address = address.Address, Value = 0, Message = "THEMESSAGETEST", Tag = "THETAGTEST" }; while (true) { try { Console.WriteLine("Do pow and send"); CancellationTokenSource cts = new CancellationTokenSource(); var transactions = transfer.CreateTransactions(); var trytesToPow = transactions.GetTrytes().Single(); var toApproveResult = await api.IriApi.GetTransactionsToApprove(9); var toApprove = toApproveResult.Result; var diver = new PowDiver(); cts.CancelAfter(15000); // var trytesToSend = await diver.DoPow(trytesToPow.SetApproveTransactions(toApprove.TrunkTransaction, toApprove.BranchTransaction), 15, cts.Token); //Thread.Sleep(200000); await api.IriApi.BroadcastTransactions(trytesToSend); await api.IriApi.StoreTransactions(trytesToSend); var transaction = new TransactionItem(trytesToSend); break; } catch (OperationCanceledException) { continue; } } }
public static async Task <string[]> DoPow(this string[] transactionsTrytes, string trunkTransaction, string branchTransaction, int minWeightMagnitude, int numberOfThreads, CancellationToken cancellationToken) { var trunk = trunkTransaction; var branch = branchTransaction; // Recalculate Bundles // NOT sure i should do this but hey let's check it in a but. var trytes = transactionsTrytes;// ReCalculateAndSetBundles(transactionsTrytes).ToArray(); List <string> resultTrytes = new List <string>(); for (int i = 0; i < trytes.Length; i++) { if (i == 0) { branch = branchTransaction; } else { branch = trunkTransaction; } var tryte = trytes[i]; tryte = tryte.SetApproveTransactions(trunk, branch); var diver = new PowDiver(); var tryteWithNonce = await diver.DoPow(tryte, minWeightMagnitude, numberOfThreads, cancellationToken); //var diver = new PearlDiver(); //var tryteWithNonce = diver.DoPow(tryte, minWeightMagnitude); var transaction = new TransactionItem(tryteWithNonce); trunk = transaction.Hash; resultTrytes.Add(tryteWithNonce); } return(resultTrytes.ToArray()); }