From e3d8da36f7ff6eb4854da258f74822b941065c44 Mon Sep 17 00:00:00 2001 From: Erik Zhang Date: Tue, 20 Oct 2020 12:25:55 +0800 Subject: [PATCH 1/3] Add ByteString (#376) --- src/Neo.SmartContract.Framework/ByteString.cs | 29 +++++++ src/Neo.SmartContract.Framework/Helper.cs | 12 +-- .../StackItemType.cs | 9 ++ .../HelperTest.cs | 26 +++--- .../ListTest.cs | 2 +- .../MapTest.cs | 26 +++--- .../Services/Neo/AccountTest.cs | 6 +- .../Services/Neo/BlockchainTest.cs | 84 +++++++++---------- .../Services/Neo/ContractTest.cs | 4 +- .../Services/Neo/CryptoTest.cs | 40 ++++----- .../Services/Neo/JsonTest.cs | 8 +- .../Services/Neo/NativeTest.cs | 8 +- .../Services/Neo/RuntimeTest.cs | 12 +-- .../Services/Neo/StorageTest.cs | 16 ++-- .../Services/System/BinaryTest.cs | 8 +- .../Services/System/ExecutionEngineTest.cs | 4 +- .../StackItemTypeTest.cs | 4 +- 17 files changed, 166 insertions(+), 132 deletions(-) create mode 100644 src/Neo.SmartContract.Framework/ByteString.cs create mode 100644 src/Neo.SmartContract.Framework/StackItemType.cs diff --git a/src/Neo.SmartContract.Framework/ByteString.cs b/src/Neo.SmartContract.Framework/ByteString.cs new file mode 100644 index 000000000..9ba917f42 --- /dev/null +++ b/src/Neo.SmartContract.Framework/ByteString.cs @@ -0,0 +1,29 @@ +namespace Neo.SmartContract.Framework +{ + public abstract class ByteString + { + public extern byte this[int index] + { + [OpCode(OpCode.PICKITEM)] + get; + } + + public extern int Length + { + [OpCode(OpCode.SIZE)] + get; + } + + [Script] + public static extern implicit operator string(ByteString str); + + [Script] + public static extern implicit operator ByteString(string str); + + [OpCode(OpCode.CONVERT, StackItemType.Buffer)] + public static extern explicit operator byte[](ByteString str); + + [OpCode(OpCode.CONVERT, StackItemType.ByteString)] + public static extern explicit operator ByteString(byte[] buffer); + } +} diff --git a/src/Neo.SmartContract.Framework/Helper.cs b/src/Neo.SmartContract.Framework/Helper.cs index b4863237f..1ae1ed83f 100644 --- a/src/Neo.SmartContract.Framework/Helper.cs +++ b/src/Neo.SmartContract.Framework/Helper.cs @@ -5,10 +5,6 @@ namespace Neo.SmartContract.Framework { public static class Helper { - internal const string StackItemType_Integer = "0x21"; - internal const string StackItemType_ByteString = "0x28"; - internal const string StackItemType_Buffer = "0x30"; - /// /// Converts byte to byte[] considering the byte as a BigInteger (0x00 at the end) /// @@ -19,7 +15,7 @@ public static class Helper /// /// Converts sbyte to byte[]. /// - [OpCode(OpCode.CONVERT, StackItemType_Buffer)] + [OpCode(OpCode.CONVERT, StackItemType.Buffer)] public extern static byte[] ToByteArray(this sbyte source); /// @@ -33,7 +29,7 @@ public static class Helper [OpCode(OpCode.PUSH0)] [OpCode(OpCode.SWAP)] [OpCode(OpCode.DROP)] - [OpCode(OpCode.CONVERT, StackItemType_Integer)] + [OpCode(OpCode.CONVERT, StackItemType.Integer)] public extern static BigInteger ToBigInteger(this byte[] source); //{ // if (value == null) return 0; @@ -43,13 +39,13 @@ public static class Helper /// /// Converts string to byte[]. Examples: "hello" -> [0x68656c6c6f]; "" -> []; "Neo" -> [0x4e656f] /// - [OpCode(OpCode.CONVERT, StackItemType_Buffer)] + [OpCode(OpCode.CONVERT, StackItemType.Buffer)] public extern static byte[] ToByteArray(this string source); /// /// Converts byte[] to string. Examples: [0x68656c6c6f] -> "hello"; [] -> ""; [0x4e656f] -> "Neo" /// - [OpCode(OpCode.CONVERT, StackItemType_ByteString)] + [OpCode(OpCode.CONVERT, StackItemType.ByteString)] public extern static string ToByteString(this byte[] source); /// diff --git a/src/Neo.SmartContract.Framework/StackItemType.cs b/src/Neo.SmartContract.Framework/StackItemType.cs new file mode 100644 index 000000000..ac753b8bd --- /dev/null +++ b/src/Neo.SmartContract.Framework/StackItemType.cs @@ -0,0 +1,9 @@ +namespace Neo.SmartContract.Framework +{ + internal static class StackItemType + { + public const string Integer = "0x21"; + public const string ByteString = "0x28"; + public const string Buffer = "0x30"; + } +} diff --git a/tests/Neo.SmartContract.Framework.UnitTests/HelperTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/HelperTest.cs index 592115821..3f59d50ce 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/HelperTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/HelperTest.cs @@ -27,8 +27,8 @@ public void TestHexToBytes() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); - Assert.AreEqual("0a0b0c0d0e0f", (item as ByteString).GetSpan().ToHexString()); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); + Assert.AreEqual("0a0b0c0d0e0f", (item as VM.Types.ByteString).GetSpan().ToHexString()); } [TestMethod] @@ -46,7 +46,7 @@ public void TestToBigInteger() Assert.AreEqual(0, item.GetInteger()); _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("testToBigInteger", new ByteString(new byte[0])); + result = _engine.ExecuteTestCaseStandard("testToBigInteger", new VM.Types.ByteString(new byte[0])); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -57,7 +57,7 @@ public void TestToBigInteger() // Value _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("testToBigInteger", new ByteString(new byte[] { 123 })); + result = _engine.ExecuteTestCaseStandard("testToBigInteger", new VM.Types.ByteString(new byte[] { 123 })); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -102,7 +102,7 @@ public void Test_ByteToByteArray() var result = _engine.GetMethod("testByteToByteArray").Run(); StackItem wantResult = new byte[] { 0x01 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -111,7 +111,7 @@ public void Test_Reverse() var result = _engine.GetMethod("testReverse").Run(); StackItem wantResult = new byte[] { 0x03, 0x02, 0x01 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -120,7 +120,7 @@ public void Test_SbyteToByteArray() var result = _engine.GetMethod("testSbyteToByteArray").Run(); StackItem wantResult = new byte[] { 255 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -129,7 +129,7 @@ public void Test_StringToByteArray() var result = _engine.GetMethod("testStringToByteArray").Run(); StackItem wantResult = new byte[] { 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -138,7 +138,7 @@ public void Test_Concat() var result = _engine.GetMethod("testConcat").Run(); StackItem wantResult = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -147,7 +147,7 @@ public void Test_Range() var result = _engine.GetMethod("testRange").Run(); StackItem wantResult = new byte[] { 0x02 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -156,7 +156,7 @@ public void Test_Take() var result = _engine.GetMethod("testTake").Run(); StackItem wantResult = new byte[] { 0x01, 0x02 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -165,7 +165,7 @@ public void Test_Last() var result = _engine.GetMethod("testLast").Run(); StackItem wantResult = new byte[] { 0x02, 0x03 }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } [TestMethod] @@ -174,7 +174,7 @@ public void Test_ToScriptHash() var result = _engine.GetMethod("testToScriptHash").Run(); StackItem wantResult = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xaa, 0xbb, 0xcc, 0xdd, 0xee }; - Assert.AreEqual(wantResult.ConvertTo(StackItemType.ByteString), result.ConvertTo(StackItemType.ByteString)); + Assert.AreEqual(wantResult.ConvertTo(VM.Types.StackItemType.ByteString), result.ConvertTo(VM.Types.StackItemType.ByteString)); } } } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/ListTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/ListTest.cs index 216513d40..843f29c02 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/ListTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/ListTest.cs @@ -109,7 +109,7 @@ public void TestArrayConvert() static JObject ParseJson(StackItem item) { - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); var json = System.Text.Encoding.UTF8.GetString(item.GetSpan()); return JObject.Parse(json); } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/MapTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/MapTest.cs index 02bd24de3..1142e05f4 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/MapTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/MapTest.cs @@ -46,9 +46,9 @@ public void TestByteArray() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); // Except: {"a":"teststring2"} - Assert.AreEqual("7b2261223a2274657374737472696e6732227d", (item as ByteString).GetSpan().ToHexString()); + Assert.AreEqual("7b2261223a2274657374737472696e6732227d", (item as VM.Types.ByteString).GetSpan().ToHexString()); } [TestMethod] @@ -61,9 +61,9 @@ public void TestClear() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); // Except: {} - Assert.AreEqual("7b7d", (item as ByteString).GetSpan().ToHexString()); + Assert.AreEqual("7b7d", (item as VM.Types.ByteString).GetSpan().ToHexString()); } @@ -76,9 +76,9 @@ public void TestByteArray2() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); // Except: {"\u0001\u0001":"\u0022\u0022"} - Assert.AreEqual("7b225c75303030315c7530303031223a225c75303032325c7530303232227d", (item as ByteString).GetSpan().ToHexString()); + Assert.AreEqual("7b225c75303030315c7530303031223a225c75303032325c7530303232227d", (item as VM.Types.ByteString).GetSpan().ToHexString()); } [TestMethod] @@ -91,9 +91,9 @@ public void TestUnicode() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); // Except: {"\u4E2D":"129840test10022939"} - Assert.AreEqual("7b225c7534453244223a22313239383430746573743130303232393339227d", (item as ByteString).GetSpan().ToHexString()); + Assert.AreEqual("7b225c7534453244223a22313239383430746573743130303232393339227d", (item as VM.Types.ByteString).GetSpan().ToHexString()); } [TestMethod] @@ -106,9 +106,9 @@ public void TestUnicodeValue() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); // Except: {"ab":"\u6587"} - Assert.AreEqual("7b226162223a225c7536353837227d", (item as ByteString).GetSpan().ToHexString()); + Assert.AreEqual("7b226162223a225c7536353837227d", (item as VM.Types.ByteString).GetSpan().ToHexString()); } [TestMethod] @@ -122,9 +122,9 @@ public void TestUnicodeKeyValue() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); // Except: {"\u4E2D":"\u6587"} - Assert.AreEqual("7b225c7534453244223a225c7536353837227d", (item as ByteString).GetSpan().ToHexString()); + Assert.AreEqual("7b225c7534453244223a225c7536353837227d", (item as VM.Types.ByteString).GetSpan().ToHexString()); } [TestMethod] @@ -160,7 +160,7 @@ public void TestDeserialize() var map = item as Map; Assert.AreEqual(1, map.Count); Assert.IsTrue(map.ContainsKey("a")); - Assert.AreEqual((ByteString)"testdeserialize", map["a"]); + Assert.AreEqual((VM.Types.ByteString)"testdeserialize", map["a"]); } } } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/AccountTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/AccountTest.cs index da057d09f..84175c104 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/AccountTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/AccountTest.cs @@ -33,14 +33,14 @@ public void Test_AccountIsStandard() // Empty - var result = _engine.ExecuteTestCaseStandard("accountIsStandard", new ByteString(new byte[0])); + var result = _engine.ExecuteTestCaseStandard("accountIsStandard", new VM.Types.ByteString(new byte[0])); Assert.AreEqual(VM.VMState.FAULT, _engine.State); Assert.AreEqual(0, result.Count); // No standard _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("accountIsStandard", new ByteString(new byte[20])); + result = _engine.ExecuteTestCaseStandard("accountIsStandard", new VM.Types.ByteString(new byte[20])); Assert.AreEqual(VM.VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -49,7 +49,7 @@ public void Test_AccountIsStandard() Assert.AreEqual(false, item.GetBoolean()); _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("accountIsStandard", new ByteString(noStandard)); + result = _engine.ExecuteTestCaseStandard("accountIsStandard", new VM.Types.ByteString(noStandard)); Assert.AreEqual(VM.VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/BlockchainTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/BlockchainTest.cs index 2d6e7b48b..7a3b4dbe2 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/BlockchainTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/BlockchainTest.cs @@ -46,7 +46,7 @@ public void Test_GetTransactionHeight() // Not found _engine.Reset(); - var result = _engine.ExecuteTestCaseStandard("getTransactionHeight", new ByteString(UInt256.Zero.ToArray())); + var result = _engine.ExecuteTestCaseStandard("getTransactionHeight", new VM.Types.ByteString(UInt256.Zero.ToArray())); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -57,7 +57,7 @@ public void Test_GetTransactionHeight() // Found _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("getTransactionHeight", new ByteString(_block.Transactions[0].Hash.ToArray())); + result = _engine.ExecuteTestCaseStandard("getTransactionHeight", new VM.Types.ByteString(_block.Transactions[0].Hash.ToArray())); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -69,14 +69,14 @@ public void Test_GetTransactionHeight() [TestMethod] public void Test_GetBlockByHash() { - Test_GetBlock("getBlockByHash", new ByteString(_block.Hash.ToArray()), new ByteString(UInt256.Parse("0x0000000000000000000000000000000000000000000000000000000000000001").ToArray())); + Test_GetBlock("getBlockByHash", new VM.Types.ByteString(_block.Hash.ToArray()), new VM.Types.ByteString(UInt256.Parse("0x0000000000000000000000000000000000000000000000000000000000000001").ToArray())); } [TestMethod] public void Test_GetTxByHash() { - Test_GetTransaction("getTxByHash", new StackItem[] { new ByteString(_block.Transactions[0].Hash.ToArray()) }, - new StackItem[] { new ByteString(UInt256.Zero.ToArray()) }, + Test_GetTransaction("getTxByHash", new StackItem[] { new VM.Types.ByteString(_block.Transactions[0].Hash.ToArray()) }, + new StackItem[] { new VM.Types.ByteString(UInt256.Zero.ToArray()) }, true); } @@ -93,8 +93,8 @@ public void Test_GetTxByBlockIndex() public void Test_GetTxByBlockHash() { Test_GetTransaction("getTxByBlockHash", new StackItem[] { - new ByteString(_block.Hash.ToArray()), new Integer(0) }, - new StackItem[] { new ByteString(_block.Hash.ToArray()), new Integer(_block.Transactions.Length + 1) }, + new VM.Types.ByteString(_block.Hash.ToArray()), new Integer(0) }, + new StackItem[] { new VM.Types.ByteString(_block.Hash.ToArray()), new Integer(_block.Transactions.Length + 1) }, false); } @@ -103,7 +103,7 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // Not found _engine.Reset(); - var result = _engine.ExecuteTestCaseStandard(method, Concat(notFoundArgs, new ByteString(new byte[0]))); + var result = _engine.ExecuteTestCaseStandard(method, Concat(notFoundArgs, new VM.Types.ByteString(new byte[0]))); if (expectedNullAsNotFound) { @@ -122,18 +122,18 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // Hash _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("Hash")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Hash")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(tx.Hash.ToArray(), item.GetSpan().ToArray()); // NetworkFee _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("NetworkFee")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("NetworkFee")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -144,7 +144,7 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // Nonce _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("Nonce")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Nonce")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -155,7 +155,7 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // SystemFee _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("SystemFee")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("SystemFee")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -166,7 +166,7 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // ValidUntilBlock _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("ValidUntilBlock")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("ValidUntilBlock")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -177,7 +177,7 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // Version _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("Version")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Version")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -188,27 +188,27 @@ public void Test_GetTransaction(string method, StackItem[] foundArgs, StackItem[ // Script _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("Script")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Script")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(tx.Script, item.GetSpan().ToArray()); // Sender _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new ByteString(Utility.StrictUTF8.GetBytes("Sender")))); + result = _engine.ExecuteTestCaseStandard(method, Concat(foundArgs, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Sender")))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(tx.Sender.ToArray(), item.GetSpan().ToArray()); } - private StackItem[] Concat(StackItem[] a, ByteString b) + private StackItem[] Concat(StackItem[] a, VM.Types.ByteString b) { return a.Concat(new StackItem[] { b }).ToArray(); } @@ -224,7 +224,7 @@ public void Test_GetBlock(string method, StackItem foundArg, StackItem notFoundA // Not found _engine.Reset(); - var result = _engine.ExecuteTestCaseStandard(method, notFoundArg, new ByteString(new byte[0])); + var result = _engine.ExecuteTestCaseStandard(method, notFoundArg, new VM.Types.ByteString(new byte[0])); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -234,18 +234,18 @@ public void Test_GetBlock(string method, StackItem foundArg, StackItem notFoundA // Hash _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("Hash"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Hash"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(_block.Hash.ToArray(), item.GetSpan().ToArray()); // Index _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("Index"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Index"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -256,40 +256,40 @@ public void Test_GetBlock(string method, StackItem foundArg, StackItem notFoundA // MerkleRoot _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("MerkleRoot"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("MerkleRoot"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(_block.MerkleRoot.ToArray(), item.GetSpan().ToArray()); // NextConsensus _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("NextConsensus"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("NextConsensus"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(_block.NextConsensus.ToArray(), item.GetSpan().ToArray()); // PrevHash _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("PrevHash"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("PrevHash"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(_block.PrevHash.ToArray(), item.GetSpan().ToArray()); // Timestamp _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("Timestamp"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Timestamp"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -300,7 +300,7 @@ public void Test_GetBlock(string method, StackItem foundArg, StackItem notFoundA // TransactionsCount _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("TransactionsCount"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("TransactionsCount"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -311,7 +311,7 @@ public void Test_GetBlock(string method, StackItem foundArg, StackItem notFoundA // Version _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("Version"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Version"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -322,7 +322,7 @@ public void Test_GetBlock(string method, StackItem foundArg, StackItem notFoundA // Uknown property _engine.Reset(); - result = _engine.ExecuteTestCaseStandard(method, foundArg, new ByteString(Utility.StrictUTF8.GetBytes("ASD"))); + result = _engine.ExecuteTestCaseStandard(method, foundArg, new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("ASD"))); Assert.AreEqual(VMState.FAULT, _engine.State); } @@ -353,7 +353,7 @@ public void GetContract() // Not found _engine.Reset(); - var result = _engine.ExecuteTestCaseStandard("getContract", new ByteString(UInt160.Zero.ToArray()), new ByteString(new byte[20])); + var result = _engine.ExecuteTestCaseStandard("getContract", new VM.Types.ByteString(UInt160.Zero.ToArray()), new VM.Types.ByteString(new byte[20])); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -363,18 +363,18 @@ public void GetContract() // Found + Manifest _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("getContract", new ByteString(contract.ScriptHash.ToArray()), new ByteString(Utility.StrictUTF8.GetBytes("Manifest"))); + result = _engine.ExecuteTestCaseStandard("getContract", new VM.Types.ByteString(contract.ScriptHash.ToArray()), new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Manifest"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual(contract.Manifest.ToString(), item.GetString()); // Found + HasStorage _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("getContract", new ByteString(contract.ScriptHash.ToArray()), new ByteString(Utility.StrictUTF8.GetBytes("HasStorage"))); + result = _engine.ExecuteTestCaseStandard("getContract", new VM.Types.ByteString(contract.ScriptHash.ToArray()), new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("HasStorage"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -385,7 +385,7 @@ public void GetContract() // Found + IsPayable _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("getContract", new ByteString(contract.ScriptHash.ToArray()), new ByteString(Utility.StrictUTF8.GetBytes("IsPayable"))); + result = _engine.ExecuteTestCaseStandard("getContract", new VM.Types.ByteString(contract.ScriptHash.ToArray()), new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("IsPayable"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -396,18 +396,18 @@ public void GetContract() // Found + IsPayable _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("getContract", new ByteString(contract.ScriptHash.ToArray()), new ByteString(Utility.StrictUTF8.GetBytes("Script"))); + result = _engine.ExecuteTestCaseStandard("getContract", new VM.Types.ByteString(contract.ScriptHash.ToArray()), new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("Script"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); CollectionAssert.AreEqual(contract.Script, item.GetSpan().ToArray()); // Found + Uknown property _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("getContract", new ByteString(contract.ScriptHash.ToArray()), new ByteString(Utility.StrictUTF8.GetBytes("ASD"))); + result = _engine.ExecuteTestCaseStandard("getContract", new VM.Types.ByteString(contract.ScriptHash.ToArray()), new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("ASD"))); Assert.AreEqual(VMState.FAULT, _engine.State); } } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs index abbb82f1e..398b15eb9 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/ContractTest.cs @@ -169,7 +169,7 @@ public void Test_CreateStandardAccount() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsTrue(item.Type == StackItemType.ByteString); + Assert.IsTrue(item.Type == VM.Types.StackItemType.ByteString); Assert.AreEqual("3ae15fc83b48d9bb5c327e578e2f1d2100ba1b89", item.GetSpan().ToHexString()); // Good pubKey (uncompressed) @@ -180,7 +180,7 @@ public void Test_CreateStandardAccount() Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsTrue(item.Type == StackItemType.ByteString); + Assert.IsTrue(item.Type == VM.Types.StackItemType.ByteString); Assert.AreEqual("3ae15fc83b48d9bb5c327e578e2f1d2100ba1b89", item.GetSpan().ToHexString()); } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/CryptoTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/CryptoTest.cs index 99d23c0c2..d111c9190 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/CryptoTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/CryptoTest.cs @@ -55,7 +55,7 @@ public void Test_SHA256() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("688787d8ff144c502c7f5cffaafe2cc588d86079f9de88304c26b0cb99ce91c6", item.GetSpan().ToArray().ToHexString()); } @@ -69,7 +69,7 @@ public void Test_RIPEMD160() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("98c615784ccb5fe5936fbc0cbe9dfdb408d92f0f", item.GetSpan().ToArray().ToHexString()); } @@ -83,7 +83,7 @@ public void Test_HASH160() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("d7d5ee7824ff93f94c3055af9382c86c68b5ca92", item.GetSpan().ToArray().ToHexString()); } @@ -97,7 +97,7 @@ public void Test_HASH256() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("bc62d4b80d9e36da29c16c5d4d9f11731f36052c72401a76c23c0fb5a9b74423", item.GetSpan().ToArray().ToHexString()); } @@ -111,7 +111,7 @@ public void Test_VerifySignature() _engine.Reset(); var result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignature", - new ByteString(_key.PublicKey.EncodePoint(true)), new ByteString(new byte[64])); + new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)), new VM.Types.ByteString(new byte[64])); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -123,7 +123,7 @@ public void Test_VerifySignature() _engine.Reset(); result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignature", - new ByteString(_key.PublicKey.EncodePoint(true)), new ByteString(signature)); + new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)), new VM.Types.ByteString(signature)); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -142,8 +142,8 @@ public void Test_VerifySignatures() _engine.Reset(); var result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignatures", - new Array(new StackItem[] { new ByteString(_key.PublicKey.EncodePoint(true)) }), - new Array(new StackItem[] { new ByteString(new byte[64]) })); + new Array(new StackItem[] { new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)) }), + new Array(new StackItem[] { new VM.Types.ByteString(new byte[64]) })); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -155,8 +155,8 @@ public void Test_VerifySignatures() _engine.Reset(); result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignatures", - new Array(new StackItem[] { new ByteString(_key.PublicKey.EncodePoint(true)) }), - new Array(new StackItem[] { new ByteString(signature) })); + new Array(new StackItem[] { new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)) }), + new Array(new StackItem[] { new VM.Types.ByteString(signature) })); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -175,9 +175,9 @@ public void Test_VerifySignaturesWithMessage() _engine.Reset(); var result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignaturesWithMessage", - new ByteString(new byte[0]), - new Array(new StackItem[] { new ByteString(_key.PublicKey.EncodePoint(true)) }), - new Array(new StackItem[] { new ByteString(new byte[64]) })); + new VM.Types.ByteString(new byte[0]), + new Array(new StackItem[] { new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)) }), + new Array(new StackItem[] { new VM.Types.ByteString(new byte[64]) })); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -189,9 +189,9 @@ public void Test_VerifySignaturesWithMessage() _engine.Reset(); result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignaturesWithMessage", - new ByteString(_engine.ScriptContainer.GetHashData()), - new Array(new StackItem[] { new ByteString(_key.PublicKey.EncodePoint(true)) }), - new Array(new StackItem[] { new ByteString(signature) })); + new VM.Types.ByteString(_engine.ScriptContainer.GetHashData()), + new Array(new StackItem[] { new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)) }), + new Array(new StackItem[] { new VM.Types.ByteString(signature) })); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -210,8 +210,8 @@ public void Test_VerifySignatureWithMessage() _engine.Reset(); var result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignatureWithMessage", - new ByteString(new byte[0]), - new ByteString(_key.PublicKey.EncodePoint(true)), new ByteString(signature)); + new VM.Types.ByteString(new byte[0]), + new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)), new VM.Types.ByteString(signature)); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -223,8 +223,8 @@ public void Test_VerifySignatureWithMessage() _engine.Reset(); result = _engine.ExecuteTestCaseStandard("secp256r1VerifySignatureWithMessage", - new ByteString(_engine.ScriptContainer.GetHashData()), - new ByteString(_key.PublicKey.EncodePoint(true)), new ByteString(signature)); + new VM.Types.ByteString(_engine.ScriptContainer.GetHashData()), + new VM.Types.ByteString(_key.PublicKey.EncodePoint(true)), new VM.Types.ByteString(signature)); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/JsonTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/JsonTest.cs index cbac16fd5..0de2e48a4 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/JsonTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/JsonTest.cs @@ -38,19 +38,19 @@ public void Test_SerializeDeserialize() _engine.Reset(); result = _engine.ExecuteTestCaseStandard("serialize", new Array(new StackItem[]{ - StackItem.Null, new Boolean(true), new ByteString(Encoding.ASCII.GetBytes("asd")) + StackItem.Null, new Boolean(true), new VM.Types.ByteString(Encoding.ASCII.GetBytes("asd")) })); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("[null,true,\"asd\"]", item.GetString()); // Deserialize _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("deserialize", new ByteString(Encoding.ASCII.GetBytes("[null,true,\"asd\"]"))); + result = _engine.ExecuteTestCaseStandard("deserialize", new VM.Types.ByteString(Encoding.ASCII.GetBytes("[null,true,\"asd\"]"))); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -63,7 +63,7 @@ public void Test_SerializeDeserialize() Assert.IsInstanceOfType(entry, typeof(Boolean)); Assert.AreEqual(true, entry.GetBoolean()); entry = ((Array)item)[2]; - Assert.IsInstanceOfType(entry, typeof(ByteString)); + Assert.IsInstanceOfType(entry, typeof(VM.Types.ByteString)); Assert.AreEqual("asd", entry.GetString()); } } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs index f88a16980..045e31cb5 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs @@ -63,7 +63,7 @@ public void Test_NEO() Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("NEO", item.GetString()); _engine.Reset(); @@ -109,8 +109,8 @@ public void Test_NEO() Assert.IsInstanceOfType(candidate, typeof(Struct)); var candidatePubKey = ((Struct)candidate)[0]; var candidateVotes = ((Struct)candidate)[1]; - Assert.IsInstanceOfType(candidatePubKey, typeof(ByteString)); - Assert.AreEqual(true, candidatePubKey.Equals((ByteString)pubKey)); + Assert.IsInstanceOfType(candidatePubKey, typeof(VM.Types.ByteString)); + Assert.AreEqual(true, candidatePubKey.Equals((VM.Types.ByteString)pubKey)); Assert.IsInstanceOfType(candidateVotes, typeof(Integer)); Assert.AreEqual(0, candidateVotes.GetInteger()); } @@ -133,7 +133,7 @@ public void Test_GAS() Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("GAS", item.GetString()); } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/RuntimeTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/RuntimeTest.cs index ff1f9589a..3ece9e0bb 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/RuntimeTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/RuntimeTest.cs @@ -118,7 +118,7 @@ public void Test_Platform() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); Assert.AreEqual("NEO", item.GetString()); } @@ -151,7 +151,7 @@ public void Test_Log() var method = new EventHandler((s, e) => list.Add(e)); ApplicationEngine.Log += method; - var result = _engine.ExecuteTestCaseStandard("log", new ByteString(Utility.StrictUTF8.GetBytes("LogTest"))); + var result = _engine.ExecuteTestCaseStandard("log", new VM.Types.ByteString(Utility.StrictUTF8.GetBytes("LogTest"))); ApplicationEngine.Log -= method; Assert.AreEqual(1, list.Count); @@ -165,7 +165,7 @@ public void Test_CheckWitness() { // True - var result = _engine.ExecuteTestCaseStandard("checkWitness", new ByteString( + var result = _engine.ExecuteTestCaseStandard("checkWitness", new VM.Types.ByteString( new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, } )); Assert.AreEqual(1, result.Count); @@ -177,7 +177,7 @@ public void Test_CheckWitness() // False _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("checkWitness", new ByteString( + result = _engine.ExecuteTestCaseStandard("checkWitness", new VM.Types.ByteString( new byte[] { 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, } )); Assert.AreEqual(1, result.Count); @@ -194,7 +194,7 @@ public void Test_GetNotificationsCount() _engine.SendTestNotification(UInt160.Zero, "", new VM.Types.Array(new StackItem[] { new Integer(0x01) })); _engine.SendTestNotification(UInt160.Parse("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"), "", new VM.Types.Array(new StackItem[] { new Integer(0x02) })); - var result = _engine.ExecuteTestCaseStandard("getNotificationsCount", new ByteString(UInt160.Parse("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").ToArray())); + var result = _engine.ExecuteTestCaseStandard("getNotificationsCount", new VM.Types.ByteString(UInt160.Parse("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").ToArray())); Assert.AreEqual(1, result.Count); var item = result.Pop(); @@ -217,7 +217,7 @@ public void Test_GetNotifications() _engine.SendTestNotification(UInt160.Zero, "", new VM.Types.Array(new StackItem[] { new Integer(0x01) })); _engine.SendTestNotification(UInt160.Parse("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"), "", new VM.Types.Array(new StackItem[] { new Integer(0x02) })); - var result = _engine.ExecuteTestCaseStandard("getNotifications", new ByteString(UInt160.Parse("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").ToArray())); + var result = _engine.ExecuteTestCaseStandard("getNotifications", new VM.Types.ByteString(UInt160.Parse("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF").ToArray())); Assert.AreEqual(1, result.Count); var item = result.Pop(); diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/StorageTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/StorageTest.cs index 0a8bcd1ab..7bf0b2aeb 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/StorageTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/StorageTest.cs @@ -12,7 +12,7 @@ public class StorageTest { private void Put(TestEngine testengine, string method, byte[] prefix, byte[] key, byte[] value) { - var result = testengine.ExecuteTestCaseStandard(method, new ByteString(key), new ByteString(value)); + var result = testengine.ExecuteTestCaseStandard(method, key, value); Assert.AreEqual(VM.VMState.HALT, testengine.State); var rItem = result.Pop(); @@ -29,12 +29,12 @@ private void Put(TestEngine testengine, string method, byte[] prefix, byte[] key private byte[] Get(TestEngine testengine, string method, byte[] prefix, byte[] key) { - var result = testengine.ExecuteTestCaseStandard(method, new ByteString(key)); + var result = testengine.ExecuteTestCaseStandard(method, key); Assert.AreEqual(VM.VMState.HALT, testengine.State); Assert.AreEqual(1, result.Count); var rItem = result.Pop(); - Assert.IsInstanceOfType(rItem, typeof(ByteString)); - ReadOnlySpan data = rItem as ByteString; + Assert.IsInstanceOfType(rItem, typeof(VM.Types.ByteString)); + ReadOnlySpan data = rItem as VM.Types.ByteString; Assert.AreEqual(1, testengine.Snapshot.Storages.GetChangeSet().Count(a => a.Key.Key.SequenceEqual(Concat(prefix, key)))); return data.ToArray(); @@ -42,7 +42,7 @@ private byte[] Get(TestEngine testengine, string method, byte[] prefix, byte[] k private void Delete(TestEngine testengine, string method, byte[] prefix, byte[] key) { - var result = testengine.ExecuteTestCaseStandard(method, new ByteString(key)); + var result = testengine.ExecuteTestCaseStandard(method, new VM.Types.ByteString(key)); Assert.AreEqual(VM.VMState.HALT, testengine.State); Assert.AreEqual(0, result.Count); Assert.AreEqual(0, testengine.Snapshot.Storages.GetChangeSet().Count(a => a.Key.Key.SequenceEqual(Concat(prefix, key)))); @@ -132,10 +132,10 @@ public void Test_LongBytes() Assert.AreEqual(VM.VMState.HALT, testengine.State); Assert.AreEqual(1, result.Count); - ByteString bs = result.Pop() as ByteString; + VM.Types.ByteString bs = result.Pop() as VM.Types.ByteString; var value = new byte[] { 0x3b, 0x00, 0x32, 0x03, 0x23, 0x23, 0x23, 0x23, 0x02, 0x23, 0x23, 0x02, 0x23, 0x23, 0x02, 0x23, 0x23, 0x02, 0x23, 0x23, 0x02, 0x23, 0x23, 0x02 }; - Assert.AreEqual(new ByteString(value), bs); + Assert.AreEqual(new VM.Types.ByteString(value), bs); } [TestMethod] @@ -171,7 +171,7 @@ public void Test_ReadOnly() // Put testengine.Reset(); - var result = testengine.ExecuteTestCaseStandard("testPutReadOnly", new ByteString(key), new ByteString(value)); + var result = testengine.ExecuteTestCaseStandard("testPutReadOnly", new VM.Types.ByteString(key), new VM.Types.ByteString(value)); Assert.AreEqual(VM.VMState.FAULT, testengine.State); Assert.AreEqual(0, result.Count); } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/System/BinaryTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/System/BinaryTest.cs index 82d6e7d4a..857d4fc45 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/System/BinaryTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/System/BinaryTest.cs @@ -41,7 +41,7 @@ public void base64DecodeTest() Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); - var item = result.Pop(); + var item = result.Pop(); Assert.AreEqual("test", item.GetString()); } @@ -53,7 +53,7 @@ public void base64EncodeTest() Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); - var item = result.Pop(); + var item = result.Pop(); Assert.AreEqual("dGVzdA==", item.GetString()); } @@ -65,7 +65,7 @@ public void base58DecodeTest() Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); - var item = result.Pop(); + var item = result.Pop(); Assert.AreEqual("test", item.GetString()); } @@ -77,7 +77,7 @@ public void base58EncodeTest() Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); - var item = result.Pop(); + var item = result.Pop(); Assert.AreEqual("3yZe7d", item.GetString()); } } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/System/ExecutionEngineTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/System/ExecutionEngineTest.cs index 0ec931e09..3c4e3317a 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/System/ExecutionEngineTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/System/ExecutionEngineTest.cs @@ -73,7 +73,7 @@ public void EntryScriptHashTest() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); //test by this way is bad idea? how to sure got a fix hash always? var gothash = item.GetSpan().ToHexString(); Assert.AreEqual(scriptHash, gothash); @@ -88,7 +88,7 @@ public void ExecutingScriptHashTest() Assert.AreEqual(1, result.Count); var item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(ByteString)); + Assert.IsInstanceOfType(item, typeof(VM.Types.ByteString)); //test by this way is bad idea? how to sure got a fix hash always? var gothash = item.GetSpan().ToHexString(); Assert.AreEqual(scriptHash, gothash); diff --git a/tests/Neo.SmartContract.Framework.UnitTests/StackItemTypeTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/StackItemTypeTest.cs index 2b3226169..978abf6c0 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/StackItemTypeTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/StackItemTypeTest.cs @@ -9,8 +9,8 @@ public class StackItemTypeTest [TestMethod] public void TestValues() { - Assert.AreEqual(((byte)StackItemType.Buffer).ToString("x2"), Helper.StackItemType_Buffer.Substring(2)); - Assert.AreEqual(((byte)StackItemType.Integer).ToString("x2"), Helper.StackItemType_Integer.Substring(2)); + Assert.AreEqual(((byte)VM.Types.StackItemType.Buffer).ToString("x2"), StackItemType.Buffer.Substring(2)); + Assert.AreEqual(((byte)VM.Types.StackItemType.Integer).ToString("x2"), StackItemType.Integer.Substring(2)); } } } From 936fa5da6383059b90a152de39c7dba6005b4482 Mon Sep 17 00:00:00 2001 From: Qiao Jin <43407364+Qiao-Jin@users.noreply.github.com> Date: Fri, 23 Oct 2020 02:35:33 +0800 Subject: [PATCH 2/3] Refresh native contracts' function (#381) * Func add and remove * Update ut & neo version Co-authored-by: Jin Qiao --- .../Neo.Compiler.MSIL.csproj | 2 +- .../Services/Neo/GAS.cs | 1 + .../Services/Neo/NEO.cs | 4 +- .../Services/Neo/Policy.cs | 2 +- .../Services/Neo/NativeTest.cs | 39 ++++++++++++++++--- .../TestClasses/Contract_Native.cs | 35 ++++++++++------- 6 files changed, 59 insertions(+), 24 deletions(-) diff --git a/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj b/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj index 8f34ffd3c..257c9abe1 100644 --- a/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj +++ b/src/Neo.Compiler.MSIL/Neo.Compiler.MSIL.csproj @@ -42,7 +42,7 @@ - + diff --git a/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs b/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs index 0c17fe6de..f6ed8ea9c 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/GAS.cs @@ -12,5 +12,6 @@ public class GAS public static extern byte Decimals { get; } public static extern BigInteger TotalSupply(); public static extern BigInteger BalanceOf(byte[] account); + public static extern bool Transfer(byte[] from, byte[] to, BigInteger amount); } } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs b/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs index 0cdb31b9b..664c7184b 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/NEO.cs @@ -12,14 +12,16 @@ public class NEO public static extern byte Decimals { get; } public static extern BigInteger TotalSupply(); public static extern BigInteger BalanceOf(byte[] account); + public static extern bool Transfer(byte[] from, byte[] to, BigInteger amount); + public static extern bool SetGasPerBlock(BigInteger gasPerBlock); + public static extern BigInteger GetGasPerBlock(); public static extern BigInteger UnclaimedGas(byte[] account, uint end); public static extern bool RegisterCandidate(byte[] pubkey); public static extern bool UnRegisterCandidate(byte[] pubkey); public static extern bool Vote(byte[] account, byte[] voteTo); public static extern (string, BigInteger)[] GetCandidates(); - public static extern string[] GetValidators(); public static extern string[] GetCommittee(); public static extern string[] GetNextBlockValidators(); } diff --git a/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs b/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs index e6ba014fd..ce70e65be 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/Policy.cs @@ -13,7 +13,7 @@ public class Policy public static extern uint GetMaxBlockSize(); public static extern long GetMaxBlockSystemFee(); public static extern BigInteger GetFeePerByte(); - public static extern string[] GetBlockedAccounts(); + public static extern string[] IsBlocked(byte[] account); public static extern bool SetMaxBlockSize(uint value); public static extern bool SetMaxTransactionsPerBlock(uint value); public static extern bool SetMaxBlockSystemFee(long value); diff --git a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs index 045e31cb5..41951675c 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/Services/Neo/NativeTest.cs @@ -11,6 +11,7 @@ public class NativeTest { private TestEngine _engine; private readonly byte[] pubKey = NeonTestTool.HexString2Bytes("03ea01cb94bdaf0cd1c01b159d474f9604f4af35a3e2196f6bdfdb33b2aa4961fa"); + byte[] account = new byte[] { 0xf6, 0x64, 0x43, 0x49, 0x8d, 0x38, 0x78, 0xd3, 0x2b, 0x99, 0x4e, 0x4e, 0x12, 0x83, 0xc6, 0x93, 0x44, 0x21, 0xda, 0xfe }; [TestInitialize] public void Init() @@ -67,7 +68,6 @@ public void Test_NEO() Assert.AreEqual("NEO", item.GetString()); _engine.Reset(); - var account = new byte[] { 0xf6, 0x64, 0x43, 0x49, 0x8d, 0x38, 0x78, 0xd3, 0x2b, 0x99, 0x4e, 0x4e, 0x12, 0x83, 0xc6, 0x93, 0x44, 0x21, 0xda, 0xfe }; result = _engine.ExecuteTestCaseStandard("NEO_BalanceOf", account); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -113,6 +113,33 @@ public void Test_NEO() Assert.AreEqual(true, candidatePubKey.Equals((VM.Types.ByteString)pubKey)); Assert.IsInstanceOfType(candidateVotes, typeof(Integer)); Assert.AreEqual(0, candidateVotes.GetInteger()); + + _engine.Reset(); + result = _engine.ExecuteTestCaseStandard("NEO_Transfer", account, account, 0); + Assert.AreEqual(VMState.HALT, _engine.State); + Assert.AreEqual(1, result.Count); + + item = result.Pop(); + Assert.IsInstanceOfType(item, typeof(Boolean)); + Assert.AreEqual(false, item.GetBoolean()); + + _engine.Reset(); + result = _engine.ExecuteTestCaseStandard("NEO_UnclaimedGas", account, 0); + Assert.AreEqual(VMState.HALT, _engine.State); + Assert.AreEqual(1, result.Count); + + item = result.Pop(); + Assert.IsInstanceOfType(item, typeof(Integer)); + Assert.AreEqual(0, item.GetInteger()); + + _engine.Reset(); + result = _engine.ExecuteTestCaseStandard("NEO_GetGasPerBlock"); + Assert.AreEqual(VMState.HALT, _engine.State); + Assert.AreEqual(1, result.Count); + + item = result.Pop(); + Assert.IsInstanceOfType(item, typeof(Integer)); + Assert.AreEqual(500000000, item.GetInteger()); } [TestMethod] @@ -141,7 +168,7 @@ public void Test_GAS() public void Test_Policy() { _engine.Reset(); - var result = _engine.ExecuteTestCaseStandard("policy_GetFeePerByte"); + var result = _engine.ExecuteTestCaseStandard("Policy_GetFeePerByte"); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -150,7 +177,7 @@ public void Test_Policy() Assert.AreEqual(1000L, item.GetInteger()); _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("policy_GetMaxTransactionsPerBlock"); + result = _engine.ExecuteTestCaseStandard("Policy_GetMaxTransactionsPerBlock"); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); @@ -159,13 +186,13 @@ public void Test_Policy() Assert.AreEqual(512, item.GetInteger()); _engine.Reset(); - result = _engine.ExecuteTestCaseStandard("policy_GetBlockedAccounts"); + result = _engine.ExecuteTestCaseStandard("Policy_IsBlocked", account); Assert.AreEqual(VMState.HALT, _engine.State); Assert.AreEqual(1, result.Count); item = result.Pop(); - Assert.IsInstanceOfType(item, typeof(Array)); - Assert.AreEqual(0, ((Array)item).Count); + Assert.IsInstanceOfType(item, typeof(Boolean)); + Assert.AreEqual(false, item.GetBoolean()); } } } diff --git a/tests/Neo.SmartContract.Framework.UnitTests/TestClasses/Contract_Native.cs b/tests/Neo.SmartContract.Framework.UnitTests/TestClasses/Contract_Native.cs index 89160bf63..3690e36c8 100644 --- a/tests/Neo.SmartContract.Framework.UnitTests/TestClasses/Contract_Native.cs +++ b/tests/Neo.SmartContract.Framework.UnitTests/TestClasses/Contract_Native.cs @@ -19,16 +19,28 @@ public static string NEO_Name() return NEO.Name; } + [DisplayName("NEO_Transfer")] + public static bool NEO_Transfer(byte[] from, byte[] to, BigInteger amount) + { + return NEO.Transfer(from, to, amount); + } + [DisplayName("NEO_BalanceOf")] public static BigInteger NEO_BalanceOf(byte[] account) { return NEO.BalanceOf(account); } - [DisplayName("NEO_GetValidators")] - public static string[] NEO_GetValidators() + [DisplayName("NEO_GetGasPerBlock")] + public static BigInteger NEO_GetGasPerBlock() + { + return NEO.GetGasPerBlock(); + } + + [DisplayName("NEO_UnclaimedGas")] + public static BigInteger NEO_UnclaimedGas(byte[] account, uint end) { - return NEO.GetValidators(); + return NEO.UnclaimedGas(account, end); } [DisplayName("NEO_RegisterCandidate")] @@ -55,29 +67,22 @@ public static string GAS_Name() return GAS.Name; } + [DisplayName("Policy_GetFeePerByte")] public static BigInteger Policy_GetFeePerByte() { return Policy.GetFeePerByte(); } - public static bool Policy_SetMaxTransactionsPerBlock(uint value) - { - return Policy.SetMaxTransactionsPerBlock(value); - } - + [DisplayName("Policy_GetMaxTransactionsPerBlock")] public static uint Policy_GetMaxTransactionsPerBlock() { return Policy.GetMaxTransactionsPerBlock(); } - public static bool Policy_BlockAccount(byte[] account) - { - return Policy.BlockAccount(account); - } - - public static object[] Policy_GetBlockedAccounts() + [DisplayName("Policy_IsBlocked")] + public static object[] Policy_IsBlocked(byte[] account) { - return Policy.GetBlockedAccounts(); + return Policy.IsBlocked(account); } } } From ff34e4244681c7e17e99f134772fe52455c890aa Mon Sep 17 00:00:00 2001 From: Shargon Date: Mon, 26 Oct 2020 14:00:05 +0100 Subject: [PATCH 3/3] Add minimum oracle fee (#374) * Add minimum oracle fee * Update Oracle.cs * Update UnitTest_NativeContracts.cs * Change fee Co-authored-by: Luchuan --- .../Services/Neo/Oracle.cs | 1 + .../TestClasses/Contract_NativeContracts.cs | 5 +++++ .../UnitTest_NativeContracts.cs | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs b/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs index dbfe4ba5f..c7fdb028c 100644 --- a/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs +++ b/src/Neo.SmartContract.Framework/Services/Neo/Oracle.cs @@ -5,6 +5,7 @@ namespace Neo.SmartContract.Framework.Services.Neo [Contract("0x3c05b488bf4cf699d0631bf80190896ebbf38c3b")] public class Oracle { + public const uint MinimumResponseFee = 0_10000000; public static extern string Name { get; } public static extern void Request(string url, string filter, string callback, object userData, long gasForResponse); } diff --git a/tests/Neo.Compiler.MSIL.UnitTests/TestClasses/Contract_NativeContracts.cs b/tests/Neo.Compiler.MSIL.UnitTests/TestClasses/Contract_NativeContracts.cs index 22dff0d36..5523a90f2 100644 --- a/tests/Neo.Compiler.MSIL.UnitTests/TestClasses/Contract_NativeContracts.cs +++ b/tests/Neo.Compiler.MSIL.UnitTests/TestClasses/Contract_NativeContracts.cs @@ -23,6 +23,11 @@ public static string OracleName() return Oracle.Name; } + public static uint OracleMinimumResponseFee() + { + return Oracle.MinimumResponseFee; + } + public static string DesignationName() { return Designation.Name; diff --git a/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs b/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs index 3f41fd48a..4c7751285 100644 --- a/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs +++ b/tests/Neo.Compiler.MSIL.UnitTests/UnitTest_NativeContracts.cs @@ -55,6 +55,18 @@ public void Test_Oracle() var entry = result.Pop(); Assert.AreEqual("Oracle", entry.GetString()); + + // Minimum Response Fee + + testengine.Reset(); + result = testengine.ExecuteTestCaseStandard("oracleMinimumResponseFee"); + + Assert.AreEqual(VMState.HALT, testengine.State); + Assert.AreEqual(1, result.Count); + + entry = result.Pop(); + + Assert.AreEqual(0_10000000u, entry.GetInteger()); } [TestMethod]