diff --git a/src/Neo/Network/P2P/Payloads/Block.cs b/src/Neo/Network/P2P/Payloads/Block.cs index 3c727b9886..1bef977fee 100644 --- a/src/Neo/Network/P2P/Payloads/Block.cs +++ b/src/Neo/Network/P2P/Payloads/Block.cs @@ -47,6 +47,11 @@ public sealed class Block : IEquatable, IInventory /// public UInt256 PrevHash => Header.PrevHash; + /// + /// The state root of the previous block. + /// + public UInt256 PrevState => Header.PrevState; + /// /// The merkle root of the transactions. /// diff --git a/src/Neo/Network/P2P/Payloads/Header.cs b/src/Neo/Network/P2P/Payloads/Header.cs index 9519c1432c..a5bb4223eb 100644 --- a/src/Neo/Network/P2P/Payloads/Header.cs +++ b/src/Neo/Network/P2P/Payloads/Header.cs @@ -28,6 +28,7 @@ public sealed class Header : IEquatable
, IVerifiable { private uint version; private UInt256 prevHash; + private UInt256 prevState; private UInt256 merkleRoot; private ulong timestamp; private ulong nonce; @@ -58,6 +59,12 @@ public UInt256 PrevHash set { prevHash = value; _hash = null; } } + public UInt256 PrevState + { + get => prevState; + set { prevState = value; } + } + /// /// The merkle root of the transactions. /// @@ -128,6 +135,7 @@ public UInt256 Hash public int Size => sizeof(uint) + // Version UInt256.Length + // PrevHash + UInt256.Length + // PrevState UInt256.Length + // MerkleRoot sizeof(ulong) + // Timestamp sizeof(ulong) + // Nonce @@ -163,6 +171,7 @@ void IVerifiable.DeserializeUnsigned(ref MemoryReader reader) version = reader.ReadUInt32(); if (version > 0) throw new FormatException(); prevHash = reader.ReadSerializable(); + prevState = reader.ReadSerializable(); merkleRoot = reader.ReadSerializable(); timestamp = reader.ReadUInt64(); nonce = reader.ReadUInt64(); @@ -206,6 +215,7 @@ void IVerifiable.SerializeUnsigned(BinaryWriter writer) { writer.Write(version); writer.Write(prevHash); + writer.Write(prevState); writer.Write(merkleRoot); writer.Write(timestamp); writer.Write(nonce); @@ -226,6 +236,7 @@ public JObject ToJson(ProtocolSettings settings) json["size"] = Size; json["version"] = version; json["previousblockhash"] = prevHash.ToString(); + json["previousblockstate"] = prevState.ToString(); json["merkleroot"] = merkleRoot.ToString(); json["time"] = timestamp; json["nonce"] = nonce.ToString("X16");