Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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
                    });
                }
            }
        }