From ff2eb11243e5791e9607a6675aa7699991343a48 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Tue, 19 Sep 2023 22:09:25 +0530 Subject: [PATCH] added Runtime Environment Updated digest (#3083) Co-authored-by: Diego --- dot/types/block_data_test.go | 3 ++- dot/types/digest.go | 13 ++++++++++++- dot/types/digest_test.go | 28 +++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/dot/types/block_data_test.go b/dot/types/block_data_test.go index a5ab774a49..e8e877e883 100644 --- a/dot/types/block_data_test.go +++ b/dot/types/block_data_test.go @@ -12,7 +12,8 @@ import ( ) var ( - digestItem = scale.MustNewVaryingDataType(PreRuntimeDigest{}, ConsensusDigest{}, SealDigest{}) + digestItem = scale.MustNewVaryingDataType(PreRuntimeDigest{}, ConsensusDigest{}, + SealDigest{}, RuntimeEnvironmentUpdated{}) digest = scale.NewVaryingDataTypeSlice(digestItem) testDigest = digest ) diff --git a/dot/types/digest.go b/dot/types/digest.go index 6fa4d8aa18..3f3a4f921c 100644 --- a/dot/types/digest.go +++ b/dot/types/digest.go @@ -17,7 +17,7 @@ type DigestItem struct { // NewDigestItem returns a new VaryingDataType to represent a DigestItem func NewDigestItem() scale.VaryingDataType { - return scale.MustNewVaryingDataType(PreRuntimeDigest{}, ConsensusDigest{}, SealDigest{}) + return scale.MustNewVaryingDataType(PreRuntimeDigest{}, ConsensusDigest{}, SealDigest{}, RuntimeEnvironmentUpdated{}) } // NewDigest returns a new Digest as a varying data type slice. @@ -84,3 +84,14 @@ func (SealDigest) Index() uint { return 5 } func (d SealDigest) String() string { return fmt.Sprintf("SealDigest ConsensusEngineID=%s Data=0x%x", d.ConsensusEngineID.ToBytes(), d.Data) } + +// RuntimeEnvironmentUpdated contains is an indicator for the light clients that the runtime environment is updated +type RuntimeEnvironmentUpdated struct{} + +// Index returns VDT index +func (RuntimeEnvironmentUpdated) Index() uint { return 8 } + +// String returns the digest as a string +func (RuntimeEnvironmentUpdated) String() string { + return "RuntimeEnvironmentUpdated" +} diff --git a/dot/types/digest_test.go b/dot/types/digest_test.go index cdb0688910..19f444ce1f 100644 --- a/dot/types/digest_test.go +++ b/dot/types/digest_test.go @@ -40,12 +40,14 @@ func Test_Digest_String(t *testing.T) { ConsensusEngineID: ConsensusEngineID{'x', 'y', 'w', 'z'}, Data: []byte{7, 8}, }) + digest.Add(RuntimeEnvironmentUpdated{}) return digest }, s: "[" + "PreRuntimeDigest ConsensusEngineID=abcd Data=0x01020304, " + "ConsensusDigest ConsensusEngineID=ffgg Data=0x0506, " + - "SealDigest ConsensusEngineID=xywz Data=0x0708" + + "SealDigest ConsensusEngineID=xywz Data=0x0708, " + + "RuntimeEnvironmentUpdated" + "]", }, } @@ -191,6 +193,30 @@ func TestConsensusDigest(t *testing.T) { require.Equal(t, diValue, vValue) } +func TestRuntimeEnvironmentUpdatedDigest(t *testing.T) { + exp := common.MustHexToBytes("0x08") + d := RuntimeEnvironmentUpdated{} + + di := NewDigestItem() + err := di.Set(d) + require.NoError(t, err) + + enc, err := scale.Marshal(di) + require.NoError(t, err) + + require.Equal(t, exp, enc) + + v := NewDigestItem() + err = scale.Unmarshal(enc, &v) + require.NoError(t, err) + + diValue, err := di.Value() + require.NoError(t, err) + vValue, err := v.Value() + require.NoError(t, err) + require.Equal(t, diValue, vValue) +} + func TestSealDigest(t *testing.T) { exp := common.MustHexToBytes("0x05424142451001030507") d := SealDigest{