private void OnGetTxnMessageReceived(Message msg) { InvPayload payload = msg.GetPayload <InvPayload>(); if (payload.Type != InventoryType.TX) { throw new InvalidOperationException(); } UInt256[] hashes = payload.Hashes.Where(p => sentHashes.Add(p)).ToArray(); if (hashes.Length == 0) { return; } blockchain.Log($"OnGetTxn begin, count:{payload.Hashes.Length}, [{remoteNode.Remote.Address}]", Plugins.LogLevel.Debug); List <Transaction> transactions = new List <Transaction>(); foreach (UInt256 hash in hashes) { Transaction tx = blockchain.GetTransaction(hash); if (tx != null) { transactions.Add(tx); } } int count = transactions.Count; if (count > 0) { if (ProtocolSettings.Default.EnableCompressedRawTxn) { foreach (CompressedTransactionPayload ctx_payload in CompressedTransactionPayload.CreateGroup(transactions.ToArray())) { Context.Parent.Tell(Message.Create(MessageType.CompressedTxn, ctx_payload)); } } else { foreach (RawTransactionPayload rtx_payload in RawTransactionPayload.CreateGroup(transactions.ToArray())) { Context.Parent.Tell(Message.Create(MessageType.RawTxn, rtx_payload)); } } Context.Parent.Tell(RemoteNode.NewCounterMessage(RemoteNode.CounterType.Send, payload.Type, count)); } blockchain.Log($"OnGetTxn end, count:{hashes.Length}=>{count}, [{remoteNode.Remote.Address}]", Plugins.LogLevel.Debug); }
private void Test() { string WIF = Config.getValue("WIF"); string targetWIF = Config.getValue("targetWIF"); keypair = ZoroHelper.GetKeyPairFromWIF(WIF); scriptHash = ZoroHelper.GetPublicKeyHash(keypair.PublicKey); targetscripthash = ZoroHelper.GetPublicKeyHashFromWIF(targetWIF); Console.WriteLine("请输入数量:"); var param = Console.ReadLine(); int count = int.Parse(param); if (count <= 0) { return; } Random rnd = new Random(); DateTime dt = DateTime.Now; List <Transaction> txns = new List <Transaction>(); for (int i = 0; i < count; i++) { txns.Add(MakeTestTransaction(rnd)); } Console.Write("maketxn, "); PrintTimeCost(dt); dt = DateTime.Now; IEnumerable <CompressedTransactionPayload> payloads = CompressedTransactionPayload.CreateGroup(txns.ToArray()); Console.Write("compress, "); PrintTimeCost(dt); dt = DateTime.Now; foreach (var payload in payloads) { Transaction[] txn = CompressedTransactionPayload.DecompressTransactions(payload.CompressedData); foreach (var tx in txn) { } } Console.Write("decompress, "); PrintTimeCost(dt); }
private void OnCompressedTransactionMessageReceived(Message msg) { CompressedTransactionPayload payload = msg.GetPayload <CompressedTransactionPayload>(); blockchain.Log($"recv ziptxn, count:{payload.TransactionCount}, [{remoteNode.Remote.Address}]", Plugins.LogLevel.Debug); Transaction[] txn = CompressedTransactionPayload.DecompressTransactions(payload.CompressedData); foreach (var tx in txn) { system.TaskManager.Tell(new TaskManager.TaskCompleted { Hash = tx.Hash, Type = InventoryType.TX }, Context.Parent); if (!(tx is MinerTransaction)) { system.LocalNode.Tell(new LocalNode.Relay { Inventory = tx }); } } }