From 3d3565010b5bc69883d73064a52c0a766be2e056 Mon Sep 17 00:00:00 2001 From: Shine Li Date: Tue, 19 Jan 2021 18:23:27 +0800 Subject: [PATCH] Change smart contract hash computation (#438) * sync2240 * Update nuget * checksum Co-authored-by: Shargon --- src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj | 2 +- .../Services/Neo/ContractManagement.cs | 2 +- .../Services/Neo/GAS.cs | 2 +- .../Services/Neo/NEO.cs | 2 +- .../Services/Neo/NameService.cs | 2 +- .../Services/Neo/Oracle.cs | 2 +- .../Services/Neo/Policy.cs | 2 +- .../Services/Neo/RoleManagement.cs | 2 +- .../UnitTest_Delegate.cs | 3 ++- .../UnitTest_NativeContracts.cs | 16 ++++++++-------- .../Services/Neo/ContractTest.cs | 6 ++++-- 11 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj b/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj index 22e8051b1..bba99611e 100644 --- a/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj +++ b/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj @@ -41,7 +41,7 @@ - + diff --git a/src/Neo.SmartContract.Framework/Services/Neo/ContractManagement.cs b/src/Neo.SmartContract.Framework/Services/Neo/ContractManagement.cs index 3e85388c8..6527a93c9 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/ContractManagement.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/ContractManagement.cs @@ -2,7 +2,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0xbee421fdbb3e791265d2104cb34934f53fcc0e45")] + [Contract("0xa501d7d7d10983673b61b7a2d3a813b36f9f0e43")] public class ContractManagement { public static extern UInt160 Hash { [ContractHash] get; } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs b/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs index dba4b258b..761ff57dc 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs @@ -4,7 +4,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0x9ac04cf223f646de5f7faccafe34e30e5d4382a2")] + [Contract("0x75844530eb44f4715a42950bb59b4d7ace0b2f3d")] public class GAS { public static extern UInt160 Hash { [ContractHash] get; } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs b/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs index 0fb6f6caf..ce548b01b 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs @@ -5,7 +5,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0x4961bf0ab79370b23dc45cde29f568d0e0fa6e93")] + [Contract("0xf617baca689d1abddedda7c3b80675c4ac21e932")] public class NEO { public static extern UInt160 Hash { [ContractHash] get; } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/NameService.cs b/src/Neo.SmartContract.Framework/Services/Neo/NameService.cs index eb16890ac..f51ec53d9 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/NameService.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/NameService.cs @@ -4,7 +4,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0xa92fbe5bf164170a624474841485b20b45a26047")] + [Contract("0x1bda60bf76671280ab2ab80d78f7ba95434751b5")] public class NameService { // NonfungibleToken diff --git a/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs b/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs index 3bef3c296..b99c3a113 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs @@ -2,7 +2,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0x8cd3889136056b3304ec59f6d424b8767710ed79")] + [Contract("0xb82bbf650f963dbf71577d10ea4077e711a13e7b")] public class Oracle { public static extern UInt160 Hash { [ContractHash] get; } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs b/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs index 34afe9873..fbf845db2 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs @@ -4,7 +4,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0xc939a4af1c762e5edca36d4b61c06ba82c4c6ff5")] + [Contract("0xe21a28cfc1e662e152f668c86198141cc17b6c37")] public class Policy { public static extern UInt160 Hash { [ContractHash] get; } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/RoleManagement.cs b/src/Neo.SmartContract.Framework/Services/Neo/RoleManagement.cs index 926b65916..d700f97a6 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/RoleManagement.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/RoleManagement.cs @@ -2,7 +2,7 @@ namespace Neo.SmartContract.Framework.Services.Neo { - [Contract("0xf4bbd95569e8dda2cb84eb609a1488ddd0d9fa91")] + [Contract("0x69b1909aaa14143b0624ba0d61d5cd3b8b67529d")] public class RoleManagement { public static extern UInt160 Hash { [ContractHash] get; } diff --git a/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_Delegate.cs b/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_Delegate.cs index 4cef1abdb..0b79deff4 100644 --- a/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_Delegate.cs +++ b/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_Delegate.cs @@ -4,6 +4,7 @@ using Neo.IO; using Neo.Ledger; using Neo.Persistence; +using Neo.SmartContract.Native; using Neo.VM; using Neo.VM.Types; @@ -35,7 +36,7 @@ public void TestFunc() [TestMethod] public void TestDelegateCall() { - var token = UInt160.Parse("0x4961bf0ab79370b23dc45cde29f568d0e0fa6e93"); // NEO token + var token = NativeContract.NEO.Hash; // NEO token testengine.Reset(); var result = testengine.ExecuteTestCaseStandard("testDynamicCall", token.ToArray(), "symbol"); diff --git a/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs b/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs index 9bc2b3185..699131f84 100644 --- a/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs +++ b/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs @@ -1,3 +1,4 @@ +using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Neo.Compiler.MSIL.Extensions; using Neo.Compiler.MSIL.UnitTests.Utils; @@ -22,14 +23,13 @@ public void Test_Init() [TestMethod] public void TestHashes() { - // var attr = typeof(Oracle).GetCustomAttribute(); - Assert.AreEqual(NativeContract.ContractManagement.Hash.ToString(), "0xbee421fdbb3e791265d2104cb34934f53fcc0e45"); - Assert.AreEqual(NativeContract.RoleManagement.Hash.ToString(), "0xf4bbd95569e8dda2cb84eb609a1488ddd0d9fa91"); - Assert.AreEqual(NativeContract.NameService.Hash.ToString(), "0xa92fbe5bf164170a624474841485b20b45a26047"); - Assert.AreEqual(NativeContract.Oracle.Hash.ToString(), "0x8cd3889136056b3304ec59f6d424b8767710ed79"); - Assert.AreEqual(NativeContract.NEO.Hash.ToString(), "0x4961bf0ab79370b23dc45cde29f568d0e0fa6e93"); - Assert.AreEqual(NativeContract.GAS.Hash.ToString(), "0x9ac04cf223f646de5f7faccafe34e30e5d4382a2"); - Assert.AreEqual(NativeContract.Policy.Hash.ToString(), "0xc939a4af1c762e5edca36d4b61c06ba82c4c6ff5"); + Assert.AreEqual(NativeContract.ContractManagement.Hash.ToString(), "0xa501d7d7d10983673b61b7a2d3a813b36f9f0e43"); + Assert.AreEqual(NativeContract.RoleManagement.Hash.ToString(), "0x69b1909aaa14143b0624ba0d61d5cd3b8b67529d"); + Assert.AreEqual(NativeContract.NameService.Hash.ToString(), "0x1bda60bf76671280ab2ab80d78f7ba95434751b5"); + Assert.AreEqual(NativeContract.Oracle.Hash.ToString(), "0xb82bbf650f963dbf71577d10ea4077e711a13e7b"); + Assert.AreEqual(NativeContract.NEO.Hash.ToString(), "0xf617baca689d1abddedda7c3b80675c4ac21e932"); + Assert.AreEqual(NativeContract.GAS.Hash.ToString(), "0x75844530eb44f4715a42950bb59b4d7ace0b2f3d"); + Assert.AreEqual(NativeContract.Policy.Hash.ToString(), "0xe21a28cfc1e662e152f668c86198141cc17b6c37"); } [TestMethod] diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs index d543b930a..42a5cb619 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs @@ -38,9 +38,10 @@ public void Test_CreateCallDestroy() var script = _engine.Build("./TestClasses/Contract_Create.cs"); var manifest = ContractManifest.FromJson(JObject.Parse(script.finalManifest)); var nef = new NefFile() { Script = script.finalNEFScript, Compiler = "unit-test-1.0", Tokens = System.Array.Empty() }; - var hash = Helper.GetContractHash((_engine.ScriptContainer as Transaction).Sender, nef.Script); nef.CheckSum = NefFile.ComputeChecksum(nef); + var hash = Helper.GetContractHash((_engine.ScriptContainer as Transaction).Sender, nef.CheckSum, manifest.Name); + // Create _engine.Reset(); @@ -96,9 +97,10 @@ public void Test_Update() Compiler = "unit-test-1.0", Tokens = script.nefFile.Tokens }; - var hash = Helper.GetContractHash((_engine.ScriptContainer as Transaction).Sender, nef.Script); nef.CheckSum = NefFile.ComputeChecksum(nef); + var hash = Helper.GetContractHash((_engine.ScriptContainer as Transaction).Sender, nef.CheckSum, manifest.Name); + var scriptUpdate = _engine.Build("./TestClasses/Contract_Update.cs"); var manifestUpdate = ContractManifest.FromJson(JObject.Parse(scriptUpdate.finalManifest));