From 64b3fd5f45a21b7d85502a2a1e1383e01e4f5f8e Mon Sep 17 00:00:00 2001 From: s2quake Date: Thu, 11 Jul 2024 17:10:54 +0900 Subject: [PATCH] fix: Fix an issue with the evidence hash changing depending on the version. --- src/Libplanet.Types/Evidence/EvidenceBase.cs | 10 ++++++- .../Blocks/BlockMetadataTest.cs | 8 +++--- .../Blocks/PreEvaluationBlockHeaderTest.cs | 26 +++++++++---------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/Libplanet.Types/Evidence/EvidenceBase.cs b/src/Libplanet.Types/Evidence/EvidenceBase.cs index 142278fe36..c82865b423 100644 --- a/src/Libplanet.Types/Evidence/EvidenceBase.cs +++ b/src/Libplanet.Types/Evidence/EvidenceBase.cs @@ -141,7 +141,7 @@ public IValue Bencoded public static IValue Bencode(EvidenceBase evidence) { Dictionary bencoded = Dictionary.Empty - .Add(TypeKey, evidence.GetType().AssemblyQualifiedName!) + .Add(TypeKey, GetTypeName(evidence)) .Add(DataKey, evidence.Bencoded); return bencoded; } @@ -209,6 +209,14 @@ public int CompareTo(object? obj) public void Verify(IEvidenceContext evidenceContext) => OnVerify(evidenceContext); + internal static string GetTypeName(EvidenceBase evidence) + { + var evidenceType = evidence.GetType(); + var typeName = evidenceType.FullName; + var assemblyName = evidenceType.Assembly; + return $"{typeName}, {assemblyName}"; + } + protected abstract Dictionary OnBencoded(Dictionary dictionary); protected abstract void OnVerify(IEvidenceContext evidenceContext); diff --git a/test/Libplanet.Tests/Blocks/BlockMetadataTest.cs b/test/Libplanet.Tests/Blocks/BlockMetadataTest.cs index 1c411ad5ef..025dca13f3 100644 --- a/test/Libplanet.Tests/Blocks/BlockMetadataTest.cs +++ b/test/Libplanet.Tests/Blocks/BlockMetadataTest.cs @@ -133,7 +133,7 @@ public void MakeCandidateData() ) .Add( "evidence_hash", - ParseHex("1620ee70e94cee1bbead145cd905181ec5a6f21d82a18abf5ca448f83296486f") + ParseHex("f52459d1a7cce3bd749fd2c06aed87b27536d94f7ac4d6bf031e78dbb6a3c9d7") ); AssertBencodexEqual(expectedGenesis, GenesisMetadata.MakeCandidateData()); @@ -156,7 +156,7 @@ public void MakeCandidateData() .Add("protocol_version", BlockMetadata.CurrentProtocolVersion) .Add( "evidence_hash", - ParseHex("2fe13c69db80c99bb0dbd22cd30989fa6e843e780c531ef9a71ac68b8fabfba8") + ParseHex("30ca321c94b6a8cc9a9faf446c1cbe395b9e92f3f2665f676ab0e6af6b265350") ); AssertBencodexEqual( expectedBlock1, @@ -183,7 +183,7 @@ public void MakeCandidateDataPv1() ) .Add( "evidence_hash", - ParseHex("2fe13c69db80c99bb0dbd22cd30989fa6e843e780c531ef9a71ac68b8fabfba8") + ParseHex("30ca321c94b6a8cc9a9faf446c1cbe395b9e92f3f2665f676ab0e6af6b265350") ) .Add("protocol_version", 1); AssertBencodexEqual(expected, Block1MetadataPv1.MakeCandidateData()); @@ -207,7 +207,7 @@ public void DerivePreEvaluationHash() HashDigest hash = GenesisMetadata.DerivePreEvaluationHash(); AssertBytesEqual( - FromHex("57755b98998adeab81ea1f09702fd353fbc6947531a9259665ae8d6f01d8bbf2"), + FromHex("a8c9ab7630949c9ed54cbaf5d8501d64a45444aa6c9f0141b41baa188d33b138"), hash.ByteArray); } diff --git a/test/Libplanet.Tests/Blocks/PreEvaluationBlockHeaderTest.cs b/test/Libplanet.Tests/Blocks/PreEvaluationBlockHeaderTest.cs index b9a07eedc3..ccf88ae868 100644 --- a/test/Libplanet.Tests/Blocks/PreEvaluationBlockHeaderTest.cs +++ b/test/Libplanet.Tests/Blocks/PreEvaluationBlockHeaderTest.cs @@ -73,7 +73,7 @@ public void MakeCandidateData() ) .Add( "evidence_hash", - ParseHex("1620ee70e94cee1bbead145cd905181ec5a6f21d82a18abf5ca448f83296486f") + ParseHex("f52459d1a7cce3bd749fd2c06aed87b27536d94f7ac4d6bf031e78dbb6a3c9d7") ); var genesis = new PreEvaluationBlockHeader( _contents.GenesisMetadata, @@ -108,7 +108,7 @@ public void MakeCandidateData() .Add( "evidence_hash", ParseHex( - "2fe13c69db80c99bb0dbd22cd30989fa6e843e780c531ef9a71ac68b8fabfba8" + "30ca321c94b6a8cc9a9faf446c1cbe395b9e92f3f2665f676ab0e6af6b265350" ) ) .Add("protocol_version", BlockMetadata.CurrentProtocolVersion) @@ -181,8 +181,8 @@ public void VerifySignature() // Same as block1.MakeSignature(_contents.Block1Key, arbitraryHash) ImmutableArray validSig = ByteUtil.ParseHexToImmutable( - "304402203a1bd08940dcf10c696bbb04c882bc52d27519512f81a1d38c9d49956aead6" + - "0102201cd079a4e53c3867b4b24542f107e680935b2f369bae4ecd347adc5fedcbaf36"); + "30440220502140eaced0581969a2ca2582e499e6bf243e7b1dd3632fb27c374965684e" + + "5b022000e097ef3acaeb5611e917e3a5750c855a51840931065b45b68dde1dfb9ef97e"); AssertBytesEqual( validSig, block1.MakeSignature(_contents.Block1Key, arbitraryHash)); @@ -208,29 +208,29 @@ public void DeriveBlockHash() { Func fromHex = BlockHash.FromString; HashDigest arbitraryHash = HashDigest.FromString( - "e6b3803208416556db8de50670aaf0b642e13c90afd77d24da8f642dc3e8f320" + "9db253bdb987ec93df713522e5f90f4865a2d0fa337481d7a065d588ddae7fa7" ); var genesis = new PreEvaluationBlockHeader( _contents.GenesisMetadata, _contents.GenesisMetadata.DerivePreEvaluationHash()); AssertBytesEqual( - fromHex("6b985ae01bde1f20cc2540d573e8ef29fa6850d5c5fed11b5f16f6725f4f9279"), + fromHex("d8eb257f6063ef7d146fb303d3f6a9291eee411e710495b0cb72d82aaae0c065"), genesis.DeriveBlockHash(default, null) ); AssertBytesEqual( - fromHex("4eabde1d1cffe6d757d45ee06ec2df06b3348df4019960be82a2f60b9a9aa824"), + fromHex("9b4eaf970bf09b2b55cf6f1dabd32ac4169de21d3675a2f13ef6d4d7b5a319d1"), genesis.DeriveBlockHash( default, genesis.MakeSignature(_contents.GenesisKey, default) ) ); AssertBytesEqual( - fromHex("32a983fd82abe6fae843f1719b53782eae55c4cdcf7698b30898369281f6a913"), + fromHex("e35133bb22ee3aa8b42c6d905f76121a778b37e8edf161539d69b332415beb44"), genesis.DeriveBlockHash(arbitraryHash, null) ); AssertBytesEqual( - fromHex("7bda8e4ea57963b105c6420f0374ddaf5bb27e9c7fa7e34785bd21c44c8d46a1"), + fromHex("40d84561a3c63b9c1b8c55fdbd3f9631770367c2136b831bd9a009647f53152f"), genesis.DeriveBlockHash( arbitraryHash, genesis.MakeSignature(_contents.GenesisKey, arbitraryHash)) @@ -240,19 +240,19 @@ public void DeriveBlockHash() _contents.Block1Metadata, _contents.Block1Metadata.DerivePreEvaluationHash()); AssertBytesEqual( - fromHex("d4e6f3193e0fe5891667deeb112daceef91ca42946696943726bf3cecf1bb07f"), + fromHex("bab850e957ed038152bd0539da538b31e336308d9a815df67eb5d3b0216ea2df"), block1.DeriveBlockHash(default, null) ); AssertBytesEqual( - fromHex("9e32da9a1127f8a7cf3d127f871664aed86d7c629dba1574d018c7322600b3e3"), + fromHex("710b42e998f1f9507e54a942d186768bdade158a05e9a9272ebe2abaa20c0d47"), block1.DeriveBlockHash(default, block1.MakeSignature(_contents.Block1Key, default)) ); AssertBytesEqual( - fromHex("4ea630fb80d6235a5a7433b8935bac389c5dab486dd9c8dd24a840733ae5ce06"), + fromHex("232a79160ead5ef8d6cfbfea4a47476d6f78f5d7ff16f52a429371d073afe944"), block1.DeriveBlockHash(arbitraryHash, null) ); AssertBytesEqual( - fromHex("e86d8b1d9e37ffd051fcbc9ece3cc112f87b8653e5cf4e7c34a5cae4e9594624"), + fromHex("73be0a206309f494855fc7314c002dd8f95e8aa987dc5d37f0ce7e5f400302f3"), block1.DeriveBlockHash( arbitraryHash, block1.MakeSignature(_contents.Block1Key, arbitraryHash) )