Example #1
0
File: Zmq.cs Project: kzbsv/KzjHack
        static async Task ReadBlockPipeAsync(PipeReader reader)
        {
            var block = new KzBlock();

            // Read Bitcoin block headers from a PipeReader
            while (_zmqRunning)
            {
                var rr = await reader.ReadAsync();

                var consumed = 0L;
                var buf      = rr.Buffer;
                var ros      = buf;
                if (block.TryReadBlock(ref buf))
                {
                    reader.AdvanceTo(buf.GetPosition(consumed));
                    //KzH.WriteMessageLine($"Block parsed {block.Hash}");
                    Blocks.AddNewBlock(block, ros);
                }
                else
                {
                    reader.AdvanceTo(buf.Start, buf.End);
                    KzH.WriteMessageLine($"Block parse failed");
                }
            }
        }
Example #2
0
        static KzBlock GetBlock(int height)
        {
            var bytes = GetBlockBytes(height);

            var kzb = new KzBlock()
            {
                Height = height
            };
            var ros = new ReadOnlySequence <byte>(bytes);
            var ok  = kzb.TryReadBlock(ref ros);

            Assert.True(ros.Length == 0);
            Assert.True(ok);

            return(kzb);
        }
Example #3
0
        static (bool ok, ReadOnlySequence <byte> ros) FetchBlockByHeightAndHash(int height, KzUInt256?hash, KzBlock b)
        {
            var kzrpc = KzH.GetKzRpc();

            if (hash == null)
            {
                hash = new KzUInt256(kzrpc.GetBlockHash(height));
            }
            var raw = kzrpc.GetBlockRaw(hash.Value).GetBytes();
            var ros = new ReadOnlySequence <byte>(raw);
            var bh  = new KzBlockHeader {
                Height = height
            };

            b.Height = height;
            var tros = ros;

            if (!b.TryReadBlock(ref tros))
            {
                goto fail;
            }
            return(true, ros);

fail:
            return(false, ros);
        }