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)); }
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()); }
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()); }
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)); }
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); }
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); }
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); }