示例#1
0
        public string MassTransfer(PrivateKeyAccount sender, Asset asset, IEnumerable <MassTransferItem> transfers,
                                   string message = "", decimal?fee = null)
        {
            var tx = new MassTransferTransaction(ChainId, sender.PublicKey, asset, transfers, message, fee);

            tx.Sign(sender);
            return(Broadcast(tx));
        }
示例#2
0
        public void MassTransferSend()
        {
            var recipients = new List <MassTransferItem>
            {
                new MassTransferItem("3N1JMgUfzYUZinPrzPWeRa6yqN67oo57XR1", 0.001m),
                new MassTransferItem("3N1JMgUfzYUZinPrzPWeRa6yqN67oo57XR2", 0.002m),
                new MassTransferItem("3N1JMgUfzYUZinPrzPWeRa6yqN67oo57XR3", 0.003m),
            };
            var tx = new MassTransferTransaction(node.ChainId, Account.PublicKey, Assets.WAVES, recipients, "Shut up & take my money");

            tx.Sign(Account);
            node.BroadcastAndWait(tx.GetJsonWithSignature());
        }
示例#3
0
        public void TestMassTransferTransaction()
        {
            var node = new Node();

            var recipients = new List <MassTransferItem>
            {
                new MassTransferItem(Accounts.Alice.Address, 0.01m),
                new MassTransferItem(Accounts.Bob.Address, 0.02m),
                new MassTransferItem("3N1JMgUfzYUZinPrzPWeRa6yqN67oo57XR7", 0.003m),
            };

            var tx = new MassTransferTransaction(Accounts.Alice.PublicKey, Assets.WAVES, recipients, "Shut up & take my money");

            Assert.AreEqual(0.003m, tx.Fee);

            tx.Sign(Accounts.Alice);
            node.Broadcast(tx.GetJsonWithSignature());
        }
示例#4
0
        public string MassTransfer(PrivateKeyAccount sender, Asset asset, string recipientsListFile,
                                   string message = "", decimal?fee = null)
        {
            string line;
            List <MassTransferItem> transfers = new List <MassTransferItem>();

            System.IO.StreamReader file =
                new System.IO.StreamReader(recipientsListFile);
            while ((line = file.ReadLine()) != null)
            {
                var item   = line.Split(new char[] { ',' });
                var amount = decimal.Parse(item[1], CultureInfo.GetCultureInfo("en-US"));
                transfers.Add(new MassTransferItem(item[0], amount));
            }
            file.Close();

            var tx = new MassTransferTransaction(ChainId, sender.PublicKey, asset, transfers, message, fee);

            tx.Sign(sender);
            return(Broadcast(tx));
        }
示例#5
0
        public void TestMassTransferToAlias()
        {
            var node = new Node(Node.TestNetHost);

            var seed    = PrivateKeyAccount.GenerateSeed();
            var account = PrivateKeyAccount.CreateFromSeed(seed, 'T');

            node.Transfer(Accounts.Alice, account.Address, Assets.WAVES, 0.001m);
            Thread.Sleep(10000);

            var alias = GenerateRandomAlias();

            node.CreateAlias(account, alias, 'T');
            Thread.Sleep(10000);

            var amount        = 0.0001m;
            var balanceBefore = node.GetBalance(account.Address);

            var recipients = new List <MassTransferItem>
            {
                new MassTransferItem(account.Address, amount),
                new MassTransferItem("alias:T:" + alias, amount),
                new MassTransferItem(account.Address, amount),
                new MassTransferItem(account.Address, amount),
                new MassTransferItem("alias:T:" + alias, amount)
            };

            var tx = new MassTransferTransaction(Accounts.Alice.PublicKey, Assets.WAVES, recipients);

            tx.Sign(Accounts.Alice);
            node.Broadcast(tx.GetJsonWithSignature());

            Thread.Sleep(20000);

            var balanceAfter = node.GetBalance(account.Address);

            Assert.AreEqual(balanceBefore + amount * recipients.Count, balanceAfter);
        }
