public void ReadWrite(BitcoinStream stream) { var len = new VarInt((ulong)_Bytes.Length); stream.ReadWrite(ref len); if(!stream.Serializing) _Bytes = new byte[len.ToLong()]; stream.ReadWrite(ref _Bytes); }
private void ReadWriteArray(ref byte[][] data) { if (data == null && this.Serializing) { throw new ArgumentNullException("Impossible to serialize a null array"); } if (this.Serializing) { var len = data == null ? 0 : (ulong)data.Length; if (len > (uint)MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } VarInt.StaticWrite(this, len); if (len == 0) { return; } } else { var len = VarInt.StaticRead(this); if (len > (uint)this.MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } data = new byte[len][]; } for (int i = 0; i < data.Length; i++) { byte[] obj = data[i]; var len = VarInt.StaticRead(this); if (len > (uint)this.MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } obj = new byte[len]; ReadWrite(ref obj); data[i] = obj; } }
public void ReadWrite(ref TxOutList list) { int listLen = 0; if (Serializing) { var len = list == null ? 0 : (ulong)list.Count; if (len > (uint)MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } VarInt.StaticWrite(this, len); if (len == 0) { return; } listLen = (int)len; foreach (var obj in list) { ReadWrite(obj); } } else { var len = VarInt.StaticRead(this); if (len > (uint)MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } listLen = (int)len; list = new TxOutList(listLen); for (int i = 0; i < listLen; i++) { TxOut obj = default; ReadWrite(ref obj); list.Add(obj); } } }
private void ReadWriteArray <T>(ref T[] data) where T : IBitcoinSerializable { if (data == null && Serializing) { throw new ArgumentNullException("Impossible to serialize a null array"); } if (Serializing) { var len = data == null ? 0 : (ulong)data.Length; if (len > (uint)MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } VarInt.StaticWrite(this, len); if (len == 0) { return; } } else { var len = VarInt.StaticRead(this); if (len > (uint)MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } data = new T[len]; } for (int i = 0; i < data.Length; i++) { T obj = data[i]; ReadWrite(ref obj); data[i] = obj; } }
/// <summary> /// Serialize the filter as a array of bytes using [varint(N) | data]. /// </summary> /// <returns>A array of bytes with the serialized filter data.</returns> public byte[] ToBytes() { var n = new VarInt((ulong)N).ToBytes(); return(n.Concat(this.Data)); }
public void ReadWrite(BitcoinStream stream) { stream.ReadWrite(ref nVersion); stream.ReadWrite(ref hashPrevBlock); stream.ReadWrite(ref hashMerkleRoot); stream.ReadWrite(ref nTime); stream.ReadWrite(ref nBits); stream.ReadWrite(ref nNonce); if(stream.NetworkFormat) { VarInt txCount = new VarInt(0); stream.ReadWrite(ref txCount); } }