From 889a7ec3780d17cd05a283f3bd218a23c30b061c Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Fri, 11 Mar 2022 13:22:36 +0300 Subject: [PATCH] rpc: regenerate basic chain and adjust RPC server tests --- pkg/core/basic_chain_test.go | 10 ++-- pkg/rpc/server/server_test.go | 71 +++++++++++++++++-------- pkg/rpc/server/testdata/testblocks.acc | Bin 33175 -> 33482 bytes 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/pkg/core/basic_chain_test.go b/pkg/core/basic_chain_test.go index d831c0b57..d9e8cbfc3 100644 --- a/pkg/core/basic_chain_test.go +++ b/pkg/core/basic_chain_test.go @@ -214,12 +214,12 @@ func initBasicChain(t *testing.T, e *neotest.Executor) { nsPriv0Invoker.Invoke(t, stackitem.Null{}, "setRecord", "neo.com", int64(nns.A), "1.2.3.4") // block #15 // Block #16: invoke `test_contract.go`: put new value with the same key to check `getstate` RPC call - txPutNewValue := rublPriv0Invoker.PrepareInvoke(t, "putValue", "testkey", "newtestvalue") + txPutNewValue := rublPriv0Invoker.PrepareInvoke(t, "putValue", "testkey", "newtestvalue") // tx1 // Invoke `test_contract.go`: put values to check `findstates` RPC call. - txPut1 := rublPriv0Invoker.PrepareInvoke(t, "putValue", "aa", "v1") - txPut2 := rublPriv0Invoker.PrepareInvoke(t, "putValue", "aa10", "v2") - txPut3 := rublPriv0Invoker.PrepareInvoke(t, "putValue", "aa50", "v3") - e.AddNewBlock(t, txPutNewValue, txPut1, txPut2, txPut3) // block #16 + txPut1 := rublPriv0Invoker.PrepareInvoke(t, "putValue", "aa", "v1") // tx2 + txPut2 := rublPriv0Invoker.PrepareInvoke(t, "putValue", "aa10", "v2") // tx3 + txPut3 := rublPriv0Invoker.PrepareInvoke(t, "putValue", "aa50", "v3") // tx4 + e.AddNewBlock(t, txPutNewValue, txPut1, txPut2, txPut3) // block #16 e.CheckHalt(t, txPutNewValue.Hash(), stackitem.NewBool(true)) e.CheckHalt(t, txPut1.Hash(), stackitem.NewBool(true)) e.CheckHalt(t, txPut2.Hash(), stackitem.NewBool(true)) diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 71eab16d8..96d79ebf9 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -61,17 +61,17 @@ type rpcTestCase struct { check func(t *testing.T, e *executor, result interface{}) } -const genesisBlockHash = "a4ae00f6ac7496cac14e709fbf8b8ecb4c9831d8a6ee396056af9350fcf22671" -const testContractHash = "1ab08f5508edafa6f28e3db3227442a9e70aac52" -const deploymentTxHash = "017c9edb217477aeb3e0c35462361209fdb7bf104dc8e285e2385af8713926b4" +const genesisBlockHash = "f42e2ae74bbea6aa1789fdc4efa35ad55b04335442637c091eafb5b0e779dae7" +const testContractHash = "2db7d679c538ace5f00495c9e9d8ea95f1e0f5a5" +const deploymentTxHash = "496bccb5cb0a008ef9b7a32c459e508ef24fbb0830f82bac9162afa4ca804839" const ( - verifyContractHash = "7deef31e5c616e157cdf02a5446f36d0a4eead52" + verifyContractHash = "06ed5314c2e4cb103029a60b86d46afa2fb8f67c" verifyContractAVM = "VwIAQS1RCDBwDBTunqIsJ+NL0BSPxBCOCPdOj1BIskrZMCQE2zBxaBPOStkoJATbKGlK2SgkBNsol0A=" - verifyWithArgsContractHash = "6df009754ce475a6a5730c9e488f80e8e47bc1f1" - nnsContractHash = "1a7530a4c6cfdd40ffed40775aa5453febab24c0" + verifyWithArgsContractHash = "0dce75f52adb1a4c5c6eaa6a34eb26db2e5b3781" + nnsContractHash = "ee92563903e4efd53565784080b2dbdc5c37e21f" nnsToken1ID = "6e656f2e636f6d" - nfsoContractHash = "aaf8913c501e25c42877e79f04cb7c2c1ab47e57" + nfsoContractHash = "5f9ebd6b001b54c7bc70f96e0412fcf415dfe09f" nfsoToken1ID = "7e244ffd6aa85fb1579d2ed22e9b761ab62e3486" invokescriptContractAVM = "VwIADBQBDAMOBQYMDQIODw0DDgcJAAAAAErZMCQE2zBwaEH4J+yMqiYEEUAMFA0PAwIJAAIBAwcDBAUCAQAOBgwJStkwJATbMHFpQfgn7IyqJgQSQBNA" ) @@ -279,7 +279,7 @@ var rpcTestCases = map[string][]rpcTestCase{ result: func(e *executor) interface{} { return &map[string]interface{}{ "name": "neo.com", - "expiration": "HrL+G4YB", + "expiration": "lhbLRl0B", } }, }, @@ -882,7 +882,7 @@ var rpcTestCases = map[string][]rpcTestCase{ name: "positive, with notifications", params: `["` + nnsContractHash + `", "transfer", [{"type":"Hash160", "value":"0x0bcd2978634d961c24f5aea0802297ff128724d6"},{"type":"String", "value":"neo.com"},{"type":"Any", "value":null}],["0xb248508f4ef7088e10c48f14d04be3272ca29eee"]]`, result: func(e *executor) interface{} { - script := []byte{0x0b, 0x0c, 0x07, 0x6e, 0x65, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x0c, 0x14, 0xd6, 0x24, 0x87, 0x12, 0xff, 0x97, 0x22, 0x80, 0xa0, 0xae, 0xf5, 0x24, 0x1c, 0x96, 0x4d, 0x63, 0x78, 0x29, 0xcd, 0x0b, 0x13, 0xc0, 0x1f, 0x0c, 0x08, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x0c, 0x14, 0xc0, 0x24, 0xab, 0xeb, 0x3f, 0x45, 0xa5, 0x5a, 0x77, 0x40, 0xed, 0xff, 0x40, 0xdd, 0xcf, 0xc6, 0xa4, 0x30, 0x75, 0x1a, 0x41, 0x62, 0x7d, 0x5b, 0x52} + script := []byte{0x0b, 0x0c, 0x07, 0x6e, 0x65, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x0c, 0x14, 0xd6, 0x24, 0x87, 0x12, 0xff, 0x97, 0x22, 0x80, 0xa0, 0xae, 0xf5, 0x24, 0x1c, 0x96, 0x4d, 0x63, 0x78, 0x29, 0xcd, 0xb, 0x13, 0xc0, 0x1f, 0xc, 0x8, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0xc, 0x14, 0x1f, 0xe2, 0x37, 0x5c, 0xdc, 0xdb, 0xb2, 0x80, 0x40, 0x78, 0x65, 0x35, 0xd5, 0xef, 0xe4, 0x3, 0x39, 0x56, 0x92, 0xee, 0x41, 0x62, 0x7d, 0x5b, 0x52} return &result.Invoke{ State: "HALT", GasConsumed: 32167260, @@ -915,7 +915,7 @@ var rpcTestCases = map[string][]rpcTestCase{ chg := []storage.Operation{{ State: "Changed", Key: []byte{0xfa, 0xff, 0xff, 0xff, 0xb}, - Value: []byte{0xe8, 0x80, 0x64, 0xcb, 0x53, 0x79, 0x12}, + Value: []byte{0x1e, 0xb, 0xca, 0xeb, 0x53, 0x79, 0x12}, }, { State: "Added", Key: []byte{0xfb, 0xff, 0xff, 0xff, 0x14, 0xd6, 0x24, 0x87, 0x12, 0xff, 0x97, 0x22, 0x80, 0xa0, 0xae, 0xf5, 0x24, 0x1c, 0x96, 0x4d, 0x63, 0x78, 0x29, 0xcd, 0xb}, @@ -927,7 +927,7 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { State: "Changed", Key: []byte{0xfa, 0xff, 0xff, 0xff, 0x14, 0xee, 0x9e, 0xa2, 0x2c, 0x27, 0xe3, 0x4b, 0xd0, 0x14, 0x8f, 0xc4, 0x10, 0x8e, 0x8, 0xf7, 0x4e, 0x8f, 0x50, 0x48, 0xb2}, - Value: []byte{0x41, 0x01, 0x21, 0x05, 0x9e, 0x0b, 0x0b, 0x18, 0x0b}, + Value: []byte{0x41, 0x01, 0x21, 0x05, 0xf6, 0x99, 0x28, 0x2d, 0xb}, }} // Can be returned in any order. assert.ElementsMatch(t, chg, res.Diagnostics.Changes) @@ -937,7 +937,7 @@ var rpcTestCases = map[string][]rpcTestCase{ name: "positive, verbose", params: `["` + nnsContractHash + `", "resolve", [{"type":"String", "value":"neo.com"},{"type":"Integer","value":1}], [], true]`, result: func(e *executor) interface{} { - script := []byte{0x11, 0xc, 0x7, 0x6e, 0x65, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x12, 0xc0, 0x1f, 0xc, 0x7, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0xc, 0x14, 0xc0, 0x24, 0xab, 0xeb, 0x3f, 0x45, 0xa5, 0x5a, 0x77, 0x40, 0xed, 0xff, 0x40, 0xdd, 0xcf, 0xc6, 0xa4, 0x30, 0x75, 0x1a, 0x41, 0x62, 0x7d, 0x5b, 0x52} + script := []byte{0x11, 0xc, 0x7, 0x6e, 0x65, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x12, 0xc0, 0x1f, 0xc, 0x7, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0xc, 0x14, 0x1f, 0xe2, 0x37, 0x5c, 0xdc, 0xdb, 0xb2, 0x80, 0x40, 0x78, 0x65, 0x35, 0xd5, 0xef, 0xe4, 0x3, 0x39, 0x56, 0x92, 0xee, 0x41, 0x62, 0x7d, 0x5b, 0x52} stdHash, _ := e.chain.GetNativeContractScriptHash(nativenames.StdLib) cryptoHash, _ := e.chain.GetNativeContractScriptHash(nativenames.CryptoLib) return &result.Invoke{ @@ -1205,12 +1205,12 @@ var rpcTestCases = map[string][]rpcTestCase{ "sendrawtransaction": { { name: "positive", - params: `["ADQSAADA2KcAAAAAABDiEgAAAAAAgBYAAAHunqIsJ+NL0BSPxBCOCPdOj1BIsgEAYBDAAwDodkgXAAAADBQRJlu0FyUAQb4E6PokDjj1fB5WmwwU7p6iLCfjS9AUj8QQjgj3To9QSLIUwB8MCHRyYW5zZmVyDBT1Y+pAvCg9TQ4FxI6jBbPyoHNA70FifVtSOQFCDEBRp0p08GFA2rYC/Xrol8DIhXEMfVMbUJEYer1RqZSatmTjUJE9fnZtDGkQEX/zQ7yOhbnIPAZIrllUTuUBskhUKAwhArNiK/QBe9/jF8WK7V9MdT8ga324lgRvp9d0u8S/f43CQVbnsyc="]`, + params: `["ABsAAACWP5gAAAAAAEDaEgAAAAAAFgAAAAHunqIsJ+NL0BSPxBCOCPdOj1BIsoAAXgsDAOh2SBcAAAAMFBEmW7QXJQBBvgTo+iQOOPV8HlabDBTunqIsJ+NL0BSPxBCOCPdOj1BIshTAHwwIdHJhbnNmZXIMFPVj6kC8KD1NDgXEjqMFs/Kgc0DvQWJ9W1IBQgxAOv87rSn7OV7Y/wuVE58QaSz0o0wv37hWY08RZFP2kYYgSPvemZiT69wf6QeAUTABJ1JosxgIUory9vXv0kkpXSgMIQKzYiv0AXvf4xfFiu1fTHU/IGt9uJYEb6fXdLvEv3+NwkFW57Mn"]`, result: func(e *executor) interface{} { return &result.RelayResult{} }, check: func(t *testing.T, e *executor, inv interface{}) { res, ok := inv.(*result.RelayResult) require.True(t, ok) - expectedHash := "8ea251d812fbbdecaebfc164fb6afbd78b7db94f7dacb69421cd5d4e364522d2" + expectedHash := "acc3e13102c211068d06ff64034d6f7e2d4db00c1703d0dec8afa73560664fe1" assert.Equal(t, expectedHash, res.Hash.StringLE()) }, }, @@ -1945,12 +1945,12 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] require.NoError(t, json.Unmarshal(res, actual)) checkNep17TransfersAux(t, e, actual, sent, rcvd) } - t.Run("time frame only", func(t *testing.T) { testNEP17T(t, 4, 5, 0, 0, []int{14, 15, 16, 17}, []int{3, 4}) }) + t.Run("time frame only", func(t *testing.T) { testNEP17T(t, 4, 5, 0, 0, []int{17, 18, 19, 20}, []int{3, 4}) }) t.Run("no res", func(t *testing.T) { testNEP17T(t, 100, 100, 0, 0, []int{}, []int{}) }) - t.Run("limit", func(t *testing.T) { testNEP17T(t, 1, 7, 3, 0, []int{11, 12}, []int{2}) }) - t.Run("limit 2", func(t *testing.T) { testNEP17T(t, 4, 5, 2, 0, []int{14}, []int{3}) }) - t.Run("limit with page", func(t *testing.T) { testNEP17T(t, 1, 7, 3, 1, []int{13, 14}, []int{3}) }) - t.Run("limit with page 2", func(t *testing.T) { testNEP17T(t, 1, 7, 3, 2, []int{15, 16}, []int{4}) }) + t.Run("limit", func(t *testing.T) { testNEP17T(t, 1, 7, 3, 0, []int{14, 15}, []int{2}) }) + t.Run("limit 2", func(t *testing.T) { testNEP17T(t, 4, 5, 2, 0, []int{17}, []int{3}) }) + t.Run("limit with page", func(t *testing.T) { testNEP17T(t, 1, 7, 3, 1, []int{16, 17}, []int{3}) }) + t.Run("limit with page 2", func(t *testing.T) { testNEP17T(t, 1, 7, 3, 2, []int{18, 19}, []int{4}) }) }) } @@ -2086,7 +2086,7 @@ func checkNep17Balances(t *testing.T, e *executor, acc interface{}) { }, { Asset: e.chain.UtilityTokenHash(), - Amount: "46748035310", + Amount: "47102293830", LastUpdated: 19, }}, Address: testchain.PrivateKeyByID(0).GetScriptHash().StringLE(), @@ -2198,7 +2198,7 @@ func checkNep11TransfersAux(t *testing.T, e *executor, acc interface{}, sent, rc } func checkNep17Transfers(t *testing.T, e *executor, acc interface{}) { - checkNep17TransfersAux(t, e, acc, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}, []int{0, 1, 2, 3, 4, 5, 6, 7, 8}) + checkNep17TransfersAux(t, e, acc, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}, []int{0, 1, 2, 3, 4, 5, 6, 7, 8}) } func checkNep17TransfersAux(t *testing.T, e *executor, acc interface{}, sent, rcvd []int) { @@ -2224,8 +2224,11 @@ func checkNep17TransfersAux(t *testing.T, e *executor, acc interface{}, sent, rc blockPutNewTestValue, err := e.chain.GetBlock(e.chain.GetHeaderHash(16)) // invoke `put` method of `test_contract.go` with `testkey`, `newtestvalue` args require.NoError(t, err) - require.Equal(t, 1, len(blockPutNewTestValue.Transactions)) + require.Equal(t, 4, len(blockPutNewTestValue.Transactions)) txPutNewTestValue := blockPutNewTestValue.Transactions[0] + txPutValue1 := blockPutNewTestValue.Transactions[1] // invoke `put` method of `test_contract.go` with `aa`, `v1` args + txPutValue2 := blockPutNewTestValue.Transactions[2] // invoke `put` method of `test_contract.go` with `aa10`, `v2` args + txPutValue3 := blockPutNewTestValue.Transactions[3] // invoke `put` method of `test_contract.go` with `aa50`, `v3` args blockSetRecord, err := e.chain.GetBlock(e.chain.GetHeaderHash(15)) // add type A record to `neo.com` domain via NNS require.NoError(t, err) @@ -2336,6 +2339,30 @@ func checkNep17TransfersAux(t *testing.T, e *executor, acc interface{}, sent, rc Index: 17, TxHash: blockDeploy5.Hash(), }, + { + Timestamp: blockPutNewTestValue.Timestamp, + Asset: e.chain.UtilityTokenHash(), + Address: "", // burn + Amount: big.NewInt(txPutValue3.SystemFee + txPutValue3.NetworkFee).String(), + Index: 16, + TxHash: blockPutNewTestValue.Hash(), + }, + { + Timestamp: blockPutNewTestValue.Timestamp, + Asset: e.chain.UtilityTokenHash(), + Address: "", // burn + Amount: big.NewInt(txPutValue2.SystemFee + txPutValue2.NetworkFee).String(), + Index: 16, + TxHash: blockPutNewTestValue.Hash(), + }, + { + Timestamp: blockPutNewTestValue.Timestamp, + Asset: e.chain.UtilityTokenHash(), + Address: "", // burn + Amount: big.NewInt(txPutValue1.SystemFee + txPutValue1.NetworkFee).String(), + Index: 16, + TxHash: blockPutNewTestValue.Hash(), + }, { Timestamp: blockPutNewTestValue.Timestamp, Asset: e.chain.UtilityTokenHash(), diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index f004f9cf5d6862b9662098837dc7f761b9a6a9c1..243844ae29b1d1866aa7cd89a61c83660f1ffa80 100644 GIT binary patch delta 11509 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