Пример #1
0
        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());
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
        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;
                }
            }
        }
Пример #5
0
        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;
                }
            }
        }
Пример #6
0
        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());
        }