Example #1
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);
        }
Example #2
0
        public void ByteAccess()
        {
            var i = new KzUInt256();
            var s = i.Span;

            s[0]  = 0x21;
            s[31] = 0xfe;
            var str = i.ToString();

            Assert.Equal("fe00000000000000000000000000000000000000000000000000000000000021", str);
        }
Example #3
0
        public void LeftShift()
        {
            var a = new KzUInt256(1);

            Assert.Equal(new KzUInt256(1, 0, 0, 0), a);
            Assert.Equal(new KzUInt256(0, 1, 0, 0), a << 64);
            Assert.Equal(new KzUInt256(0, 4, 0, 0), a << 66);
            Assert.Equal(new KzUInt256(0, 0, 1, 0), a << (64 + 64));
            Assert.Equal(new KzUInt256(0, 0, 4, 0), a << (66 + 64));
            Assert.Equal(new KzUInt256(0, 0, 0, 1), a << (64 + 64 + 64));
            Assert.Equal(new KzUInt256(0, 0, 0, 4), a << (66 + 64 + 64));
        }
Example #4
0
File: Zmq.cs Project: kzbsv/KzjHack
        static async Task ReadBlockHashPipeAsync(PipeReader reader)
        {
            // Read Bitcoin block ids from a PipeReader
            while (_zmqRunning)
            {
                var rr = await reader.ReadAsync();

                var buf     = rr.Buffer;
                var blockId = new KzUInt256();
                buf.ToSpan().CopyTo(blockId.Span);
                reader.AdvanceTo(buf.GetPosition(32));
                KzH.WriteLine($"BlockId parsed id={blockId.ToHex()}");
            }
        }
Example #5
0
        public void HexByteOrder()
        {
            var hex = "fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210";
            var fbf = new byte[] { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
            var fbl = fbf.Reverse().ToArray();

            var ifbl = new KzUInt256(hex, firstByteFirst: false);
            var ifbf = new KzUInt256(hex, firstByteFirst: true);

            Assert.Equal(ifbl.ReadOnlySpan.ToArray(), fbl);
            Assert.Equal(ifbf.ReadOnlySpan.ToArray(), fbf);

            Assert.Equal(hex, ifbl.ToString());
            Assert.Equal(hex, ifbf.ToStringFirstByteFirst());
        }