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