示例#6
0
        public void TestMassTransferToAlias()
        {
            var node = new Node(Node.TestNetChainId);

            var seed    = PrivateKeyAccount.GenerateSeed();
            var account = PrivateKeyAccount.CreateFromSeed(seed, 'T');

            var response = node.Transfer(Accounts.Alice, account.Address, Assets.BCT, 0.001m);

            node.WaitTransactionConfirmationByResponse(response);

            var alias = GenerateRandomAlias();

            response = node.CreateAlias(account, alias, 'T');
            node.WaitTransactionConfirmationByResponse(response);

            var amount        = 0.0001m;
            var balanceBefore = node.GetBalance(account.Address);

            var recipients = new List <MassTransferItem>
            {
                new MassTransferItem(account.Address, amount),
                new MassTransferItem("alias:T:" + alias, amount),
                new MassTransferItem(account.Address, amount),
                new MassTransferItem(account.Address, amount),
                new MassTransferItem("alias:T:" + alias, amount)
            };

            var tx = new MassTransferTransaction(node.ChainId, Accounts.Alice.PublicKey, Assets.BCT, recipients);

            tx.Sign(Accounts.Alice);
            node.BroadcastAndWait(tx.GetJsonWithSignature());

            var balanceAfter = node.GetBalance(account.Address);

            Assert.AreEqual(balanceBefore + amount * recipients.Count, balanceAfter);
        }
示例#7
0
        public static (string, bool, List <string>) SendWavesFunds(bool mainnet, string privKey, string addr1, string addr2, string assetId = null)
        {
            var sentTxIds = new List <string>();
            var chainId   = Node.TestNetChainId;
            var nodeAddr  = "https://testnodes.wavesnodes.com";

            if (mainnet)
            {
                chainId  = Node.MainNetChainId;
                nodeAddr = "https://nodes.wavesnodes.com/";
            }
            var node  = new Node(nodeAddr, chainId);
            var asset = Assets.WAVES;

            if (assetId != null)
            {
                asset = node.GetAsset(assetId);
            }
            Console.WriteLine($"::send {asset.Name} funds");
            var seed = xchwallet.Utils.ParseHexString(privKey);
            var key  = PrivateKeyAccount.CreateFromSeed(seed, chainId, 0);
            var addr = key.Address;

            Console.WriteLine($"  ::privkey: {privKey}");
            Console.WriteLine($"  ::addr:    {addr}");
            var balance = node.GetBalance(addr, asset);

            Console.WriteLine($"  ::balance:        {balance} {asset.Name}");
            if (balance > 0)
            {
                var numTxs           = 6;
                var txFee            = 0.001M;
                var massTxFee        = txFee + 0.0005M * 2;
                var feeTotal         = txFee * (numTxs - 2) + massTxFee;
                var balanceAfterFees = balance - feeTotal;
                if (!asset.Equals(Assets.WAVES)) // if the asset is not waves then we ignore the fees because we are paying fees in WAVES
                {
                    balanceAfterFees = balance;
                }
                Console.WriteLine($"  ::fees:           {feeTotal} {asset.Name}");
                Console.WriteLine($"  ::balance - fees: {balanceAfterFees} {asset.Name}");
                var amount = balanceAfterFees / numTxs;
                amount = Math.Round(amount, asset.Decimals);
                var remainder = balanceAfterFees - amount * numTxs;
                Console.WriteLine($"  ::amount per tx:  {amount} (x {numTxs} = {amount * numTxs}, remainder: {remainder})");
                var txs = new List <TransferTransaction>();
                for (var i = 0; i < numTxs - 2; i++)
                {
                    var tx = new TransferTransaction(chainId, key.PublicKey, addr1, asset, amount, txFee);
                    tx.Sign(key);
                    txs.Add(tx);
                    System.Threading.Thread.Sleep(100); // sleep to ensure new timestamp
                }
                var transfers = new List <MassTransferItem>
                {
                    new MassTransferItem(addr1, amount + remainder),
                    new MassTransferItem(addr2, amount),
                };
                var massTx = new MassTransferTransaction(chainId, key.PublicKey, asset, transfers, "Shut up & take my money");
                System.Diagnostics.Debug.Assert(massTx.Fee == massTxFee);
                massTx.Sign(key);
                // send the raw signed transactions and get the txids
                try
                {
                    string output = null;
                    foreach (var tx in txs)
                    {
                        output = node.BroadcastAndWait(tx);
                        Console.WriteLine($"  {output}");
                        sentTxIds.Add(tx.GenerateId());
                    }
                    output = node.BroadcastAndWait(massTx);
                    Console.WriteLine($"  {output}");
                    sentTxIds.Add(massTx.GenerateId());
                }
                catch (System.Net.WebException ex)
                {
                    var     resp = new System.IO.StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
                    dynamic obj  = JsonConvert.DeserializeObject(resp);
                    if (obj != null)
                    {
                        Console.WriteLine($"  ERROR: {obj.message}");
                    }
                    else
                    {
                        Console.WriteLine($"  ERROR: {ex}");
                    }
                    return(addr, false, sentTxIds);
                }
            }
            return(addr, true, sentTxIds);
        }