Skip to content

Commit

Permalink
fix: Fix an issue with the evidence hash changing depending on the ve…
Browse files Browse the repository at this point in the history
…rsion.
  • Loading branch information
s2quake committed Jul 11, 2024
1 parent 75b3ae4 commit 64b3fd5
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 18 deletions.
10 changes: 9 additions & 1 deletion src/Libplanet.Types/Evidence/EvidenceBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
Expand Down
8 changes: 4 additions & 4 deletions test/Libplanet.Tests/Blocks/BlockMetadataTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public void MakeCandidateData()
)
.Add(
"evidence_hash",
ParseHex("1620ee70e94cee1bbead145cd905181ec5a6f21d82a18abf5ca448f83296486f")
ParseHex("f52459d1a7cce3bd749fd2c06aed87b27536d94f7ac4d6bf031e78dbb6a3c9d7")
);
AssertBencodexEqual(expectedGenesis, GenesisMetadata.MakeCandidateData());

Expand All @@ -156,7 +156,7 @@ public void MakeCandidateData()
.Add("protocol_version", BlockMetadata.CurrentProtocolVersion)
.Add(
"evidence_hash",
ParseHex("2fe13c69db80c99bb0dbd22cd30989fa6e843e780c531ef9a71ac68b8fabfba8")
ParseHex("30ca321c94b6a8cc9a9faf446c1cbe395b9e92f3f2665f676ab0e6af6b265350")
);
AssertBencodexEqual(
expectedBlock1,
Expand All @@ -183,7 +183,7 @@ public void MakeCandidateDataPv1()
)
.Add(
"evidence_hash",
ParseHex("2fe13c69db80c99bb0dbd22cd30989fa6e843e780c531ef9a71ac68b8fabfba8")
ParseHex("30ca321c94b6a8cc9a9faf446c1cbe395b9e92f3f2665f676ab0e6af6b265350")
)
.Add("protocol_version", 1);
AssertBencodexEqual(expected, Block1MetadataPv1.MakeCandidateData());
Expand All @@ -207,7 +207,7 @@ public void DerivePreEvaluationHash()

HashDigest<SHA256> hash = GenesisMetadata.DerivePreEvaluationHash();
AssertBytesEqual(
FromHex("57755b98998adeab81ea1f09702fd353fbc6947531a9259665ae8d6f01d8bbf2"),
FromHex("a8c9ab7630949c9ed54cbaf5d8501d64a45444aa6c9f0141b41baa188d33b138"),
hash.ByteArray);
}

Expand Down
26 changes: 13 additions & 13 deletions test/Libplanet.Tests/Blocks/PreEvaluationBlockHeaderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public void MakeCandidateData()
)
.Add(
"evidence_hash",
ParseHex("1620ee70e94cee1bbead145cd905181ec5a6f21d82a18abf5ca448f83296486f")
ParseHex("f52459d1a7cce3bd749fd2c06aed87b27536d94f7ac4d6bf031e78dbb6a3c9d7")
);
var genesis = new PreEvaluationBlockHeader(
_contents.GenesisMetadata,
Expand Down Expand Up @@ -108,7 +108,7 @@ public void MakeCandidateData()
.Add(
"evidence_hash",
ParseHex(
"2fe13c69db80c99bb0dbd22cd30989fa6e843e780c531ef9a71ac68b8fabfba8"
"30ca321c94b6a8cc9a9faf446c1cbe395b9e92f3f2665f676ab0e6af6b265350"
)
)
.Add("protocol_version", BlockMetadata.CurrentProtocolVersion)
Expand Down Expand Up @@ -181,8 +181,8 @@ public void VerifySignature()

// Same as block1.MakeSignature(_contents.Block1Key, arbitraryHash)
ImmutableArray<byte> validSig = ByteUtil.ParseHexToImmutable(
"304402203a1bd08940dcf10c696bbb04c882bc52d27519512f81a1d38c9d49956aead6" +
"0102201cd079a4e53c3867b4b24542f107e680935b2f369bae4ecd347adc5fedcbaf36");
"30440220502140eaced0581969a2ca2582e499e6bf243e7b1dd3632fb27c374965684e" +
"5b022000e097ef3acaeb5611e917e3a5750c855a51840931065b45b68dde1dfb9ef97e");
AssertBytesEqual(
validSig,
block1.MakeSignature(_contents.Block1Key, arbitraryHash));
Expand All @@ -208,29 +208,29 @@ public void DeriveBlockHash()
{
Func<string, BlockHash> fromHex = BlockHash.FromString;
HashDigest<SHA256> arbitraryHash = HashDigest<SHA256>.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))
Expand All @@ -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)
)
Expand Down

0 comments on commit 64b3fd5

Please sign in to comment.