From 7e586cc6abcf85085e4f7929812682818f96bd96 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 27 May 2020 22:51:44 +0300 Subject: [PATCH 01/42] native: deduce transferred assets from sender on transfer When money is being sent usually they go away from someone's pocket, so that there is a little less money left there. Not in our case as it turns out, we actually were adding money both to sender and receiver which is nice, but a bit different from usual economic's expectations. --- pkg/core/native/native_nep5.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/core/native/native_nep5.go b/pkg/core/native/native_nep5.go index 7ea25e20f..e969805cb 100644 --- a/pkg/core/native/native_nep5.go +++ b/pkg/core/native/native_nep5.go @@ -169,6 +169,8 @@ func (c *nep5TokenNative) transfer(ic *interop.Context, from, to util.Uint160, a inc := amount if isEmpty { inc = big.NewInt(0) + } else { + inc = new(big.Int).Neg(inc) } if err := c.incBalance(ic, from, siFrom, inc); err != nil { return err From bf6525e54db082d9acbd2464aea9eb4c9a897084 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 27 May 2020 22:55:40 +0300 Subject: [PATCH 02/42] core: fix GetUtilityTokenBalance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The value stored in NEP5 tracker for GAS is Fixed8 already, so we need to type-cast it, but not multiply by 10⁸ again. --- pkg/core/blockchain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 7155b7734..3a0ff5371 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -927,7 +927,7 @@ func (bc *Blockchain) GetNEP5Balances(acc util.Uint160) *state.NEP5Balances { // GetUtilityTokenBalance returns utility token (GAS) balance for the acc. func (bc *Blockchain) GetUtilityTokenBalance(acc util.Uint160) util.Fixed8 { - return util.Fixed8FromInt64(bc.GetNEP5Balances(acc).Trackers[bc.contracts.GAS.Hash].Balance) + return util.Fixed8(bc.GetNEP5Balances(acc).Trackers[bc.contracts.GAS.Hash].Balance) } // LastBatch returns last persisted storage batch. From 0a35ee00c6a2aa25852f9f9220d74543a88a6c5c Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 27 May 2020 23:28:20 +0300 Subject: [PATCH 03/42] core: print txes in LE in TestCreateBasicChain LE is human and RPC compatible representation, BE hex is almost unusable. --- pkg/core/helper_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index 9ff510f05..1b18e42a4 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -384,7 +384,7 @@ func TestCreateBasicChain(t *testing.T) { b = bc.newBlock(initTx, transferTx) require.NoError(t, bc.AddBlock(b)) - t.Logf("recieveRublesTx: %v", transferTx.Hash().StringBE()) + t.Logf("recieveRublesTx: %v", transferTx.Hash().StringLE()) transferTx = newNEP5Transfer(sh, priv0.GetScriptHash(), priv1.GetScriptHash(), 123) transferTx.Nonce = getNextNonce() @@ -403,7 +403,7 @@ func TestCreateBasicChain(t *testing.T) { b = bc.newBlock(transferTx) require.NoError(t, bc.AddBlock(b)) - t.Logf("sendRublesTx: %v", transferTx.Hash().StringBE()) + t.Logf("sendRublesTx: %v", transferTx.Hash().StringLE()) if saveChain { outStream, err := os.Create(prefix + "testblocks.acc") From 30c74152ce965b7509bbc2c06c4bb453bcd12d80 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 27 May 2020 23:29:33 +0300 Subject: [PATCH 04/42] core: add balance checks for NEP5 transfer to TestCreateBasicChain --- pkg/core/helper_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index 1b18e42a4..66e8d8e6c 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -176,6 +176,7 @@ func TestCreateBasicChain(t *testing.T) { priv0 := testchain.PrivateKeyByID(0) priv0ScriptHash := priv0.GetScriptHash() + require.Equal(t, util.Fixed8FromInt64(0), bc.GetUtilityTokenBalance(priv0ScriptHash)) // Move almost all NEO and some nep5 GAS to one simple account. txMoveNeo := newNEP5Transfer(gasHash, neoOwner, priv0ScriptHash, 1000000000) txMoveNeo.ValidUntilBlock = validUntilBlock @@ -214,6 +215,7 @@ func TestCreateBasicChain(t *testing.T) { require.NoError(t, bc.AddBlock(b)) t.Logf("txMoveNeo: %s", txMoveNeo.Hash().StringLE()) + require.Equal(t, util.Fixed8FromInt64(10), bc.GetUtilityTokenBalance(priv0ScriptHash)) // info for getblockheader rpc tests t.Logf("header hash: %s", b.Hash().StringLE()) buf := io.NewBufBinWriter() From d9400800e3e6b9a790397490e3e0cea360e449b6 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 27 May 2020 23:32:19 +0300 Subject: [PATCH 05/42] transaction: drop Gas field from InvocationTX It essentialy is the new SystemFee, so use that. Had to increase GAS transfer in test chain to 1000 to pay for deployment. --- pkg/core/blockchain.go | 7 +---- pkg/core/helper_test.go | 4 +-- pkg/core/transaction/invocation.go | 21 ++------------- pkg/core/transaction/invocation_test.go | 31 +---------------------- pkg/core/transaction/transaction.go | 8 ++---- pkg/core/transaction/transaction_test.go | 6 ++--- pkg/core/util_test.go | 2 +- pkg/rpc/client/wsclient_test.go | 4 +-- pkg/rpc/server/server_test.go | 12 ++++----- pkg/rpc/server/testdata/testblocks.acc | Bin 114070 -> 114026 bytes 10 files changed, 19 insertions(+), 76 deletions(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 3a0ff5371..fa2864dec 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -735,7 +735,7 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { v.LoadScript(t.Script) v.SetPriceGetter(getPrice) if bc.config.FreeGasLimit > 0 { - v.SetGasLimit(bc.config.FreeGasLimit + t.Gas) + v.SetGasLimit(bc.config.FreeGasLimit + tx.SystemFee) } err := v.Run() @@ -1401,11 +1401,6 @@ func (bc *Blockchain) verifyTx(t *transaction.Transaction, block *block.Block) e if err := bc.verifyClaims(t, results); err != nil { return err } - case transaction.InvocationType: - inv := t.Data.(*transaction.InvocationTX) - if inv.Gas.FractionalValue() != 0 { - return errors.New("invocation gas can only be integer") - } } return bc.verifyTxWitnesses(t, block) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index 66e8d8e6c..f6055d670 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -178,7 +178,7 @@ func TestCreateBasicChain(t *testing.T) { require.Equal(t, util.Fixed8FromInt64(0), bc.GetUtilityTokenBalance(priv0ScriptHash)) // Move almost all NEO and some nep5 GAS to one simple account. - txMoveNeo := newNEP5Transfer(gasHash, neoOwner, priv0ScriptHash, 1000000000) + txMoveNeo := newNEP5Transfer(gasHash, neoOwner, priv0ScriptHash, int64(util.Fixed8FromInt64(1000))) txMoveNeo.ValidUntilBlock = validUntilBlock txMoveNeo.Nonce = getNextNonce() txMoveNeo.Sender = neoOwner @@ -215,7 +215,7 @@ func TestCreateBasicChain(t *testing.T) { require.NoError(t, bc.AddBlock(b)) t.Logf("txMoveNeo: %s", txMoveNeo.Hash().StringLE()) - require.Equal(t, util.Fixed8FromInt64(10), bc.GetUtilityTokenBalance(priv0ScriptHash)) + require.Equal(t, util.Fixed8FromInt64(1000), bc.GetUtilityTokenBalance(priv0ScriptHash)) // info for getblockheader rpc tests t.Logf("header hash: %s", b.Hash().StringLE()) buf := io.NewBufBinWriter() diff --git a/pkg/core/transaction/invocation.go b/pkg/core/transaction/invocation.go index 9abb7b1a9..f68929764 100644 --- a/pkg/core/transaction/invocation.go +++ b/pkg/core/transaction/invocation.go @@ -13,10 +13,6 @@ import ( type InvocationTX struct { // Script output of the smart contract. Script []byte - - // Gas cost of the smart contract. - Gas util.Fixed8 - Version uint8 } // NewInvocationTX returns a new invocation transaction. @@ -26,10 +22,9 @@ func NewInvocationTX(script []byte, gas util.Fixed8) *Transaction { Version: 1, Nonce: rand.Uint32(), Data: &InvocationTX{ - Script: script, - Gas: gas, - Version: 1, + Script: script, }, + SystemFee: gas, Attributes: []Attribute{}, Cosigners: []Cosigner{}, Inputs: []Input{}, @@ -45,21 +40,9 @@ func (tx *InvocationTX) DecodeBinary(br *io.BinReader) { br.Err = errors.New("no script") return } - if tx.Version >= 1 { - tx.Gas.DecodeBinary(br) - if br.Err == nil && tx.Gas.LessThan(0) { - br.Err = errors.New("negative gas") - return - } - } else { - tx.Gas = util.Fixed8FromInt64(0) - } } // EncodeBinary implements Serializable interface. func (tx *InvocationTX) EncodeBinary(bw *io.BinWriter) { bw.WriteVarBytes(tx.Script) - if tx.Version >= 1 { - tx.Gas.EncodeBinary(bw) - } } diff --git a/pkg/core/transaction/invocation_test.go b/pkg/core/transaction/invocation_test.go index babe7d275..4efecbe96 100644 --- a/pkg/core/transaction/invocation_test.go +++ b/pkg/core/transaction/invocation_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/nspcc-dev/neo-go/pkg/util" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -15,7 +14,7 @@ func TestInvocationZeroScript(t *testing.T) { in, err := hex.DecodeString("000000000000000000") require.NoError(t, err) - inv := &InvocationTX{Version: 1} + inv := &InvocationTX{} assert.Error(t, testserdes.DecodeBinary(in, inv)) // PUSH1 script. @@ -24,31 +23,3 @@ func TestInvocationZeroScript(t *testing.T) { assert.NoError(t, testserdes.DecodeBinary(in, inv)) } - -func TestInvocationNegativeGas(t *testing.T) { - // Negative GAS - in, err := hex.DecodeString("015100000000000000ff") - require.NoError(t, err) - - inv := &InvocationTX{Version: 1} - assert.Error(t, testserdes.DecodeBinary(in, inv)) - - // Positive GAS. - in, err = hex.DecodeString("01510100000000000000") - require.NoError(t, err) - - assert.NoError(t, testserdes.DecodeBinary(in, inv)) - assert.Equal(t, util.Fixed8(1), inv.Gas) -} - -func TestInvocationVersionZero(t *testing.T) { - in, err := hex.DecodeString("0151") - require.NoError(t, err) - - inv := &InvocationTX{Version: 1} - assert.Error(t, testserdes.DecodeBinary(in, inv)) - - inv = &InvocationTX{Version: 0} - assert.NoError(t, testserdes.DecodeBinary(in, inv)) - assert.Equal(t, util.Fixed8(0), inv.Gas) -} diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index 6099ddaa2..0afdcd31a 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -174,7 +174,7 @@ func (t *Transaction) DecodeBinary(br *io.BinReader) { func (t *Transaction) decodeData(r *io.BinReader) { switch t.Type { case InvocationType: - t.Data = &InvocationTX{Version: t.Version} + t.Data = &InvocationTX{} t.Data.(*InvocationTX).DecodeBinary(r) case ClaimType: t.Data = &ClaimTX{} @@ -315,7 +315,6 @@ type transactionJSON struct { Claims []Input `json:"claims,omitempty"` Script string `json:"script,omitempty"` - Gas util.Fixed8 `json:"gas,omitempty"` Asset *registeredAsset `json:"asset,omitempty"` } @@ -342,7 +341,6 @@ func (t *Transaction) MarshalJSON() ([]byte, error) { tx.Claims = t.Data.(*ClaimTX).Claims case InvocationType: tx.Script = hex.EncodeToString(t.Data.(*InvocationTX).Script) - tx.Gas = t.Data.(*InvocationTX).Gas case RegisterType: transaction := *t.Data.(*RegisterTX) tx.Asset = ®isteredAsset{ @@ -390,9 +388,7 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { return err } t.Data = &InvocationTX{ - Script: bytes, - Gas: tx.Gas, - Version: tx.Version, + Script: bytes, } case RegisterType: admin, err := address.StringToUint160(tx.Asset.Admin) diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index 78e0a9d94..0a9cd2750 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -92,7 +92,7 @@ func TestNewInvocationTX(t *testing.T) { tx := NewInvocationTX(script, 1) txData := tx.Data.(*InvocationTX) assert.Equal(t, InvocationType, tx.Type) - assert.Equal(t, tx.Version, txData.Version) + assert.Equal(t, util.Fixed8(1), tx.SystemFee) assert.Equal(t, script, txData.Script) // Update hash fields to match tx2 that is gonna autoupdate them on decode. _ = tx.Hash() @@ -153,9 +153,7 @@ func TestMarshalUnmarshalJSONInvocationTX(t *testing.T) { Type: InvocationType, Version: 3, Data: &InvocationTX{ - Script: []byte{1, 2, 3, 4}, - Gas: util.Fixed8FromFloat(100), - Version: 3, + Script: []byte{1, 2, 3, 4}, }, Attributes: []Attribute{}, Inputs: []Input{{ diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index 090bfb8ac..c5ce2d6e8 100644 --- a/pkg/core/util_test.go +++ b/pkg/core/util_test.go @@ -20,7 +20,7 @@ func TestGenesisBlockMainNet(t *testing.T) { // have been changed. Consequently, hash of the genesis block has been changed. // Update expected genesis block hash for better times. // Old hash is "d42561e3d30e15be6400b6df2f328e02d2bf6354c41dce433bc57687c82144bf" - expect := "1d4156d233220b893797a684fbb827bb2163b5042edd10653bbc1b2769adbb8d" + expect := "472edea0e91369b51903b364e7403492a9041536fbfe145a9e1aff0ad5f18d78" assert.Equal(t, expect, block.Hash().StringLE()) } diff --git a/pkg/rpc/client/wsclient_test.go b/pkg/rpc/client/wsclient_test.go index a31a6beb0..879999712 100644 --- a/pkg/rpc/client/wsclient_test.go +++ b/pkg/rpc/client/wsclient_test.go @@ -117,8 +117,8 @@ func TestWSClientEvents(t *testing.T) { var events = []string{ `{"jsonrpc":"2.0","method":"transaction_executed","params":[{"txid":"0xe1cd5e57e721d2a2e05fb1f08721b12057b25ab1dd7fd0f33ee1639932fdfad7","executions":[{"trigger":"Application","contract":"0x0000000000000000000000000000000000000000","vmstate":"HALT","gas_consumed":"2.291","stack":[],"notifications":[{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"636f6e74726163742063616c6c"},{"type":"ByteArray","value":"7472616e73666572"},{"type":"Array","value":[{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}]}},{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"7472616e73666572"},{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}}]}]}]}`, `{"jsonrpc":"2.0","method":"notification_from_execution","params":[{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"636f6e74726163742063616c6c"},{"type":"ByteArray","value":"7472616e73666572"},{"type":"Array","value":[{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}]}}]}`, - `{"jsonrpc":"2.0","method":"transaction_added","params":[{"txid":"0xe1cd5e57e721d2a2e05fb1f08721b12057b25ab1dd7fd0f33ee1639932fdfad7","size":277,"type":"InvocationTransaction","version":1,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0037721","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c4027727296b84853c5d9e07fb8a40e885246ae25641383b16eefbe92027ecb1635b794aacf6bbfc3e828c73829b14791c483d19eb758b57638e3191393dbf2d288","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"01e8030c14316e851039019d39dfc2c37d6c3fee19fd5809870c14769162241eedf97c2481652adf1ba0f5bf57431b13c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238"}]}`, - `{"jsonrpc":"2.0","method":"block_added","params":[{"hash":"0x239fea00c54c2f6812612874183b72bef4473fcdf68bf8da08d74fd5b6cab030","version":0,"previousblockhash":"0x04f7580b111ec75f0ce68d3a9fd70a0544b4521b4a98541694d8575c548b759e","merkleroot":"0xb2c7230ebee4cb83bc03afadbba413e6bca8fcdeaf9c077bea060918da0e52a1","time":1590006200,"index":207,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c4063429fca5ff75c964d9e38179c75978e33f8174d91a780c2e825265cf2447281594afdd5f3e216dcaf5ff0693aec83f415996cf224454495495f6bd0a4c5d08f0c4099680903a954278580d8533121c2cd3e53a089817b6a784901ec06178a60b5f1da6e70422bdcadc89029767e08d66ce4180b99334cb2d42f42e4216394af15920c4067d5e362189e48839a24e187c59d46f5d9db862c8a029777f1548b19632bfdc73ad373827ed02369f925e89c2303b64e6b9838dca229949b9b9d3bd4c0c3ed8f0c4021d4c00d4522805883f1db929554441bcbbee127c48f6b7feeeb69a72a78c7f0a75011663e239c0820ef903f36168f42936de10f0ef20681cb735a4b53d0390f","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xf736cd91ab84062a21a09b424346b241987f6245ffe8c2b2db39d595c3c222f7","size":204,"type":"InvocationTransaction","version":1,"nonce":8,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0030421","valid_until_block":1200,"attributes":[],"cosigners":[],"vin":[],"vout":[],"scripts":[{"invocation":"0c4016e7a112742409cdfaad89dcdbcb52c94c5c1a69dfe5d8b999649eaaa787e31ca496d1734d6ea606c749ad36e9a88892240ae59e0efa7f544e0692124898d512","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"10c00c04696e69740c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b52"},{"txid":"0xe1cd5e57e721d2a2e05fb1f08721b12057b25ab1dd7fd0f33ee1639932fdfad7","size":277,"type":"InvocationTransaction","version":1,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0037721","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c4027727296b84853c5d9e07fb8a40e885246ae25641383b16eefbe92027ecb1635b794aacf6bbfc3e828c73829b14791c483d19eb758b57638e3191393dbf2d288","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"01e8030c14316e851039019d39dfc2c37d6c3fee19fd5809870c14769162241eedf97c2481652adf1ba0f5bf57431b13c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238"}]}]}`, + `{"jsonrpc":"2.0","method":"transaction_added","params":[{"txid":"0xd3c3104eb1c059985ddeacc3a149634c830b39cf3fa37f4a2f7af0e4980ff370","size":269,"type":"InvocationTransaction","version":1,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036921","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c40cf193534761a987324a355749f5e4ef8499ff5948df6ee8a4b9834cbe025103ad08a74a00e1e248c73f3d967b23d09af0d200d9cb742ec0aa911f7f783cbd2e0","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"01e8030c14316e851039019d39dfc2c37d6c3fee19fd5809870c14769162241eedf97c2481652adf1ba0f5bf57431b13c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238"}]}`, + `{"jsonrpc":"2.0","method":"block_added","params":[{"hash":"0x3c99815f393807efd7a620a04eed66440a3c89d41ff18fd42c08f71784fc1c16","version":0,"previousblockhash":"0xb6533ac10e71fb02348af87c0a723131939ee08713a7f31075d24beb54100f1a","merkleroot":"0x7470df300c48107d36ffd3da09b155a35650f1020d019abb0c3abb7bf91a09e2","time":1590609889,"index":207,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c4095dfc789359ca154c07f1bfdc28e0ac512f78156825efafd9b31a6a8009cef6339de6f8331aad35f6dc8af9a7723a07fb9319ccad54c91ab9be155964efa5f920c4067ac11066db9e47f64cf876e3d6dd07e28324d51b53faf2a42ccafc371050efbe0b5809c80672ea116a557bfbdbf789b7bca008064834db80c7c91a768bcec760c40aefd42910ad6a6f9c3ba17a5b38e8de7188d0b36972c47d3054715209ca79d9811beff9a762ebd1c78584ff3110222419b2cdba6c22bbcbb554195bf9df09bb30c40368c314b35b051a4a258828d3327e8c22053166eeb749d50a9a33e2620ba156042124979a1554524daf9f7b371ec0da5b41404a1b5e0d42fe0032859e114833c","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xde4481fdbef5d3726d0052661f950e69e4594dd6589913c628e20c1413f85b74","size":196,"type":"InvocationTransaction","version":1,"nonce":8,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0029621","valid_until_block":1200,"attributes":[],"cosigners":[],"vin":[],"vout":[],"scripts":[{"invocation":"0c40b192490537d5ec2c747fdf6ad8d73d0e3aae105c3d9ed96e7e032b28018fa54996661b17aaa107adc7a73a8ca3916b61a4b2b673e1b2a30c3c7117a01cf937a1","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"10c00c04696e69740c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b52"},{"txid":"0xd3c3104eb1c059985ddeacc3a149634c830b39cf3fa37f4a2f7af0e4980ff370","size":269,"type":"InvocationTransaction","version":1,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036921","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c40cf193534761a987324a355749f5e4ef8499ff5948df6ee8a4b9834cbe025103ad08a74a00e1e248c73f3d967b23d09af0d200d9cb742ec0aa911f7f783cbd2e0","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"01e8030c14316e851039019d39dfc2c37d6c3fee19fd5809870c14769162241eedf97c2481652adf1ba0f5bf57431b13c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238"}]}]}`, `{"jsonrpc":"2.0","method":"event_missed","params":[]}`, } srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 1bcb382b5..f880cf777 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -54,12 +54,12 @@ var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["0a0abf0188053113d0014e0cb9801d090a5d3e7640d76427fa1a3676e7cdf82e"]`, + params: `["1e71f60519a68c73cc1ca5382bab12160c4967c86e28e8238b78ea54dcbdc716"]`, result: func(e *executor) interface{} { return &result.ApplicationLog{} }, check: func(t *testing.T, e *executor, acc interface{}) { res, ok := acc.(*result.ApplicationLog) require.True(t, ok) - expectedTxHash, err := util.Uint256DecodeStringLE("0a0abf0188053113d0014e0cb9801d090a5d3e7640d76427fa1a3676e7cdf82e") + expectedTxHash, err := util.Uint256DecodeStringLE("1e71f60519a68c73cc1ca5382bab12160c4967c86e28e8238b78ea54dcbdc716") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) @@ -180,7 +180,7 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { Asset: e.chain.UtilityTokenHash(), - Amount: "10", + Amount: "1000", LastUpdated: 1, }}, Address: testchain.PrivateKeyByID(0).GetScriptHash().StringLE(), @@ -247,7 +247,7 @@ var rpcTestCases = map[string][]rpcTestCase{ Timestamp: blockRecieveGAS.Timestamp, Asset: e.chain.UtilityTokenHash(), Address: testchain.MultisigAddress(), - Amount: "10", + Amount: "1000", Index: 1, NotifyIndex: 0, TxHash: txRecieveGASHash, @@ -579,7 +579,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "gettransactionheight": { { name: "positive", - params: `["0e873d5d565a03c6cd39efa3b446e1901b4636c448a22bc7e8c259c5a28a2eda"]`, + params: `["be463055a8447567434037aad40ad58764cb7eef4aee64308f74ce6df5a98a8a"]`, result: func(e *executor) interface{} { h := 1 return &h @@ -791,7 +791,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "sendrawtransaction": { { name: "positive", - params: `["80000b000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000a267050000000000b00400000000017a03a89832a347c4fb53af1f526d0d930b14ab6eb01629ce20ffbaeaeef58af3010001787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a0030d3dec3862300316e851039019d39dfc2c37d6c3fee19fd58098701420c40b6aeec1d2699194b842f399448b395d98bbb287dc89ea9e5ce3bb99a1c8c9bf933f55b69db6709b44e6a5c8b28b97018466479e5d500e414a0874c37abab262d290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, + params: `["80000b000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000a267050000000000b0040000000001e2b5b6f72dc08d3b0e498c6466928031333f0b242cf158a547b8c4a1681f8f2d010001787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a0030d3dec3862300316e851039019d39dfc2c37d6c3fee19fd58098701420c406a41c10280ff445c36fb16fe94fa197c9ab9678d099c7c1af5d4b9269ac19bbba09e20f02f53582bc340b4ea77539c28bb2cc03902e77d5d37febabe902aac98290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, result: func(e *executor) interface{} { v := true return &v diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index bae75785b6bad8c41ce3ef3cc3a3b1a4da168fad..094f873fea6ef1e6611cbc8023b1e14815a71a44 100644 GIT binary patch literal 114026 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 GJpLc#CcAC` literal 114070 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 From 31ef0c43399439d602f4a7342ba1ca458fe0cd3b Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 28 May 2020 21:10:46 +0300 Subject: [PATCH 06/42] core: don't check systemfee with UTXO outputs SystemFee is already being checked by verifyTx against Sender's balance. --- pkg/core/blockchain.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index fa2864dec..035c01dbd 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -1593,15 +1593,6 @@ func (bc *Blockchain) verifyResults(t *transaction.Transaction, results []*trans if len(resultsDestroy) == 1 && resultsDestroy[0].AssetID != UtilityTokenID() { return errors.New("tx destroys non-utility token") } - sysfee := t.SystemFee - if sysfee.GreaterThan(util.Fixed8(0)) { - if len(resultsDestroy) == 0 { - return fmt.Errorf("system requires to pay %s fee, but tx pays nothing", sysfee.String()) - } - if resultsDestroy[0].Amount.LessThan(sysfee) { - return fmt.Errorf("system requires to pay %s fee, but tx pays %s only", sysfee.String(), resultsDestroy[0].Amount.String()) - } - } switch t.Type { case transaction.ClaimType: From ed0a3e4af5fa2b60e0b57cd0f4c2c01768a786e6 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 28 May 2020 22:30:48 +0300 Subject: [PATCH 07/42] rpc/client: drop neoscan support It was used as getunspents substitute and it's not longer relevant for NEO 3. --- pkg/rpc/client/client.go | 32 ++++++++++ pkg/rpc/client/neoscan.go | 125 -------------------------------------- 2 files changed, 32 insertions(+), 125 deletions(-) delete mode 100644 pkg/rpc/client/neoscan.go diff --git a/pkg/rpc/client/client.go b/pkg/rpc/client/client.go index d5ad26e7b..b22e5f07d 100644 --- a/pkg/rpc/client/client.go +++ b/pkg/rpc/client/client.go @@ -8,6 +8,7 @@ import ( "net" "net/http" "net/url" + "sort" "sync" "time" @@ -227,3 +228,34 @@ func (c *Client) Ping() error { _ = conn.Close() return nil } + +// unspentsToInputs uses UnspentBalances to create a slice of inputs for a new +// transcation containing the required amount of asset. +func unspentsToInputs(utxos state.UnspentBalances, required util.Fixed8) ([]transaction.Input, util.Fixed8, error) { + var ( + num, i uint16 + selected = util.Fixed8(0) + ) + sort.Sort(utxos) + + for _, us := range utxos { + if selected >= required { + break + } + selected += us.Value + num++ + } + if selected < required { + return nil, util.Fixed8(0), errors.New("cannot compose inputs for transaction; check sender balance") + } + + inputs := make([]transaction.Input, 0, num) + for i = 0; i < num; i++ { + inputs = append(inputs, transaction.Input{ + PrevHash: utxos[i].Tx, + PrevIndex: utxos[i].Index, + }) + } + + return inputs, selected, nil +} diff --git a/pkg/rpc/client/neoscan.go b/pkg/rpc/client/neoscan.go deleted file mode 100644 index 011eb9c67..000000000 --- a/pkg/rpc/client/neoscan.go +++ /dev/null @@ -1,125 +0,0 @@ -package client - -import ( - "encoding/json" - "errors" - "net/http" - "sort" - - "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/rpc/response/result" - "github.com/nspcc-dev/neo-go/pkg/util" - errs "github.com/pkg/errors" -) - -/* - Definition of types, helper functions and variables - required for calculation of transaction inputs using - NeoScan API. -*/ - -type ( - // NeoScanServer stores NEOSCAN URL and API path. - NeoScanServer struct { - URL string // "protocol://host:port/" - Path string // path to API endpoint without wallet address - } - - // Unspent stores Unspents per asset - Unspent struct { - Unspent state.UnspentBalances - Asset string // "NEO" / "GAS" - Amount util.Fixed8 // total unspent of this asset - } - - // NeoScanBalance is a struct of NeoScan response to 'get_balance' request - NeoScanBalance struct { - Balance []*Unspent - Address string - } -) - -// GetBalance performs a request to get balance for the address specified. -func (s NeoScanServer) GetBalance(address string) ([]*Unspent, error) { - var ( - err error - req *http.Request - res *http.Response - balance NeoScanBalance - client = http.Client{} - balanceURL = s.URL + s.Path - ) - - if req, err = http.NewRequest(http.MethodGet, balanceURL+address, nil); err != nil { - return nil, errs.Wrap(err, "Failed to compose HTTP request") - } - - if res, err = client.Do(req); err != nil { - return nil, errs.Wrap(err, "Failed to perform HTTP request") - } - - defer res.Body.Close() - - if err = json.NewDecoder(res.Body).Decode(&balance); err != nil { - return nil, errs.Wrap(err, "Failed to decode HTTP response") - } - return balance.Balance, nil -} - -func filterSpecificAsset(asset string, balance []*Unspent, assetBalance *Unspent) { - for _, us := range balance { - if us.Asset == asset { - assetBalance.Unspent = us.Unspent - assetBalance.Asset = us.Asset - assetBalance.Amount = us.Amount - return - } - } -} - -// CalculateInputs creates input transactions for the specified amount of given asset belonging to specified address. -func (s NeoScanServer) CalculateInputs(address string, assetIDUint util.Uint256, cost util.Fixed8) ([]transaction.Input, util.Fixed8, error) { - var ( - err error - us []*Unspent - assetUnspent Unspent - assetID = result.GlobalAssets[assetIDUint.StringLE()] - ) - if us, err = s.GetBalance(address); err != nil { - return nil, util.Fixed8(0), errs.Wrapf(err, "Cannot get balance for address %v", address) - } - filterSpecificAsset(assetID, us, &assetUnspent) - return unspentsToInputs(assetUnspent.Unspent, cost) -} - -// unspentsToInputs uses UnspentBalances to create a slice of inputs for a new -// transcation containing the required amount of asset. -func unspentsToInputs(utxos state.UnspentBalances, required util.Fixed8) ([]transaction.Input, util.Fixed8, error) { - var ( - num, i uint16 - selected = util.Fixed8(0) - ) - sort.Sort(utxos) - - for _, us := range utxos { - if selected >= required { - break - } - selected += us.Value - num++ - } - if selected < required { - return nil, util.Fixed8(0), errors.New("cannot compose inputs for transaction; check sender balance") - } - - inputs := make([]transaction.Input, 0, num) - for i = 0; i < num; i++ { - inputs = append(inputs, transaction.Input{ - PrevHash: utxos[i].Tx, - PrevIndex: utxos[i].Index, - }) - } - - return inputs, selected, nil -} From 3b2644da4f6b21bbe14fb5cf546205147b41d850 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 28 May 2020 22:55:44 +0300 Subject: [PATCH 08/42] rpc/client: pass token as simple hash into TransferNEP5 It doesn't need full wallet.Token structure. --- cli/wallet/nep5.go | 2 +- pkg/rpc/client/nep5.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/wallet/nep5.go b/cli/wallet/nep5.go index d0e3e0d1f..306fc5f4b 100644 --- a/cli/wallet/nep5.go +++ b/cli/wallet/nep5.go @@ -341,7 +341,7 @@ func transferNEP5(ctx *cli.Context) error { return cli.NewExitError(err, 1) } - hash, err := c.TransferNEP5(acc, to, token, amount, gas) + hash, err := c.TransferNEP5(acc, to, token.Hash, amount, gas) if err != nil { return cli.NewExitError(err, 1) } diff --git a/pkg/rpc/client/nep5.go b/pkg/rpc/client/nep5.go index 06302e8eb..063c4524b 100644 --- a/pkg/rpc/client/nep5.go +++ b/pkg/rpc/client/nep5.go @@ -97,7 +97,7 @@ func (c *Client) NEP5TokenInfo(tokenHash util.Uint160) (*wallet.Token, error) { // TransferNEP5 creates an invocation transaction that invokes 'transfer' method // on a given token to move specified amount of NEP5 assets (in FixedN format // using contract's number of decimals) to given account. -func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token *wallet.Token, amount int64, gas util.Fixed8) (util.Uint256, error) { +func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, gas util.Fixed8) (util.Uint256, error) { from, err := address.StringToUint160(acc.Address) if err != nil { return util.Uint256{}, fmt.Errorf("bad account address: %v", err) @@ -105,7 +105,7 @@ func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token *walle // Note: we don't use invoke function here because it requires // 2 round trips instead of one. w := io.NewBufBinWriter() - emit.AppCallWithOperationAndArgs(w.BinWriter, token.Hash, "transfer", from, to, amount) + emit.AppCallWithOperationAndArgs(w.BinWriter, token, "transfer", from, to, amount) emit.Opcode(w.BinWriter, opcode.ASSERT) script := w.Bytes() From d496cc968789b5a7a0479a7e069eb208e7ad66ee Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 28 May 2020 22:58:02 +0300 Subject: [PATCH 09/42] cli/wallet: switch claim command to claim NEP5 GAS --- cli/wallet/wallet.go | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/cli/wallet/wallet.go b/cli/wallet/wallet.go index 6d6779ffd..ca2fc5caa 100644 --- a/cli/wallet/wallet.go +++ b/cli/wallet/wallet.go @@ -247,46 +247,18 @@ func claimGas(ctx *cli.Context) error { if err != nil { return cli.NewExitError(err, 1) } - info, err := c.GetClaimable(addrFlag.String()) - if err != nil { - return cli.NewExitError(err, 1) - } else if info.Unclaimed == 0 || len(info.Spents) == 0 { - fmt.Println("Nothing to claim") - return nil - } - - var claim transaction.ClaimTX - for i := range info.Spents { - claim.Claims = append(claim.Claims, transaction.Input{ - PrevHash: info.Spents[i].Tx, - PrevIndex: uint16(info.Spents[i].N), - }) - } - - tx := transaction.NewClaimTX(&claim) - validUntilBlock, err := c.CalculateValidUntilBlock() + // Temporary. + neoHash, err := util.Uint160DecodeStringLE("3b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c") if err != nil { return cli.NewExitError(err, 1) } - tx.ValidUntilBlock = validUntilBlock - tx.Sender = scriptHash - tx.AddOutput(&transaction.Output{ - AssetID: core.UtilityTokenID(), - Amount: info.Unclaimed, - ScriptHash: scriptHash, - }) - - err = c.AddNetworkFee(tx, acc) + hash, err := c.TransferNEP5(acc, scriptHash, neoHash, 0, 0) if err != nil { return cli.NewExitError(err, 1) } - _ = acc.SignTx(tx) - if err := c.SendRawTransaction(tx); err != nil { - return cli.NewExitError(err, 1) - } - fmt.Println(tx.Hash().StringLE()) + fmt.Println(hash.StringLE()) return nil } From 670396b908c4579a50c987bfdb87ee8d895dc063 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 28 May 2020 22:35:46 +0300 Subject: [PATCH 10/42] rpc: drop getclaimable RPC call support It's not present in NEO 3 and it's not needed there. --- docs/rpc.md | 1 - pkg/rpc/client/doc.go | 1 - pkg/rpc/client/rpc.go | 10 ------ pkg/rpc/client/rpc_test.go | 42 ---------------------- pkg/rpc/response/result/claimable.go | 22 ------------ pkg/rpc/server/server.go | 53 ---------------------------- pkg/rpc/server/server_test.go | 34 ------------------ 7 files changed, 163 deletions(-) delete mode 100644 pkg/rpc/response/result/claimable.go diff --git a/docs/rpc.md b/docs/rpc.md index ba025c07d..e035a4eed 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -43,7 +43,6 @@ which would yield the response: | `getblockhash` | | `getblockheader` | | `getblocksysfee` | -| `getclaimable` | | `getconnectioncount` | | `getcontractstate` | | `getnep5balances` | diff --git a/pkg/rpc/client/doc.go b/pkg/rpc/client/doc.go index c21d3ebf4..983d64132 100644 --- a/pkg/rpc/client/doc.go +++ b/pkg/rpc/client/doc.go @@ -27,7 +27,6 @@ Supported methods getblockhash getblockheader getblocksysfee - getclaimable getconnectioncount getcontractstate getnep5balances diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index e0b8326bd..00f58c542 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -187,16 +187,6 @@ func (c *Client) GetBlockSysFee(index uint32) (util.Fixed8, error) { return resp, nil } -// GetClaimable returns tx outputs which can be claimed. -func (c *Client) GetClaimable(address string) (*result.ClaimableInfo, error) { - params := request.NewRawParams(address) - resp := new(result.ClaimableInfo) - if err := c.performRequest("getclaimable", params, resp); err != nil { - return nil, err - } - return resp, nil -} - // GetConnectionCount returns the current number of connections for the node. func (c *Client) GetConnectionCount() (int, error) { var ( diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index 31a7fe3cc..4d9bf188c 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -399,36 +399,6 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ }, }, }, - "getclaimable": { - { - name: "positive", - invoke: func(c *Client) (interface{}, error) { - return c.GetClaimable("AGofsxAUDwt52KjaB664GYsqVAkULYvKNt") - }, - serverResponse: `{"jsonrpc":"2.0","id":1,"result":{"claimable":[{"txid":"52ba70ef18e879785572c917795cd81422c3820b8cf44c24846a30ee7376fd77","n":1,"value":800000,"start_height":476496,"end_height":488154,"generated":746.112,"sys_fee": 3.92,"unclaimed":750.032}],"address":"AGofsxAUDwt52KjaB664GYsqVAkULYvKNt","unclaimed": 750.032}}`, - result: func(c *Client) interface{} { - txID, err := util.Uint256DecodeStringLE("52ba70ef18e879785572c917795cd81422c3820b8cf44c24846a30ee7376fd77") - if err != nil { - panic(err) - } - return &result.ClaimableInfo{ - Spents: []result.Claimable{ - { - Tx: txID, - N: 1, - Value: util.Fixed8FromInt64(800000), - StartHeight: 476496, - EndHeight: 488154, - Generated: util.Fixed8FromFloat(746.112), - SysFee: util.Fixed8FromFloat(3.92), - Unclaimed: util.Fixed8FromFloat(750.032), - }}, - Address: "AGofsxAUDwt52KjaB664GYsqVAkULYvKNt", - Unclaimed: util.Fixed8FromFloat(750.032), - } - }, - }, - }, "getconnectioncount": { { name: "positive", @@ -1087,12 +1057,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetBlockSysFee(1) }, }, - { - name: "getclaimable_invalid_params_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetClaimable("") - }, - }, { name: "getconnectioncount_invalid_params_error", invoke: func(c *Client) (interface{}, error) { @@ -1269,12 +1233,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetBlockSysFee(1) }, }, - { - name: "getclaimable_unmarshalling_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetClaimable("") - }, - }, { name: "getconnectioncount_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { diff --git a/pkg/rpc/response/result/claimable.go b/pkg/rpc/response/result/claimable.go deleted file mode 100644 index 71dbc60b8..000000000 --- a/pkg/rpc/response/result/claimable.go +++ /dev/null @@ -1,22 +0,0 @@ -package result - -import "github.com/nspcc-dev/neo-go/pkg/util" - -// ClaimableInfo is a result of a getclaimable RPC call. -type ClaimableInfo struct { - Spents []Claimable `json:"claimable"` - Address string `json:"address"` - Unclaimed util.Fixed8 `json:"unclaimed"` -} - -// Claimable represents spent outputs which can be claimed. -type Claimable struct { - Tx util.Uint256 `json:"txid"` - N int `json:"n"` - Value util.Fixed8 `json:"value"` - StartHeight uint32 `json:"start_height"` - EndHeight uint32 `json:"end_height"` - Generated util.Fixed8 `json:"generated"` - SysFee util.Fixed8 `json:"sys_fee"` - Unclaimed util.Fixed8 `json:"unclaimed"` -} diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index fad04857e..2e4fe7716 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -88,7 +88,6 @@ var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *respon "getblockhash": (*Server).getBlockHash, "getblockheader": (*Server).getBlockHeader, "getblocksysfee": (*Server).getBlockSysFee, - "getclaimable": (*Server).getClaimable, "getconnectioncount": (*Server).getConnectionCount, "getcontractstate": (*Server).getContractState, "getnep5balances": (*Server).getNEP5Balances, @@ -522,58 +521,6 @@ func (s *Server) getApplicationLog(reqParams request.Params) (interface{}, *resp return result.NewApplicationLog(appExecResult, scriptHash), nil } -func (s *Server) getClaimable(ps request.Params) (interface{}, *response.Error) { - p, ok := ps.ValueWithType(0, request.StringT) - if !ok { - return nil, response.ErrInvalidParams - } - u, err := p.GetUint160FromAddress() - if err != nil { - return nil, response.ErrInvalidParams - } - - var unclaimed []state.UnclaimedBalance - if acc := s.chain.GetAccountState(u); acc != nil { - err := acc.Unclaimed.ForEach(func(b *state.UnclaimedBalance) error { - unclaimed = append(unclaimed, *b) - return nil - }) - if err != nil { - return nil, response.NewInternalServerError("Unclaimed processing failure", err) - } - } - - var sum util.Fixed8 - claimable := make([]result.Claimable, 0, len(unclaimed)) - for _, ub := range unclaimed { - gen, sys, err := s.chain.CalculateClaimable(ub.Value, ub.Start, ub.End) - if err != nil { - s.log.Info("error while calculating claim bonus", zap.Error(err)) - continue - } - - uc := gen.Add(sys) - sum += uc - - claimable = append(claimable, result.Claimable{ - Tx: ub.Tx, - N: int(ub.Index), - Value: ub.Value, - StartHeight: ub.Start, - EndHeight: ub.End, - Generated: gen, - SysFee: sys, - Unclaimed: uc, - }) - } - - return result.ClaimableInfo{ - Spents: claimable, - Address: p.String(), - Unclaimed: sum, - }, nil -} - func (s *Server) getNEP5Balances(ps request.Params) (interface{}, *response.Error) { p, ok := ps.ValueWithType(0, request.StringT) if !ok { diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index f880cf777..17ac9c414 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -504,40 +504,6 @@ var rpcTestCases = map[string][]rpcTestCase{ fail: true, }, }, - "getclaimable": { - { - name: "no params", - params: "[]", - fail: true, - }, - { - name: "invalid address", - params: `["invalid"]`, - fail: true, - }, - { - name: "normal address", - params: `["` + testchain.MultisigAddress() + `"]`, - result: func(*executor) interface{} { - // hash of the issueTx - h, _ := util.Uint256DecodeStringBE("d3a4f2249fe33b18bde73901c1ecc66200485f1c1dcd941b406a630b479090ae") - amount := util.Fixed8FromInt64(1 * 8) // (endHeight - startHeight) * genAmount[0] - return &result.ClaimableInfo{ - Spents: []result.Claimable{ - { - Tx: h, - Value: util.Fixed8FromInt64(100000000), - EndHeight: 1, - Generated: amount, - Unclaimed: amount, - }, - }, - Address: testchain.MultisigAddress(), - Unclaimed: amount, - } - }, - }, - }, "getconnectioncount": { { params: "[]", From 9a4e53b58ebf509d554d7c95276204592c43e144 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 28 May 2020 23:04:29 +0300 Subject: [PATCH 11/42] rpc/client: no longer add UTXO GAS for fees It's already being paid with NEP5 GAS. --- pkg/rpc/client/nep5.go | 6 ------ pkg/rpc/client/rpc.go | 8 -------- 2 files changed, 14 deletions(-) diff --git a/pkg/rpc/client/nep5.go b/pkg/rpc/client/nep5.go index 063c4524b..1bdccdcb3 100644 --- a/pkg/rpc/client/nep5.go +++ b/pkg/rpc/client/nep5.go @@ -5,11 +5,9 @@ import ( "errors" "fmt" - "github.com/nspcc-dev/neo-go/pkg/core" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/rpc/request" "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/emit" @@ -137,10 +135,6 @@ func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token util.U return util.Uint256{}, fmt.Errorf("can't calculate validUntilBlock: %v", err) } - if err := request.AddInputsAndUnspentsToTx(tx, acc.Address, core.UtilityTokenID(), gas, c); err != nil { - return util.Uint256{}, fmt.Errorf("can't add GAS to transaction: %v", err) - } - err = c.AddNetworkFee(tx, acc) if err != nil { return util.Uint256{}, fmt.Errorf("can't add network fee to transaction: %v", err) diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index 00f58c542..38f8219ef 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -515,14 +515,6 @@ func (c *Client) SignAndPushInvocationTx(script []byte, acc *wallet.Account, sys } tx.Sender = addr - gas := sysfee + netfee - - if gas > 0 { - if err = request.AddInputsAndUnspentsToTx(tx, acc.Address, core.UtilityTokenID(), gas, c); err != nil { - return txHash, errors.Wrap(err, "failed to add inputs and unspents to transaction") - } - } - err = c.AddNetworkFee(tx, acc) if err != nil { return txHash, errors.Wrapf(err, "failed to add network fee") From c0e044961da866ab153cd2b1c431dbbba66aaa94 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 21:46:01 +0300 Subject: [PATCH 12/42] cli/wallet: add ability to save NEP5 transfer transaction It allows to use multisig cli operations for multisig transaction creation and send. --- cli/wallet/nep5.go | 27 +++++++++++++++++++++++++-- pkg/rpc/client/nep5.go | 32 +++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/cli/wallet/nep5.go b/cli/wallet/nep5.go index 306fc5f4b..cf61345ff 100644 --- a/cli/wallet/nep5.go +++ b/cli/wallet/nep5.go @@ -1,12 +1,15 @@ package wallet import ( + "encoding/json" "errors" "fmt" + "io/ioutil" "github.com/nspcc-dev/neo-go/cli/flags" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/rpc/client" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/context" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/urfave/cli" @@ -82,6 +85,7 @@ func newNEP5Commands() []cli.Command { Flags: []cli.Flag{ walletPathFlag, rpcFlag, + outFlag, timeoutFlag, fromAddrFlag, toAddrFlag, @@ -341,11 +345,30 @@ func transferNEP5(ctx *cli.Context) error { return cli.NewExitError(err, 1) } - hash, err := c.TransferNEP5(acc, to, token.Hash, amount, gas) + tx, err := c.CreateNEP5TransferTx(acc, to, token.Hash, amount, gas) if err != nil { return cli.NewExitError(err, 1) } - fmt.Println(hash.StringLE()) + if outFile := ctx.String("out"); outFile != "" { + priv := acc.PrivateKey() + pub := priv.PublicKey() + sign := priv.Sign(tx.GetSignedPart()) + scCtx := context.NewParameterContext("Neo.Core.ContractTransaction", tx) + if err := scCtx.AddSignature(acc.Contract, pub, sign); err != nil { + return cli.NewExitError(fmt.Errorf("can't add signature: %v", err), 1) + } else if data, err := json.Marshal(scCtx); err != nil { + return cli.NewExitError(fmt.Errorf("can't marshal tx to JSON: %v", err), 1) + } else if err := ioutil.WriteFile(outFile, data, 0644); err != nil { + return cli.NewExitError(fmt.Errorf("can't write tx to file: %v", err), 1) + } + } else { + _ = acc.SignTx(tx) + if err := c.SendRawTransaction(tx); err != nil { + return cli.NewExitError(err, 1) + } + } + + fmt.Println(tx.Hash().StringLE()) return nil } diff --git a/pkg/rpc/client/nep5.go b/pkg/rpc/client/nep5.go index 1bdccdcb3..d04a085be 100644 --- a/pkg/rpc/client/nep5.go +++ b/pkg/rpc/client/nep5.go @@ -92,13 +92,14 @@ func (c *Client) NEP5TokenInfo(tokenHash util.Uint160) (*wallet.Token, error) { return wallet.NewToken(tokenHash, name, symbol, decimals), nil } -// TransferNEP5 creates an invocation transaction that invokes 'transfer' method -// on a given token to move specified amount of NEP5 assets (in FixedN format -// using contract's number of decimals) to given account. -func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, gas util.Fixed8) (util.Uint256, error) { +// CreateNEP5TransferTx creates an invocation transaction for the 'transfer' +// method of a given contract (token) to move specified amount of NEP5 assets +// (in FixedN format using contract's number of decimals) to given account and +// returns it. The returned transaction is not signed. +func (c *Client) CreateNEP5TransferTx(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, gas util.Fixed8) (*transaction.Transaction, error) { from, err := address.StringToUint160(acc.Address) if err != nil { - return util.Uint256{}, fmt.Errorf("bad account address: %v", err) + return nil, fmt.Errorf("bad account address: %v", err) } // Note: we don't use invoke function here because it requires // 2 round trips instead of one. @@ -120,11 +121,11 @@ func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token util.U result, err := c.InvokeScript(hex.EncodeToString(script)) if err != nil { - return util.Uint256{}, fmt.Errorf("can't add system fee to transaction: %v", err) + return nil, fmt.Errorf("can't add system fee to transaction: %v", err) } gasConsumed, err := util.Fixed8FromString(result.GasConsumed) if err != nil { - return util.Uint256{}, fmt.Errorf("can't add system fee to transaction: %v", err) + return nil, fmt.Errorf("can't add system fee to transaction: %v", err) } if gasConsumed > 0 { tx.SystemFee = gasConsumed @@ -132,12 +133,25 @@ func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token util.U tx.ValidUntilBlock, err = c.CalculateValidUntilBlock() if err != nil { - return util.Uint256{}, fmt.Errorf("can't calculate validUntilBlock: %v", err) + return nil, fmt.Errorf("can't calculate validUntilBlock: %v", err) } err = c.AddNetworkFee(tx, acc) if err != nil { - return util.Uint256{}, fmt.Errorf("can't add network fee to transaction: %v", err) + return nil, fmt.Errorf("can't add network fee to transaction: %v", err) + } + + return tx, nil +} + +// TransferNEP5 creates an invocation transaction that invokes 'transfer' method +// on a given token to move specified amount of NEP5 assets (in FixedN format +// using contract's number of decimals) to given account and sends it to the +// network returning just a hash of it. +func (c *Client) TransferNEP5(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, gas util.Fixed8) (util.Uint256, error) { + tx, err := c.CreateNEP5TransferTx(acc, to, token, amount, gas) + if err != nil { + return util.Uint256{}, err } if err := acc.SignTx(tx); err != nil { From e358c70eccd928c8a6d2ef11a87b7eea42b973cd Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 21:50:50 +0300 Subject: [PATCH 13/42] cli/wallet: drop classic transfer support We do have 'nep5 transfer' and that's enough for now. --- cli/wallet/wallet.go | 121 ------------------------------------------- 1 file changed, 121 deletions(-) diff --git a/cli/wallet/wallet.go b/cli/wallet/wallet.go index ca2fc5caa..0c536888a 100644 --- a/cli/wallet/wallet.go +++ b/cli/wallet/wallet.go @@ -4,22 +4,17 @@ import ( "bufio" "context" "encoding/hex" - "encoding/json" "errors" "fmt" - "io/ioutil" "os" "strings" "syscall" "github.com/nspcc-dev/neo-go/cli/flags" "github.com/nspcc-dev/neo-go/pkg/core" - "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/rpc/client" - "github.com/nspcc-dev/neo-go/pkg/rpc/request" - context2 "github.com/nspcc-dev/neo-go/pkg/smartcontract/context" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/urfave/cli" @@ -179,29 +174,6 @@ func NewCommands() []cli.Command { forceFlag, }, }, - { - Name: "transfer", - Usage: "transfer NEO/GAS", - UsageText: "transfer --path --from --to " + - " --amount --asset [NEO|GAS|] [--out ]", - Action: transferAsset, - Flags: []cli.Flag{ - walletPathFlag, - rpcFlag, - timeoutFlag, - outFlag, - fromAddrFlag, - toAddrFlag, - cli.StringFlag{ - Name: "amount", - Usage: "Amount of asset to send", - }, - cli.StringFlag{ - Name: "asset", - Usage: "Asset ID", - }, - }, - }, { Name: "multisig", Usage: "work with multisig address", @@ -449,99 +421,6 @@ func askForConsent() bool { return false } -func transferAsset(ctx *cli.Context) error { - wall, err := openWallet(ctx.String("path")) - if err != nil { - return cli.NewExitError(err, 1) - } - defer wall.Close() - - fromFlag := ctx.Generic("from").(*flags.Address) - if !fromFlag.IsSet { - return cli.NewExitError("'from' address was not provided", 1) - } - from := fromFlag.Uint160() - acc := wall.GetAccount(from) - if acc == nil { - return cli.NewExitError(fmt.Errorf("wallet contains no account for '%s'", from), 1) - } - - asset, err := getAssetID(ctx.String("asset")) - if err != nil { - return cli.NewExitError(fmt.Errorf("invalid asset id: %v", err), 1) - } - - amount, err := util.Fixed8FromString(ctx.String("amount")) - if err != nil { - return cli.NewExitError(fmt.Errorf("invalid amount: %v", err), 1) - } - - pass, err := readPassword("Enter wallet password > ") - if err != nil { - return cli.NewExitError(err, 1) - } else if err := acc.Decrypt(pass); err != nil { - return cli.NewExitError(err, 1) - } - - gctx, cancel := getGoContext(ctx) - defer cancel() - - c, err := client.New(gctx, ctx.String("rpc"), client.Options{}) - if err != nil { - return cli.NewExitError(err, 1) - } - - tx := transaction.NewContractTX() - validUntilBlock, err := c.CalculateValidUntilBlock() - if err != nil { - return cli.NewExitError(err, 1) - } - tx.ValidUntilBlock = validUntilBlock - if err := request.AddInputsAndUnspentsToTx(tx, fromFlag.String(), asset, amount, c); err != nil { - return cli.NewExitError(err, 1) - } - tx.Sender = from - - toFlag := ctx.Generic("to").(*flags.Address) - if !toFlag.IsSet { - return cli.NewExitError("'to' address was not provided", 1) - } - toAddr := toFlag.Uint160() - tx.AddOutput(&transaction.Output{ - AssetID: asset, - Amount: amount, - ScriptHash: toAddr, - Position: 1, - }) - - err = c.AddNetworkFee(tx, acc) - if err != nil { - return cli.NewExitError(err, 1) - } - - if outFile := ctx.String("out"); outFile != "" { - priv := acc.PrivateKey() - pub := priv.PublicKey() - sign := priv.Sign(tx.GetSignedPart()) - c := context2.NewParameterContext("Neo.Core.ContractTransaction", tx) - if err := c.AddSignature(acc.Contract, pub, sign); err != nil { - return cli.NewExitError(fmt.Errorf("can't add signature: %v", err), 1) - } else if data, err := json.Marshal(c); err != nil { - return cli.NewExitError(fmt.Errorf("can't marshal tx to JSON: %v", err), 1) - } else if err := ioutil.WriteFile(outFile, data, 0644); err != nil { - return cli.NewExitError(fmt.Errorf("can't write tx to file: %v", err), 1) - } - } else { - _ = acc.SignTx(tx) - if err := c.SendRawTransaction(tx); err != nil { - return cli.NewExitError(err, 1) - } - } - - fmt.Println(tx.Hash().StringLE()) - return nil -} - func getGoContext(ctx *cli.Context) (context.Context, func()) { if dur := ctx.Duration("timeout"); dur != 0 { return context.WithTimeout(context.Background(), dur) From 337e65b696240595fbb58505175b066adeb2459d Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 21:57:34 +0300 Subject: [PATCH 14/42] rpc: drop UTXO transfer support, remove Balancer Nothing uses them now and they're irrelevant for Neo 3. --- pkg/rpc/client/client.go | 31 ------------------ pkg/rpc/client/rpc.go | 33 ------------------- pkg/rpc/request/txBuilder.go | 63 ------------------------------------ pkg/rpc/request/txTypes.go | 40 ----------------------- 4 files changed, 167 deletions(-) delete mode 100644 pkg/rpc/request/txTypes.go diff --git a/pkg/rpc/client/client.go b/pkg/rpc/client/client.go index b22e5f07d..d9ead3469 100644 --- a/pkg/rpc/client/client.go +++ b/pkg/rpc/client/client.go @@ -46,13 +46,6 @@ type Client struct { // All values are optional. If any duration is not specified // a default of 4 seconds will be used. type Options struct { - // Balancer is an implementation of request.BalanceGetter interface, - // if not set then the default Client's implementation will be used, but - // it relies on server support for `getunspents` RPC call which is - // standard for neo-go, but only implemented as a plugin for C# node. So - // you can override it here to use NeoScanServer for example. - Balancer request.BalanceGetter - // Cert is a client-side certificate, it doesn't work at the moment along // with the other two options below. Cert string @@ -108,9 +101,6 @@ func New(ctx context.Context, endpoint string, opts Options) (*Client, error) { wifMu: new(sync.Mutex), endpoint: url, } - if opts.Balancer == nil { - opts.Balancer = cl - } cl.opts = opts cl.requestF = cl.makeHTTPRequest return cl, nil @@ -141,27 +131,6 @@ func (c *Client) SetWIF(wif string) error { return nil } -// CalculateInputs implements request.BalanceGetter interface and returns inputs -// array for the specified amount of given asset belonging to specified address. -// This implementation uses GetUnspents JSON-RPC call internally, so make sure -// your RPC server supports that. -func (c *Client) CalculateInputs(address string, asset util.Uint256, cost util.Fixed8) ([]transaction.Input, util.Fixed8, error) { - var utxos state.UnspentBalances - - resp, err := c.GetUnspents(address) - if err != nil { - return nil, util.Fixed8(0), errors.Wrapf(err, "cannot get balance for address %v", address) - } - for _, ubi := range resp.Balance { - if asset.Equals(ubi.AssetHash) { - utxos = ubi.Unspents - break - } - } - return unspentsToInputs(utxos, cost) - -} - func (c *Client) performRequest(method string, p request.RawParams, v interface{}) error { var r = request.Raw{ JSONRPC: request.JSONRPCVersion, diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index 38f8219ef..e3d0aa5a3 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -460,39 +460,6 @@ func (c *Client) SubmitBlock(b block.Block) error { return nil } -// TransferAsset sends an amount of specific asset to a given address. -// This call requires open wallet. (`wif` key in client struct.) -// If response.Result is `true` then transaction was formed correctly and was written in blockchain. -func (c *Client) TransferAsset(asset util.Uint256, address string, amount util.Fixed8) (util.Uint256, error) { - var ( - err error - rawTx *transaction.Transaction - txParams = request.ContractTxParams{ - AssetID: asset, - Address: address, - Value: amount, - WIF: c.WIF(), - Balancer: c.opts.Balancer, - } - resp util.Uint256 - ) - - if rawTx, err = request.CreateRawContractTransaction(txParams); err != nil { - return resp, errors.Wrap(err, "failed to create raw transaction") - } - - validUntilBlock, err := c.CalculateValidUntilBlock() - if err != nil { - return resp, errors.Wrap(err, "failed to add validUntilBlock to raw transaction") - } - rawTx.ValidUntilBlock = validUntilBlock - - if err = c.SendRawTransaction(rawTx); err != nil { - return resp, errors.Wrap(err, "failed to send raw transaction") - } - return rawTx.Hash(), nil -} - // SignAndPushInvocationTx signs and pushes given script as an invocation // transaction using given wif to sign it and spending the amount of gas // specified. It returns a hash of the invocation transaction and an error. diff --git a/pkg/rpc/request/txBuilder.go b/pkg/rpc/request/txBuilder.go index 0be028eb0..05def02a3 100644 --- a/pkg/rpc/request/txBuilder.go +++ b/pkg/rpc/request/txBuilder.go @@ -5,77 +5,14 @@ import ( "fmt" "strconv" - "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/emit" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" - "github.com/nspcc-dev/neo-go/pkg/wallet" - errs "github.com/pkg/errors" ) -// CreateRawContractTransaction returns contract-type Transaction built from specified parameters. -func CreateRawContractTransaction(params ContractTxParams) (*transaction.Transaction, error) { - var ( - err error - tx = transaction.NewContractTX() - toAddressHash, fromAddressHash util.Uint160 - fromAddress string - receiverOutput *transaction.Output - - wif, assetID, toAddress, amount, balancer = params.WIF, params.AssetID, params.Address, params.Value, params.Balancer - ) - - fromAddress = wif.PrivateKey.Address() - - if fromAddressHash, err = address.StringToUint160(fromAddress); err != nil { - return nil, errs.Wrapf(err, "Failed to take script hash from address: %v", fromAddress) - } - - if toAddressHash, err = address.StringToUint160(toAddress); err != nil { - return nil, errs.Wrapf(err, "Failed to take script hash from address: %v", toAddress) - } - tx.Sender = fromAddressHash - - if err = AddInputsAndUnspentsToTx(tx, fromAddress, assetID, amount, balancer); err != nil { - return nil, errs.Wrap(err, "failed to add inputs and unspents to transaction") - } - receiverOutput = transaction.NewOutput(assetID, amount, toAddressHash) - tx.AddOutput(receiverOutput) - if acc, err := wallet.NewAccountFromWIF(wif.S); err != nil { - return nil, err - } else if err = acc.SignTx(tx); err != nil { - return nil, errs.Wrap(err, "failed to sign tx") - } - - return tx, nil -} - -// AddInputsAndUnspentsToTx adds inputs needed to transaction and one output -// with change. -func AddInputsAndUnspentsToTx(tx *transaction.Transaction, addr string, assetID util.Uint256, amount util.Fixed8, balancer BalanceGetter) error { - scriptHash, err := address.StringToUint160(addr) - if err != nil { - return errs.Wrapf(err, "failed to take script hash from address: %v", addr) - } - inputs, spent, err := balancer.CalculateInputs(addr, assetID, amount) - if err != nil { - return errs.Wrap(err, "failed to get inputs") - } - for _, input := range inputs { - tx.AddInput(&input) - } - - if senderUnspent := spent - amount; senderUnspent > 0 { - senderOutput := transaction.NewOutput(assetID, senderUnspent, scriptHash) - tx.AddOutput(senderOutput) - } - return nil -} - // DetailsToSCProperties extract the fields needed from ContractDetails // and converts them to smartcontract.PropertyState. func DetailsToSCProperties(contract *smartcontract.ContractDetails) smartcontract.PropertyState { diff --git a/pkg/rpc/request/txTypes.go b/pkg/rpc/request/txTypes.go deleted file mode 100644 index aebf8055f..000000000 --- a/pkg/rpc/request/txTypes.go +++ /dev/null @@ -1,40 +0,0 @@ -package request - -/* - Definition of types, interfaces and variables - required for raw transaction composing. -*/ - -import ( - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -type ( - // ContractTxParams contains parameters for tx to transfer assets. - // It includes (*Client).TransferAsset call params and utility data. - ContractTxParams struct { - AssetID util.Uint256 - Address string - Value util.Fixed8 - WIF keys.WIF // a WIF to send the transaction - // since there are many ways to provide unspents, - // transaction composer stays agnostic to that how - // unspents was got; - Balancer BalanceGetter - } - - // BalanceGetter is an interface supporting CalculateInputs() method. - BalanceGetter interface { - // parameters - // address: base58-encoded address assets would be transferred from - // assetID: asset identifier - // amount: an asset amount to spend - // return values - // inputs: UTXO's for the preparing transaction - // total: summarized asset amount from all the `inputs` - // error: error would be considered in the caller function - CalculateInputs(address string, assetID util.Uint256, amount util.Fixed8) (inputs []transaction.Input, total util.Fixed8, err error) - } -) From 63eb6069b202487bfaef0af24abe5fc5f83cc453 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 22:00:28 +0300 Subject: [PATCH 15/42] rpc: drop support for getunspents method Irrelevant for Neo 3. --- docs/rpc.md | 1 - pkg/rpc/client/doc.go | 1 - pkg/rpc/client/rpc.go | 12 ------ pkg/rpc/client/rpc_test.go | 28 -------------- pkg/rpc/response/result/unspents.go | 57 ----------------------------- pkg/rpc/server/server.go | 23 ++---------- pkg/rpc/server/server_test.go | 23 ------------ 7 files changed, 3 insertions(+), 142 deletions(-) delete mode 100644 pkg/rpc/response/result/unspents.go diff --git a/docs/rpc.md b/docs/rpc.md index e035a4eed..76c2038e1 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -54,7 +54,6 @@ which would yield the response: | `gettransactionheight` | | `gettxout` | | `getunclaimed` | -| `getunspents` | | `getvalidators` | | `getversion` | | `invoke` | diff --git a/pkg/rpc/client/doc.go b/pkg/rpc/client/doc.go index 983d64132..b8ac8c7f9 100644 --- a/pkg/rpc/client/doc.go +++ b/pkg/rpc/client/doc.go @@ -38,7 +38,6 @@ Supported methods gettransactionheight gettxout getunclaimed - getunspents getvalidators getversion invoke diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index e3d0aa5a3..5e19176b1 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -344,18 +344,6 @@ func (c *Client) GetUnclaimed(address string) (*result.Unclaimed, error) { return resp, nil } -// GetUnspents returns UTXOs for the given NEO account. -func (c *Client) GetUnspents(address string) (*result.Unspents, error) { - var ( - params = request.NewRawParams(address) - resp = &result.Unspents{} - ) - if err := c.performRequest("getunspents", params, resp); err != nil { - return nil, err - } - return resp, nil -} - // GetValidators returns the current NEO consensus nodes information and voting status. func (c *Client) GetValidators() ([]result.Validator, error) { var ( diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index 4d9bf188c..c1b80bd83 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -731,22 +731,6 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ }, }, }, - "getunspents": { - { - name: "positive", - invoke: func(c *Client) (interface{}, error) { - return c.GetUnspents("AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y") - }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"balance":[{"unspent":[{"txid":"0x83df8bd085fcb60b2789f7d0a9f876e5f3908567f7877fcba835e899b9dea0b5","n":0,"value":"100000000"}],"asset_hash":"0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b","asset":"NEO","asset_symbol":"NEO","amount":"100000000"},{"unspent":[{"txid":"0x2ab085fa700dd0df4b73a94dc17a092ac3a85cbd965575ea1585d1668553b2f9","n":0,"value":"19351.99993"}],"asset_hash":"0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7","asset":"GAS","asset_symbol":"GAS","amount":"19351.99993"}],"address":"AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"}}`, - result: func(c *Client) interface{} { return &result.Unspents{} }, - check: func(t *testing.T, c *Client, uns interface{}) { - res, ok := uns.(*result.Unspents) - require.True(t, ok) - assert.Equal(t, "AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y", res.Address) - assert.Equal(t, 2, len(res.Balance)) - }, - }, - }, "getvalidators": { { name: "positive", @@ -1117,12 +1101,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetUnclaimed("") }, }, - { - name: "getunspents_invalid_params_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetUnspents("") - }, - }, { name: "invokefunction_invalid_params_error", invoke: func(c *Client) (interface{}, error) { @@ -1305,12 +1283,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetUnclaimed("") }, }, - { - name: "getunspents_unmarshalling_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetUnspents("") - }, - }, { name: "getvalidators_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { diff --git a/pkg/rpc/response/result/unspents.go b/pkg/rpc/response/result/unspents.go deleted file mode 100644 index 9a1613b86..000000000 --- a/pkg/rpc/response/result/unspents.go +++ /dev/null @@ -1,57 +0,0 @@ -package result - -import ( - "github.com/nspcc-dev/neo-go/pkg/core/blockchainer" - "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// UnspentBalanceInfo wrapper is used to represent single unspent asset entry -// in `getunspents` output. -type UnspentBalanceInfo struct { - Unspents []state.UnspentBalance `json:"unspent"` - AssetHash util.Uint256 `json:"asset_hash"` - Asset string `json:"asset"` - AssetSymbol string `json:"asset_symbol"` - Amount util.Fixed8 `json:"amount"` -} - -// Unspents wrapper is used to represent getunspents return result. -type Unspents struct { - Balance []UnspentBalanceInfo `json:"balance"` - Address string `json:"address"` -} - -// GlobalAssets stores a map of asset IDs to user-friendly strings ("NEO"/"GAS"). -var GlobalAssets = map[string]string{ - "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b": "NEO", - "602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7": "GAS", -} - -// NewUnspents creates a new Account wrapper using given Blockchainer. -func NewUnspents(a *state.Account, chain blockchainer.Blockchainer, addr string) Unspents { - res := Unspents{ - Address: addr, - Balance: make([]UnspentBalanceInfo, 0, len(a.Balances)), - } - balanceValues := a.GetBalanceValues() - for k, v := range a.Balances { - name, ok := GlobalAssets[k.StringLE()] - if !ok { - as := chain.GetAssetState(k) - if as != nil { - name = as.Name - } - } - - res.Balance = append(res.Balance, UnspentBalanceInfo{ - Unspents: v, - AssetHash: k, - Asset: name, - AssetSymbol: name, - Amount: balanceValues[k], - }) - } - - return res -} diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 2e4fe7716..19f732b12 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -99,7 +99,6 @@ var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *respon "gettransactionheight": (*Server).getTransactionHeight, "gettxout": (*Server).getTxOut, "getunclaimed": (*Server).getUnclaimed, - "getunspents": (*Server).getUnspents, "getvalidators": (*Server).getValidators, "getversion": (*Server).getVersion, "invoke": (*Server).invoke, @@ -797,20 +796,12 @@ func (s *Server) getContractState(reqParams request.Params) (interface{}, *respo return results, nil } +// getAccountState returns account state. func (s *Server) getAccountState(ps request.Params) (interface{}, *response.Error) { - return s.getAccountStateAux(ps, false) -} - -func (s *Server) getUnspents(ps request.Params) (interface{}, *response.Error) { - return s.getAccountStateAux(ps, true) -} - -// getAccountState returns account state either in short or full (unspents included) form. -func (s *Server) getAccountStateAux(reqParams request.Params, unspents bool) (interface{}, *response.Error) { var resultsErr *response.Error var results interface{} - param, ok := reqParams.ValueWithType(0, request.StringT) + param, ok := ps.ValueWithType(0, request.StringT) if !ok { return nil, response.ErrInvalidParams } else if scriptHash, err := param.GetUint160FromAddress(); err != nil { @@ -820,15 +811,7 @@ func (s *Server) getAccountStateAux(reqParams request.Params, unspents bool) (in if as == nil { as = state.NewAccount(scriptHash) } - if unspents { - str, err := param.GetString() - if err != nil { - return nil, response.ErrInvalidParams - } - results = result.NewUnspents(as, s.chain, str) - } else { - results = result.NewAccountState(as) - } + results = result.NewAccountState(as) } return results, resultsErr } diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 17ac9c414..e6f7d1e0c 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -593,29 +593,6 @@ var rpcTestCases = map[string][]rpcTestCase{ }, }, }, - "getunspents": { - { - name: "positive", - params: `["` + testchain.MultisigAddress() + `"]`, - result: func(e *executor) interface{} { return &result.Unspents{} }, - check: func(t *testing.T, e *executor, unsp interface{}) { - res, ok := unsp.(*result.Unspents) - require.True(t, ok) - require.Equal(t, 1, len(res.Balance)) - assert.Equal(t, 1, len(res.Balance[0].Unspents)) - }, - }, - { - name: "positive null", - params: `["AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"]`, - result: func(e *executor) interface{} { return &result.Unspents{} }, - check: func(t *testing.T, e *executor, unsp interface{}) { - res, ok := unsp.(*result.Unspents) - require.True(t, ok) - require.Equal(t, 0, len(res.Balance)) - }, - }, - }, "getvalidators": { { params: "[]", From 232e1a2598a3072323a7bd975e9eccca7363fb5c Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 22:09:23 +0300 Subject: [PATCH 16/42] rpc: drop support for getassetstate It's for UTXO assets and it's absent in Neo 3. --- docs/rpc.md | 1 - pkg/rpc/client/doc.go | 1 - pkg/rpc/client/rpc.go | 12 -------- pkg/rpc/client/rpc_test.go | 36 ---------------------- pkg/rpc/response/result/asset_state.go | 41 -------------------------- pkg/rpc/server/server.go | 19 ------------ pkg/rpc/server/server_test.go | 28 ------------------ 7 files changed, 138 deletions(-) delete mode 100644 pkg/rpc/response/result/asset_state.go diff --git a/docs/rpc.md b/docs/rpc.md index 76c2038e1..5d6476a5d 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -36,7 +36,6 @@ which would yield the response: | ------- | | `getaccountstate` | | `getapplicationlog` | -| `getassetstate` | | `getbestblockhash` | | `getblock` | | `getblockcount` | diff --git a/pkg/rpc/client/doc.go b/pkg/rpc/client/doc.go index b8ac8c7f9..de8461873 100644 --- a/pkg/rpc/client/doc.go +++ b/pkg/rpc/client/doc.go @@ -20,7 +20,6 @@ Supported methods getaccountstate getapplicationlog - getassetstate getbestblockhash getblock getblockcount diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index 5e19176b1..fbd8ebbb4 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -40,18 +40,6 @@ func (c *Client) GetApplicationLog(hash util.Uint256) (*result.ApplicationLog, e return resp, nil } -// GetAssetState queries the asset information, based on the specified asset number. -func (c *Client) GetAssetState(hash util.Uint256) (*result.AssetState, error) { - var ( - params = request.NewRawParams(hash.StringLE()) - resp = &result.AssetState{} - ) - if err := c.performRequest("getassetstate", params, resp); err != nil { - return nil, err - } - return resp, nil -} - // GetBestBlockHash returns the hash of the tallest block in the main chain. func (c *Client) GetBestBlockHash() (util.Uint256, error) { var resp = util.Uint256{} diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index c1b80bd83..e1ffb3b82 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -204,30 +204,6 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ }, }, }, - "getassetstate": { - { - name: "positive", - invoke: func(c *Client) (interface{}, error) { - return c.GetAssetState(util.Uint256{}) - }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"id":"0x1a5e0e3eac2abced7de9ee2de0820a5c85e63756fcdfc29b82fead86a7c07c78","type":0,"name":"NEO","amount":"100000000","available":"100000000","precision":0,"owner":"00","admin":"Abf2qMs1pzQb8kYk9RuxtUb9jtRKJVuBJt","issuer":"AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM","expiration":4000000,"is_frozen":false}}`, - result: func(c *Client) interface{} { - return &result.AssetState{ - ID: core.GoverningTokenID(), - AssetType: 0, - Name: "NEO", - Amount: util.Fixed8FromInt64(100000000), - Available: util.Fixed8FromInt64(100000000), - Precision: 0, - Owner: "00", - Admin: "Abf2qMs1pzQb8kYk9RuxtUb9jtRKJVuBJt", - Issuer: "AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM", - Expiration: 4000000, - IsFrozen: false, - } - }, - }, - }, "getbestblockhash": { { name: "positive", @@ -981,12 +957,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetApplicationLog(util.Uint256{}) }, }, - { - name: "getassetstate_invalid_params_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetAssetState(core.GoverningTokenID()) - }, - }, { name: "getbestblockhash_invalid_params_error", invoke: func(c *Client) (interface{}, error) { @@ -1145,12 +1115,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetApplicationLog(util.Uint256{}) }, }, - { - name: "getassetstate_unmarshalling_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetAssetState(core.GoverningTokenID()) - }, - }, { name: "getbestblockhash_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { diff --git a/pkg/rpc/response/result/asset_state.go b/pkg/rpc/response/result/asset_state.go deleted file mode 100644 index 3c3d5f38d..000000000 --- a/pkg/rpc/response/result/asset_state.go +++ /dev/null @@ -1,41 +0,0 @@ -package result - -import ( - "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/encoding/address" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// AssetState wrapper used for the representation of -// state.Asset on the RPC Server. -type AssetState struct { - ID util.Uint256 `json:"id"` - AssetType transaction.AssetType `json:"type"` - Name string `json:"name"` - Amount util.Fixed8 `json:"amount"` - Available util.Fixed8 `json:"available"` - Precision uint8 `json:"precision"` - Owner string `json:"owner"` - Admin string `json:"admin"` - Issuer string `json:"issuer"` - Expiration uint32 `json:"expiration"` - IsFrozen bool `json:"is_frozen"` -} - -// NewAssetState creates a new Asset wrapper. -func NewAssetState(a *state.Asset) AssetState { - return AssetState{ - ID: a.ID, - AssetType: a.AssetType, - Name: a.GetName(), - Amount: a.Amount, - Available: a.Available, - Precision: a.Precision, - Owner: a.Owner.String(), - Admin: address.Uint160ToString(a.Admin), - Issuer: address.Uint160ToString(a.Issuer), - Expiration: a.Expiration, - IsFrozen: a.IsFrozen, - } -} diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 19f732b12..2269dd31f 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -81,7 +81,6 @@ const ( var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *response.Error){ "getaccountstate": (*Server).getAccountState, "getapplicationlog": (*Server).getApplicationLog, - "getassetstate": (*Server).getAssetState, "getbestblockhash": (*Server).getBestBlockHash, "getblock": (*Server).getBlock, "getblockcount": (*Server).getBlockCount, @@ -469,24 +468,6 @@ func (s *Server) validateAddress(reqParams request.Params) (interface{}, *respon return validateAddress(param.Value), nil } -func (s *Server) getAssetState(reqParams request.Params) (interface{}, *response.Error) { - param, ok := reqParams.ValueWithType(0, request.StringT) - if !ok { - return nil, response.ErrInvalidParams - } - - paramAssetID, err := param.GetUint256() - if err != nil { - return nil, response.ErrInvalidParams - } - - as := s.chain.GetAssetState(paramAssetID) - if as != nil { - return result.NewAssetState(as), nil - } - return nil, response.NewRPCError("Unknown asset", "", nil) -} - // getApplicationLog returns the contract log based on the specified txid. func (s *Server) getApplicationLog(reqParams request.Params) (interface{}, *response.Error) { param, ok := reqParams.Value(0) diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index e6f7d1e0c..5fad84867 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -299,34 +299,6 @@ var rpcTestCases = map[string][]rpcTestCase{ fail: true, }, }, - "getassetstate": { - { - name: "positive", - params: `["f882fb865bab84b99623f21eedd902286af7da8d8a4609d7acefce04c851dc1c"]`, - result: func(e *executor) interface{} { return &result.AssetState{} }, - check: func(t *testing.T, e *executor, as interface{}) { - res, ok := as.(*result.AssetState) - require.True(t, ok) - assert.Equal(t, "00", res.Owner) - assert.Equal(t, "AWKECj9RD8rS8RPcpCgYVjk1DeYyHwxZm3", res.Admin) - }, - }, - { - name: "negative", - params: `["602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de2"]`, - fail: true, - }, - { - name: "no params", - params: `[]`, - fail: true, - }, - { - name: "invalid hash", - params: `["notahex"]`, - fail: true, - }, - }, "getbestblockhash": { { params: "[]", From d856df36a714beba27a1a7f23645a600017c25ef Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 22:18:22 +0300 Subject: [PATCH 17/42] rpc: drop support for gettxout method Neo 3 doesn't need it. --- docs/rpc.md | 1 - pkg/rpc/client/doc.go | 1 - pkg/rpc/client/rpc.go | 13 --------- pkg/rpc/client/rpc_test.go | 33 ----------------------- pkg/rpc/response/types.go | 6 ----- pkg/rpc/server/server.go | 35 ------------------------ pkg/rpc/server/server_test.go | 50 ----------------------------------- 7 files changed, 139 deletions(-) diff --git a/docs/rpc.md b/docs/rpc.md index 5d6476a5d..3eac4e3e3 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -51,7 +51,6 @@ which would yield the response: | `getrawtransaction` | | `getstorage` | | `gettransactionheight` | -| `gettxout` | | `getunclaimed` | | `getvalidators` | | `getversion` | diff --git a/pkg/rpc/client/doc.go b/pkg/rpc/client/doc.go index de8461873..7863752fe 100644 --- a/pkg/rpc/client/doc.go +++ b/pkg/rpc/client/doc.go @@ -35,7 +35,6 @@ Supported methods getrawtransaction getstorage gettransactionheight - gettxout getunclaimed getvalidators getversion diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index fbd8ebbb4..bf5a07179 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -307,19 +307,6 @@ func (c *Client) GetTransactionHeight(hash util.Uint256) (uint32, error) { return resp, nil } -// GetTxOut returns the corresponding unspent transaction output information (returned change), -// based on the specified hash and index. -func (c *Client) GetTxOut(hash util.Uint256, num int) (*result.TransactionOutput, error) { - var ( - params = request.NewRawParams(hash.StringLE(), num) - resp = &result.TransactionOutput{} - ) - if err := c.performRequest("gettxout", params, resp); err != nil { - return resp, err - } - return resp, nil -} - // GetUnclaimed returns unclaimed GAS amount of the specified address. func (c *Client) GetUnclaimed(address string) (*result.Unclaimed, error) { var ( diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index e1ffb3b82..ceb99fbaa 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -670,27 +670,6 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ }, }, }, - "gettxout": { - { - name: "positive", - invoke: func(c *Client) (interface{}, error) { - hash, err := util.Uint256DecodeStringLE("f4250dab094c38d8265acc15c366dc508d2e14bf5699e12d9df26577ed74d657") - if err != nil { - panic(err) - } - return c.GetTxOut(hash, 0) - }, - serverResponse: `{"jsonrpc":"2.0","id":1,"result":{"N":0,"Asset":"c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b","Value":"2950","Address":"AHCNSDkh2Xs66SzmyKGdoDKY752uyeXDrt"}}`, - result: func(c *Client) interface{} { - return &result.TransactionOutput{ - N: 0, - Asset: "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b", - Value: util.Fixed8FromInt64(2950), - Address: "AHCNSDkh2Xs66SzmyKGdoDKY752uyeXDrt", - } - }, - }, - }, "getunclaimed": { { name: "positive", @@ -1059,12 +1038,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetTransactionHeight(util.Uint256{}) }, }, - { - name: "gettxoutput_invalid_params_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetTxOut(util.Uint256{}, 0) - }, - }, { name: "getunclaimed_invalid_params_error", invoke: func(c *Client) (interface{}, error) { @@ -1235,12 +1208,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ return c.GetTransactionHeight(util.Uint256{}) }, }, - { - name: "getxoutput_unmarshalling_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetTxOut(util.Uint256{}, 0) - }, - }, { name: "getunclaimed_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { diff --git a/pkg/rpc/response/types.go b/pkg/rpc/response/types.go index ba23c7677..23e6368d2 100644 --- a/pkg/rpc/response/types.go +++ b/pkg/rpc/response/types.go @@ -26,12 +26,6 @@ type Raw struct { Result json.RawMessage `json:"result,omitempty"` } -// GetTxOut represents result of `gettxout` RPC call. -type GetTxOut struct { - HeaderAndError - Result *result.TransactionOutput -} - // GetRawTx represents verbose output of `getrawtransaction` RPC call. type GetRawTx struct { HeaderAndError diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 2269dd31f..d1d041e7a 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -96,7 +96,6 @@ var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *respon "getrawtransaction": (*Server).getrawtransaction, "getstorage": (*Server).getStorage, "gettransactionheight": (*Server).getTransactionHeight, - "gettxout": (*Server).getTxOut, "getunclaimed": (*Server).getUnclaimed, "getvalidators": (*Server).getValidators, "getversion": (*Server).getVersion, @@ -723,40 +722,6 @@ func (s *Server) getTransactionHeight(ps request.Params) (interface{}, *response return height, nil } -func (s *Server) getTxOut(ps request.Params) (interface{}, *response.Error) { - p, ok := ps.Value(0) - if !ok { - return nil, response.ErrInvalidParams - } - - h, err := p.GetUint256() - if err != nil { - return nil, response.ErrInvalidParams - } - - p, ok = ps.ValueWithType(1, request.NumberT) - if !ok { - return nil, response.ErrInvalidParams - } - - num, err := p.GetInt() - if err != nil || num < 0 { - return nil, response.ErrInvalidParams - } - - tx, _, err := s.chain.GetTransaction(h) - if err != nil { - return nil, response.NewInvalidParamsError(err.Error(), err) - } - - if num >= len(tx.Outputs) { - return nil, response.NewInvalidParamsError("invalid index", errors.New("too big index")) - } - - out := tx.Outputs[num] - return result.NewTxOutput(&out), nil -} - // getContractState returns contract state (contract information, according to the contract script hash). func (s *Server) getContractState(reqParams request.Params) (interface{}, *response.Error) { var results interface{} diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 5fad84867..16693d412 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -312,38 +312,6 @@ var rpcTestCases = map[string][]rpcTestCase{ fail: true, }, }, - "gettxout": { - { - name: "no params", - params: `[]`, - fail: true, - }, - { - name: "invalid hash", - params: `["notahex"]`, - fail: true, - }, - { - name: "missing hash", - params: `["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0]`, - fail: true, - }, - { - name: "invalid index", - params: `["7aadf91ca8ac1e2c323c025a7e492bee2dd90c783b86ebfc3b18db66b530a76d", "string"]`, - fail: true, - }, - { - name: "negative index", - params: `["7aadf91ca8ac1e2c323c025a7e492bee2dd90c783b86ebfc3b18db66b530a76d", -1]`, - fail: true, - }, - { - name: "too big index", - params: `["7aadf91ca8ac1e2c323c025a7e492bee2dd90c783b86ebfc3b18db66b530a76d", 100]`, - fail: true, - }, - }, "getblock": { { name: "positive", @@ -966,24 +934,6 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] }) }) - t.Run("gettxout", func(t *testing.T) { - block, _ := chain.GetBlock(chain.GetHeaderHash(0)) - require.Equal(t, 4, len(block.Transactions)) - tx := block.Transactions[2] - rpc := fmt.Sprintf(`{"jsonrpc": "2.0", "id": 1, "method": "gettxout", "params": [%s, %d]}"`, - `"`+tx.Hash().StringLE()+`"`, 0) - body := doRPCCall(rpc, httpSrv.URL, t) - res := checkErrGetResult(t, body, false) - - var txOut result.TransactionOutput - err := json.Unmarshal(res, &txOut) - require.NoErrorf(t, err, "could not parse response: %s", res) - assert.Equal(t, 0, txOut.N) - assert.Equal(t, "0x787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a", txOut.Asset) - assert.Equal(t, util.Fixed8FromInt64(100000000), txOut.Value) - assert.Equal(t, testchain.MultisigAddress(), txOut.Address) - }) - t.Run("getrawmempool", func(t *testing.T) { mp := chain.GetMemPool() // `expected` stores hashes of previously added txs From 657bb7575e8d1ddd7a488ead081c04ae71274f55 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 1 Jun 2020 23:27:03 +0300 Subject: [PATCH 18/42] rpc: change getunclaimed to getunclaimedgas getunclaimed doesn't exist on Neo 3 and getunclaimedgas works for NEP5 GAS. --- docs/rpc.md | 8 +++- pkg/core/blockchain.go | 11 ++++++ pkg/core/blockchainer/blockchainer.go | 1 + pkg/network/helper_test.go | 4 ++ pkg/rpc/client/doc.go | 3 +- pkg/rpc/client/rpc.go | 17 ++++++--- pkg/rpc/client/rpc_test.go | 20 ++++------ pkg/rpc/response/result/unclaimed.go | 54 --------------------------- pkg/rpc/server/server.go | 20 +++++----- pkg/rpc/server/server_test.go | 13 +++---- 10 files changed, 58 insertions(+), 93 deletions(-) delete mode 100644 pkg/rpc/response/result/unclaimed.go diff --git a/docs/rpc.md b/docs/rpc.md index 3eac4e3e3..dc0f72907 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -51,7 +51,7 @@ which would yield the response: | `getrawtransaction` | | `getstorage` | | `gettransactionheight` | -| `getunclaimed` | +| `getunclaimedgas` | | `getvalidators` | | `getversion` | | `invoke` | @@ -73,6 +73,11 @@ in returning it. Both methods also don't currently support arrays in function parameters. +##### `getunclaimedgas` + +It's possible to call this method for any address with neo-go, unlike with C# +node where it only works for addresses from opened wallet. + ### Unsupported methods Methods listed down below are not going to be supported for various reasons @@ -85,7 +90,6 @@ and we're not accepting issues related to them. | `getbalance` | Use `getaccountstate` instead, see `claimgas` comment also | | `getmetricblocktimestamp` | Not really useful, use other means for node monitoring | | `getnewaddress` | See `claimgas` comment | -| `getunclaimedgas` | Use `getunclaimed` instead, see `claimgas` comment also | | `getwalletheight` | Not applicable to neo-go, see `claimgas` comment | | `importprivkey` | Not applicable to neo-go, see `claimgas` comment | | `listaddress` | Not applicable to neo-go, see `claimgas` comment | diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 035c01dbd..4fecf3a9b 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -930,6 +930,17 @@ func (bc *Blockchain) GetUtilityTokenBalance(acc util.Uint160) util.Fixed8 { return util.Fixed8(bc.GetNEP5Balances(acc).Trackers[bc.contracts.GAS.Hash].Balance) } +// GetGoverningTokenBalance returns governing token (NEO) balance and the height +// of the last balance change for the account. +func (bc *Blockchain) GetGoverningTokenBalance(acc util.Uint160) (util.Fixed8, uint32) { + bs, err := bc.dao.GetNEP5Balances(acc) + if err != nil { + return 0, 0 + } + neo := bs.Trackers[bc.contracts.NEO.Hash] + return util.Fixed8(neo.Balance), neo.LastUpdatedBlock +} + // LastBatch returns last persisted storage batch. func (bc *Blockchain) LastBatch() *storage.MemBatch { return bc.lastBatch diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index dacb0f2fd..344dac5ea 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -25,6 +25,7 @@ type Blockchainer interface { GetBlock(hash util.Uint256) (*block.Block, error) GetContractState(hash util.Uint160) *state.Contract GetEnrollments() ([]state.Validator, error) + GetGoverningTokenBalance(acc util.Uint160) (util.Fixed8, uint32) GetHeaderHash(int) util.Uint256 GetHeader(hash util.Uint256) (*block.Header, error) CurrentHeaderHash() util.Uint256 diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index b09f5e885..b48c4b985 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -138,6 +138,10 @@ func (chain testChain) IsLowPriority(util.Fixed8) bool { panic("TODO") } +func (chain testChain) GetGoverningTokenBalance(acc util.Uint160) (util.Fixed8, uint32) { + panic("TODO") +} + func (chain testChain) GetUtilityTokenBalance(uint160 util.Uint160) util.Fixed8 { panic("TODO") } diff --git a/pkg/rpc/client/doc.go b/pkg/rpc/client/doc.go index 7863752fe..3ac507dc6 100644 --- a/pkg/rpc/client/doc.go +++ b/pkg/rpc/client/doc.go @@ -35,7 +35,7 @@ Supported methods getrawtransaction getstorage gettransactionheight - getunclaimed + getunclaimedgas getvalidators getversion invoke @@ -52,7 +52,6 @@ Unsupported methods getbalance getmetricblocktimestamp getnewaddress - getunclaimedgas getwalletheight importprivkey listaddress diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index bf5a07179..5062d87a6 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -2,6 +2,7 @@ package client import ( "encoding/hex" + "strconv" "github.com/nspcc-dev/neo-go/pkg/core" "github.com/nspcc-dev/neo-go/pkg/core/block" @@ -307,16 +308,20 @@ func (c *Client) GetTransactionHeight(hash util.Uint256) (uint32, error) { return resp, nil } -// GetUnclaimed returns unclaimed GAS amount of the specified address. -func (c *Client) GetUnclaimed(address string) (*result.Unclaimed, error) { +// GetUnclaimedGas returns unclaimed GAS amount for the specified address. +func (c *Client) GetUnclaimedGas(address string) (util.Fixed8, error) { var ( params = request.NewRawParams(address) - resp = &result.Unclaimed{} + resp string ) - if err := c.performRequest("getunclaimed", params, resp); err != nil { - return nil, err + if err := c.performRequest("getunclaimedgas", params, &resp); err != nil { + return 0, err } - return resp, nil + i, err := strconv.ParseInt(resp, 10, 64) + if err != nil { + return 0, err + } + return util.Fixed8(i), nil } // GetValidators returns the current NEO consensus nodes information and voting status. diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index ceb99fbaa..965425e65 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -670,19 +670,15 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ }, }, }, - "getunclaimed": { + "getunclaimedgas": { { name: "positive", invoke: func(c *Client) (interface{}, error) { - return c.GetUnclaimed("AGofsxAUDwt52KjaB664GYsqVAkULYvKNt") + return c.GetUnclaimedGas("AGofsxAUDwt52KjaB664GYsqVAkULYvKNt") }, - serverResponse: `{"jsonrpc":"2.0","id":1,"result":{"available":750.032,"unavailable":2815.408,"unclaimed":3565.44}}`, + serverResponse: `{"jsonrpc":"2.0","id":1,"result":"897299680935"}`, result: func(c *Client) interface{} { - return &result.Unclaimed{ - Available: util.Fixed8FromFloat(750.032), - Unavailable: util.Fixed8FromFloat(2815.408), - Unclaimed: util.Fixed8FromFloat(3565.44), - } + return util.Fixed8(897299680935) }, }, }, @@ -1039,9 +1035,9 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ }, }, { - name: "getunclaimed_invalid_params_error", + name: "getunclaimedgas_invalid_params_error", invoke: func(c *Client) (interface{}, error) { - return c.GetUnclaimed("") + return c.GetUnclaimedGas("") }, }, { @@ -1209,9 +1205,9 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ }, }, { - name: "getunclaimed_unmarshalling_error", + name: "getunclaimedgas_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { - return c.GetUnclaimed("") + return c.GetUnclaimedGas("") }, }, { diff --git a/pkg/rpc/response/result/unclaimed.go b/pkg/rpc/response/result/unclaimed.go deleted file mode 100644 index f8cd8d1a9..000000000 --- a/pkg/rpc/response/result/unclaimed.go +++ /dev/null @@ -1,54 +0,0 @@ -package result - -import ( - "github.com/nspcc-dev/neo-go/pkg/core" - "github.com/nspcc-dev/neo-go/pkg/core/blockchainer" - "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// Unclaimed wrapper is used to represent getunclaimed return result. -type Unclaimed struct { - Available util.Fixed8 `json:"available"` - Unavailable util.Fixed8 `json:"unavailable"` - Unclaimed util.Fixed8 `json:"unclaimed"` -} - -// NewUnclaimed creates a new Unclaimed wrapper using given Blockchainer. -func NewUnclaimed(a *state.Account, chain blockchainer.Blockchainer) (*Unclaimed, error) { - var ( - available util.Fixed8 - unavailable util.Fixed8 - ) - - err := a.Unclaimed.ForEach(func(ucb *state.UnclaimedBalance) error { - gen, sys, err := chain.CalculateClaimable(ucb.Value, ucb.Start, ucb.End) - if err != nil { - return err - } - available += gen + sys - return nil - }) - if err != nil { - return nil, err - } - - blockHeight := chain.BlockHeight() - for _, usb := range a.Balances[core.GoverningTokenID()] { - _, txHeight, err := chain.GetTransaction(usb.Tx) - if err != nil { - return nil, err - } - gen, sys, err := chain.CalculateClaimable(usb.Value, txHeight, blockHeight) - if err != nil { - return nil, err - } - unavailable += gen + sys - } - - return &Unclaimed{ - Available: available, - Unavailable: unavailable, - Unclaimed: available + unavailable, - }, nil -} diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index d1d041e7a..cd554395a 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -96,7 +96,7 @@ var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *respon "getrawtransaction": (*Server).getrawtransaction, "getstorage": (*Server).getStorage, "gettransactionheight": (*Server).getTransactionHeight, - "getunclaimed": (*Server).getUnclaimed, + "getunclaimedgas": (*Server).getUnclaimedGas, "getvalidators": (*Server).getValidators, "getversion": (*Server).getVersion, "invoke": (*Server).invoke, @@ -827,8 +827,8 @@ func (s *Server) getBlockHeader(reqParams request.Params) (interface{}, *respons return hex.EncodeToString(buf.Bytes()), nil } -// getUnclaimed returns unclaimed GAS amount of the specified address. -func (s *Server) getUnclaimed(ps request.Params) (interface{}, *response.Error) { +// getUnclaimedGas returns unclaimed GAS amount of the specified address. +func (s *Server) getUnclaimedGas(ps request.Params) (interface{}, *response.Error) { p, ok := ps.ValueWithType(0, request.StringT) if !ok { return nil, response.ErrInvalidParams @@ -838,15 +838,15 @@ func (s *Server) getUnclaimed(ps request.Params) (interface{}, *response.Error) return nil, response.ErrInvalidParams } - acc := s.chain.GetAccountState(u) - if acc == nil { - return nil, response.NewInternalServerError("unknown account", nil) + neo, neoHeight := s.chain.GetGoverningTokenBalance(u) + if neo == 0 { + return "0", nil } - res, errRes := result.NewUnclaimed(acc, s.chain) - if errRes != nil { - return nil, response.NewInternalServerError("can't create unclaimed response", errRes) + gasG, gasF, err := s.chain.CalculateClaimable(neo, neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. + if err != nil { + return nil, response.NewInternalServerError("calculation error", err) } - return res, nil + return strconv.FormatInt(int64(gasG+gasF), 10), nil // It's not represented as Fixed8 in C#. } // getValidators returns the current NEO consensus nodes information and voting status. diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 16693d412..76d25dfb8 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -507,7 +507,7 @@ var rpcTestCases = map[string][]rpcTestCase{ fail: true, }, }, - "getunclaimed": { + "getunclaimedgas": { { name: "no params", params: "[]", @@ -522,14 +522,13 @@ var rpcTestCases = map[string][]rpcTestCase{ name: "positive", params: `["` + testchain.MultisigAddress() + `"]`, result: func(*executor) interface{} { - return &result.Unclaimed{} + var s string + return &s }, - check: func(t *testing.T, e *executor, uncl interface{}) { - res, ok := uncl.(*result.Unclaimed) + check: func(t *testing.T, e *executor, resp interface{}) { + s, ok := resp.(*string) require.True(t, ok) - assert.Equal(t, res.Available, util.Fixed8FromInt64(8)) - assert.True(t, res.Unavailable > 0) - assert.Equal(t, res.Available+res.Unavailable, res.Unclaimed) + assert.Equal(t, "1772", *s) }, }, }, From c6ae954e4ef8b01df79406c154eafaaa94bce871 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Tue, 2 Jun 2020 00:26:37 +0300 Subject: [PATCH 19/42] rpc: drop getaccountstate method It's not relevant for Neo 3. --- docs/rpc.md | 3 +- pkg/rpc/client/doc.go | 1 - pkg/rpc/client/doc_test.go | 10 ++++- pkg/rpc/client/rpc.go | 12 ------ pkg/rpc/client/rpc_test.go | 38 ------------------ pkg/rpc/response/result/account_state.go | 51 ------------------------ pkg/rpc/server/server.go | 21 ---------- pkg/rpc/server/server_test.go | 34 ---------------- 8 files changed, 9 insertions(+), 161 deletions(-) delete mode 100644 pkg/rpc/response/result/account_state.go diff --git a/docs/rpc.md b/docs/rpc.md index dc0f72907..6d0b2f235 100644 --- a/docs/rpc.md +++ b/docs/rpc.md @@ -34,7 +34,6 @@ which would yield the response: | Method | | ------- | -| `getaccountstate` | | `getapplicationlog` | | `getbestblockhash` | | `getblock` | @@ -87,7 +86,7 @@ and we're not accepting issues related to them. | ------- | ------------| | `claimgas` | Doesn't fit neo-go wallet model, use CLI to do that | | `dumpprivkey` | Shouldn't exist for security reasons, see `claimgas` comment also | -| `getbalance` | Use `getaccountstate` instead, see `claimgas` comment also | +| `getbalance` | To be implemented | | `getmetricblocktimestamp` | Not really useful, use other means for node monitoring | | `getnewaddress` | See `claimgas` comment | | `getwalletheight` | Not applicable to neo-go, see `claimgas` comment | diff --git a/pkg/rpc/client/doc.go b/pkg/rpc/client/doc.go index 3ac507dc6..24c430d4e 100644 --- a/pkg/rpc/client/doc.go +++ b/pkg/rpc/client/doc.go @@ -18,7 +18,6 @@ TODO: Supported methods - getaccountstate getapplicationlog getbestblockhash getblock diff --git a/pkg/rpc/client/doc_test.go b/pkg/rpc/client/doc_test.go index b7f3e5f00..496ca8d4d 100644 --- a/pkg/rpc/client/doc_test.go +++ b/pkg/rpc/client/doc_test.go @@ -5,6 +5,7 @@ import ( "fmt" "os" + "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/rpc/client" ) @@ -23,11 +24,16 @@ func Example() { os.Exit(1) } - resp, err := c.GetAccountState("ATySFJAbLW7QHsZGHScLhxq6EyNBxx3eFP") + addr, err := address.StringToUint160("ATySFJAbLW7QHsZGHScLhxq6EyNBxx3eFP") if err != nil { fmt.Println(err) os.Exit(1) } - fmt.Println(resp.ScriptHash) + resp, err := c.GetNEP5Balances(addr) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + fmt.Println(resp.Address) fmt.Println(resp.Balances) } diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index 5062d87a6..b0d0a5987 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -17,18 +17,6 @@ import ( "github.com/pkg/errors" ) -// GetAccountState returns detailed information about a NEO account. -func (c *Client) GetAccountState(address string) (*result.AccountState, error) { - var ( - params = request.NewRawParams(address) - resp = &result.AccountState{} - ) - if err := c.performRequest("getaccountstate", params, resp); err != nil { - return nil, err - } - return resp, nil -} - // GetApplicationLog returns the contract log based on the specified txid. func (c *Client) GetApplicationLog(hash util.Uint256) (*result.ApplicationLog, error) { var ( diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index 965425e65..a9faf8387 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -146,32 +146,6 @@ func getResultBlock202() *result.Block { // published in official C# JSON-RPC API v2.10.3 reference // (see https://docs.neo.org/docs/en-us/reference/rpc/latest-version/api.html) var rpcClientTestCases = map[string][]rpcClientTestCase{ - "getaccountstate": { - { - name: "positive", - invoke: func(c *Client) (interface{}, error) { - return c.GetAccountState("") - }, - serverResponse: `{"jsonrpc":"2.0","id": 1,"result":{"version":0,"script_hash":"0x1179716da2e9523d153a35fb3ad10c561b1e5b1a","frozen":false,"votes":[],"balances":[{"asset":"0x1a5e0e3eac2abced7de9ee2de0820a5c85e63756fcdfc29b82fead86a7c07c78","value":"94"}]}}`, - result: func(c *Client) interface{} { - scriptHash, err := util.Uint160DecodeStringLE("1179716da2e9523d153a35fb3ad10c561b1e5b1a") - if err != nil { - panic(err) - } - return &result.AccountState{ - Version: 0, - ScriptHash: scriptHash, - IsFrozen: false, - Balances: result.Balances{ - result.Balance{ - Asset: core.GoverningTokenID(), - Value: util.Fixed8FromInt64(94), - }, - }, - } - }, - }, - }, "getapplicationlog": { { name: "positive", @@ -920,12 +894,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ }, }, `{"id":1,"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid Params"}}`: { - { - name: "getaccountstate_invalid_params_error", - invoke: func(c *Client) (i interface{}, err error) { - return c.GetAccountState("") - }, - }, { name: "getapplicationlog_invalid_params_error", invoke: func(c *Client) (interface{}, error) { @@ -1072,12 +1040,6 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ }, }, `{}`: { - { - name: "getaccountstate_unmarshalling_error", - invoke: func(c *Client) (interface{}, error) { - return c.GetAccountState("") - }, - }, { name: "getapplicationlog_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { diff --git a/pkg/rpc/response/result/account_state.go b/pkg/rpc/response/result/account_state.go deleted file mode 100644 index cbff2fff9..000000000 --- a/pkg/rpc/response/result/account_state.go +++ /dev/null @@ -1,51 +0,0 @@ -package result - -import ( - "bytes" - "sort" - - "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// AccountState wrapper used for the representation of -// state.Account on the RPC Server. -type AccountState struct { - Version uint8 `json:"version"` - ScriptHash util.Uint160 `json:"script_hash"` - IsFrozen bool `json:"frozen"` - Balances []Balance `json:"balances"` -} - -// Balances type for sorting balances in rpc response. -type Balances []Balance - -func (b Balances) Len() int { return len(b) } -func (b Balances) Less(i, j int) bool { return bytes.Compare(b[i].Asset[:], b[j].Asset[:]) != -1 } -func (b Balances) Swap(i, j int) { b[i], b[j] = b[j], b[i] } - -// Balance response wrapper. -type Balance struct { - Asset util.Uint256 `json:"asset"` - Value util.Fixed8 `json:"value"` -} - -// NewAccountState creates a new Account wrapper. -func NewAccountState(a *state.Account) AccountState { - balances := make(Balances, 0, len(a.Balances)) - for k, v := range a.GetBalanceValues() { - balances = append(balances, Balance{ - Asset: k, - Value: v, - }) - } - - sort.Sort(balances) - - return AccountState{ - Version: a.Version, - ScriptHash: a.ScriptHash, - IsFrozen: a.IsFrozen, - Balances: balances, - } -} diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index cd554395a..e00369a46 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -79,7 +79,6 @@ const ( ) var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *response.Error){ - "getaccountstate": (*Server).getAccountState, "getapplicationlog": (*Server).getApplicationLog, "getbestblockhash": (*Server).getBestBlockHash, "getblock": (*Server).getBlock, @@ -742,26 +741,6 @@ func (s *Server) getContractState(reqParams request.Params) (interface{}, *respo return results, nil } -// getAccountState returns account state. -func (s *Server) getAccountState(ps request.Params) (interface{}, *response.Error) { - var resultsErr *response.Error - var results interface{} - - param, ok := ps.ValueWithType(0, request.StringT) - if !ok { - return nil, response.ErrInvalidParams - } else if scriptHash, err := param.GetUint160FromAddress(); err != nil { - return nil, response.ErrInvalidParams - } else { - as := s.chain.GetAccountState(scriptHash) - if as == nil { - as = state.NewAccount(scriptHash) - } - results = result.NewAccountState(as) - } - return results, resultsErr -} - // getBlockSysFee returns the system fees of the block, based on the specified index. func (s *Server) getBlockSysFee(reqParams request.Params) (interface{}, *response.Error) { param, ok := reqParams.ValueWithType(0, request.NumberT) diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 76d25dfb8..28964f91d 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -88,40 +88,6 @@ var rpcTestCases = map[string][]rpcTestCase{ fail: true, }, }, - "getaccountstate": { - { - name: "positive", - params: `["` + testchain.MultisigAddress() + `"]`, - result: func(e *executor) interface{} { return &result.AccountState{} }, - check: func(t *testing.T, e *executor, acc interface{}) { - res, ok := acc.(*result.AccountState) - require.True(t, ok) - assert.Equal(t, 1, len(res.Balances)) - assert.Equal(t, false, res.IsFrozen) - }, - }, - { - name: "positive null", - params: `["AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"]`, - result: func(e *executor) interface{} { return &result.AccountState{} }, - check: func(t *testing.T, e *executor, acc interface{}) { - res, ok := acc.(*result.AccountState) - require.True(t, ok) - assert.Equal(t, 0, len(res.Balances)) - assert.Equal(t, false, res.IsFrozen) - }, - }, - { - name: "no params", - params: `[]`, - fail: true, - }, - { - name: "invalid address", - params: `["notabase58"]`, - fail: true, - }, - }, "getcontractstate": { { name: "positive", From fed95e0069e1da3e841f70a2f3c4b162f4339f13 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 3 Jun 2020 18:56:20 +0300 Subject: [PATCH 20/42] smartcontract: (un)marshal AnyType value as null Neo 3 can emit Null in its transfer notifications in `from` or `to` fields when minting/burning tokens (unlike Neo 2 that emitted util.Uint256{} for this case), then it gets converted to Parameter as AnyType and we have to JSONize it somehow for proper RPC functioning. --- pkg/smartcontract/parameter.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/smartcontract/parameter.go b/pkg/smartcontract/parameter.go index 5dad09926..54eb394a5 100644 --- a/pkg/smartcontract/parameter.go +++ b/pkg/smartcontract/parameter.go @@ -85,7 +85,7 @@ func (p *Parameter) MarshalJSON() ([]byte, error) { case MapType: ppair := p.Value.([]ParameterPair) resultRawValue, resultErr = json.Marshal(ppair) - case InteropInterfaceType: + case InteropInterfaceType, AnyType: resultRawValue = []byte("null") default: resultErr = errors.Errorf("Marshaller for type %s not implemented", p.Type) @@ -168,7 +168,7 @@ func (p *Parameter) UnmarshalJSON(data []byte) (err error) { return } p.Value = h - case InteropInterfaceType: + case InteropInterfaceType, AnyType: // stub, ignore value, it can only be null p.Value = nil default: From a9955719da79ae1154adc019cf9c9c9d1eb0d479 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 15:41:54 +0300 Subject: [PATCH 21/42] native: make mint/burn for 0 no-ops Prevent emitting useless transfer events and doing useless gets/puts. --- pkg/core/native/native_nep5.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/core/native/native_nep5.go b/pkg/core/native/native_nep5.go index e969805cb..eb8c0ef23 100644 --- a/pkg/core/native/native_nep5.go +++ b/pkg/core/native/native_nep5.go @@ -208,11 +208,17 @@ func (c *nep5TokenNative) balanceOf(ic *interop.Context, args []vm.StackItem) vm } func (c *nep5TokenNative) mint(ic *interop.Context, h util.Uint160, amount *big.Int) { + if amount.Sign() == 0 { + return + } c.addTokens(ic, h, amount) c.emitTransfer(ic, nil, &h, amount) } func (c *nep5TokenNative) burn(ic *interop.Context, h util.Uint160, amount *big.Int) { + if amount.Sign() == 0 { + return + } amount = new(big.Int).Neg(amount) c.addTokens(ic, h, amount) c.emitTransfer(ic, &h, nil, amount) From 9f5fd2116077e27616ed35510c22ce2e69904ecf Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 22:21:12 +0300 Subject: [PATCH 22/42] core: drop UXTO NEO and GAS transactions from the genesis block They're no longer required. Adjust test chain for that, now it only has invocations, transfers NEO/GAS and pays the fees with NEP5 GAS. --- pkg/core/helper_test.go | 167 +++++++------------------ pkg/core/util.go | 30 ----- pkg/core/util_test.go | 2 +- pkg/rpc/server/server_test.go | 124 ++++++++++-------- pkg/rpc/server/testdata/testblocks.acc | Bin 114026 -> 6540 bytes 5 files changed, 117 insertions(+), 206 deletions(-) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index f6055d670..c5cd95075 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -165,20 +165,21 @@ func TestCreateBasicChain(t *testing.T) { return testNonce } - var neoAmount = util.Fixed8FromInt64(99999000) - var neoRemainder = util.Fixed8FromInt64(100000000) - neoAmount + const neoAmount = 99999000 bc := newTestChain(t) defer bc.Close() gasHash := bc.contracts.GAS.Hash + neoHash := bc.contracts.NEO.Hash t.Logf("native GAS hash: %v", gasHash) + t.Logf("native NEO hash: %v", neoHash) priv0 := testchain.PrivateKeyByID(0) priv0ScriptHash := priv0.GetScriptHash() require.Equal(t, util.Fixed8FromInt64(0), bc.GetUtilityTokenBalance(priv0ScriptHash)) - // Move almost all NEO and some nep5 GAS to one simple account. - txMoveNeo := newNEP5Transfer(gasHash, neoOwner, priv0ScriptHash, int64(util.Fixed8FromInt64(1000))) + // Move some NEO to one simple account. + txMoveNeo := newNEP5Transfer(neoHash, neoOwner, priv0ScriptHash, neoAmount) txMoveNeo.ValidUntilBlock = validUntilBlock txMoveNeo.Nonce = getNextNonce() txMoveNeo.Sender = neoOwner @@ -188,32 +189,23 @@ func TestCreateBasicChain(t *testing.T) { AllowedContracts: nil, AllowedGroups: nil, }} - - // use output of issue tx from genesis block as an input - genesisBlock, err := bc.GetBlock(bc.GetHeaderHash(0)) - require.NoError(t, err) - require.Equal(t, 4, len(genesisBlock.Transactions)) - h := genesisBlock.Transactions[2].Hash() - txMoveNeo.AddInput(&transaction.Input{ - PrevHash: h, - PrevIndex: 0, - }) - txMoveNeo.AddOutput(&transaction.Output{ - AssetID: GoverningTokenID(), - Amount: neoAmount, - ScriptHash: priv0ScriptHash, - Position: 0, - }) - txMoveNeo.AddOutput(&transaction.Output{ - AssetID: GoverningTokenID(), - Amount: neoRemainder, - ScriptHash: neoOwner, - Position: 1, - }) require.NoError(t, signTx(bc, txMoveNeo)) - b := bc.newBlock(txMoveNeo) + // Move some GAS to one simple account. + txMoveGas := newNEP5Transfer(gasHash, neoOwner, priv0ScriptHash, int64(util.Fixed8FromInt64(1000))) + txMoveGas.ValidUntilBlock = validUntilBlock + txMoveGas.Nonce = getNextNonce() + txMoveGas.Sender = neoOwner + txMoveGas.Cosigners = []transaction.Cosigner{{ + Account: neoOwner, + Scopes: transaction.CalledByEntry, + AllowedContracts: nil, + AllowedGroups: nil, + }} + require.NoError(t, signTx(bc, txMoveGas)) + b := bc.newBlock(txMoveNeo, txMoveGas) require.NoError(t, bc.AddBlock(b)) t.Logf("txMoveNeo: %s", txMoveNeo.Hash().StringLE()) + t.Logf("txMoveGas: %s", txMoveGas.Hash().StringLE()) require.Equal(t, util.Fixed8FromInt64(1000), bc.GetUtilityTokenBalance(priv0ScriptHash)) // info for getblockheader rpc tests @@ -222,60 +214,9 @@ func TestCreateBasicChain(t *testing.T) { b.Header().EncodeBinary(buf.BinWriter) t.Logf("header: %s", hex.EncodeToString(buf.Bytes())) - // Generate some blocks to be able to claim GAS for them. - _, err = bc.genBlocks(numOfEmptyBlocks) - require.NoError(t, err) - acc0, err := wallet.NewAccountFromWIF(priv0.WIF()) require.NoError(t, err) - // Make a NEO roundtrip (send to myself) and claim GAS. - txNeoRound := transaction.NewContractTX() - txNeoRound.Nonce = getNextNonce() - txNeoRound.Sender = priv0ScriptHash - txNeoRound.ValidUntilBlock = validUntilBlock - txNeoRound.AddInput(&transaction.Input{ - PrevHash: txMoveNeo.Hash(), - PrevIndex: 0, - }) - txNeoRound.AddOutput(&transaction.Output{ - AssetID: GoverningTokenID(), - Amount: neoAmount, - ScriptHash: priv0.GetScriptHash(), - Position: 0, - }) - txNeoRound.Data = new(transaction.ContractTX) - require.NoError(t, addNetworkFee(bc, txNeoRound, acc0)) - require.NoError(t, acc0.SignTx(txNeoRound)) - b = bc.newBlock(txNeoRound) - require.NoError(t, bc.AddBlock(b)) - t.Logf("txNeoRound: %s", txNeoRound.Hash().StringLE()) - - claim := new(transaction.ClaimTX) - claim.Claims = append(claim.Claims, transaction.Input{ - PrevHash: txMoveNeo.Hash(), - PrevIndex: 0, - }) - txClaim := transaction.NewClaimTX(claim) - txClaim.Nonce = getNextNonce() - txClaim.ValidUntilBlock = validUntilBlock - txClaim.Sender = priv0ScriptHash - txClaim.Data = claim - neoGas, sysGas, err := bc.CalculateClaimable(neoAmount, 1, bc.BlockHeight()) - require.NoError(t, err) - gasOwned := neoGas + sysGas - txClaim.AddOutput(&transaction.Output{ - AssetID: UtilityTokenID(), - Amount: gasOwned, - ScriptHash: priv0.GetScriptHash(), - Position: 0, - }) - require.NoError(t, addNetworkFee(bc, txClaim, acc0)) - require.NoError(t, acc0.SignTx(txClaim)) - b = bc.newBlock(txClaim) - require.NoError(t, bc.AddBlock(b)) - t.Logf("txClaim: %s", txClaim.Hash().StringLE()) - // Push some contract into the chain. avm, err := ioutil.ReadFile(prefix + "test_contract.avm") require.NoError(t, err) @@ -303,17 +244,6 @@ func TestCreateBasicChain(t *testing.T) { txDeploy.Nonce = getNextNonce() txDeploy.ValidUntilBlock = validUntilBlock txDeploy.Sender = priv0ScriptHash - txDeploy.AddInput(&transaction.Input{ - PrevHash: txClaim.Hash(), - PrevIndex: 0, - }) - txDeploy.AddOutput(&transaction.Output{ - AssetID: UtilityTokenID(), - Amount: gasOwned - invFee, - ScriptHash: priv0.GetScriptHash(), - Position: 0, - }) - gasOwned -= invFee require.NoError(t, addNetworkFee(bc, txDeploy, acc0)) require.NoError(t, acc0.SignTx(txDeploy)) b = bc.newBlock(txDeploy) @@ -335,26 +265,18 @@ func TestCreateBasicChain(t *testing.T) { t.Logf("txInv: %s", txInv.Hash().StringLE()) priv1 := testchain.PrivateKeyByID(1) - txNeo0to1 := transaction.NewContractTX() + txNeo0to1 := newNEP5Transfer(neoHash, priv0ScriptHash, priv1.GetScriptHash(), 1000) txNeo0to1.Nonce = getNextNonce() txNeo0to1.ValidUntilBlock = validUntilBlock txNeo0to1.Sender = priv0ScriptHash - txNeo0to1.Data = new(transaction.ContractTX) - txNeo0to1.AddInput(&transaction.Input{ - PrevHash: txNeoRound.Hash(), - PrevIndex: 0, - }) - txNeo0to1.AddOutput(&transaction.Output{ - AssetID: GoverningTokenID(), - Amount: util.Fixed8FromInt64(1000), - ScriptHash: priv1.GetScriptHash(), - }) - txNeo0to1.AddOutput(&transaction.Output{ - AssetID: GoverningTokenID(), - Amount: neoAmount - util.Fixed8FromInt64(1000), - ScriptHash: priv0.GetScriptHash(), - }) - + txNeo0to1.Cosigners = []transaction.Cosigner{ + { + Account: priv0ScriptHash, + Scopes: transaction.CalledByEntry, + AllowedContracts: nil, + AllowedGroups: nil, + }, + } require.NoError(t, addNetworkFee(bc, txNeo0to1, acc0)) require.NoError(t, acc0.SignTx(txNeo0to1)) b = bc.newBlock(txNeo0to1) @@ -429,26 +351,21 @@ func TestCreateBasicChain(t *testing.T) { } } - // Make a NEO roundtrip (send to myself) and claim GAS. - txNeoRound = transaction.NewContractTX() - txNeoRound.Nonce = getNextNonce() - txNeoRound.ValidUntilBlock = validUntilBlock - txNeoRound.Sender = priv0ScriptHash - txNeoRound.AddInput(&transaction.Input{ - PrevHash: txNeo0to1.Hash(), - PrevIndex: 1, - }) - txNeoRound.AddOutput(&transaction.Output{ - AssetID: GoverningTokenID(), - Amount: neoAmount - util.Fixed8FromInt64(1000), - ScriptHash: priv0.GetScriptHash(), - Position: 0, - }) - txNeoRound.Data = new(transaction.ContractTX) - require.NoError(t, addNetworkFee(bc, txNeoRound, acc0)) - require.NoError(t, acc0.SignTx(txNeoRound)) + // Prepare some transaction for future submission. + txSendRaw := newNEP5Transfer(neoHash, priv0ScriptHash, priv1.GetScriptHash(), int64(util.Fixed8FromInt64(1000))) + txSendRaw.ValidUntilBlock = validUntilBlock + txSendRaw.Nonce = getNextNonce() + txSendRaw.Sender = priv0ScriptHash + txSendRaw.Cosigners = []transaction.Cosigner{{ + Account: priv0ScriptHash, + Scopes: transaction.CalledByEntry, + AllowedContracts: nil, + AllowedGroups: nil, + }} + require.NoError(t, addNetworkFee(bc, txSendRaw, acc0)) + require.NoError(t, acc0.SignTx(txSendRaw)) bw := io.NewBufBinWriter() - txNeoRound.EncodeBinary(bw.BinWriter) + txSendRaw.EncodeBinary(bw.BinWriter) t.Logf("sendrawtransaction: %s", hex.EncodeToString(bw.Bytes())) } diff --git a/pkg/core/util.go b/pkg/core/util.go index 643e101e2..dc518197e 100644 --- a/pkg/core/util.go +++ b/pkg/core/util.go @@ -55,39 +55,9 @@ func createGenesisBlock(cfg config.ProtocolConfiguration) (*block.Block, error) }, } - rawScript, err := smartcontract.CreateMultiSigRedeemScript( - len(cfg.StandbyValidators)/2+1, - validators, - ) - if err != nil { - return nil, err - } - scriptOut := hash.Hash160(rawScript) - - issueTx := transaction.NewIssueTX() - // TODO NEO3.0: nonce should be constant to avoid variability of genesis block - issueTx.Nonce = 0 - issueTx.Sender = hash.Hash160([]byte{byte(opcode.OLDPUSH1)}) - issueTx.Outputs = []transaction.Output{ - { - AssetID: governingTokenTX.Hash(), - Amount: governingTokenTX.Data.(*transaction.RegisterTX).Amount, - ScriptHash: scriptOut, - }, - } - issueTx.Scripts = []transaction.Witness{ - { - InvocationScript: []byte{}, - VerificationScript: []byte{byte(opcode.OLDPUSH1)}, - }, - } - b := &block.Block{ Base: base, Transactions: []*transaction.Transaction{ - &governingTokenTX, - &utilityTokenTX, - issueTx, deployNativeContracts(), }, ConsensusData: block.ConsensusData{ diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index c5ce2d6e8..d6f9f02a5 100644 --- a/pkg/core/util_test.go +++ b/pkg/core/util_test.go @@ -20,7 +20,7 @@ func TestGenesisBlockMainNet(t *testing.T) { // have been changed. Consequently, hash of the genesis block has been changed. // Update expected genesis block hash for better times. // Old hash is "d42561e3d30e15be6400b6df2f328e02d2bf6354c41dce433bc57687c82144bf" - expect := "472edea0e91369b51903b364e7403492a9041536fbfe145a9e1aff0ad5f18d78" + expect := "d2e6d56c734f24c294a74785023af23f20347d97ef92e7bff1b337e37acbf2dd" assert.Equal(t, expect, block.Hash().StringLE()) } diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 28964f91d..28820a50a 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -18,7 +18,6 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/block" "github.com/nspcc-dev/neo-go/pkg/core/blockchainer" "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/internal/testchain" "github.com/nspcc-dev/neo-go/pkg/io" @@ -54,12 +53,12 @@ var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["1e71f60519a68c73cc1ca5382bab12160c4967c86e28e8238b78ea54dcbdc716"]`, + params: `["70c9d7804dd19bb8d60740824d45055d117a4c51559de1b51aed0a6a127b353c"]`, result: func(e *executor) interface{} { return &result.ApplicationLog{} }, check: func(t *testing.T, e *executor, acc interface{}) { res, ok := acc.(*result.ApplicationLog) require.True(t, ok) - expectedTxHash, err := util.Uint256DecodeStringLE("1e71f60519a68c73cc1ca5382bab12160c4967c86e28e8238b78ea54dcbdc716") + expectedTxHash, err := util.Uint256DecodeStringLE("70c9d7804dd19bb8d60740824d45055d117a4c51559de1b51aed0a6a127b353c") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) @@ -139,11 +138,17 @@ var rpcTestCases = map[string][]rpcTestCase{ rubles, err := util.Uint160DecodeStringLE(testContractHash) require.NoError(t, err) expected := result.NEP5Balances{ - Balances: []result.NEP5Balance{{ - Asset: rubles, - Amount: "8.77", - LastUpdated: 208, - }, + Balances: []result.NEP5Balance{ + { + Asset: rubles, + Amount: "8.77", + LastUpdated: 6, + }, + { + Asset: e.chain.GoverningTokenHash(), + Amount: "99998000", + LastUpdated: 4, + }, { Asset: e.chain.UtilityTokenHash(), Amount: "1000", @@ -176,47 +181,71 @@ var rpcTestCases = map[string][]rpcTestCase{ require.True(t, ok) rublesHash, err := util.Uint160DecodeStringLE(testContractHash) require.NoError(t, err) - blockSendRubles, err := e.chain.GetBlock(e.chain.GetHeaderHash(208)) + blockSendRubles, err := e.chain.GetBlock(e.chain.GetHeaderHash(6)) require.NoError(t, err) require.Equal(t, 1, len(blockSendRubles.Transactions)) txSendRublesHash := blockSendRubles.Transactions[0].Hash() - blockRecieveRubles, err := e.chain.GetBlock(e.chain.GetHeaderHash(207)) + blockReceiveRubles, err := e.chain.GetBlock(e.chain.GetHeaderHash(5)) require.NoError(t, err) - require.Equal(t, 2, len(blockRecieveRubles.Transactions)) - txRecieveRublesHash := blockRecieveRubles.Transactions[1].Hash() - blockRecieveGAS, err := e.chain.GetBlock(e.chain.GetHeaderHash(1)) + require.Equal(t, 2, len(blockReceiveRubles.Transactions)) + txReceiveRublesHash := blockReceiveRubles.Transactions[1].Hash() + blockReceiveGAS, err := e.chain.GetBlock(e.chain.GetHeaderHash(1)) require.NoError(t, err) - require.Equal(t, 1, len(blockRecieveGAS.Transactions)) - txRecieveGASHash := blockRecieveGAS.Transactions[0].Hash() + require.Equal(t, 2, len(blockReceiveGAS.Transactions)) + txReceiveNEOHash := blockReceiveGAS.Transactions[0].Hash() + txReceiveGASHash := blockReceiveGAS.Transactions[1].Hash() + blockSendNEO, err := e.chain.GetBlock(e.chain.GetHeaderHash(4)) require.NoError(t, err) + require.Equal(t, 1, len(blockSendNEO.Transactions)) + txSendNEOHash := blockSendNEO.Transactions[0].Hash() expected := result.NEP5Transfers{ - Sent: []result.NEP5Transfer{{ - Timestamp: blockSendRubles.Timestamp, - Asset: rublesHash, - Address: testchain.PrivateKeyByID(1).Address(), - Amount: "1.23", - Index: 208, - NotifyIndex: 0, - TxHash: txSendRublesHash, - }}, + Sent: []result.NEP5Transfer{ + { + Timestamp: blockSendRubles.Timestamp, + Asset: rublesHash, + Address: testchain.PrivateKeyByID(1).Address(), + Amount: "1.23", + Index: 6, + NotifyIndex: 0, + TxHash: txSendRublesHash, + }, + { + Timestamp: blockSendNEO.Timestamp, + Asset: e.chain.GoverningTokenHash(), + Address: testchain.PrivateKeyByID(1).Address(), + Amount: "1000", + Index: 4, + NotifyIndex: 0, + TxHash: txSendNEOHash, + }, + }, Received: []result.NEP5Transfer{ { - Timestamp: blockRecieveRubles.Timestamp, + Timestamp: blockReceiveRubles.Timestamp, Asset: rublesHash, Address: address.Uint160ToString(rublesHash), Amount: "10", - Index: 207, + Index: 5, NotifyIndex: 0, - TxHash: txRecieveRublesHash, + TxHash: txReceiveRublesHash, }, { - Timestamp: blockRecieveGAS.Timestamp, + Timestamp: blockReceiveGAS.Timestamp, Asset: e.chain.UtilityTokenHash(), Address: testchain.MultisigAddress(), Amount: "1000", Index: 1, NotifyIndex: 0, - TxHash: txRecieveGASHash, + TxHash: txReceiveGASHash, + }, + { + Timestamp: blockReceiveGAS.Timestamp, + Asset: e.chain.GoverningTokenHash(), + Address: testchain.MultisigAddress(), + Amount: "99999000", + Index: 1, + NotifyIndex: 0, + TxHash: txReceiveNEOHash, }, }, Address: testchain.PrivateKeyByID(0).Address(), @@ -292,10 +321,9 @@ var rpcTestCases = map[string][]rpcTestCase{ assert.Equal(t, block.Hash(), res.Hash()) for i, tx := range res.Transactions { - require.Equal(t, transaction.ContractType, tx.Type) - actualTx := block.Transactions[i] require.True(t, ok) + require.Equal(t, actualTx.Type, tx.Type) require.Equal(t, actualTx.Nonce, tx.Nonce) require.Equal(t, block.Transactions[i].Hash(), tx.Hash()) } @@ -451,11 +479,16 @@ var rpcTestCases = map[string][]rpcTestCase{ "gettransactionheight": { { name: "positive", - params: `["be463055a8447567434037aad40ad58764cb7eef4aee64308f74ce6df5a98a8a"]`, + params: `["70c9d7804dd19bb8d60740824d45055d117a4c51559de1b51aed0a6a127b353c"]`, result: func(e *executor) interface{} { - h := 1 + h := 0 return &h }, + check: func(t *testing.T, e *executor, resp interface{}) { + h, ok := resp.(*int) + require.True(t, ok) + assert.Equal(t, 2, *h) + }, }, { name: "no params", @@ -494,7 +527,8 @@ var rpcTestCases = map[string][]rpcTestCase{ check: func(t *testing.T, e *executor, resp interface{}) { s, ok := resp.(*string) require.True(t, ok) - assert.Equal(t, "1772", *s) + // Incorrect, to be fixed later. + assert.Equal(t, "0", *s) }, }, }, @@ -639,7 +673,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "sendrawtransaction": { { name: "positive", - params: `["80000b000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000a267050000000000b0040000000001e2b5b6f72dc08d3b0e498c6466928031333f0b242cf158a547b8c4a1681f8f2d010001787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a0030d3dec3862300316e851039019d39dfc2c37d6c3fee19fd58098701420c406a41c10280ff445c36fb16fe94fa197c9ab9678d099c7c1af5d4b9269ac19bbba09e20f02f53582bc340b4ea77539c28bb2cc03902e77d5d37febabe902aac98290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, + params: `["d1010a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000aab9050000000000b00400005d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001316e851039019d39dfc2c37d6c3fee19fd58098701000001420c40fadd2f9ddbe9484ef3577f131b0dec21b46a0d1c2fedd498ec258e378683d35d7159fd21120d832c1bff891c36bd765b50546ac762db4f4735f2df23ba2ec84a290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, result: func(e *executor) interface{} { v := true return &v @@ -647,7 +681,7 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { name: "negative", - params: `["0274d792072617720636f6e7472616374207472616e73616374696f6e206465736372697074696f6e01949354ea0a8b57dfee1e257a1aedd1e0eea2e5837de145e8da9c0f101bfccc8e0100029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e11100000000ea610aa6db39bd8c8556c9569d94b5e5a5d0ad199b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5004f2418010000001cc9c05cefffe6cdd7b182816a9152ec218d2ec0014140dbd3cddac5cb2bd9bf6d93701f1a6f1c9dbe2d1b480c54628bbb2a4d536158c747a6af82698edf9f8af1cac3850bcb772bd9c8e4ac38f80704751cc4e0bd0e67232103cbb45da6072c14761c9da545749d9cfd863f860c351066d16df480602a2024c6ac"]`, + params: `["d1010a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000aab9050000000000b00400005d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001316e851039019d39dfc2c37d6c3fee19fd58098701000001420c40fadd2f9ddbe9484ef3577f131b0dec21b46a0d1c2fedd498ec258e378683d35d7159fd21120d832c1bff891c36bd765b50546ac762db4f4735f2df23ba2ec84a290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad5"]`, fail: true, }, { @@ -811,7 +845,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] var res string err := json.Unmarshal(result, &res) require.NoErrorf(t, err, "could not parse response: %s", result) - assert.Equal(t, "400000000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b000000000000000000000000000000000000000000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b0000000000", res) + assert.Equal(t, "d10100000000ca61e52e881d41374e640f819cd118cc153b21a700000000000000000000000000000000000000000541123e7fe80000000001000111", res) }) t.Run("getrawtransaction 2 arguments", func(t *testing.T) { @@ -823,7 +857,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] var res string err := json.Unmarshal(result, &res) require.NoErrorf(t, err, "could not parse response: %s", result) - assert.Equal(t, "400000000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b000000000000000000000000000000000000000000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b0000000000", res) + assert.Equal(t, "d10100000000ca61e52e881d41374e640f819cd118cc153b21a700000000000000000000000000000000000000000541123e7fe80000000001000111", res) }) t.Run("getrawtransaction 2 arguments, verbose", func(t *testing.T) { @@ -835,19 +869,9 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] actual := result.TransactionOutputRaw{} err := json.Unmarshal(txOut, &actual) require.NoErrorf(t, err, "could not parse response: %s", txOut) - admin, err := util.Uint160DecodeStringBE("da1745e9b549bd0bfa1a569971c77eba30cd5a4b") - require.NoError(t, err) - assert.Equal(t, transaction.RegisterType, actual.Transaction.Type) - assert.Equal(t, &transaction.RegisterTX{ - AssetType: 0, - Name: `[{"lang":"zh-CN","name":"小蚁股"},{"lang":"en","name":"AntShare"}]`, - Amount: util.Fixed8FromInt64(100000000), - Precision: 0, - Owner: keys.PublicKey{}, - Admin: admin, - }, actual.Transaction.Data.(*transaction.RegisterTX)) - assert.Equal(t, 210, actual.Confirmations) + assert.Equal(t, block.Transactions[0], actual.Transaction) + assert.Equal(t, 8, actual.Confirmations) assert.Equal(t, TXHash, actual.Transaction.Hash()) }) diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index 094f873fea6ef1e6611cbc8023b1e14815a71a44..eaba989ac469b157d5dd7f1f02e58a7e6c4df32f 100644 GIT binary patch delta 3297 zcmZveRX~*M7KRyyl%X921&NW6+LY4pOCvS3gp`OffRxfW0+KS+03#(OAfX_e?rsJN z$w6x9?ojZ6d!KW4zKeCaE}mz--&$*DB$1*zBm@Kmn5%O6cz!$-BM}SYlFJW&&+W~3 z-d1!}F1mbIt5!{-if#2Hg{e{m(Na7(k79s8Fjkp`xx9S~kJsnBCW4<9vtGij2Cif^e*DGk@^Qy8WZi^;QqF zxcgtnNi420aW)zkYld=hLjW(+-JTl2o}8lYXnkxBhbLg4Q&T8!RrZr5iK^9(RFyhwD%q6mkOcltR5Gg+zMoxZ& z0O3Xbw+~A`h8GQ6bx-qIL)Rui;TNzLE1 z-ND&jZc+c#nfg`*ycPoZqgHM=u7zgS?%VxV73`bLUEyU48xMjp?j1QIhn84l+ddf$ zc?LquMvTF3s81hhLJM3M#eoX&pnt^iVD@pv6;kjZ2#gM(xIys;=VeLsp+w6NzWyJq zfs&IZRuKaGlM}8!3#kMN{1$$QXLqk%h^N82WhSXijE4AkG`xNmAL!>x#{U$S5 z_&z=R0~)_)p-NSJmm+4A=kc%L5I`Y^=xixgC*-Se zgdBHNWM)*{6!N3Uj=pW6c0M8@JefjsoL?DFv z_T!Fcz~ADCjmOXVMF2%XF~Eh?UrBy@+~TSe;U#(&BzuJvVPfqtb-W9=;!b;_Vzszz z{3qLZi{QCx4x;_3(-&&ToVK+}>L~U>rw_?&3hIoT%TZMrX7eObN)nabMSpd{Szh=KB&tpP z*0)DVd_4~QhK`mb1_vDEMl5()KIcMi@-eCtN|Q##Qkxc8S;C(GXZ!OGbeK?lA1CXy`6_;<-2 z%)q}EuL8t^>@J>c>`ZUDdr?ruP`N`lWxiR5Pf+Wn?9hXPz+(fltcGzs;xktbKpA3JR&T zx#cd17m4R5LSODL)Hl91B=V}{w+HS9CFA5al_in$r_>NYbKKK#LN5w+ihmNqpd}l% znKVN8fdSw@KUz}r#W`Y!--mw22PNEyxv4NOnanHB*~I1TX14KiA_)Q4!lYb|QnTew zskz)UD=IzD7jKmx;*tZ;KB9cnO+ zjZFBsS&DYijQ775F{DKxCX7WXNDp`$-tiafB-_2M&{vMm*PDr-24VC7U&op2<+qvu!es|QZ((D@A`G&;((UIqWoar)y{|O)XDW;C$T(CRUHF`QT5o3P!L=NW+r^2*720m@fSYqF2OHkl`96 zm8dEU7Abp6FR=nIw9gr8`L*#gyNbA#w*Ucg^F{?g8f2?ZE z{%h6S^&-O7P3F^-8d@%`N3^B1*b>W;;p;3Ct)WkyoDdB(8$E_K(EG2Az0~Sx9(p8% z-7b3n6J|>DdPOcBL%FB0J&yLJfFZs7UZg#fDcTe!?0uG3(iaUsfBsps1V3U_QI$he zvlfy%l93Vq_ojyc?3}ohAlL03B63N)Z#B(&i_*cuA6p3l>}_taXe$v>#F)`anJ5fR z>;`P-Xv1+-rB9k(j@r>f&!O_RrS!cY%F(@!htjwJ_ zmthbTml_FCbl%(8&;Cy8TIc(cR9P~*I<`Pd;nt`qowqg4C=zAQC$IR3iow89@%$p! zW8#mq%bS7hs%Hj3$3sCRq?x(P5{HD`atUd>%PeWbM7M4a(E!-s-1|UX>S$f2b3=9?a<1yEjt$3#>&A&S7oPK zbF3u!+QWnfJ%EqR^kKW`t5CIh+%HqK@$GJzTI%QxT?c{rx)kMU#Y^>3lrW^@sjf23 z(>7u4`<1$3!xrWGO%H;SOf{8UC;Vv|IrCbz%S^0D`c}IW_d(*(=IR^14xW+iQ0d3QP4J^3!~tEKhk@d( aQBIA;-(!!`!`k!Xa`l}fl{~%vNdFJ&xfY55 literal 114026 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 GJpLc#CcAC` From 1bc6d29c0db8a17b9163761e8d1575fdd38be0b1 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 22:25:56 +0300 Subject: [PATCH 23/42] core: fix potential NPE in GetUtilityTokenBalance --- pkg/core/blockchain.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 4fecf3a9b..224e335af 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -927,7 +927,11 @@ func (bc *Blockchain) GetNEP5Balances(acc util.Uint160) *state.NEP5Balances { // GetUtilityTokenBalance returns utility token (GAS) balance for the acc. func (bc *Blockchain) GetUtilityTokenBalance(acc util.Uint160) util.Fixed8 { - return util.Fixed8(bc.GetNEP5Balances(acc).Trackers[bc.contracts.GAS.Hash].Balance) + bs, err := bc.dao.GetNEP5Balances(acc) + if err != nil { + return 0 + } + return util.Fixed8(bs.Trackers[bc.contracts.GAS.Hash].Balance) } // GetGoverningTokenBalance returns governing token (NEO) balance and the height From 50ed4c59671ed5bbd9364806a5a0866a0a33f75b Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 22:33:37 +0300 Subject: [PATCH 24/42] core: don't return an error from CalculateClaimable As it never returns one. --- pkg/core/blockchain.go | 9 +++------ pkg/core/blockchain_test.go | 12 ++++-------- pkg/core/blockchainer/blockchainer.go | 2 +- pkg/core/native/native_neo.go | 10 ++-------- pkg/network/helper_test.go | 2 +- pkg/rpc/server/server.go | 7 ++----- 6 files changed, 13 insertions(+), 29 deletions(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 224e335af..6d40dee1f 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -1238,7 +1238,7 @@ func (bc *Blockchain) UnsubscribeFromExecutions(ch chan<- *state.AppExecResult) // CalculateClaimable calculates the amount of GAS which can be claimed for a transaction with value. // First return value is GAS generated between startHeight and endHeight. // Second return value is GAS returned from accumulated SystemFees between startHeight and endHeight. -func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) (util.Fixed8, util.Fixed8, error) { +func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) (util.Fixed8, util.Fixed8) { var amount util.Fixed8 di := uint32(bc.decrementInterval) @@ -1274,7 +1274,7 @@ func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeig sysFeeTotal := util.Fixed8(feeEnd - feeStart) ratio := value / 100000000 - return amount * ratio, sysFeeTotal * ratio, nil + return amount * ratio, sysFeeTotal * ratio } // References maps transaction's inputs into a slice of InOuts, effectively @@ -1479,10 +1479,7 @@ func (bc *Blockchain) calculateBonus(claims []transaction.Input) (util.Fixed8, e func (bc *Blockchain) calculateBonusInternal(scs []*spentCoin) (util.Fixed8, error) { var claimed util.Fixed8 for _, sc := range scs { - gen, sys, err := bc.CalculateClaimable(sc.Output.Amount, sc.StartHeight, sc.EndHeight) - if err != nil { - return 0, err - } + gen, sys := bc.CalculateClaimable(sc.Output.Amount, sc.StartHeight, sc.EndHeight) claimed += gen + sys } diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index 77a5d697e..c4df1cec8 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -194,29 +194,25 @@ func TestGetClaimable(t *testing.T) { require.NoError(t, err) t.Run("first generation period", func(t *testing.T) { - amount, sysfee, err := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 2) - require.NoError(t, err) + amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 2) require.EqualValues(t, 8, amount) require.EqualValues(t, 0, sysfee) }) t.Run("a number of full periods", func(t *testing.T) { - amount, sysfee, err := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 6) - require.NoError(t, err) + amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 6) require.EqualValues(t, 4+4+3+3+2+2, amount) require.EqualValues(t, 0, sysfee) }) t.Run("start from the 2-nd block", func(t *testing.T) { - amount, sysfee, err := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 7) - require.NoError(t, err) + amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 7) require.EqualValues(t, 4+3+3+2+2+1, amount) require.EqualValues(t, 0, sysfee) }) t.Run("end height after generation has ended", func(t *testing.T) { - amount, sysfee, err := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 10) - require.NoError(t, err) + amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 10) require.EqualValues(t, 4+3+3+2+2+1+1, amount) require.EqualValues(t, 0, sysfee) }) diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index 344dac5ea..1e61d254d 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -19,7 +19,7 @@ type Blockchainer interface { AddHeaders(...*block.Header) error AddBlock(*block.Block) error BlockHeight() uint32 - CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) (util.Fixed8, util.Fixed8, error) + CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) (util.Fixed8, util.Fixed8) Close() HeaderHeight() uint32 GetBlock(hash util.Uint256) (*block.Block, error) diff --git a/pkg/core/native/native_neo.go b/pkg/core/native/native_neo.go index aca59e0fb..fe3391a47 100644 --- a/pkg/core/native/native_neo.go +++ b/pkg/core/native/native_neo.go @@ -188,10 +188,7 @@ func (n *NEO) distributeGas(ic *interop.Context, h util.Uint160, acc *state.NEOB if ic.Block == nil || ic.Block.Index == 0 { return nil } - sys, net, err := ic.Chain.CalculateClaimable(util.Fixed8(acc.Balance.Int64()), acc.BalanceHeight, ic.Block.Index) - if err != nil { - return err - } + sys, net := ic.Chain.CalculateClaimable(util.Fixed8(acc.Balance.Int64()), acc.BalanceHeight, ic.Block.Index) acc.BalanceHeight = ic.Block.Index n.GAS.mint(ic, h, big.NewInt(int64(sys+net))) return nil @@ -206,10 +203,7 @@ func (n *NEO) unclaimedGas(ic *interop.Context, args []vm.StackItem) vm.StackIte } tr := bs.Trackers[n.Hash] - sys, net, err := ic.Chain.CalculateClaimable(util.Fixed8(tr.Balance), tr.LastUpdatedBlock, end) - if err != nil { - panic(err) - } + sys, net := ic.Chain.CalculateClaimable(util.Fixed8(tr.Balance), tr.LastUpdatedBlock, end) return vm.NewBigIntegerItem(big.NewInt(int64(sys.Add(net)))) } diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index b48c4b985..4854f27b0 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -31,7 +31,7 @@ func (chain testChain) ApplyPolicyToTxSet([]mempool.TxWithFee) []mempool.TxWithF func (chain testChain) GetConfig() config.ProtocolConfiguration { panic("TODO") } -func (chain testChain) CalculateClaimable(util.Fixed8, uint32, uint32) (util.Fixed8, util.Fixed8, error) { +func (chain testChain) CalculateClaimable(util.Fixed8, uint32, uint32) (util.Fixed8, util.Fixed8) { panic("TODO") } diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index e00369a46..0f5acafcd 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -821,11 +821,8 @@ func (s *Server) getUnclaimedGas(ps request.Params) (interface{}, *response.Erro if neo == 0 { return "0", nil } - gasG, gasF, err := s.chain.CalculateClaimable(neo, neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. - if err != nil { - return nil, response.NewInternalServerError("calculation error", err) - } - return strconv.FormatInt(int64(gasG+gasF), 10), nil // It's not represented as Fixed8 in C#. + gasG, gasF := s.chain.CalculateClaimable(neo, neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. + return strconv.FormatInt(int64(gasG+gasF), 10), nil // It's not represented as Fixed8 in C#. } // getValidators returns the current NEO consensus nodes information and voting status. From 39dfebccc4e7d9f596304845c23ab9aa368454d8 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 22:59:34 +0300 Subject: [PATCH 25/42] core: no longer treat sysfee as claimable As it's not on Neo 3, it just gets burned and that's it. Only network fee is being redistributed to CNs. --- pkg/core/blockchain.go | 39 ++++++--------------------- pkg/core/blockchain_test.go | 12 +++------ pkg/core/blockchainer/blockchainer.go | 2 +- pkg/core/dao/dao.go | 17 ++++++------ pkg/core/dao/dao_test.go | 7 +++-- pkg/core/native/native_gas.go | 17 ------------ pkg/core/native/native_neo.go | 8 +++--- pkg/network/helper_test.go | 2 +- pkg/rpc/server/server.go | 4 +-- 9 files changed, 31 insertions(+), 77 deletions(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 6d40dee1f..d9f4844a1 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -536,7 +536,6 @@ func (bc *Blockchain) processHeader(h *block.Header, batch storage.Batch, header } buf.Reset() - buf.BinWriter.WriteU32LE(0) // sys fee is yet to be calculated h.EncodeBinary(buf.BinWriter) if buf.Err != nil { return buf.Err @@ -549,13 +548,6 @@ func (bc *Blockchain) processHeader(h *block.Header, batch storage.Batch, header return nil } -// getSystemFeeAmount returns sum of all system fees for blocks up to h. -// and 0 if no such block exists. -func (bc *Blockchain) getSystemFeeAmount(h util.Uint256) uint32 { - _, sf, _ := bc.dao.GetBlock(h) - return sf -} - // TODO: storeBlock needs some more love, its implemented as in the original // project. This for the sake of development speed and understanding of what // is happening here, quite allot as you can see :). If things are wired together @@ -563,11 +555,7 @@ func (bc *Blockchain) getSystemFeeAmount(h util.Uint256) uint32 { func (bc *Blockchain) storeBlock(block *block.Block) error { cache := dao.NewCached(bc.dao) appExecResults := make([]*state.AppExecResult, 0, len(block.Transactions)) - fee := bc.getSystemFeeAmount(block.PrevHash) - for _, tx := range block.Transactions { - fee += uint32(tx.SystemFee.IntegralValue()) - } - if err := cache.StoreAsBlock(block, fee); err != nil { + if err := cache.StoreAsBlock(block); err != nil { return err } @@ -1048,7 +1036,7 @@ func (bc *Blockchain) GetBlock(hash util.Uint256) (*block.Block, error) { } } - block, _, err := bc.dao.GetBlock(hash) + block, err := bc.dao.GetBlock(hash) if err != nil { return nil, err } @@ -1070,7 +1058,7 @@ func (bc *Blockchain) GetHeader(hash util.Uint256) (*block.Header, error) { return tb.Header(), nil } } - block, _, err := bc.dao.GetBlock(hash) + block, err := bc.dao.GetBlock(hash) if err != nil { return nil, err } @@ -1235,10 +1223,9 @@ func (bc *Blockchain) UnsubscribeFromExecutions(ch chan<- *state.AppExecResult) bc.unsubCh <- ch } -// CalculateClaimable calculates the amount of GAS which can be claimed for a transaction with value. -// First return value is GAS generated between startHeight and endHeight. -// Second return value is GAS returned from accumulated SystemFees between startHeight and endHeight. -func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) (util.Fixed8, util.Fixed8) { +// CalculateClaimable calculates the amount of GAS generated by owning specified +// amount of NEO between specified blocks. +func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) util.Fixed8 { var amount util.Fixed8 di := uint32(bc.decrementInterval) @@ -1264,17 +1251,8 @@ func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeig amount += util.Fixed8(iend-istart) * util.Fixed8(bc.generationAmount[ustart]) } - if startHeight == 0 { - startHeight++ - } - h := bc.GetHeaderHash(int(startHeight - 1)) - feeStart := bc.getSystemFeeAmount(h) - h = bc.GetHeaderHash(int(endHeight - 1)) - feeEnd := bc.getSystemFeeAmount(h) - - sysFeeTotal := util.Fixed8(feeEnd - feeStart) ratio := value / 100000000 - return amount * ratio, sysFeeTotal * ratio + return amount * ratio } // References maps transaction's inputs into a slice of InOuts, effectively @@ -1479,8 +1457,7 @@ func (bc *Blockchain) calculateBonus(claims []transaction.Input) (util.Fixed8, e func (bc *Blockchain) calculateBonusInternal(scs []*spentCoin) (util.Fixed8, error) { var claimed util.Fixed8 for _, sc := range scs { - gen, sys := bc.CalculateClaimable(sc.Output.Amount, sc.StartHeight, sc.EndHeight) - claimed += gen + sys + claimed += bc.CalculateClaimable(sc.Output.Amount, sc.StartHeight, sc.EndHeight) } return claimed, nil diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index c4df1cec8..4d22af264 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -194,27 +194,23 @@ func TestGetClaimable(t *testing.T) { require.NoError(t, err) t.Run("first generation period", func(t *testing.T) { - amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 2) + amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 2) require.EqualValues(t, 8, amount) - require.EqualValues(t, 0, sysfee) }) t.Run("a number of full periods", func(t *testing.T) { - amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 6) + amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 6) require.EqualValues(t, 4+4+3+3+2+2, amount) - require.EqualValues(t, 0, sysfee) }) t.Run("start from the 2-nd block", func(t *testing.T) { - amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 7) + amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 7) require.EqualValues(t, 4+3+3+2+2+1, amount) - require.EqualValues(t, 0, sysfee) }) t.Run("end height after generation has ended", func(t *testing.T) { - amount, sysfee := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 10) + amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 10) require.EqualValues(t, 4+3+3+2+2+1+1, amount) - require.EqualValues(t, 0, sysfee) }) } diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index 1e61d254d..618e921ea 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -19,7 +19,7 @@ type Blockchainer interface { AddHeaders(...*block.Header) error AddBlock(*block.Block) error BlockHeight() uint32 - CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) (util.Fixed8, util.Fixed8) + CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) util.Fixed8 Close() HeaderHeight() uint32 GetBlock(hash util.Uint256) (*block.Block, error) diff --git a/pkg/core/dao/dao.go b/pkg/core/dao/dao.go index f803078a4..5699b4d25 100644 --- a/pkg/core/dao/dao.go +++ b/pkg/core/dao/dao.go @@ -25,7 +25,7 @@ type DAO interface { GetAppExecResult(hash util.Uint256) (*state.AppExecResult, error) GetAssetState(assetID util.Uint256) (*state.Asset, error) GetBatch() *storage.MemBatch - GetBlock(hash util.Uint256) (*block.Block, uint32, error) + GetBlock(hash util.Uint256) (*block.Block, error) GetContractState(hash util.Uint160) (*state.Contract, error) GetCurrentBlockHeight() (uint32, error) GetCurrentHeaderHeight() (i uint32, h util.Uint256, err error) @@ -53,7 +53,7 @@ type DAO interface { PutStorageItem(scripthash util.Uint160, key []byte, si *state.StorageItem) error PutUnspentCoinState(hash util.Uint256, ucs *state.UnspentCoin) error PutVersion(v string) error - StoreAsBlock(block *block.Block, sysFee uint32) error + StoreAsBlock(block *block.Block) error StoreAsCurrentBlock(block *block.Block) error StoreAsTransaction(tx *transaction.Transaction, index uint32) error putAccountState(as *state.Account, buf *io.BufBinWriter) error @@ -402,18 +402,18 @@ func makeStorageItemKey(scripthash util.Uint160, key []byte) []byte { // -- other. // GetBlock returns Block by the given hash if it exists in the store. -func (dao *Simple) GetBlock(hash util.Uint256) (*block.Block, uint32, error) { +func (dao *Simple) GetBlock(hash util.Uint256) (*block.Block, error) { key := storage.AppendPrefix(storage.DataBlock, hash.BytesLE()) b, err := dao.Store.Get(key) if err != nil { - return nil, 0, err + return nil, err } - block, err := block.NewBlockFromTrimmedBytes(b[4:]) + block, err := block.NewBlockFromTrimmedBytes(b) if err != nil { - return nil, 0, err + return nil, err } - return block, binary.LittleEndian.Uint32(b[:4]), nil + return block, nil } // GetVersion attempts to get the current version stored in the @@ -531,12 +531,11 @@ func (dao *Simple) HasTransaction(hash util.Uint256) bool { } // StoreAsBlock stores the given block as DataBlock. -func (dao *Simple) StoreAsBlock(block *block.Block, sysFee uint32) error { +func (dao *Simple) StoreAsBlock(block *block.Block) error { var ( key = storage.AppendPrefix(storage.DataBlock, block.Hash().BytesLE()) buf = io.NewBufBinWriter() ) - buf.WriteU32LE(sysFee) b, err := block.Trim() if err != nil { return err diff --git a/pkg/core/dao/dao_test.go b/pkg/core/dao/dao_test.go index 65e74b50e..f5cdfa36a 100644 --- a/pkg/core/dao/dao_test.go +++ b/pkg/core/dao/dao_test.go @@ -155,7 +155,7 @@ func TestDeleteStorageItem(t *testing.T) { func TestGetBlock_NotExists(t *testing.T) { dao := NewSimple(storage.NewMemoryStore()) hash := random.Uint256() - block, _, err := dao.GetBlock(hash) + block, err := dao.GetBlock(hash) require.Error(t, err) require.Nil(t, block) } @@ -171,12 +171,11 @@ func TestPutGetBlock(t *testing.T) { }, } hash := b.Hash() - err := dao.StoreAsBlock(b, 42) + err := dao.StoreAsBlock(b) require.NoError(t, err) - gotBlock, sysfee, err := dao.GetBlock(hash) + gotBlock, err := dao.GetBlock(hash) require.NoError(t, err) require.NotNil(t, gotBlock) - require.EqualValues(t, 42, sysfee) } func TestGetVersion_NoVersion(t *testing.T) { diff --git a/pkg/core/native/native_gas.go b/pkg/core/native/native_gas.go index 8706f1ea1..109deceb3 100644 --- a/pkg/core/native/native_gas.go +++ b/pkg/core/native/native_gas.go @@ -10,9 +10,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/hash" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/smartcontract" - "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" - "github.com/nspcc-dev/neo-go/pkg/vm" ) // GAS represents GAS native contract. @@ -40,11 +38,6 @@ func NewGAS() *GAS { g.nep5TokenNative = *nep5 - desc := newDescriptor("getSysFeeAmount", smartcontract.IntegerType, - manifest.NewParameter("index", smartcontract.IntegerType)) - md := newMethodAndPrice(g.getSysFeeAmount, 1, smartcontract.NoneFlag) - g.AddMethod(md, desc, true) - return g } @@ -98,16 +91,6 @@ func (g *GAS) OnPersist(ic *interop.Context) error { return nil } -func (g *GAS) getSysFeeAmount(ic *interop.Context, args []vm.StackItem) vm.StackItem { - index := toBigInt(args[0]) - h := ic.Chain.GetHeaderHash(int(index.Int64())) - _, sf, err := ic.DAO.GetBlock(h) - if err != nil { - panic(err) - } - return vm.NewBigIntegerItem(big.NewInt(int64(sf))) -} - func getStandbyValidatorsHash(ic *interop.Context) (util.Uint160, []*keys.PublicKey, error) { vs, err := ic.Chain.GetStandByValidators() if err != nil { diff --git a/pkg/core/native/native_neo.go b/pkg/core/native/native_neo.go index fe3391a47..45430f4ac 100644 --- a/pkg/core/native/native_neo.go +++ b/pkg/core/native/native_neo.go @@ -188,9 +188,9 @@ func (n *NEO) distributeGas(ic *interop.Context, h util.Uint160, acc *state.NEOB if ic.Block == nil || ic.Block.Index == 0 { return nil } - sys, net := ic.Chain.CalculateClaimable(util.Fixed8(acc.Balance.Int64()), acc.BalanceHeight, ic.Block.Index) + gen := ic.Chain.CalculateClaimable(util.Fixed8(acc.Balance.Int64()), acc.BalanceHeight, ic.Block.Index) acc.BalanceHeight = ic.Block.Index - n.GAS.mint(ic, h, big.NewInt(int64(sys+net))) + n.GAS.mint(ic, h, big.NewInt(int64(gen))) return nil } @@ -203,8 +203,8 @@ func (n *NEO) unclaimedGas(ic *interop.Context, args []vm.StackItem) vm.StackIte } tr := bs.Trackers[n.Hash] - sys, net := ic.Chain.CalculateClaimable(util.Fixed8(tr.Balance), tr.LastUpdatedBlock, end) - return vm.NewBigIntegerItem(big.NewInt(int64(sys.Add(net)))) + gen := ic.Chain.CalculateClaimable(util.Fixed8(tr.Balance), tr.LastUpdatedBlock, end) + return vm.NewBigIntegerItem(big.NewInt(int64(gen))) } func (n *NEO) registerValidator(ic *interop.Context, args []vm.StackItem) vm.StackItem { diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index 4854f27b0..baf5ca198 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -31,7 +31,7 @@ func (chain testChain) ApplyPolicyToTxSet([]mempool.TxWithFee) []mempool.TxWithF func (chain testChain) GetConfig() config.ProtocolConfiguration { panic("TODO") } -func (chain testChain) CalculateClaimable(util.Fixed8, uint32, uint32) (util.Fixed8, util.Fixed8) { +func (chain testChain) CalculateClaimable(util.Fixed8, uint32, uint32) util.Fixed8 { panic("TODO") } diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 0f5acafcd..58ae09c2c 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -821,8 +821,8 @@ func (s *Server) getUnclaimedGas(ps request.Params) (interface{}, *response.Erro if neo == 0 { return "0", nil } - gasG, gasF := s.chain.CalculateClaimable(neo, neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. - return strconv.FormatInt(int64(gasG+gasF), 10), nil // It's not represented as Fixed8 in C#. + gas := s.chain.CalculateClaimable(neo, neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. + return strconv.FormatInt(int64(gas), 10), nil // It's not represented as Fixed8 in C#. } // getValidators returns the current NEO consensus nodes information and voting status. From 3d18f09deff4383ede4abc79c336a8a03a8de6f8 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 23:16:43 +0300 Subject: [PATCH 26/42] core: fix CalculateClaimable for NEP5 NEO It's not stored as Fixed8, so calculations need to be adjusted for that. --- pkg/core/blockchain.go | 11 ++++++----- pkg/core/blockchain_test.go | 8 ++++---- pkg/core/blockchainer/blockchainer.go | 2 +- pkg/core/native/native_neo.go | 4 ++-- pkg/network/helper_test.go | 2 +- pkg/rpc/server/server.go | 4 ++-- pkg/rpc/server/server_test.go | 15 ++++++++++++--- 7 files changed, 28 insertions(+), 18 deletions(-) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index d9f4844a1..6aac93be0 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -1224,8 +1224,10 @@ func (bc *Blockchain) UnsubscribeFromExecutions(ch chan<- *state.AppExecResult) } // CalculateClaimable calculates the amount of GAS generated by owning specified -// amount of NEO between specified blocks. -func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) util.Fixed8 { +// amount of NEO between specified blocks. The amount of NEO being passed is in +// its natural non-divisible form (1 NEO as 1, 2 NEO as 2, no multiplication by +// 10⁸ is neeeded as for Fixed8). +func (bc *Blockchain) CalculateClaimable(value int64, startHeight, endHeight uint32) util.Fixed8 { var amount util.Fixed8 di := uint32(bc.decrementInterval) @@ -1251,8 +1253,7 @@ func (bc *Blockchain) CalculateClaimable(value util.Fixed8, startHeight, endHeig amount += util.Fixed8(iend-istart) * util.Fixed8(bc.generationAmount[ustart]) } - ratio := value / 100000000 - return amount * ratio + return amount * util.Fixed8(value) } // References maps transaction's inputs into a slice of InOuts, effectively @@ -1457,7 +1458,7 @@ func (bc *Blockchain) calculateBonus(claims []transaction.Input) (util.Fixed8, e func (bc *Blockchain) calculateBonusInternal(scs []*spentCoin) (util.Fixed8, error) { var claimed util.Fixed8 for _, sc := range scs { - claimed += bc.CalculateClaimable(sc.Output.Amount, sc.StartHeight, sc.EndHeight) + claimed += bc.CalculateClaimable(sc.Output.Amount.IntegralValue(), sc.StartHeight, sc.EndHeight) } return claimed, nil diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index 4d22af264..cb8f94faa 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -194,22 +194,22 @@ func TestGetClaimable(t *testing.T) { require.NoError(t, err) t.Run("first generation period", func(t *testing.T) { - amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 2) + amount := bc.CalculateClaimable(1, 0, 2) require.EqualValues(t, 8, amount) }) t.Run("a number of full periods", func(t *testing.T) { - amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 0, 6) + amount := bc.CalculateClaimable(1, 0, 6) require.EqualValues(t, 4+4+3+3+2+2, amount) }) t.Run("start from the 2-nd block", func(t *testing.T) { - amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 7) + amount := bc.CalculateClaimable(1, 1, 7) require.EqualValues(t, 4+3+3+2+2+1, amount) }) t.Run("end height after generation has ended", func(t *testing.T) { - amount := bc.CalculateClaimable(util.Fixed8FromInt64(1), 1, 10) + amount := bc.CalculateClaimable(1, 1, 10) require.EqualValues(t, 4+3+3+2+2+1+1, amount) }) } diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index 618e921ea..4d197ed05 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -19,7 +19,7 @@ type Blockchainer interface { AddHeaders(...*block.Header) error AddBlock(*block.Block) error BlockHeight() uint32 - CalculateClaimable(value util.Fixed8, startHeight, endHeight uint32) util.Fixed8 + CalculateClaimable(value int64, startHeight, endHeight uint32) util.Fixed8 Close() HeaderHeight() uint32 GetBlock(hash util.Uint256) (*block.Block, error) diff --git a/pkg/core/native/native_neo.go b/pkg/core/native/native_neo.go index 45430f4ac..0c9506e60 100644 --- a/pkg/core/native/native_neo.go +++ b/pkg/core/native/native_neo.go @@ -188,7 +188,7 @@ func (n *NEO) distributeGas(ic *interop.Context, h util.Uint160, acc *state.NEOB if ic.Block == nil || ic.Block.Index == 0 { return nil } - gen := ic.Chain.CalculateClaimable(util.Fixed8(acc.Balance.Int64()), acc.BalanceHeight, ic.Block.Index) + gen := ic.Chain.CalculateClaimable(acc.Balance.Int64(), acc.BalanceHeight, ic.Block.Index) acc.BalanceHeight = ic.Block.Index n.GAS.mint(ic, h, big.NewInt(int64(gen))) return nil @@ -203,7 +203,7 @@ func (n *NEO) unclaimedGas(ic *interop.Context, args []vm.StackItem) vm.StackIte } tr := bs.Trackers[n.Hash] - gen := ic.Chain.CalculateClaimable(util.Fixed8(tr.Balance), tr.LastUpdatedBlock, end) + gen := ic.Chain.CalculateClaimable(tr.Balance, tr.LastUpdatedBlock, end) return vm.NewBigIntegerItem(big.NewInt(int64(gen))) } diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index baf5ca198..8beed2bf3 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -31,7 +31,7 @@ func (chain testChain) ApplyPolicyToTxSet([]mempool.TxWithFee) []mempool.TxWithF func (chain testChain) GetConfig() config.ProtocolConfiguration { panic("TODO") } -func (chain testChain) CalculateClaimable(util.Fixed8, uint32, uint32) util.Fixed8 { +func (chain testChain) CalculateClaimable(int64, uint32, uint32) util.Fixed8 { panic("TODO") } diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 58ae09c2c..4615e4509 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -821,8 +821,8 @@ func (s *Server) getUnclaimedGas(ps request.Params) (interface{}, *response.Erro if neo == 0 { return "0", nil } - gas := s.chain.CalculateClaimable(neo, neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. - return strconv.FormatInt(int64(gas), 10), nil // It's not represented as Fixed8 in C#. + gas := s.chain.CalculateClaimable(int64(neo), neoHeight, s.chain.BlockHeight()+1) // +1 as in C#, for the next block. + return strconv.FormatInt(int64(gas), 10), nil // It's not represented as Fixed8 in C#. } // getValidators returns the current NEO consensus nodes information and voting status. diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 28820a50a..9ba1c240e 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -151,8 +151,8 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { Asset: e.chain.UtilityTokenHash(), - Amount: "1000", - LastUpdated: 1, + Amount: "1023.99976000", + LastUpdated: 4, }}, Address: testchain.PrivateKeyByID(0).GetScriptHash().StringLE(), } @@ -229,6 +229,15 @@ var rpcTestCases = map[string][]rpcTestCase{ NotifyIndex: 0, TxHash: txReceiveRublesHash, }, + { + Timestamp: blockSendNEO.Timestamp, + Asset: e.chain.UtilityTokenHash(), + Address: "", // Minted GAS. + Amount: "23.99976000", + Index: 4, + NotifyIndex: 0, + TxHash: txSendNEOHash, + }, { Timestamp: blockReceiveGAS.Timestamp, Asset: e.chain.UtilityTokenHash(), @@ -528,7 +537,7 @@ var rpcTestCases = map[string][]rpcTestCase{ s, ok := resp.(*string) require.True(t, ok) // Incorrect, to be fixed later. - assert.Equal(t, "0", *s) + assert.Equal(t, "48000", *s) }, }, }, From dfc7a9bfd1d48dc28989b36d5fc194977e2a12f2 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Thu, 4 Jun 2020 23:58:13 +0300 Subject: [PATCH 27/42] transaction: drop Claim TX type --- pkg/core/blockchain.go | 175 +---------------------- pkg/core/dao/dao.go | 6 - pkg/core/mempool/mem_pool.go | 43 ------ pkg/core/mempool/mem_pool_test.go | 74 +--------- pkg/core/state/account.go | 37 ----- pkg/core/state/account_test.go | 1 - pkg/core/state/unclaimed.go | 69 --------- pkg/core/state/unclaimed_test.go | 73 ---------- pkg/core/transaction/claim.go | 38 ----- pkg/core/transaction/helper_test.go | 2 - pkg/core/transaction/transaction.go | 10 -- pkg/core/transaction/transaction_test.go | 53 ------- pkg/core/transaction/type.go | 5 - pkg/interop/transaction/transaction.go | 1 - 14 files changed, 10 insertions(+), 577 deletions(-) delete mode 100644 pkg/core/state/unclaimed.go delete mode 100644 pkg/core/state/unclaimed_test.go delete mode 100644 pkg/core/transaction/claim.go diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 6aac93be0..06056de01 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -599,19 +599,6 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { return err } - if prevTXOutput.AssetID.Equals(GoverningTokenID()) { - err = account.Unclaimed.Put(&state.UnclaimedBalance{ - Tx: input.PrevHash, - Index: input.PrevIndex, - Start: unspent.Height, - End: block.Index, - Value: prevTXOutput.Amount, - }) - if err != nil { - return err - } - } - balancesLen := len(account.Balances[prevTXOutput.AssetID]) if balancesLen <= 1 { delete(account.Balances, prevTXOutput.AssetID) @@ -669,54 +656,6 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { } } } - case *transaction.ClaimTX: - // Remove claimed NEO from spent coins making it unavalaible for - // additional claims. - for _, input := range t.Claims { - scs, err := cache.GetUnspentCoinState(input.PrevHash) - if err == nil { - if len(scs.States) <= int(input.PrevIndex) { - err = errors.New("invalid claim index") - } else if scs.States[input.PrevIndex].State&state.CoinClaimed != 0 { - err = errors.New("double claim") - } - } - if err != nil { - // We can't really do anything about it - // as it's a transaction in a signed block. - bc.log.Warn("FALSE OR DOUBLE CLAIM", - zap.String("PrevHash", input.PrevHash.StringLE()), - zap.Uint16("PrevIndex", input.PrevIndex), - zap.String("tx", tx.Hash().StringLE()), - zap.Uint32("block", block.Index), - ) - // "Strict" mode. - if bc.config.VerifyTransactions { - return err - } - break - } - - acc, err := cache.GetAccountState(scs.States[input.PrevIndex].ScriptHash) - if err != nil { - return err - } - - scs.States[input.PrevIndex].State |= state.CoinClaimed - if err = cache.PutUnspentCoinState(input.PrevHash, scs); err != nil { - return err - } - - changed := acc.Unclaimed.Remove(input.PrevHash, input.PrevIndex) - if !changed { - bc.log.Warn("no spent coin in the account", - zap.String("tx", tx.Hash().StringLE()), - zap.String("input", input.PrevHash.StringLE()), - zap.String("account", acc.ScriptHash.String())) - } else if err := cache.PutAccountState(acc); err != nil { - return err - } - } case *transaction.InvocationTX: systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) v := SpawnVM(systemInterop) @@ -1383,87 +1322,9 @@ func (bc *Blockchain) verifyTx(t *transaction.Transaction, block *block.Block) e } } - switch t.Type { - case transaction.ClaimType: - claim := t.Data.(*transaction.ClaimTX) - if transaction.HaveDuplicateInputs(claim.Claims) { - return errors.New("duplicate claims") - } - if bc.dao.IsDoubleClaim(claim) { - return errors.New("double claim") - } - if err := bc.verifyClaims(t, results); err != nil { - return err - } - } - return bc.verifyTxWitnesses(t, block) } -func (bc *Blockchain) verifyClaims(tx *transaction.Transaction, results []*transaction.Result) (err error) { - t := tx.Data.(*transaction.ClaimTX) - var result *transaction.Result - for i := range results { - if results[i].AssetID == UtilityTokenID() { - result = results[i] - break - } - } - - if result == nil || result.Amount.GreaterThan(0) { - return errors.New("invalid output in claim tx") - } - - bonus, err := bc.calculateBonus(t.Claims) - if err == nil && bonus != -result.Amount { - return fmt.Errorf("wrong bonus calculated in claim tx: %s != %s", - bonus.String(), (-result.Amount).String()) - } - - return err -} - -func (bc *Blockchain) calculateBonus(claims []transaction.Input) (util.Fixed8, error) { - unclaimed := []*spentCoin{} - inputs := transaction.GroupInputsByPrevHash(claims) - - for _, group := range inputs { - h := group[0].PrevHash - unspent, err := bc.dao.GetUnspentCoinState(h) - if err != nil { - return 0, err - } - - for _, c := range group { - if len(unspent.States) <= int(c.PrevIndex) { - return 0, fmt.Errorf("can't find spent coins for %s (%d)", c.PrevHash.StringLE(), c.PrevIndex) - } - if unspent.States[c.PrevIndex].State&state.CoinSpent == 0 { - return 0, fmt.Errorf("not spent yet: %s/%d", c.PrevHash.StringLE(), c.PrevIndex) - } - if unspent.States[c.PrevIndex].State&state.CoinClaimed != 0 { - return 0, fmt.Errorf("already claimed: %s/%d", c.PrevHash.StringLE(), c.PrevIndex) - } - unclaimed = append(unclaimed, &spentCoin{ - Output: &unspent.States[c.PrevIndex].Output, - StartHeight: unspent.Height, - EndHeight: unspent.States[c.PrevIndex].SpendHeight, - }) - } - } - - return bc.calculateBonusInternal(unclaimed) -} - -func (bc *Blockchain) calculateBonusInternal(scs []*spentCoin) (util.Fixed8, error) { - var claimed util.Fixed8 - for _, sc := range scs { - claimed += bc.CalculateClaimable(sc.Output.Amount.IntegralValue(), sc.StartHeight, sc.EndHeight) - } - - return claimed, nil -} - // isTxStillRelevant is a callback for mempool transaction filtering after the // new block addition. It returns false for transactions already present in the // chain (added by the new block), transactions using some inputs that are @@ -1480,12 +1341,6 @@ func (bc *Blockchain) isTxStillRelevant(t *transaction.Transaction) bool { if bc.dao.IsDoubleSpend(t) { return false } - if t.Type == transaction.ClaimType { - claim := t.Data.(*transaction.ClaimTX) - if bc.dao.IsDoubleClaim(claim) { - return false - } - } for i := range t.Scripts { if !vm.IsStandardContract(t.Scripts[i].VerificationScript) { recheckWitness = true @@ -1521,14 +1376,12 @@ func (bc *Blockchain) PoolTx(t *transaction.Transaction) error { return err } // Policying. - if t.Type != transaction.ClaimType { - txSize := io.GetVarSize(t) - maxFree := bc.config.MaxFreeTransactionSize - if maxFree != 0 && txSize > maxFree { - if bc.IsLowPriority(t.NetworkFee) || - t.NetworkFee < util.Fixed8FromFloat(bc.config.FeePerExtraByte)*util.Fixed8(txSize-maxFree) { - return ErrPolicy - } + txSize := io.GetVarSize(t) + maxFree := bc.config.MaxFreeTransactionSize + if maxFree != 0 && txSize > maxFree { + if bc.IsLowPriority(t.NetworkFee) || + t.NetworkFee < util.Fixed8FromFloat(bc.config.FeePerExtraByte)*util.Fixed8(txSize-maxFree) { + return ErrPolicy } } if err := bc.memPool.Add(t, bc); err != nil { @@ -1585,13 +1438,6 @@ func (bc *Blockchain) verifyResults(t *transaction.Transaction, results []*trans } switch t.Type { - case transaction.ClaimType: - for _, r := range resultsIssue { - if r.AssetID != UtilityTokenID() { - return errors.New("miner or claim tx issues non-utility tokens") - } - } - break case transaction.IssueType: for _, r := range resultsIssue { if r.AssetID == UtilityTokenID() { @@ -1701,15 +1547,6 @@ func (bc *Blockchain) GetScriptHashesForVerifying(t *transaction.Transaction) ([ hashes[c.Account] = true } switch t.Type { - case transaction.ClaimType: - claim := t.Data.(*transaction.ClaimTX) - refs, err := bc.references(claim.Claims) - if err != nil { - return nil, err - } - for i := range refs { - hashes[refs[i].Out.ScriptHash] = true - } case transaction.IssueType: for _, res := range refsAndOutsToResults(references, t.Outputs) { if res.Amount < 0 { diff --git a/pkg/core/dao/dao.go b/pkg/core/dao/dao.go index 5699b4d25..363aa9244 100644 --- a/pkg/core/dao/dao.go +++ b/pkg/core/dao/dao.go @@ -40,7 +40,6 @@ type DAO interface { GetVersion() (string, error) GetWrapped() DAO HasTransaction(hash util.Uint256) bool - IsDoubleClaim(claim *transaction.ClaimTX) bool IsDoubleSpend(tx *transaction.Transaction) bool Persist() (int, error) PutAccountState(as *state.Account) error @@ -573,11 +572,6 @@ func (dao *Simple) IsDoubleSpend(tx *transaction.Transaction) bool { return dao.checkUsedInputs(tx.Inputs, state.CoinSpent) } -// IsDoubleClaim verifies that given claim inputs are not already claimed by another tx. -func (dao *Simple) IsDoubleClaim(claim *transaction.ClaimTX) bool { - return dao.checkUsedInputs(claim.Claims, state.CoinClaimed) -} - func (dao *Simple) checkUsedInputs(inputs []transaction.Input, coin state.Coin) bool { if len(inputs) == 0 { return false diff --git a/pkg/core/mempool/mem_pool.go b/pkg/core/mempool/mem_pool.go index bd566936a..fdcee59eb 100644 --- a/pkg/core/mempool/mem_pool.go +++ b/pkg/core/mempool/mem_pool.go @@ -52,7 +52,6 @@ type Pool struct { verifiedMap map[util.Uint256]*item verifiedTxes items inputs []*transaction.Input - claims []*transaction.Input fees map[util.Uint160]utilityBalanceAndFees capacity int @@ -79,20 +78,6 @@ func (p *item) CompareTo(otherP *item) int { return -1 } - if p.isLowPrio && otherP.isLowPrio { - thisIsClaimTx := p.txn.Type == transaction.ClaimType - otherIsClaimTx := otherP.txn.Type == transaction.ClaimType - - if thisIsClaimTx != otherIsClaimTx { - // This is a claim Tx and other isn't. - if thisIsClaimTx { - return 1 - } - // The other is claim Tx and this isn't. - return -1 - } - } - // Fees sorted ascending. if ret := p.txn.FeePerByte().CompareTo(otherP.txn.FeePerByte()); ret != 0 { return ret @@ -249,12 +234,6 @@ func (mp *Pool) Add(t *transaction.Transaction, fee Feer) error { for i := range t.Inputs { pushInputToSortedSlice(&mp.inputs, &t.Inputs[i]) } - if t.Type == transaction.ClaimType { - claim := t.Data.(*transaction.ClaimTX) - for i := range claim.Claims { - pushInputToSortedSlice(&mp.claims, &claim.Claims[i]) - } - } updateMempoolMetrics(len(mp.verifiedTxes)) mp.lock.Unlock() @@ -284,12 +263,6 @@ func (mp *Pool) Remove(hash util.Uint256) { for i := range it.txn.Inputs { dropInputFromSortedSlice(&mp.inputs, &it.txn.Inputs[i]) } - if it.txn.Type == transaction.ClaimType { - claim := it.txn.Data.(*transaction.ClaimTX) - for i := range claim.Claims { - dropInputFromSortedSlice(&mp.claims, &claim.Claims[i]) - } - } } updateMempoolMetrics(len(mp.verifiedTxes)) mp.lock.Unlock() @@ -304,7 +277,6 @@ func (mp *Pool) RemoveStale(isOK func(*transaction.Transaction) bool, feer Feer) // because items are iterated one-by-one in increasing order. newVerifiedTxes := mp.verifiedTxes[:0] newInputs := mp.inputs[:0] - newClaims := mp.claims[:0] mp.fees = make(map[util.Uint160]utilityBalanceAndFees) // it'd be nice to reuse existing map, but we can't easily clear it for _, itm := range mp.verifiedTxes { if isOK(itm.txn) && mp.tryAddSendersFee(itm.txn, feer) { @@ -312,12 +284,6 @@ func (mp *Pool) RemoveStale(isOK func(*transaction.Transaction) bool, feer Feer) for i := range itm.txn.Inputs { newInputs = append(newInputs, &itm.txn.Inputs[i]) } - if itm.txn.Type == transaction.ClaimType { - claim := itm.txn.Data.(*transaction.ClaimTX) - for i := range claim.Claims { - newClaims = append(newClaims, &claim.Claims[i]) - } - } } else { delete(mp.verifiedMap, itm.txn.Hash()) } @@ -325,12 +291,8 @@ func (mp *Pool) RemoveStale(isOK func(*transaction.Transaction) bool, feer Feer) sort.Slice(newInputs, func(i, j int) bool { return newInputs[i].Cmp(newInputs[j]) < 0 }) - sort.Slice(newClaims, func(i, j int) bool { - return newClaims[i].Cmp(newClaims[j]) < 0 - }) mp.verifiedTxes = newVerifiedTxes mp.inputs = newInputs - mp.claims = newClaims mp.lock.Unlock() } @@ -392,11 +354,6 @@ func (mp *Pool) checkTxConflicts(tx *transaction.Transaction, fee Feer) bool { return false } switch tx.Type { - case transaction.ClaimType: - claim := tx.Data.(*transaction.ClaimTX) - if areInputsInPool(claim.Claims, mp.claims) { - return false - } case transaction.IssueType: // It's a hack, because technically we could check for // available asset amount, but these transactions are so rare diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index c4dbfec75..843627082 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -55,7 +55,7 @@ func TestMemPoolAddRemove(t *testing.T) { t.Run("high priority", func(t *testing.T) { testMemPoolAddRemoveWithFeer(t, fs) }) } -func TestMemPoolAddRemoveWithInputsAndClaims(t *testing.T) { +func TestMemPoolAddRemoveWithInputs(t *testing.T) { mp := NewMemPool(50) hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") require.NoError(t, err) @@ -64,62 +64,41 @@ func TestMemPoolAddRemoveWithInputsAndClaims(t *testing.T) { mpLessInputs := func(i, j int) bool { return mp.inputs[i].Cmp(mp.inputs[j]) < 0 } - mpLessClaims := func(i, j int) bool { - return mp.claims[i].Cmp(mp.claims[j]) < 0 - } txm1 := transaction.NewContractTX() txm1.Nonce = 1 - txc1, claim1 := newClaimTX() for i := 0; i < 5; i++ { txm1.Inputs = append(txm1.Inputs, transaction.Input{PrevHash: hash1, PrevIndex: uint16(100 - i)}) - claim1.Claims = append(claim1.Claims, transaction.Input{PrevHash: hash1, PrevIndex: uint16(100 - i)}) } require.NoError(t, mp.Add(txm1, &FeerStub{})) - require.NoError(t, mp.Add(txc1, &FeerStub{})) // Look inside. assert.Equal(t, len(txm1.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - assert.Equal(t, len(claim1.Claims), len(mp.claims)) - assert.True(t, sort.SliceIsSorted(mp.claims, mpLessClaims)) txm2 := transaction.NewContractTX() txm2.Nonce = 1 - txc2, claim2 := newClaimTX() for i := 0; i < 10; i++ { txm2.Inputs = append(txm2.Inputs, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i)}) - claim2.Claims = append(claim2.Claims, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i)}) } require.NoError(t, mp.Add(txm2, &FeerStub{})) - require.NoError(t, mp.Add(txc2, &FeerStub{})) assert.Equal(t, len(txm1.Inputs)+len(txm2.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - assert.Equal(t, len(claim1.Claims)+len(claim2.Claims), len(mp.claims)) - assert.True(t, sort.SliceIsSorted(mp.claims, mpLessClaims)) mp.Remove(txm1.Hash()) - mp.Remove(txc2.Hash()) assert.Equal(t, len(txm2.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - assert.Equal(t, len(claim1.Claims), len(mp.claims)) - assert.True(t, sort.SliceIsSorted(mp.claims, mpLessClaims)) require.NoError(t, mp.Add(txm1, &FeerStub{})) - require.NoError(t, mp.Add(txc2, &FeerStub{})) assert.Equal(t, len(txm1.Inputs)+len(txm2.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - assert.Equal(t, len(claim1.Claims)+len(claim2.Claims), len(mp.claims)) - assert.True(t, sort.SliceIsSorted(mp.claims, mpLessClaims)) mp.RemoveStale(func(t *transaction.Transaction) bool { - if t.Hash() == txc1.Hash() || t.Hash() == txm2.Hash() { + if t.Hash() == txm2.Hash() { return false } return true }, &FeerStub{}) assert.Equal(t, len(txm1.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - assert.Equal(t, len(claim2.Claims), len(mp.claims)) - assert.True(t, sort.SliceIsSorted(mp.claims, mpLessClaims)) } func TestMemPoolVerifyInputs(t *testing.T) { @@ -149,33 +128,6 @@ func TestMemPoolVerifyInputs(t *testing.T) { require.Error(t, mp.Add(tx3, &FeerStub{})) } -func TestMemPoolVerifyClaims(t *testing.T) { - mp := NewMemPool(50) - tx1, claim1 := newClaimTX() - hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") - require.NoError(t, err) - hash2, err := util.Uint256DecodeStringBE("629397158f852e838077bb2715b13a2e29b0a51c2157e5466321b70ed7904ce9") - require.NoError(t, err) - for i := 0; i < 10; i++ { - claim1.Claims = append(claim1.Claims, transaction.Input{PrevHash: hash1, PrevIndex: uint16(i)}) - claim1.Claims = append(claim1.Claims, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i)}) - } - require.Equal(t, true, mp.Verify(tx1, &FeerStub{})) - require.NoError(t, mp.Add(tx1, &FeerStub{})) - - tx2, claim2 := newClaimTX() - for i := 0; i < 10; i++ { - claim2.Claims = append(claim2.Claims, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i + 10)}) - } - require.Equal(t, true, mp.Verify(tx2, &FeerStub{})) - require.NoError(t, mp.Add(tx2, &FeerStub{})) - - tx3, claim3 := newClaimTX() - claim3.Claims = append(claim3.Claims, transaction.Input{PrevHash: hash1, PrevIndex: 0}) - require.Equal(t, false, mp.Verify(tx3, &FeerStub{})) - require.Error(t, mp.Add(tx3, &FeerStub{})) -} - func TestMemPoolVerifyIssue(t *testing.T) { mp := NewMemPool(50) tx1 := newIssueTX() @@ -199,11 +151,6 @@ func newIssueTX() *transaction.Transaction { return tx } -func newClaimTX() (*transaction.Transaction, *transaction.ClaimTX) { - cl := &transaction.ClaimTX{} - return transaction.NewClaimTX(cl), cl -} - func TestOverCapacity(t *testing.T) { var fs = &FeerStub{lowPriority: true} const mempoolSize = 10 @@ -218,18 +165,8 @@ func TestOverCapacity(t *testing.T) { require.Equal(t, mempoolSize, mp.Count()) require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) - // Claim TX has more priority than ordinary lowprio, so it should easily - // fit into the pool. - claim := &transaction.Transaction{ - Type: transaction.ClaimType, - Data: &transaction.ClaimTX{}, - } - require.NoError(t, mp.Add(claim, fs)) - require.Equal(t, mempoolSize, mp.Count()) - require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) - // Fees are also prioritized. - for i := 0; i < mempoolSize-1; i++ { + for i := 0; i < mempoolSize; i++ { tx := transaction.NewContractTX() tx.Attributes = append(tx.Attributes, transaction.Attribute{ Usage: transaction.Hash1, @@ -249,16 +186,13 @@ func TestOverCapacity(t *testing.T) { Usage: transaction.Hash1, Data: util.Uint256{1, 2, 3, 4}.BytesBE(), }) - tx.NetworkFee = util.Fixed8FromFloat(0.00001) + tx.NetworkFee = util.Fixed8FromFloat(0.000001) tx.Nonce = txcnt txcnt++ require.Error(t, mp.Add(tx, fs)) require.Equal(t, mempoolSize, mp.Count()) require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) - // But claim tx should still be there. - require.True(t, mp.ContainsKey(claim.Hash())) - // Low net fee, but higher per-byte fee is still a better combination. tx = transaction.NewContractTX() tx.Nonce = txcnt diff --git a/pkg/core/state/account.go b/pkg/core/state/account.go index 4e65ec27e..a0b82abd0 100644 --- a/pkg/core/state/account.go +++ b/pkg/core/state/account.go @@ -13,16 +13,6 @@ type UnspentBalance struct { Value util.Fixed8 `json:"value"` } -// UnclaimedBalance represents transaction output which was spent and -// can be claimed. -type UnclaimedBalance struct { - Tx util.Uint256 - Index uint16 - Start uint32 - End uint32 - Value util.Fixed8 -} - // UnspentBalances is a slice of UnspentBalance (mostly needed to sort them). type UnspentBalances []UnspentBalance @@ -32,7 +22,6 @@ type Account struct { ScriptHash util.Uint160 IsFrozen bool Balances map[util.Uint256][]UnspentBalance - Unclaimed UnclaimedBalances } // NewAccount returns a new Account object. @@ -42,7 +31,6 @@ func NewAccount(scriptHash util.Uint160) *Account { ScriptHash: scriptHash, IsFrozen: false, Balances: make(map[util.Uint256][]UnspentBalance), - Unclaimed: UnclaimedBalances{Raw: []byte{}}, } } @@ -64,10 +52,6 @@ func (s *Account) DecodeBinary(br *io.BinReader) { } s.Balances[key] = ubs } - - lenBalances = br.ReadVarUint() - s.Unclaimed.Raw = make([]byte, lenBalances*UnclaimedBalanceSize) - br.ReadBytes(s.Unclaimed.Raw) } // EncodeBinary encodes Account to the given BinWriter. @@ -84,9 +68,6 @@ func (s *Account) EncodeBinary(bw *io.BinWriter) { v[i].EncodeBinary(bw) } } - - bw.WriteVarUint(uint64(s.Unclaimed.Size())) - bw.WriteBytes(s.Unclaimed.Raw) } // DecodeBinary implements io.Serializable interface. @@ -103,24 +84,6 @@ func (u *UnspentBalance) EncodeBinary(w *io.BinWriter) { u.Value.EncodeBinary(w) } -// DecodeBinary implements io.Serializable interface. -func (u *UnclaimedBalance) DecodeBinary(r *io.BinReader) { - u.Tx.DecodeBinary(r) - u.Index = r.ReadU16LE() - u.Start = r.ReadU32LE() - u.End = r.ReadU32LE() - u.Value.DecodeBinary(r) -} - -// EncodeBinary implements io.Serializable interface. -func (u *UnclaimedBalance) EncodeBinary(w *io.BinWriter) { - u.Tx.EncodeBinary(w) - w.WriteU16LE(u.Index) - w.WriteU32LE(u.Start) - w.WriteU32LE(u.End) - u.Value.EncodeBinary(w) -} - // GetBalanceValues sums all unspent outputs and returns a map of asset IDs to // overall balances. func (s *Account) GetBalanceValues() map[util.Uint256]util.Fixed8 { diff --git a/pkg/core/state/account_test.go b/pkg/core/state/account_test.go index fab1049d7..32a7a6754 100644 --- a/pkg/core/state/account_test.go +++ b/pkg/core/state/account_test.go @@ -30,7 +30,6 @@ func TestDecodeEncodeAccountState(t *testing.T) { ScriptHash: random.Uint160(), IsFrozen: true, Balances: balances, - Unclaimed: UnclaimedBalances{Raw: []byte{}}, } testserdes.EncodeDecodeBinary(t, a, new(Account)) diff --git a/pkg/core/state/unclaimed.go b/pkg/core/state/unclaimed.go deleted file mode 100644 index c0d3bf11c..000000000 --- a/pkg/core/state/unclaimed.go +++ /dev/null @@ -1,69 +0,0 @@ -package state - -import ( - "bytes" - "encoding/binary" - - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// UnclaimedBalanceSize is a size of the UnclaimedBalance struct in bytes. -const UnclaimedBalanceSize = util.Uint256Size + 2 + 4 + 4 + 8 - -// UnclaimedBalances is a slice of UnclaimedBalance. -type UnclaimedBalances struct { - Raw []byte -} - -// Size returns an amount of store unclaimed balances. -func (bs *UnclaimedBalances) Size() int { - return len(bs.Raw) / UnclaimedBalanceSize -} - -// ForEach iterates over all unclaimed balances. -func (bs *UnclaimedBalances) ForEach(f func(*UnclaimedBalance) error) error { - b := new(UnclaimedBalance) - for i := 0; i < len(bs.Raw); i += UnclaimedBalanceSize { - r := io.NewBinReaderFromBuf(bs.Raw[i : i+UnclaimedBalanceSize]) - b.DecodeBinary(r) - if r.Err != nil { - return r.Err - } else if err := f(b); err != nil { - return err - } - } - return nil -} - -// Remove removes specified unclaim from the list and returns -// false if it wasn't found. -func (bs *UnclaimedBalances) Remove(tx util.Uint256, index uint16) bool { - const keySize = util.Uint256Size + 2 - key := make([]byte, keySize) - copy(key, tx[:]) - binary.LittleEndian.PutUint16(key[util.Uint256Size:], index) - - for i := 0; i < len(bs.Raw); i += UnclaimedBalanceSize { - if bytes.Equal(bs.Raw[i:i+keySize], key) { - lastIndex := len(bs.Raw) - UnclaimedBalanceSize - if i != lastIndex { - copy(bs.Raw[i:i+UnclaimedBalanceSize], bs.Raw[lastIndex:]) - } - bs.Raw = bs.Raw[:lastIndex] - return true - } - } - return false -} - -// Put puts new unclaim in a list. -func (bs *UnclaimedBalances) Put(b *UnclaimedBalance) error { - w := io.NewBufBinWriter() - b.EncodeBinary(w.BinWriter) - if w.Err != nil { - return w.Err - } - bs.Raw = append(bs.Raw, w.Bytes()...) - return nil -} diff --git a/pkg/core/state/unclaimed_test.go b/pkg/core/state/unclaimed_test.go deleted file mode 100644 index 5972688a6..000000000 --- a/pkg/core/state/unclaimed_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package state - -import ( - "encoding/binary" - "math/rand" - "testing" - - "github.com/nspcc-dev/neo-go/pkg/internal/random" - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/nspcc-dev/neo-go/pkg/util" - "github.com/stretchr/testify/require" -) - -func TestUnclaimedBalance_Structure(t *testing.T) { - b := randomUnclaimed(t) - buf, err := testserdes.EncodeBinary(b) - require.NoError(t, err) - require.Equal(t, UnclaimedBalanceSize, len(buf)) - require.Equal(t, b.Tx.BytesBE(), buf[:util.Uint256Size]) - require.Equal(t, b.Index, binary.LittleEndian.Uint16(buf[util.Uint256Size:])) -} - -func TestUnclaimedBalances_Put(t *testing.T) { - bs := new(UnclaimedBalances) - b1 := randomUnclaimed(t) - b2 := randomUnclaimed(t) - b3 := randomUnclaimed(t) - - require.NoError(t, bs.Put(b1)) - require.Equal(t, 1, bs.Size()) - require.NoError(t, bs.Put(b2)) - require.Equal(t, 2, bs.Size()) - require.NoError(t, bs.Put(b3)) - require.Equal(t, 3, bs.Size()) - require.True(t, bs.Remove(b2.Tx, b2.Index)) - require.Equal(t, 2, bs.Size()) - require.False(t, bs.Remove(b2.Tx, b2.Index)) - require.Equal(t, 2, bs.Size()) - require.True(t, bs.Remove(b1.Tx, b1.Index)) - require.Equal(t, 1, bs.Size()) - require.True(t, bs.Remove(b3.Tx, b3.Index)) - require.Equal(t, 0, bs.Size()) -} - -func TestUnclaimedBalances_ForEach(t *testing.T) { - bs := new(UnclaimedBalances) - b1 := randomUnclaimed(t) - b2 := randomUnclaimed(t) - b3 := randomUnclaimed(t) - - require.NoError(t, bs.Put(b1)) - require.NoError(t, bs.Put(b2)) - require.NoError(t, bs.Put(b3)) - - var indices []uint16 - err := bs.ForEach(func(b *UnclaimedBalance) error { - indices = append(indices, b.Index) - return nil - }) - require.NoError(t, err) - require.Equal(t, []uint16{b1.Index, b2.Index, b3.Index}, indices) -} - -func randomUnclaimed(t *testing.T) *UnclaimedBalance { - b := new(UnclaimedBalance) - b.Tx = random.Uint256() - b.Index = uint16(rand.Uint32()) - b.Start = rand.Uint32() - b.End = rand.Uint32() - b.Value = util.Fixed8(rand.Int63()) - - return b -} diff --git a/pkg/core/transaction/claim.go b/pkg/core/transaction/claim.go deleted file mode 100644 index 704d9035b..000000000 --- a/pkg/core/transaction/claim.go +++ /dev/null @@ -1,38 +0,0 @@ -package transaction - -import ( - "math/rand" - - "github.com/nspcc-dev/neo-go/pkg/io" -) - -// ClaimTX represents a claim transaction. -type ClaimTX struct { - Claims []Input -} - -// NewClaimTX creates Transaction of ClaimType type. -func NewClaimTX(claim *ClaimTX) *Transaction { - return &Transaction{ - Type: ClaimType, - Version: 0, - Nonce: rand.Uint32(), - Data: claim, - Attributes: []Attribute{}, - Cosigners: []Cosigner{}, - Inputs: []Input{}, - Outputs: []Output{}, - Scripts: []Witness{}, - Trimmed: false, - } -} - -// DecodeBinary implements Serializable interface. -func (tx *ClaimTX) DecodeBinary(br *io.BinReader) { - br.ReadArray(&tx.Claims) -} - -// EncodeBinary implements Serializable interface. -func (tx *ClaimTX) EncodeBinary(bw *io.BinWriter) { - bw.WriteArray(tx.Claims) -} diff --git a/pkg/core/transaction/helper_test.go b/pkg/core/transaction/helper_test.go index 1f1cae62f..6cbd5e61c 100644 --- a/pkg/core/transaction/helper_test.go +++ b/pkg/core/transaction/helper_test.go @@ -9,8 +9,6 @@ import ( var ( //TODO NEO3.0: Update binary - // https://neotracker.io/tx/2c6a45547b3898318e400e541628990a07acb00f3b9a15a8e966ae49525304da - rawClaimTX = "020004bc67ba325d6412ff4c55b10f7e9afb54bbb2228d201b37363c3d697ac7c198f70300591cd454d7318d2087c0196abfbbd1573230380672f0f0cd004dcb4857e58cbd010031bcfbed573f5318437e95edd603922a4455ff3326a979fdd1c149a84c4cb0290000b51eb6159c58cac4fe23d90e292ad2bcb7002b0da2c474e81e1889c0649d2c490000000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c603b555f00000000005d9de59d99c0d1f6ed1496444473f4a0b538302f014140456349cec43053009accdb7781b0799c6b591c812768804ab0a0b56b5eae7a97694227fcd33e70899c075848b2cee8fae733faac6865b484d3f7df8949e2aadb232103945fae1ed3c31d778f149192b76734fcc951b400ba3598faa81ff92ebe477eacac" // https://neotracker.io/tx/fe4b3af60677204c57e573a57bdc97bc5059b05ad85b1474f84431f88d910f64 rawInvocationTX = "d101590400b33f7114839c33710da24cf8e7d536b8d244f3991cf565c8146063795d3b9b3cd55aef026eae992b91063db0db53c1087472616e7366657267c5cc1cb5392019e2cc4e6d6b5ea54c8d4b6d11acf166cb072961424c54f6000000000000000001206063795d3b9b3cd55aef026eae992b91063db0db0000014140c6a131c55ca38995402dff8e92ac55d89cbed4b98dfebbcb01acbc01bd78fa2ce2061be921b8999a9ab79c2958875bccfafe7ce1bbbaf1f56580815ea3a4feed232102d41ddce2c97be4c9aa571b8a32cbc305aa29afffbcae71b0ef568db0e93929aaac" ) diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index 0afdcd31a..8b4669f65 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -176,9 +176,6 @@ func (t *Transaction) decodeData(r *io.BinReader) { case InvocationType: t.Data = &InvocationTX{} t.Data.(*InvocationTX).DecodeBinary(r) - case ClaimType: - t.Data = &ClaimTX{} - t.Data.(*ClaimTX).DecodeBinary(r) case ContractType: t.Data = &ContractTX{} t.Data.(*ContractTX).DecodeBinary(r) @@ -313,7 +310,6 @@ type transactionJSON struct { Outputs []Output `json:"vout"` Scripts []Witness `json:"scripts"` - Claims []Input `json:"claims,omitempty"` Script string `json:"script,omitempty"` Asset *registeredAsset `json:"asset,omitempty"` } @@ -337,8 +333,6 @@ func (t *Transaction) MarshalJSON() ([]byte, error) { NetworkFee: t.NetworkFee, } switch t.Type { - case ClaimType: - tx.Claims = t.Data.(*ClaimTX).Claims case InvocationType: tx.Script = hex.EncodeToString(t.Data.(*InvocationTX).Script) case RegisterType: @@ -378,10 +372,6 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { } t.Sender = sender switch tx.Type { - case ClaimType: - t.Data = &ClaimTX{ - Claims: tx.Claims, - } case InvocationType: bytes, err := hex.DecodeString(tx.Script) if err != nil { diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index 0a9cd2750..c5cbeb21d 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -36,31 +36,6 @@ func TestWitnessEncodeDecode(t *testing.T) { // TODO NEO3.0: update binary /* -func TestDecodeEncodeClaimTX(t *testing.T) { - tx := decodeTransaction(rawClaimTX, t) - assert.Equal(t, tx.Type, ClaimType) - assert.IsType(t, tx.Data, &ClaimTX{}) - claimTX := tx.Data.(*ClaimTX) - assert.Equal(t, 4, len(claimTX.Claims)) - assert.Equal(t, 0, len(tx.Attributes)) - assert.Equal(t, 0, len(tx.Inputs)) - assert.Equal(t, 1, len(tx.Outputs)) - assert.Equal(t, "AQJseD8iBmCD4sgfHRhMahmoi9zvopG6yz", address.Uint160ToString(tx.Outputs[0].ScriptHash)) - assert.Equal(t, "602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7", tx.Outputs[0].AssetID.StringLE()) - assert.Equal(t, tx.Outputs[0].Amount.String(), "0.06247739") - invoc := "40456349cec43053009accdb7781b0799c6b591c812768804ab0a0b56b5eae7a97694227fcd33e70899c075848b2cee8fae733faac6865b484d3f7df8949e2aadb" - verif := "2103945fae1ed3c31d778f149192b76734fcc951b400ba3598faa81ff92ebe477eacac" - assert.Equal(t, 1, len(tx.Scripts)) - assert.Equal(t, invoc, hex.EncodeToString(tx.Scripts[0].InvocationScript)) - assert.Equal(t, verif, hex.EncodeToString(tx.Scripts[0].VerificationScript)) - - data, err := testserdes.EncodeBinary(tx) - assert.NoError(t, err) - assert.Equal(t, rawClaimTX, hex.EncodeToString(data)) - - hash := "2c6a45547b3898318e400e541628990a07acb00f3b9a15a8e966ae49525304da" - assert.Equal(t, hash, tx.hash.StringLE()) -} func TestDecodeEncodeInvocationTX(t *testing.T) { tx := decodeTransaction(rawInvocationTX, t) @@ -120,34 +95,6 @@ func TestMarshalUnmarshalJSONContractTX(t *testing.T) { testserdes.MarshalUnmarshalJSON(t, tx, new(Transaction)) } -func TestMarshalUnmarshalJSONClaimTX(t *testing.T) { - tx := &Transaction{ - Type: ClaimType, - Version: 0, - Data: &ClaimTX{Claims: []Input{ - { - PrevHash: util.Uint256{1, 2, 3, 4}, - PrevIndex: uint16(56), - }, - }}, - Attributes: []Attribute{}, - Inputs: []Input{{ - PrevHash: util.Uint256{5, 6, 7, 8}, - PrevIndex: uint16(12), - }}, - Outputs: []Output{{ - AssetID: util.Uint256{1, 2, 3}, - Amount: util.Fixed8FromInt64(1), - ScriptHash: util.Uint160{1, 2, 3}, - Position: 0, - }}, - Scripts: []Witness{}, - Trimmed: false, - } - - testserdes.MarshalUnmarshalJSON(t, tx, new(Transaction)) -} - func TestMarshalUnmarshalJSONInvocationTX(t *testing.T) { tx := &Transaction{ Type: InvocationType, diff --git a/pkg/core/transaction/type.go b/pkg/core/transaction/type.go index bf5d34420..9fd07a0e4 100644 --- a/pkg/core/transaction/type.go +++ b/pkg/core/transaction/type.go @@ -12,7 +12,6 @@ type TXType uint8 // Constants for all valid transaction types. const ( IssueType TXType = 0x01 - ClaimType TXType = 0x02 RegisterType TXType = 0x40 ContractType TXType = 0x80 InvocationType TXType = 0xd1 @@ -23,8 +22,6 @@ func (t TXType) String() string { switch t { case IssueType: return "IssueTransaction" - case ClaimType: - return "ClaimTransaction" case RegisterType: return "RegisterTransaction" case ContractType: @@ -57,8 +54,6 @@ func TXTypeFromString(jsonString string) (TXType, error) { switch jsonString = strings.TrimSpace(jsonString); jsonString { case "IssueTransaction": return IssueType, nil - case "ClaimTransaction": - return ClaimType, nil case "RegisterTransaction": return RegisterType, nil case "ContractTransaction": diff --git a/pkg/interop/transaction/transaction.go b/pkg/interop/transaction/transaction.go index e354d7baf..3c47e8be2 100644 --- a/pkg/interop/transaction/transaction.go +++ b/pkg/interop/transaction/transaction.go @@ -24,7 +24,6 @@ func GetHash(t Transaction) []byte { // GetType returns the type of the given transaction. Possible values: // MinerTransaction = 0x00 // IssueTransaction = 0x01 -// ClaimTransaction = 0x02 // EnrollmentTransaction = 0x20 // RegisterTransaction = 0x40 // ContractTransaction = 0x80 From 6853470603afab30ace9d0f5de4cb4e0a9e052b3 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 12:14:27 +0300 Subject: [PATCH 28/42] block: precompute ConsensusData hash on UnmarshalJSON That's what we usually do for block or transaction hashes. --- pkg/core/block/block.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/core/block/block.go b/pkg/core/block/block.go index 14c39ce51..cee27d060 100644 --- a/pkg/core/block/block.go +++ b/pkg/core/block/block.go @@ -227,5 +227,8 @@ func (b *Block) UnmarshalJSON(data []byte) error { b.Base = *base b.Transactions = auxb.Transactions b.ConsensusData = auxb.ConsensusData + // Some tests rely on hash presence and we're usually precomputing + // other hashes upon deserialization. + _ = b.ConsensusData.Hash() return nil } From f445f7c602f3325d2e19c022e02348038e641533 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 12:17:16 +0300 Subject: [PATCH 29/42] transaction: drop Contract transaction type --- pkg/consensus/consensus_test.go | 11 +- pkg/core/blockchain_test.go | 2 +- pkg/core/mempool/mem_pool_test.go | 37 +-- pkg/core/transaction/contract.go | 35 --- pkg/core/transaction/contract_test.go | 30 --- pkg/core/transaction/transaction.go | 12 +- pkg/core/transaction/transaction_test.go | 16 -- pkg/core/transaction/type.go | 5 - pkg/interop/transaction/transaction.go | 1 - pkg/rpc/client/rpc_test.go | 290 ++++++---------------- pkg/rpc/server/server_test.go | 5 +- pkg/smartcontract/context/context_test.go | 4 +- 12 files changed, 110 insertions(+), 338 deletions(-) delete mode 100644 pkg/core/transaction/contract.go delete mode 100644 pkg/core/transaction/contract_test.go diff --git a/pkg/consensus/consensus_test.go b/pkg/consensus/consensus_test.go index 0b8d3dfc3..766201de5 100644 --- a/pkg/consensus/consensus_test.go +++ b/pkg/consensus/consensus_test.go @@ -15,6 +15,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/emit" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" @@ -22,7 +23,7 @@ import ( func TestNewService(t *testing.T) { srv := newTestService(t) - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.ValidUntilBlock = 1 addSender(t, tx) signTx(t, srv.Chain.FeePerByte(), tx) @@ -39,7 +40,7 @@ func TestService_GetVerified(t *testing.T) { srv := newTestService(t) var txs []*transaction.Transaction for i := 0; i < 4; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 123 + uint32(i) tx.ValidUntilBlock = 1 txs = append(txs, tx) @@ -53,7 +54,7 @@ func TestService_GetVerified(t *testing.T) { p := new(Payload) p.message = &message{} p.SetType(payload.PrepareRequestType) - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 999 p.SetPayload(&prepareRequest{transactionHashes: hashes}) p.SetValidatorIndex(1) @@ -120,7 +121,7 @@ func TestService_getTx(t *testing.T) { srv := newTestService(t) t.Run("transaction in mempool", func(t *testing.T) { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 1234 tx.ValidUntilBlock = 1 addSender(t, tx) @@ -137,7 +138,7 @@ func TestService_getTx(t *testing.T) { }) t.Run("transaction in local cache", func(t *testing.T) { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 4321 tx.ValidUntilBlock = 1 h := tx.Hash() diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index cb8f94faa..3eb3c39be 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -102,7 +102,7 @@ func TestScriptFromWitness(t *testing.T) { func TestGetHeader(t *testing.T) { bc := newTestChain(t) - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.ValidUntilBlock = bc.BlockHeight() + 1 assert.Nil(t, addSender(tx)) assert.Nil(t, signTx(bc, tx)) diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index 843627082..5484e810c 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -7,6 +7,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/internal/random" "github.com/nspcc-dev/neo-go/pkg/util" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -30,7 +31,7 @@ func (fs *FeerStub) GetUtilityTokenBalance(uint160 util.Uint160) util.Fixed8 { func testMemPoolAddRemoveWithFeer(t *testing.T, fs Feer) { mp := NewMemPool(10) - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 0 _, _, ok := mp.TryGetValue(tx.Hash()) require.Equal(t, false, ok) @@ -64,7 +65,7 @@ func TestMemPoolAddRemoveWithInputs(t *testing.T) { mpLessInputs := func(i, j int) bool { return mp.inputs[i].Cmp(mp.inputs[j]) < 0 } - txm1 := transaction.NewContractTX() + txm1 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) txm1.Nonce = 1 for i := 0; i < 5; i++ { txm1.Inputs = append(txm1.Inputs, transaction.Input{PrevHash: hash1, PrevIndex: uint16(100 - i)}) @@ -74,7 +75,7 @@ func TestMemPoolAddRemoveWithInputs(t *testing.T) { assert.Equal(t, len(txm1.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - txm2 := transaction.NewContractTX() + txm2 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) txm2.Nonce = 1 for i := 0; i < 10; i++ { txm2.Inputs = append(txm2.Inputs, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i)}) @@ -103,21 +104,21 @@ func TestMemPoolAddRemoveWithInputs(t *testing.T) { func TestMemPoolVerifyInputs(t *testing.T) { mp := NewMemPool(10) - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 1 inhash1 := random.Uint256() tx.Inputs = append(tx.Inputs, transaction.Input{PrevHash: inhash1, PrevIndex: 0}) require.Equal(t, true, mp.Verify(tx, &FeerStub{})) require.NoError(t, mp.Add(tx, &FeerStub{})) - tx2 := transaction.NewContractTX() + tx2 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx2.Nonce = 2 inhash2 := random.Uint256() tx2.Inputs = append(tx2.Inputs, transaction.Input{PrevHash: inhash2, PrevIndex: 0}) require.Equal(t, true, mp.Verify(tx2, &FeerStub{})) require.NoError(t, mp.Add(tx2, &FeerStub{})) - tx3 := transaction.NewContractTX() + tx3 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx3.Nonce = 3 // Different index number, but the same PrevHash as in tx1. tx3.Inputs = append(tx3.Inputs, transaction.Input{PrevHash: inhash1, PrevIndex: 1}) @@ -157,7 +158,7 @@ func TestOverCapacity(t *testing.T) { mp := NewMemPool(mempoolSize) for i := 0; i < mempoolSize; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = uint32(i) require.NoError(t, mp.Add(tx, fs)) } @@ -167,7 +168,7 @@ func TestOverCapacity(t *testing.T) { // Fees are also prioritized. for i := 0; i < mempoolSize; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Attributes = append(tx.Attributes, transaction.Attribute{ Usage: transaction.Hash1, Data: util.Uint256{1, 2, 3, 4}.BytesBE(), @@ -181,7 +182,7 @@ func TestOverCapacity(t *testing.T) { require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) } // Less prioritized txes are not allowed anymore. - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Attributes = append(tx.Attributes, transaction.Attribute{ Usage: transaction.Hash1, Data: util.Uint256{1, 2, 3, 4}.BytesBE(), @@ -194,7 +195,7 @@ func TestOverCapacity(t *testing.T) { require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) // Low net fee, but higher per-byte fee is still a better combination. - tx = transaction.NewContractTX() + tx = transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = txcnt tx.NetworkFee = util.Fixed8FromFloat(0.00007) txcnt++ @@ -207,7 +208,7 @@ func TestOverCapacity(t *testing.T) { // High priority always wins over low priority. fs.lowPriority = false for i := 0; i < mempoolSize; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = txcnt txcnt++ require.NoError(t, mp.Add(tx, fs)) @@ -216,7 +217,7 @@ func TestOverCapacity(t *testing.T) { } // Good luck with low priority now. fs.lowPriority = true - tx = transaction.NewContractTX() + tx = transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = txcnt require.Error(t, mp.Add(tx, fs)) require.Equal(t, mempoolSize, mp.Count()) @@ -230,7 +231,7 @@ func TestGetVerified(t *testing.T) { txes := make([]*transaction.Transaction, 0, mempoolSize) for i := 0; i < mempoolSize; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = uint32(i) txes = append(txes, tx) require.NoError(t, mp.Add(tx, fs)) @@ -256,7 +257,7 @@ func TestRemoveStale(t *testing.T) { txes1 := make([]*transaction.Transaction, 0, mempoolSize/2) txes2 := make([]*transaction.Transaction, 0, mempoolSize/2) for i := 0; i < mempoolSize; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = uint32(i) if i%2 == 0 { txes1 = append(txes1, tx) @@ -285,7 +286,7 @@ func TestRemoveStale(t *testing.T) { func TestMemPoolFees(t *testing.T) { mp := NewMemPool(10) sender0 := util.Uint160{1, 2, 3} - tx0 := transaction.NewContractTX() + tx0 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx0.NetworkFee = util.Fixed8FromInt64(11000) tx0.Sender = sender0 // insufficient funds to add transaction, but balance should be stored @@ -298,7 +299,7 @@ func TestMemPoolFees(t *testing.T) { }, mp.fees[sender0]) // no problems with adding another transaction with lower fee - tx1 := transaction.NewContractTX() + tx1 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx1.NetworkFee = util.Fixed8FromInt64(7000) tx1.Sender = sender0 require.NoError(t, mp.Add(tx1, &FeerStub{})) @@ -309,7 +310,7 @@ func TestMemPoolFees(t *testing.T) { }, mp.fees[sender0]) // balance shouldn't change after adding one more transaction - tx2 := transaction.NewContractTX() + tx2 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx2.NetworkFee = util.Fixed8FromFloat(3000) tx2.Sender = sender0 require.NoError(t, mp.Add(tx2, &FeerStub{})) @@ -321,7 +322,7 @@ func TestMemPoolFees(t *testing.T) { }, mp.fees[sender0]) // can't add more transactions as we don't have enough GAS - tx3 := transaction.NewContractTX() + tx3 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx3.NetworkFee = util.Fixed8FromFloat(0.5) tx3.Sender = sender0 require.Equal(t, false, mp.Verify(tx3, &FeerStub{})) diff --git a/pkg/core/transaction/contract.go b/pkg/core/transaction/contract.go deleted file mode 100644 index c4a99a1cf..000000000 --- a/pkg/core/transaction/contract.go +++ /dev/null @@ -1,35 +0,0 @@ -package transaction - -import ( - "math/rand" - - "github.com/nspcc-dev/neo-go/pkg/io" -) - -// ContractTX represents a contract transaction. -// This TX has not special attributes. -type ContractTX struct{} - -// NewContractTX creates Transaction of ContractType type. -func NewContractTX() *Transaction { - return &Transaction{ - Type: ContractType, - Version: 0, - Nonce: rand.Uint32(), - Data: &ContractTX{}, - Attributes: []Attribute{}, - Cosigners: []Cosigner{}, - Inputs: []Input{}, - Outputs: []Output{}, - Scripts: []Witness{}, - Trimmed: false, - } -} - -// DecodeBinary implements Serializable interface. -func (tx *ContractTX) DecodeBinary(r *io.BinReader) { -} - -// EncodeBinary implements Serializable interface. -func (tx *ContractTX) EncodeBinary(w *io.BinWriter) { -} diff --git a/pkg/core/transaction/contract_test.go b/pkg/core/transaction/contract_test.go deleted file mode 100644 index f535b899c..000000000 --- a/pkg/core/transaction/contract_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package transaction - -//TODO NEO3.0: Update binary -/* -func TestEncodeDecodeContract(t *testing.T) { - // mainnet transaction: bdf6cc3b9af12a7565bda80933a75ee8cef1bc771d0d58effc08e4c8b436da79 - rawtx := "80000001888da99f8f497fd65c4325786a09511159c279af4e7eb532e9edd628c87cc1ee0000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50082167010000000a8666b4830229d6a1a9b80f6088059191c122d2b0141409e79e132290c82916a88f1a3db5cf9f3248b780cfece938ab0f0812d0e188f3a489c7d1a23def86bd69d863ae67de753b2c2392e9497eadc8eb9fc43aa52c645232103e2f6a334e05002624cf616f01a62cff2844c34a3b08ca16048c259097e315078ac" - tx := decodeTransaction(rawtx, t) - - assert.Equal(t, ContractType, tx.Type) - assert.IsType(t, tx.Data, &ContractTX{}) - assert.Equal(t, 0, int(tx.Version)) - assert.Equal(t, 1, len(tx.Inputs)) - - input := tx.Inputs[0] - - assert.Equal(t, "eec17cc828d6ede932b57e4eaf79c2591151096a7825435cd67f498f9fa98d88", input.PrevHash.StringLE()) - assert.Equal(t, 0, int(input.PrevIndex)) - assert.Equal(t, int64(706), tx.Outputs[0].Amount.IntegralValue()) - assert.Equal(t, int32(0), tx.Outputs[0].Amount.FractionalValue()) - assert.Equal(t, "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b", tx.Outputs[0].AssetID.StringLE()) - assert.Equal(t, "a8666b4830229d6a1a9b80f6088059191c122d2b", tx.Outputs[0].ScriptHash.String()) - assert.Equal(t, "bdf6cc3b9af12a7565bda80933a75ee8cef1bc771d0d58effc08e4c8b436da79", tx.Hash().StringLE()) - - // Encode - data, err := testserdes.EncodeBinary(tx) - assert.NoError(t, err) - assert.Equal(t, rawtx, hex.EncodeToString(data)) -} -*/ diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index 8b4669f65..23784c03a 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -176,9 +176,6 @@ func (t *Transaction) decodeData(r *io.BinReader) { case InvocationType: t.Data = &InvocationTX{} t.Data.(*InvocationTX).DecodeBinary(r) - case ContractType: - t.Data = &ContractTX{} - t.Data.(*ContractTX).DecodeBinary(r) case RegisterType: t.Data = &RegisterTX{} t.Data.(*RegisterTX).DecodeBinary(r) @@ -199,8 +196,7 @@ func (t *Transaction) EncodeBinary(bw *io.BinWriter) { // encodeHashableFields encodes the fields that are not used for // signing the transaction, which are all fields except the scripts. func (t *Transaction) encodeHashableFields(bw *io.BinWriter) { - noData := t.Type == ContractType - if t.Data == nil && !noData { + if t.Data == nil { bw.Err = errors.New("transaction has no data") return } @@ -213,9 +209,7 @@ func (t *Transaction) encodeHashableFields(bw *io.BinWriter) { bw.WriteU32LE(t.ValidUntilBlock) // Underlying TXer. - if !noData { - t.Data.EncodeBinary(bw) - } + t.Data.EncodeBinary(bw) // Attributes bw.WriteArray(t.Attributes) @@ -393,8 +387,6 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { Owner: tx.Asset.Owner, Admin: admin, } - case ContractType: - t.Data = &ContractTX{} case IssueType: t.Data = &IssueTX{} } diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index c5cbeb21d..5985eba59 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -79,22 +79,6 @@ func TestEncodingTXWithNoData(t *testing.T) { require.Error(t, err) } -func TestMarshalUnmarshalJSONContractTX(t *testing.T) { - tx := NewContractTX() - tx.Outputs = []Output{{ - AssetID: util.Uint256{1, 2, 3, 4}, - Amount: 567, - ScriptHash: util.Uint160{7, 8, 9, 10}, - Position: 13, - }} - tx.Scripts = []Witness{{ - InvocationScript: []byte{5, 3, 1}, - VerificationScript: []byte{2, 4, 6}, - }} - tx.Data = &ContractTX{} - testserdes.MarshalUnmarshalJSON(t, tx, new(Transaction)) -} - func TestMarshalUnmarshalJSONInvocationTX(t *testing.T) { tx := &Transaction{ Type: InvocationType, diff --git a/pkg/core/transaction/type.go b/pkg/core/transaction/type.go index 9fd07a0e4..cb21ca711 100644 --- a/pkg/core/transaction/type.go +++ b/pkg/core/transaction/type.go @@ -13,7 +13,6 @@ type TXType uint8 const ( IssueType TXType = 0x01 RegisterType TXType = 0x40 - ContractType TXType = 0x80 InvocationType TXType = 0xd1 ) @@ -24,8 +23,6 @@ func (t TXType) String() string { return "IssueTransaction" case RegisterType: return "RegisterTransaction" - case ContractType: - return "ContractTransaction" case InvocationType: return "InvocationTransaction" default: @@ -56,8 +53,6 @@ func TXTypeFromString(jsonString string) (TXType, error) { return IssueType, nil case "RegisterTransaction": return RegisterType, nil - case "ContractTransaction": - return ContractType, nil case "InvocationTransaction": return InvocationType, nil default: diff --git a/pkg/interop/transaction/transaction.go b/pkg/interop/transaction/transaction.go index 3c47e8be2..97cadb524 100644 --- a/pkg/interop/transaction/transaction.go +++ b/pkg/interop/transaction/transaction.go @@ -26,7 +26,6 @@ func GetHash(t Transaction) []byte { // IssueTransaction = 0x01 // EnrollmentTransaction = 0x20 // RegisterTransaction = 0x40 -// ContractTransaction = 0x80 // StateType = 0x90 // AgencyTransaction = 0xb0 // PublishTransaction = 0xd0 diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index a9faf8387..33077fd76 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -3,7 +3,6 @@ package client import ( "context" "encoding/hex" - "fmt" "net/http" "net/http/httptest" "strings" @@ -11,14 +10,15 @@ import ( "time" "github.com/gorilla/websocket" - "github.com/nspcc-dev/neo-go/pkg/core" "github.com/nspcc-dev/neo-go/pkg/core/block" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/encoding/address" + "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" "github.com/nspcc-dev/neo-go/pkg/rpc/request" "github.com/nspcc-dev/neo-go/pkg/rpc/response/result" "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/util" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -31,113 +31,60 @@ type rpcClientTestCase struct { check func(t *testing.T, c *Client, result interface{}) } -// getResultBlock202 returns data for block number 1 which is used by several tests. -func getResultBlock202() *result.Block { - nextBlockHash, err := util.Uint256DecodeStringLE("13283c93aec07dc90be3ddd65e2de15e9212f1b3205303f688d6df85129f6b22") - if err != nil { - panic(err) - } - prevBlockHash, err := util.Uint256DecodeStringLE("93b540424c1173e487a47582a652686b2885f959ffd895b30e184842403990ef") - if err != nil { - panic(err) - } - merkleRoot, err := util.Uint256DecodeStringLE("b8e923148dede20901d6fb225579f6d430cc58f24461d1b0f860ee32abbfcc8d") - if err != nil { - panic(err) - } - invScript, err := hex.DecodeString("0c403620ef8f02d7884c553fb6c54d2fe717cfddd9450886c5fc88a669a29a82fa1a7c715076996567a5a56747f20f10d7e4db071d73b306ccbf17f9a916fcfa1d020c4099e27d87bbb3fb4ce1c77dca85cf3eac46c9c3de87d8022ef7ad2b0a2bb980339293849cf85e5a0a5615ea7bc5bb0a7f28e31f278dc19d628f64c49b888df4c60c40616eefc9286843c2f3f2cf1815988356e409b3f10ffaf60b3468dc0a92dd929cbc8d5da74052c303e7474412f6beaddd551e9056c4e7a5fccdc06107e48f3fe10c40fd2d25d4156e969345c0522669b509e5ced70e4265066eadaf85eea3919d5ded525f8f52d6f0dfa0186c964dd0302fca5bc2dc0540b4ed21085be478c3123996") - if err != nil { - panic(err) - } - verifScript, err := hex.DecodeString("130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb") - if err != nil { - panic(err) - } - sender, err := address.StringToUint160("ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG") - if err != nil { - panic(err) - } - txInvScript, err := hex.DecodeString("0c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb") - if err != nil { - panic(err) - } - txVerifScript, err := hex.DecodeString("0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4") - if err != nil { - panic(err) - } - vin, err := util.Uint256DecodeStringLE("33e045101301854a0e07ff96a92ca1ba9b23c19501f1b7eb15ae9eea07b5f370") - if err != nil { - panic(err) - } - outAddress, err := address.StringToUint160("ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG") - if err != nil { - panic(err) - } - tx := transaction.NewContractTX() - tx.Nonce = 3 - tx.ValidUntilBlock = 1200 - tx.Sender = sender - tx.Scripts = []transaction.Witness{ - { - InvocationScript: txInvScript, - VerificationScript: txVerifScript, - }, - } - tx.Inputs = []transaction.Input{ - { - PrevHash: vin, - PrevIndex: 0, - }, - } - tx.Outputs = []transaction.Output{ - { - AssetID: core.GoverningTokenID(), - Amount: util.Fixed8FromInt64(99999000), - ScriptHash: outAddress, - Position: 0, - }, - } +const hexB1 = "0000000028de4a34063483263ea9899827792bfdc4acf6b533e7294dbb4838b820e9a40b5a448a04e699901d0ed78a62d11e2d0754f152dce78e08c8227d95bdf1df932a3eefd85e0000000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae76294130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb03005704000000000000d10102000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000f66a0d0000000000b0040000590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001abec5362f11e75b6e02e407bb98d63675d14384101000001fd08010c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b694130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bbd10103000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000967a0d0000000000b00400005d0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b52380001abec5362f11e75b6e02e407bb98d63675d14384101000001fd08010c40cfb0f8c01f320069f8f826cc5e3a9538e4eee4d228f1f2c53028be61c2df99b4341005ff8f50bde0e4827c7b0828eab59faca6eb2315fd11cd802daf88354fc90c4022deeaf06116faad8d9665dbb504a0049bb9f5b57713c85bfd894e12d3d46a73617199ff0854e3d5dde0dece92d8f1fd496b78c71727cfc03819f1d109ef827e0c406f68afac9da6dc56172ae57f56c5f1f3767d12d1a0aee2fecae80133b8e725578639b2ab15f230ce528ed4c85dfcfa4b231d5ff4ecc48555e68adf45e2e475500c4042a504fae6914f86b1318a3e278e8ca18e92db7fa432f05364824ea96a95899a0b3c0b07a910a3782b17fc46bc2a6b31259d1d046fcc508d7873e90ec67cc70794130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" - var nonce uint64 - i, err := fmt.Sscanf("0000000000000457", "%016x", &nonce) - if i != 1 { - panic("can't decode nonce") - } +const hexTxMoveNeo = "d10102000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000f66a0d0000000000b0040000590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001abec5362f11e75b6e02e407bb98d63675d14384101000001fd08010c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b694130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" + +const b1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"size":1687,"nextblockhash":"0x96a0856f49798732e6eae4026a5f3e919b96250d847bcb3560d03bbad895c740","confirmations":4,"hash":"0xf7c3cecbe8fb15560c3113dd03911e52858a233b32cdc761ca03bc0721553424","version":0,"previousblockhash":"0x0ba4e920b83848bb4d29e733b5f6acc4fd2b79279889a93e26833406344ade28","merkleroot":"0x2a93dff1bd957d22c8088ee7dc52f154072d1ed1628ad70e1d9099e6048a445a","time":1591275326,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae762","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xf93ae1dbd2167e9b4a06431741297b351ac6a8ea3ae8892785c49f690a40b2c0","size":578,"type":"InvocationTransaction","version":1,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087935","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b6","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238"},{"txid":"0xe2caf7a9ce32a0daad81fd76f67aa64ffbe7cedf0fdeb8c57c466b6f5833bf0b","size":582,"type":"InvocationTransaction","version":1,"nonce":3,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0088335","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c40cfb0f8c01f320069f8f826cc5e3a9538e4eee4d228f1f2c53028be61c2df99b4341005ff8f50bde0e4827c7b0828eab59faca6eb2315fd11cd802daf88354fc90c4022deeaf06116faad8d9665dbb504a0049bb9f5b57713c85bfd894e12d3d46a73617199ff0854e3d5dde0dece92d8f1fd496b78c71727cfc03819f1d109ef827e0c406f68afac9da6dc56172ae57f56c5f1f3767d12d1a0aee2fecae80133b8e725578639b2ab15f230ce528ed4c85dfcfa4b231d5ff4ecc48555e68adf45e2e475500c4042a504fae6914f86b1318a3e278e8ca18e92db7fa432f05364824ea96a95899a0b3c0b07a910a3782b17fc46bc2a6b31259d1d046fcc508d7873e90ec67cc707","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"script":"0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238"}]}}` + +const hexHeader1 = "0000000028de4a34063483263ea9899827792bfdc4acf6b533e7294dbb4838b820e9a40b5a448a04e699901d0ed78a62d11e2d0754f152dce78e08c8227d95bdf1df932a3eefd85e0000000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae76294130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb00" + +const header1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"hash":"0xf7c3cecbe8fb15560c3113dd03911e52858a233b32cdc761ca03bc0721553424","size":518,"version":0,"previousblockhash":"0x0ba4e920b83848bb4d29e733b5f6acc4fd2b79279889a93e26833406344ade28","merkleroot":"0x2a93dff1bd957d22c8088ee7dc52f154072d1ed1628ad70e1d9099e6048a445a","time":1591275326,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae762","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"confirmations":6,"nextblockhash":"0x96a0856f49798732e6eae4026a5f3e919b96250d847bcb3560d03bbad895c740"}}` + +const txMoveNeoVerbose = `{"id":5,"jsonrpc":"2.0","result":{"blockhash":"0xf7c3cecbe8fb15560c3113dd03911e52858a233b32cdc761ca03bc0721553424","confirmations":6,"blocktime":1591275326,"txid":"0xf93ae1dbd2167e9b4a06431741297b351ac6a8ea3ae8892785c49f690a40b2c0","size":578,"type":"InvocationTransaction","version":1,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087935","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b6","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238"}}` + +// getResultBlock1 returns data for block number 1 which is used by several tests. +func getResultBlock1() *result.Block { + binB, err := hex.DecodeString(hexB1) if err != nil { panic(err) } - nextCon, err := address.StringToUint160("AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL") + b := new(block.Block) + err = testserdes.DecodeBinary(binB, b) if err != nil { panic(err) } - blck := &block.Block{ - Base: block.Base{ - Version: 0, - PrevHash: prevBlockHash, - MerkleRoot: merkleRoot, - Timestamp: 1589300496, - Index: 202, - NextConsensus: nextCon, - Script: transaction.Witness{ - InvocationScript: invScript, - VerificationScript: verifScript, - }, - }, - ConsensusData: block.ConsensusData{ - PrimaryIndex: 0, - Nonce: nonce, - }, - Transactions: []*transaction.Transaction{tx}, + b2Hash, err := util.Uint256DecodeStringLE("96a0856f49798732e6eae4026a5f3e919b96250d847bcb3560d03bbad895c740") + if err != nil { + panic(err) } - // Update hashes for correct result comparison. - _ = tx.Hash() - _ = blck.Hash() return &result.Block{ - Block: blck, + Block: b, BlockMetadata: result.BlockMetadata{ - Size: 781, + Size: 1687, + NextBlockHash: &b2Hash, + Confirmations: 4, + }, + } +} + +func getTxMoveNeo() *result.TransactionOutputRaw { + b1 := getResultBlock1() + txBin, err := hex.DecodeString(hexTxMoveNeo) + if err != nil { + panic(err) + } + tx := new(transaction.Transaction) + err = testserdes.DecodeBinary(txBin, tx) + if err != nil { + panic(err) + } + return &result.TransactionOutputRaw{ + Transaction: tx, + TransactionMetadata: result.TransactionMetadata{ + Timestamp: b1.Timestamp, + Blockhash: b1.Block.Hash(), Confirmations: 6, - NextBlockHash: &nextBlockHash, }, } } @@ -198,51 +145,37 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "byIndex_positive", invoke: func(c *Client) (interface{}, error) { - return c.GetBlockByIndex(202) + return c.GetBlockByIndex(1) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000ef9039404248180eb395d8ff59f985286b6852a68275a487e473114c4240b5938dccbfab32ee60f8b0d16144f258cc30d4f6795522fbd60109e2ed8d1423e9b810cdba5e00000000ca000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c403620ef8f02d7884c553fb6c54d2fe717cfddd9450886c5fc88a669a29a82fa1a7c715076996567a5a56747f20f10d7e4db071d73b306ccbf17f9a916fcfa1d020c4099e27d87bbb3fb4ce1c77dca85cf3eac46c9c3de87d8022ef7ad2b0a2bb980339293849cf85e5a0a5615ea7bc5bb0a7f28e31f278dc19d628f64c49b888df4c60c40616eefc9286843c2f3f2cf1815988356e409b3f10ffaf60b3468dc0a92dd929cbc8d5da74052c303e7474412f6beaddd551e9056c4e7a5fccdc06107e48f3fe10c40fd2d25d4156e969345c0522669b509e5ced70e4265066eadaf85eea3919d5ded525f8f52d6f0dfa0186c964dd0302fca5bc2dc0540b4ed21085be478c312399694130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb02005704000000000000800003000000316e851039019d39dfc2c37d6c3fee19fd58098700000000000000000000000000000000b004000000000170f3b507ea9eae15ebb7f10195c1239bbaa12ca996ff070e4a8501131045e033000001787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a00184a27db862300316e851039019d39dfc2c37d6c3fee19fd58098701420c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}`, - result: func(c *Client) interface{} { return &block.Block{} }, - check: func(t *testing.T, c *Client, result interface{}) { - res, ok := result.(*block.Block) - require.True(t, ok) - assert.Equal(t, uint32(0), res.Version) - assert.Equal(t, "cbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86", res.Hash().StringLE()) - assert.Equal(t, "93b540424c1173e487a47582a652686b2885f959ffd895b30e184842403990ef", res.PrevHash.StringLE()) - assert.Equal(t, "b8e923148dede20901d6fb225579f6d430cc58f24461d1b0f860ee32abbfcc8d", res.MerkleRoot.StringLE()) - assert.Equal(t, 1, len(res.Transactions)) - assert.Equal(t, "96ef00d2efe03101f5b302f7fc3c8fcd22688944bdc83ab99071d77edbb08581", res.Transactions[0].Hash().StringLE()) + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"` + hexB1 + `"}`, + result: func(c *Client) interface{} { + b := getResultBlock1() + return b.Block }, }, { name: "byIndex_verbose_positive", invoke: func(c *Client) (i interface{}, err error) { - return c.GetBlockByIndexVerbose(202) + return c.GetBlockByIndexVerbose(1) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xcbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86","size":781,"version":0,"nextblockhash":"0x13283c93aec07dc90be3ddd65e2de15e9212f1b3205303f688d6df85129f6b22","previousblockhash":"0x93b540424c1173e487a47582a652686b2885f959ffd895b30e184842403990ef","merkleroot":"0xb8e923148dede20901d6fb225579f6d430cc58f24461d1b0f860ee32abbfcc8d","time":1589300496,"index":202,"consensus_data":{"primary":0,"nonce":"0000000000000457"},"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","confirmations":6,"witnesses":[{"invocation":"0c403620ef8f02d7884c553fb6c54d2fe717cfddd9450886c5fc88a669a29a82fa1a7c715076996567a5a56747f20f10d7e4db071d73b306ccbf17f9a916fcfa1d020c4099e27d87bbb3fb4ce1c77dca85cf3eac46c9c3de87d8022ef7ad2b0a2bb980339293849cf85e5a0a5615ea7bc5bb0a7f28e31f278dc19d628f64c49b888df4c60c40616eefc9286843c2f3f2cf1815988356e409b3f10ffaf60b3468dc0a92dd929cbc8d5da74052c303e7474412f6beaddd551e9056c4e7a5fccdc06107e48f3fe10c40fd2d25d4156e969345c0522669b509e5ced70e4265066eadaf85eea3919d5ded525f8f52d6f0dfa0186c964dd0302fca5bc2dc0540b4ed21085be478c3123996","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"tx":[{"txid":"0x96ef00d2efe03101f5b302f7fc3c8fcd22688944bdc83ab99071d77edbb08581","size":254,"type":"ContractTransaction","version":0,"nonce":3,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0","valid_until_block":1200,"attributes":[],"cosigners":[],"vin":[{"txid":"0x33e045101301854a0e07ff96a92ca1ba9b23c19501f1b7eb15ae9eea07b5f370","vout":0}],"vout":[{"address":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","asset":"0x1a5e0e3eac2abced7de9ee2de0820a5c85e63756fcdfc29b82fead86a7c07c78","n":0,"value":"99999000"}],"scripts":[{"invocation":"0c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}}`, + serverResponse: b1Verbose, result: func(c *Client) interface{} { - return getResultBlock202() + return getResultBlock1() }, }, { name: "byHash_positive", invoke: func(c *Client) (interface{}, error) { - hash, err := util.Uint256DecodeStringLE("86fe1061140b2ea791b0739fb9732abc6e5e47de4927228a1ac41de3d93eb7cb") + hash, err := util.Uint256DecodeStringLE("d151651e86680a7ecbc87babf3346a42e7bc9974414ce192c9c22ac4f2e9d043") if err != nil { panic(err) } return c.GetBlockByHash(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000ef9039404248180eb395d8ff59f985286b6852a68275a487e473114c4240b5938dccbfab32ee60f8b0d16144f258cc30d4f6795522fbd60109e2ed8d1423e9b810cdba5e00000000ca000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c403620ef8f02d7884c553fb6c54d2fe717cfddd9450886c5fc88a669a29a82fa1a7c715076996567a5a56747f20f10d7e4db071d73b306ccbf17f9a916fcfa1d020c4099e27d87bbb3fb4ce1c77dca85cf3eac46c9c3de87d8022ef7ad2b0a2bb980339293849cf85e5a0a5615ea7bc5bb0a7f28e31f278dc19d628f64c49b888df4c60c40616eefc9286843c2f3f2cf1815988356e409b3f10ffaf60b3468dc0a92dd929cbc8d5da74052c303e7474412f6beaddd551e9056c4e7a5fccdc06107e48f3fe10c40fd2d25d4156e969345c0522669b509e5ced70e4265066eadaf85eea3919d5ded525f8f52d6f0dfa0186c964dd0302fca5bc2dc0540b4ed21085be478c312399694130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb02005704000000000000800003000000316e851039019d39dfc2c37d6c3fee19fd58098700000000000000000000000000000000b004000000000170f3b507ea9eae15ebb7f10195c1239bbaa12ca996ff070e4a8501131045e033000001787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a00184a27db862300316e851039019d39dfc2c37d6c3fee19fd58098701420c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}`, - result: func(c *Client) interface{} { return &block.Block{} }, - check: func(t *testing.T, c *Client, result interface{}) { - res, ok := result.(*block.Block) - require.True(t, ok) - assert.Equal(t, uint32(0), res.Version) - assert.Equal(t, "cbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86", res.Hash().StringLE()) - assert.Equal(t, "93b540424c1173e487a47582a652686b2885f959ffd895b30e184842403990ef", res.PrevHash.StringLE()) - assert.Equal(t, "b8e923148dede20901d6fb225579f6d430cc58f24461d1b0f860ee32abbfcc8d", res.MerkleRoot.StringLE()) - assert.Equal(t, 1, len(res.Transactions)) - assert.Equal(t, "96ef00d2efe03101f5b302f7fc3c8fcd22688944bdc83ab99071d77edbb08581", res.Transactions[0].Hash().StringLE()) + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"` + hexB1 + `"}`, + result: func(c *Client) interface{} { + b := getResultBlock1() + return b.Block }, }, { @@ -254,9 +187,9 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ } return c.GetBlockByHashVerbose(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xcbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86","size":781,"version":0,"nextblockhash":"0x13283c93aec07dc90be3ddd65e2de15e9212f1b3205303f688d6df85129f6b22","previousblockhash":"0x93b540424c1173e487a47582a652686b2885f959ffd895b30e184842403990ef","merkleroot":"0xb8e923148dede20901d6fb225579f6d430cc58f24461d1b0f860ee32abbfcc8d","time":1589300496,"index":202,"consensus_data":{"primary":0,"nonce":"0000000000000457"},"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","confirmations":6,"witnesses":[{"invocation":"0c403620ef8f02d7884c553fb6c54d2fe717cfddd9450886c5fc88a669a29a82fa1a7c715076996567a5a56747f20f10d7e4db071d73b306ccbf17f9a916fcfa1d020c4099e27d87bbb3fb4ce1c77dca85cf3eac46c9c3de87d8022ef7ad2b0a2bb980339293849cf85e5a0a5615ea7bc5bb0a7f28e31f278dc19d628f64c49b888df4c60c40616eefc9286843c2f3f2cf1815988356e409b3f10ffaf60b3468dc0a92dd929cbc8d5da74052c303e7474412f6beaddd551e9056c4e7a5fccdc06107e48f3fe10c40fd2d25d4156e969345c0522669b509e5ced70e4265066eadaf85eea3919d5ded525f8f52d6f0dfa0186c964dd0302fca5bc2dc0540b4ed21085be478c3123996","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"tx":[{"txid":"0x96ef00d2efe03101f5b302f7fc3c8fcd22688944bdc83ab99071d77edbb08581","size":254,"type":"ContractTransaction","version":0,"nonce":3,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0","valid_until_block":1200,"attributes":[],"cosigners":[],"vin":[{"txid":"0x33e045101301854a0e07ff96a92ca1ba9b23c19501f1b7eb15ae9eea07b5f370","vout":0}],"vout":[{"address":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","asset":"0x1a5e0e3eac2abced7de9ee2de0820a5c85e63756fcdfc29b82fead86a7c07c78","n":0,"value":"99999000"}],"scripts":[{"invocation":"0c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}}`, + serverResponse: b1Verbose, result: func(c *Client) interface{} { - return getResultBlock202() + return getResultBlock1() }, }, }, @@ -298,15 +231,10 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ } return c.GetBlockHeader(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000d039da5e49d63eb0533437d24ff8ceb6aeacf88680599c39f0ffca8948dfcdb94a3def1fca91cf45d69358414e3be77f7621e557f4cebbdb79a47d3cf56ac007f920a05e0000000001000000d60ac443bb800fb08261e75fa5925d747d48586101fd04014055041db6a59c99ab98137cc57e1e56a0a89856a311b2d2fc0aec76ec714c7616edc8fc5c9b81b27f25b7db1a61f64be0730a9cc103efcea1195cc3fe55843e264027e49c647f48bb08d3c32b79ee3432005ea577d7e497f78b46f1e81858848f961b557fb42a92e8eb4433fed203c917cbebb2138a31ed86750fb769d1e70956c0404c20054aa8bd45b520cba9410a9dd6c256481066bb657d7793fbba5551898c91b6dde81285fac841753ccfdd3193d08f19d5431313fa0d926ca965072a5fa3384026b0705078409bcc62fb98bb985edc387edeaaeba37bb7642d88a90762b2c2a62d9b61d53c097d548a368e450c4d995a178d5af28d4c93698233c52de05e3f0094534c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e4c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd624c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc24c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee6995450683073b3bb00"}`, - result: func(c *Client) interface{} { return &block.Header{} }, - check: func(t *testing.T, c *Client, result interface{}) { - res, ok := result.(*block.Header) - require.True(t, ok) - assert.Equal(t, uint32(0), res.Version) - assert.Equal(t, "68e4bd688b852e807eef13a0ff7da7b02223e359a35153667e88f9cb4a3b0801", res.Hash().StringLE()) - assert.Equal(t, "b9cddf4889cafff0399c598086f8acaeb6cef84fd2373453b03ed6495eda39d0", res.PrevHash.StringLE()) - assert.Equal(t, "07c06af53c7da479dbbbcef457e521767fe73b4e415893d645cf91ca1fef3d4a", res.MerkleRoot.StringLE()) + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"` + hexHeader1 + `"}`, + result: func(c *Client) interface{} { + b := getResultBlock1() + return b.Header() }, }, { @@ -318,12 +246,12 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ } return c.GetBlockHeaderVerbose(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xcbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86","size":781,"version":0,"nextblockhash":"0x13283c93aec07dc90be3ddd65e2de15e9212f1b3205303f688d6df85129f6b22","previousblockhash":"0x93b540424c1173e487a47582a652686b2885f959ffd895b30e184842403990ef","merkleroot":"0xb8e923148dede20901d6fb225579f6d430cc58f24461d1b0f860ee32abbfcc8d","time":1589300496,"index":202,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","confirmations":6,"witnesses":[{"invocation":"0c403620ef8f02d7884c553fb6c54d2fe717cfddd9450886c5fc88a669a29a82fa1a7c715076996567a5a56747f20f10d7e4db071d73b306ccbf17f9a916fcfa1d020c4099e27d87bbb3fb4ce1c77dca85cf3eac46c9c3de87d8022ef7ad2b0a2bb980339293849cf85e5a0a5615ea7bc5bb0a7f28e31f278dc19d628f64c49b888df4c60c40616eefc9286843c2f3f2cf1815988356e409b3f10ffaf60b3468dc0a92dd929cbc8d5da74052c303e7474412f6beaddd551e9056c4e7a5fccdc06107e48f3fe10c40fd2d25d4156e969345c0522669b509e5ced70e4265066eadaf85eea3919d5ded525f8f52d6f0dfa0186c964dd0302fca5bc2dc0540b4ed21085be478c3123996","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}}`, + serverResponse: header1Verbose, result: func(c *Client) interface{} { - b := getResultBlock202() + b := getResultBlock1() return &result.Header{ Hash: b.Hash(), - Size: 781, + Size: 518, Version: b.Version, NextBlockHash: b.NextBlockHash, PrevBlockHash: b.PrevHash, @@ -513,21 +441,16 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "positive", invoke: func(c *Client) (i interface{}, err error) { - hash, err := util.Uint256DecodeStringLE("8185b0db7ed77190b93ac8bd44896822cd8f3cfcf702b3f50131e0efd200ef96") + hash, err := util.Uint256DecodeStringLE("ca23bd5df3249836849309ca2afe972bfd288b0a7ae61302c8fd545daa8bffd6") if err != nil { panic(err) } return c.GetRawTransaction(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"800003000000316e851039019d39dfc2c37d6c3fee19fd58098700000000000000000000000000000000b004000000000170f3b507ea9eae15ebb7f10195c1239bbaa12ca996ff070e4a8501131045e033000001787cc0a786adfe829bc2dffc5637e6855c0a82e02deee97dedbc2aac3e0e5e1a00184a27db862300316e851039019d39dfc2c37d6c3fee19fd58098701420c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}`, - result: func(c *Client) interface{} { return &transaction.Transaction{} }, - check: func(t *testing.T, c *Client, result interface{}) { - res, ok := result.(*transaction.Transaction) - require.True(t, ok) - assert.Equal(t, uint8(0), res.Version) - assert.Equal(t, "8185b0db7ed77190b93ac8bd44896822cd8f3cfcf702b3f50131e0efd200ef96", res.Hash().StringBE()) - assert.Equal(t, transaction.ContractType, res.Type) - assert.Equal(t, false, res.Trimmed) + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"` + hexTxMoveNeo + `"}`, + result: func(c *Client) interface{} { + tx := getTxMoveNeo() + return tx.Transaction }, }, { @@ -539,68 +462,9 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ } return c.GetRawTransactionVerbose(hash) }, - serverResponse: `{"jsonrpc":"2.0","id":1,"result":{"blockhash":"0xcbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86","confirmations":8,"blocktime":1589300496,"txid":"0x96ef00d2efe03101f5b302f7fc3c8fcd22688944bdc83ab99071d77edbb08581","size":254,"type":"ContractTransaction","version":0,"nonce":3,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0","valid_until_block":1200,"attributes":[],"cosigners":[],"vin":[{"txid":"0x33e045101301854a0e07ff96a92ca1ba9b23c19501f1b7eb15ae9eea07b5f370","vout":0}],"vout":[{"address":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","asset":"0x1a5e0e3eac2abced7de9ee2de0820a5c85e63756fcdfc29b82fead86a7c07c78","n":0,"value":"99999000"}],"scripts":[{"invocation":"0c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}}`, + serverResponse: txMoveNeoVerbose, result: func(c *Client) interface{} { - blockHash, err := util.Uint256DecodeStringLE("cbb73ed9e31dc41a8a222749de475e6ebc2a73b99f73b091a72e0b146110fe86") - if err != nil { - panic(err) - } - sender, err := address.StringToUint160("ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG") - if err != nil { - panic(err) - } - invocation, err := hex.DecodeString("0c402caebbee911a1f159aa05ab40093d086090a817e837f3f87e8b3e47f6b083649137770f6dda0349ddd611bc47402aca457a89b3b7b0076307ab6a47fd57048eb") - if err != nil { - panic(err) - } - verification, err := hex.DecodeString("0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4") - if err != nil { - panic(err) - } - vin, err := util.Uint256DecodeStringLE("33e045101301854a0e07ff96a92ca1ba9b23c19501f1b7eb15ae9eea07b5f370") - if err != nil { - panic(err) - } - outAddress, err := address.StringToUint160("ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG") - if err != nil { - panic(err) - } - tx := transaction.NewContractTX() - tx.Nonce = 3 - tx.ValidUntilBlock = 1200 - tx.Sender = sender - tx.Scripts = []transaction.Witness{ - { - InvocationScript: invocation, - VerificationScript: verification, - }, - } - tx.Inputs = []transaction.Input{ - { - PrevHash: vin, - PrevIndex: 0, - }, - } - tx.Outputs = []transaction.Output{ - { - AssetID: core.GoverningTokenID(), - Amount: util.Fixed8FromInt64(99999000), - ScriptHash: outAddress, - Position: 0, - }, - } - - // Update hashes for correct result comparison. - _ = tx.Hash() - - return &result.TransactionOutputRaw{ - Transaction: tx, - TransactionMetadata: result.TransactionMetadata{ - Blockhash: blockHash, - Confirmations: 8, - Timestamp: uint64(1589300496), - }, - } + return getTxMoveNeo() }, }, }, @@ -752,7 +616,7 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "positive", invoke: func(c *Client) (interface{}, error) { - return nil, c.SendRawTransaction(transaction.NewContractTX()) + return nil, c.SendRawTransaction(transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0)) }, serverResponse: `{"jsonrpc":"2.0","id":1,"result":true}`, result: func(c *Client) interface{} { @@ -873,7 +737,7 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ { name: "sendrawtransaction_bad_server_answer", invoke: func(c *Client) (interface{}, error) { - return nil, c.SendRawTransaction(transaction.NewContractTX()) + return nil, c.SendRawTransaction(transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0)) }, }, { @@ -1199,7 +1063,7 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ { name: "sendrawtransaction_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { - return nil, c.SendRawTransaction(transaction.NewContractTX()) + return nil, c.SendRawTransaction(transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0)) }, }, { diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 9ba1c240e..3db6daa48 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -24,6 +24,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/rpc/response" "github.com/nspcc-dev/neo-go/pkg/rpc/response/result" "github.com/nspcc-dev/neo-go/pkg/util" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -820,7 +821,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] newTx := func() *transaction.Transaction { height := chain.BlockHeight() - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = height + 1 tx.ValidUntilBlock = height + 10 tx.Sender = acc0.PrivateKey().GetScriptHash() @@ -940,7 +941,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] expected = append(expected, tx.Tx.Hash()) } for i := 0; i < 5; i++ { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) assert.NoError(t, mp.Add(tx, &FeerStub{})) expected = append(expected, tx.Hash()) } diff --git a/pkg/smartcontract/context/context_test.go b/pkg/smartcontract/context/context_test.go index 6b9dc8ab5..7784fea8b 100644 --- a/pkg/smartcontract/context/context_test.go +++ b/pkg/smartcontract/context/context_test.go @@ -12,6 +12,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/stretchr/testify/require" ) @@ -164,7 +165,7 @@ func newParam(typ smartcontract.ParamType, name string) wallet.ContractParam { } func getContractTx() *transaction.Transaction { - tx := transaction.NewContractTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) tx.AddInput(&transaction.Input{ PrevHash: util.Uint256{1, 2, 3, 4}, PrevIndex: 5, @@ -174,7 +175,6 @@ func getContractTx() *transaction.Transaction { Amount: 10, ScriptHash: util.Uint160{11, 12}, }) - tx.Data = new(transaction.ContractTX) tx.Attributes = make([]transaction.Attribute, 0) tx.Scripts = make([]transaction.Witness, 0) tx.Hash() From 169c5ae775fe573ff08dcbb0cc554738bebee19c Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 12:28:36 +0300 Subject: [PATCH 30/42] transaction: drop Issue TX support --- config/protocol.mainnet.yml | 1 - config/protocol.privnet.docker.four.yml | 1 - config/protocol.privnet.docker.one.yml | 1 - config/protocol.privnet.docker.single.yml | 1 - config/protocol.privnet.docker.three.yml | 1 - config/protocol.privnet.docker.two.yml | 1 - config/protocol.privnet.yml | 1 - config/protocol.testnet.yml | 1 - config/protocol.unit_testnet.yml | 1 - docs/cli.md | 2 - pkg/config/protocol_config.go | 3 -- pkg/consensus/block_test.go | 3 +- pkg/core/block/block_test.go | 3 +- pkg/core/blockchain.go | 45 +---------------------- pkg/core/dao/dao_test.go | 2 +- pkg/core/helper_test.go | 2 +- pkg/core/mempool/mem_pool.go | 11 ------ pkg/core/mempool/mem_pool_test.go | 23 ------------ pkg/core/transaction/issue.go | 35 ------------------ pkg/core/transaction/transaction.go | 5 --- pkg/core/transaction/type.go | 5 --- pkg/interop/transaction/transaction.go | 1 - 22 files changed, 8 insertions(+), 141 deletions(-) delete mode 100644 pkg/core/transaction/issue.go diff --git a/config/protocol.mainnet.yml b/config/protocol.mainnet.yml index 53070ff55..9a7214920 100644 --- a/config/protocol.mainnet.yml +++ b/config/protocol.mainnet.yml @@ -19,7 +19,6 @@ ProtocolConfiguration: - seed4.neo.org:10333 - seed5.neo.org:10333 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: false diff --git a/config/protocol.privnet.docker.four.yml b/config/protocol.privnet.docker.four.yml index e9bc5e8e1..b073338b9 100644 --- a/config/protocol.privnet.docker.four.yml +++ b/config/protocol.privnet.docker.four.yml @@ -15,7 +15,6 @@ ProtocolConfiguration: - 172.200.0.3:20335 - 172.200.0.4:20336 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.one.yml b/config/protocol.privnet.docker.one.yml index 06bbad06e..984cb1f20 100644 --- a/config/protocol.privnet.docker.one.yml +++ b/config/protocol.privnet.docker.one.yml @@ -15,7 +15,6 @@ ProtocolConfiguration: - 172.200.0.3:20335 - 172.200.0.4:20336 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.single.yml b/config/protocol.privnet.docker.single.yml index 5fdb643bc..67c947627 100644 --- a/config/protocol.privnet.docker.single.yml +++ b/config/protocol.privnet.docker.single.yml @@ -9,7 +9,6 @@ ProtocolConfiguration: SeedList: - 172.200.0.1:20333 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.three.yml b/config/protocol.privnet.docker.three.yml index a59daccbe..c0396b338 100644 --- a/config/protocol.privnet.docker.three.yml +++ b/config/protocol.privnet.docker.three.yml @@ -15,7 +15,6 @@ ProtocolConfiguration: - 172.200.0.3:20335 - 172.200.0.4:20336 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.two.yml b/config/protocol.privnet.docker.two.yml index 082ba83b2..631b57d89 100644 --- a/config/protocol.privnet.docker.two.yml +++ b/config/protocol.privnet.docker.two.yml @@ -15,7 +15,6 @@ ProtocolConfiguration: - 172.200.0.3:20335 - 172.200.0.4:20336 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.yml b/config/protocol.privnet.yml index 1a24b933b..fedfe23d5 100644 --- a/config/protocol.privnet.yml +++ b/config/protocol.privnet.yml @@ -16,7 +16,6 @@ ProtocolConfiguration: - 127.0.0.1:20336 SystemFee: EnrollmentTransaction: 1000 - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.testnet.yml b/config/protocol.testnet.yml index 50b857115..394479a81 100644 --- a/config/protocol.testnet.yml +++ b/config/protocol.testnet.yml @@ -19,7 +19,6 @@ ProtocolConfiguration: - seed4t.neo.org:20333 - seed5t.neo.org:20333 SystemFee: - IssueTransaction: 5 RegisterTransaction: 100 VerifyBlocks: true VerifyTransactions: false diff --git a/config/protocol.unit_testnet.yml b/config/protocol.unit_testnet.yml index 37424cc3d..0df1905e0 100644 --- a/config/protocol.unit_testnet.yml +++ b/config/protocol.unit_testnet.yml @@ -14,7 +14,6 @@ ProtocolConfiguration: - 127.0.0.1:20335 - 127.0.0.1:20336 SystemFee: - IssueTransaction: 500 RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/docs/cli.md b/docs/cli.md index 0c4f04567..b11471fb8 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -60,8 +60,6 @@ ProtocolConfiguration: - 127.0.0.1:20335 - 127.0.0.1:20336 SystemFee: - EnrollmentTransaction: 1000 - IssueTransaction: 500 RegisterTransaction: 10000 ApplicationConfiguration: diff --git a/pkg/config/protocol_config.go b/pkg/config/protocol_config.go index 421e3ff9b..fd6f163b8 100644 --- a/pkg/config/protocol_config.go +++ b/pkg/config/protocol_config.go @@ -47,7 +47,6 @@ type ( // SystemFee fees related to system. SystemFee struct { - IssueTransaction int64 `yaml:"IssueTransaction"` RegisterTransaction int64 `yaml:"RegisterTransaction"` } @@ -74,8 +73,6 @@ func (n NetMode) String() string { // TryGetValue returns the system fee base on transaction type. func (s SystemFee) TryGetValue(txType transaction.TXType) util.Fixed8 { switch txType { - case transaction.IssueType: - return util.Fixed8FromInt64(s.IssueTransaction) case transaction.RegisterType: return util.Fixed8FromInt64(s.RegisterTransaction) default: diff --git a/pkg/consensus/block_test.go b/pkg/consensus/block_test.go index 6e1d91f4e..6aeb82328 100644 --- a/pkg/consensus/block_test.go +++ b/pkg/consensus/block_test.go @@ -8,6 +8,7 @@ import ( "github.com/nspcc-dev/dbft/crypto" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/util" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/stretchr/testify/require" ) @@ -44,7 +45,7 @@ func TestNeoBlock_Setters(t *testing.T) { b.Block.PrevHash = util.Uint256{9, 8, 7} require.Equal(t, util.Uint256{9, 8, 7}, b.PrevHash()) - txx := []block.Transaction{transaction.NewIssueTX()} + txx := []block.Transaction{transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 1)} b.SetTransactions(txx) require.Equal(t, txx, b.Transactions()) } diff --git a/pkg/core/block/block_test.go b/pkg/core/block/block_test.go index b9f6dc72d..715652b04 100644 --- a/pkg/core/block/block_test.go +++ b/pkg/core/block/block_test.go @@ -5,6 +5,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/stretchr/testify/assert" ) @@ -84,7 +85,7 @@ func newDumbBlock() *Block { Nonce: 1111, }, Transactions: []*transaction.Transaction{ - transaction.NewIssueTX(), + transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0), }, } } diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 06056de01..2ba09c0dc 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -643,19 +643,6 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { if err != nil { return err } - case *transaction.IssueTX: - for _, res := range bc.GetTransactionResults(tx) { - if res.Amount < 0 { - asset, err := cache.GetAssetState(res.AssetID) - if asset == nil || err != nil { - return fmt.Errorf("issue failed: no asset %s or error %s", res.AssetID, err) - } - asset.Available -= res.Amount - if err := cache.PutAssetState(asset); err != nil { - return err - } - } - } case *transaction.InvocationTX: systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) v := SpawnVM(systemInterop) @@ -1437,26 +1424,8 @@ func (bc *Blockchain) verifyResults(t *transaction.Transaction, results []*trans return errors.New("tx destroys non-utility token") } - switch t.Type { - case transaction.IssueType: - for _, r := range resultsIssue { - if r.AssetID == UtilityTokenID() { - return errors.New("issue tx issues utility tokens") - } - asset, err := bc.dao.GetAssetState(r.AssetID) - if asset == nil || err != nil { - return errors.New("invalid asset in issue tx") - } - if asset.Available < r.Amount { - return errors.New("trying to issue more than available") - } - } - break - default: - if len(resultsIssue) > 0 { - return errors.New("non issue/miner/claim tx issues tokens") - } - break + if len(resultsIssue) > 0 { + return errors.New("non issue/miner/claim tx issues tokens") } return nil @@ -1547,16 +1516,6 @@ func (bc *Blockchain) GetScriptHashesForVerifying(t *transaction.Transaction) ([ hashes[c.Account] = true } switch t.Type { - case transaction.IssueType: - for _, res := range refsAndOutsToResults(references, t.Outputs) { - if res.Amount < 0 { - asset, err := bc.dao.GetAssetState(res.AssetID) - if asset == nil || err != nil { - return nil, errors.New("invalid asset in issue tx") - } - hashes[asset.Issuer] = true - } - } case transaction.RegisterType: reg := t.Data.(*transaction.RegisterTX) hashes[reg.Owner.GetScriptHash()] = true diff --git a/pkg/core/dao/dao_test.go b/pkg/core/dao/dao_test.go index f5cdfa36a..725dd2766 100644 --- a/pkg/core/dao/dao_test.go +++ b/pkg/core/dao/dao_test.go @@ -220,7 +220,7 @@ func TestGetCurrentHeaderHeight_Store(t *testing.T) { func TestStoreAsTransaction(t *testing.T) { dao := NewSimple(storage.NewMemoryStore()) - tx := transaction.NewIssueTX() + tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 1) hash := tx.Hash() err := dao.StoreAsTransaction(tx, 0) require.NoError(t, err) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index c5cd95075..4fd07a32a 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -138,7 +138,7 @@ func newDumbBlock() *block.Block { Nonce: 1111, }, Transactions: []*transaction.Transaction{ - {Type: transaction.IssueType}, + transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0), }, } } diff --git a/pkg/core/mempool/mem_pool.go b/pkg/core/mempool/mem_pool.go index fdcee59eb..49741e170 100644 --- a/pkg/core/mempool/mem_pool.go +++ b/pkg/core/mempool/mem_pool.go @@ -353,17 +353,6 @@ func (mp *Pool) checkTxConflicts(tx *transaction.Transaction, fee Feer) bool { if !mp.checkBalanceAndUpdate(tx, fee) { return false } - switch tx.Type { - case transaction.IssueType: - // It's a hack, because technically we could check for - // available asset amount, but these transactions are so rare - // that no one really cares about this restriction. - for i := range mp.verifiedTxes { - if mp.verifiedTxes[i].txn.Type == transaction.IssueType { - return false - } - } - } return true } diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index 5484e810c..e1b720420 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -129,29 +129,6 @@ func TestMemPoolVerifyInputs(t *testing.T) { require.Error(t, mp.Add(tx3, &FeerStub{})) } -func TestMemPoolVerifyIssue(t *testing.T) { - mp := NewMemPool(50) - tx1 := newIssueTX() - require.Equal(t, true, mp.Verify(tx1, &FeerStub{})) - require.NoError(t, mp.Add(tx1, &FeerStub{})) - - tx2 := newIssueTX() - require.Equal(t, false, mp.Verify(tx2, &FeerStub{})) - require.Error(t, mp.Add(tx2, &FeerStub{})) -} - -func newIssueTX() *transaction.Transaction { - tx := transaction.NewIssueTX() - tx.Outputs = []transaction.Output{ - { - AssetID: random.Uint256(), - Amount: util.Fixed8FromInt64(42), - ScriptHash: random.Uint160(), - }, - } - return tx -} - func TestOverCapacity(t *testing.T) { var fs = &FeerStub{lowPriority: true} const mempoolSize = 10 diff --git a/pkg/core/transaction/issue.go b/pkg/core/transaction/issue.go deleted file mode 100644 index d2ab6034f..000000000 --- a/pkg/core/transaction/issue.go +++ /dev/null @@ -1,35 +0,0 @@ -package transaction - -import ( - "math/rand" - - "github.com/nspcc-dev/neo-go/pkg/io" -) - -// IssueTX represents a issue transaction. -// This TX has not special attributes. -type IssueTX struct{} - -// NewIssueTX creates Transaction of IssueType type. -func NewIssueTX() *Transaction { - return &Transaction{ - Type: IssueType, - Version: 0, - Nonce: rand.Uint32(), - Data: &IssueTX{}, - Attributes: []Attribute{}, - Cosigners: []Cosigner{}, - Inputs: []Input{}, - Outputs: []Output{}, - Scripts: []Witness{}, - Trimmed: false, - } -} - -// DecodeBinary implements Serializable interface. -func (tx *IssueTX) DecodeBinary(r *io.BinReader) { -} - -// EncodeBinary implements Serializable interface. -func (tx *IssueTX) EncodeBinary(w *io.BinWriter) { -} diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index 23784c03a..1fe75f6a8 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -179,9 +179,6 @@ func (t *Transaction) decodeData(r *io.BinReader) { case RegisterType: t.Data = &RegisterTX{} t.Data.(*RegisterTX).DecodeBinary(r) - case IssueType: - t.Data = &IssueTX{} - t.Data.(*IssueTX).DecodeBinary(r) default: r.Err = fmt.Errorf("invalid TX type %x", t.Type) } @@ -387,8 +384,6 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { Owner: tx.Asset.Owner, Admin: admin, } - case IssueType: - t.Data = &IssueTX{} } if t.Hash() != tx.TxID { return errors.New("txid doesn't match transaction hash") diff --git a/pkg/core/transaction/type.go b/pkg/core/transaction/type.go index cb21ca711..9b13881e2 100644 --- a/pkg/core/transaction/type.go +++ b/pkg/core/transaction/type.go @@ -11,7 +11,6 @@ type TXType uint8 // Constants for all valid transaction types. const ( - IssueType TXType = 0x01 RegisterType TXType = 0x40 InvocationType TXType = 0xd1 ) @@ -19,8 +18,6 @@ const ( // String implements the stringer interface. func (t TXType) String() string { switch t { - case IssueType: - return "IssueTransaction" case RegisterType: return "RegisterTransaction" case InvocationType: @@ -49,8 +46,6 @@ func (t *TXType) UnmarshalJSON(data []byte) error { // TXTypeFromString searches for TXType by string name. func TXTypeFromString(jsonString string) (TXType, error) { switch jsonString = strings.TrimSpace(jsonString); jsonString { - case "IssueTransaction": - return IssueType, nil case "RegisterTransaction": return RegisterType, nil case "InvocationTransaction": diff --git a/pkg/interop/transaction/transaction.go b/pkg/interop/transaction/transaction.go index 97cadb524..83500f031 100644 --- a/pkg/interop/transaction/transaction.go +++ b/pkg/interop/transaction/transaction.go @@ -23,7 +23,6 @@ func GetHash(t Transaction) []byte { // GetType returns the type of the given transaction. Possible values: // MinerTransaction = 0x00 -// IssueTransaction = 0x01 // EnrollmentTransaction = 0x20 // RegisterTransaction = 0x40 // StateType = 0x90 From 0a09a20900721f5c88c7d5ec325d9caf7dd42f7d Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 12:40:07 +0300 Subject: [PATCH 31/42] transaction: drop Register transaction type And everything associated like SystemFee configuration. --- cli/wallet/wallet.go | 13 ---- config/protocol.mainnet.yml | 2 - config/protocol.privnet.docker.four.yml | 2 - config/protocol.privnet.docker.one.yml | 2 - config/protocol.privnet.docker.single.yml | 2 - config/protocol.privnet.docker.three.yml | 2 - config/protocol.privnet.docker.two.yml | 2 - config/protocol.privnet.yml | 3 - config/protocol.testnet.yml | 2 - config/protocol.unit_testnet.yml | 2 - docs/cli.md | 2 - pkg/config/config.go | 3 - pkg/config/protocol_config.go | 25 ++----- pkg/core/blockchain.go | 29 -------- pkg/core/transaction/register.go | 82 ----------------------- pkg/core/transaction/register_test.go | 46 ------------- pkg/core/transaction/transaction.go | 29 +------- pkg/core/transaction/transaction_test.go | 31 --------- pkg/core/transaction/type.go | 5 -- pkg/core/util.go | 39 ----------- pkg/core/util_test.go | 16 ----- pkg/interop/transaction/transaction.go | 1 - 22 files changed, 5 insertions(+), 335 deletions(-) delete mode 100644 pkg/core/transaction/register.go delete mode 100644 pkg/core/transaction/register_test.go diff --git a/cli/wallet/wallet.go b/cli/wallet/wallet.go index 0c536888a..0e349c64a 100644 --- a/cli/wallet/wallet.go +++ b/cli/wallet/wallet.go @@ -11,7 +11,6 @@ import ( "syscall" "github.com/nspcc-dev/neo-go/cli/flags" - "github.com/nspcc-dev/neo-go/pkg/core" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/rpc/client" @@ -510,18 +509,6 @@ func openWallet(path string) (*wallet.Wallet, error) { return wallet.NewWalletFromFile(path) } -func getAssetID(s string) (util.Uint256, error) { - s = strings.ToLower(s) - switch { - case s == "neo": - return core.GoverningTokenID(), nil - case s == "gas": - return core.UtilityTokenID(), nil - default: - return util.Uint256DecodeStringLE(s) - } -} - func newAccountFromWIF(wif string) (*wallet.Account, error) { // note: NEP2 strings always have length of 58 even though // base58 strings can have different lengths even if slice lengths are equal diff --git a/config/protocol.mainnet.yml b/config/protocol.mainnet.yml index 9a7214920..861041637 100644 --- a/config/protocol.mainnet.yml +++ b/config/protocol.mainnet.yml @@ -18,8 +18,6 @@ ProtocolConfiguration: - seed3.neo.org:10333 - seed4.neo.org:10333 - seed5.neo.org:10333 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: false FreeGasLimit: 10.0 diff --git a/config/protocol.privnet.docker.four.yml b/config/protocol.privnet.docker.four.yml index b073338b9..e2fc0fefe 100644 --- a/config/protocol.privnet.docker.four.yml +++ b/config/protocol.privnet.docker.four.yml @@ -14,8 +14,6 @@ ProtocolConfiguration: - 172.200.0.2:20334 - 172.200.0.3:20335 - 172.200.0.4:20336 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.one.yml b/config/protocol.privnet.docker.one.yml index 984cb1f20..f60ca55ba 100644 --- a/config/protocol.privnet.docker.one.yml +++ b/config/protocol.privnet.docker.one.yml @@ -14,8 +14,6 @@ ProtocolConfiguration: - 172.200.0.2:20334 - 172.200.0.3:20335 - 172.200.0.4:20336 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.single.yml b/config/protocol.privnet.docker.single.yml index 67c947627..f43ffaeed 100644 --- a/config/protocol.privnet.docker.single.yml +++ b/config/protocol.privnet.docker.single.yml @@ -8,8 +8,6 @@ ProtocolConfiguration: - 02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2 SeedList: - 172.200.0.1:20333 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.three.yml b/config/protocol.privnet.docker.three.yml index c0396b338..620ef90e9 100644 --- a/config/protocol.privnet.docker.three.yml +++ b/config/protocol.privnet.docker.three.yml @@ -14,8 +14,6 @@ ProtocolConfiguration: - 172.200.0.2:20334 - 172.200.0.3:20335 - 172.200.0.4:20336 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.docker.two.yml b/config/protocol.privnet.docker.two.yml index 631b57d89..01f109416 100644 --- a/config/protocol.privnet.docker.two.yml +++ b/config/protocol.privnet.docker.two.yml @@ -14,8 +14,6 @@ ProtocolConfiguration: - 172.200.0.2:20334 - 172.200.0.3:20335 - 172.200.0.4:20336 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.privnet.yml b/config/protocol.privnet.yml index fedfe23d5..e8a1d7185 100644 --- a/config/protocol.privnet.yml +++ b/config/protocol.privnet.yml @@ -14,9 +14,6 @@ ProtocolConfiguration: - 127.0.0.1:20334 - 127.0.0.1:20335 - 127.0.0.1:20336 - SystemFee: - EnrollmentTransaction: 1000 - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/config/protocol.testnet.yml b/config/protocol.testnet.yml index 394479a81..785f3a429 100644 --- a/config/protocol.testnet.yml +++ b/config/protocol.testnet.yml @@ -18,8 +18,6 @@ ProtocolConfiguration: - seed3t.neo.org:20333 - seed4t.neo.org:20333 - seed5t.neo.org:20333 - SystemFee: - RegisterTransaction: 100 VerifyBlocks: true VerifyTransactions: false FreeGasLimit: 10.0 diff --git a/config/protocol.unit_testnet.yml b/config/protocol.unit_testnet.yml index 0df1905e0..e786558a7 100644 --- a/config/protocol.unit_testnet.yml +++ b/config/protocol.unit_testnet.yml @@ -13,8 +13,6 @@ ProtocolConfiguration: - 127.0.0.1:20334 - 127.0.0.1:20335 - 127.0.0.1:20336 - SystemFee: - RegisterTransaction: 10000 VerifyBlocks: true VerifyTransactions: true diff --git a/docs/cli.md b/docs/cli.md index b11471fb8..f199cbc3a 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -59,8 +59,6 @@ ProtocolConfiguration: - 127.0.0.1:20334 - 127.0.0.1:20335 - 127.0.0.1:20336 - SystemFee: - RegisterTransaction: 10000 ApplicationConfiguration: DataDirectoryPath: "./chains/privnet" diff --git a/pkg/config/config.go b/pkg/config/config.go index 999656ffb..f434191bd 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -40,9 +40,6 @@ func Load(path string, netMode NetMode) (Config, error) { } config := Config{ - ProtocolConfiguration: ProtocolConfiguration{ - SystemFee: SystemFee{}, - }, ApplicationConfiguration: ApplicationConfiguration{ PingInterval: 30, PingTimeout: 90, diff --git a/pkg/config/protocol_config.go b/pkg/config/protocol_config.go index fd6f163b8..94c5e452d 100644 --- a/pkg/config/protocol_config.go +++ b/pkg/config/protocol_config.go @@ -1,7 +1,6 @@ package config import ( - "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/util" ) @@ -34,22 +33,16 @@ type ( MaxFreeTransactionsPerBlock int `yaml:"MaxFreeTransactionsPerBlock"` MemPoolSize int `yaml:"MemPoolSize"` // SaveStorageBatch enables storage batch saving before every persist. - SaveStorageBatch bool `yaml:"SaveStorageBatch"` - SecondsPerBlock int `yaml:"SecondsPerBlock"` - SeedList []string `yaml:"SeedList"` - StandbyValidators []string `yaml:"StandbyValidators"` - SystemFee SystemFee `yaml:"SystemFee"` + SaveStorageBatch bool `yaml:"SaveStorageBatch"` + SecondsPerBlock int `yaml:"SecondsPerBlock"` + SeedList []string `yaml:"SeedList"` + StandbyValidators []string `yaml:"StandbyValidators"` // Whether to verify received blocks. VerifyBlocks bool `yaml:"VerifyBlocks"` // Whether to verify transactions in received blocks. VerifyTransactions bool `yaml:"VerifyTransactions"` } - // SystemFee fees related to system. - SystemFee struct { - RegisterTransaction int64 `yaml:"RegisterTransaction"` - } - // NetMode describes the mode the blockchain will operate on. NetMode uint32 ) @@ -69,13 +62,3 @@ func (n NetMode) String() string { return "net unknown" } } - -// TryGetValue returns the system fee base on transaction type. -func (s SystemFee) TryGetValue(txType transaction.TXType) util.Fixed8 { - switch txType { - case transaction.RegisterType: - return util.Fixed8FromInt64(s.RegisterTransaction) - default: - return util.Fixed8FromInt64(0) - } -} diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 2ba09c0dc..a7ff7d317 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -33,13 +33,6 @@ const ( headerBatchCount = 2000 version = "0.1.0" - // This one comes from C# code and it's different from the constant used - // when creating an asset with Neo.Asset.Create interop call. It looks - // like 2000000 is coming from the decrementInterval, but C# code doesn't - // contain any relationship between the two, so we should follow this - // behavior. - registeredAssetLifetime = 2 * 2000000 - defaultMemPoolSize = 50000 ) @@ -629,20 +622,6 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { // Process the underlying type of the TX. switch t := tx.Data.(type) { - case *transaction.RegisterTX: - err := cache.PutAssetState(&state.Asset{ - ID: tx.Hash(), - AssetType: t.AssetType, - Name: t.Name, - Amount: t.Amount, - Precision: t.Precision, - Owner: t.Owner, - Admin: t.Admin, - Expiration: bc.BlockHeight() + registeredAssetLifetime, - }) - if err != nil { - return err - } case *transaction.InvocationTX: systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) v := SpawnVM(systemInterop) @@ -1420,9 +1399,6 @@ func (bc *Blockchain) verifyResults(t *transaction.Transaction, results []*trans if len(resultsDestroy) > 1 { return errors.New("tx has more than 1 destroy output") } - if len(resultsDestroy) == 1 && resultsDestroy[0].AssetID != UtilityTokenID() { - return errors.New("tx destroys non-utility token") - } if len(resultsIssue) > 0 { return errors.New("non issue/miner/claim tx issues tokens") @@ -1515,11 +1491,6 @@ func (bc *Blockchain) GetScriptHashesForVerifying(t *transaction.Transaction) ([ for _, c := range t.Cosigners { hashes[c.Account] = true } - switch t.Type { - case transaction.RegisterType: - reg := t.Data.(*transaction.RegisterTX) - hashes[reg.Owner.GetScriptHash()] = true - } // convert hashes to []util.Uint160 hashesResult := make([]util.Uint160, 0, len(hashes)) for h := range hashes { diff --git a/pkg/core/transaction/register.go b/pkg/core/transaction/register.go deleted file mode 100644 index 9bff3efbe..000000000 --- a/pkg/core/transaction/register.go +++ /dev/null @@ -1,82 +0,0 @@ -package transaction - -import ( - "encoding/json" - "math/rand" - - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// RegisterTX represents a register transaction. -// NOTE: This is deprecated. -type RegisterTX struct { - // The type of the asset being registered. - AssetType AssetType - - // Name of the asset being registered. - Name string - - // Amount registered. - // Unlimited mode -0.00000001. - Amount util.Fixed8 - - // Decimals. - Precision uint8 - - // Public key of the owner. - Owner keys.PublicKey - - Admin util.Uint160 -} - -// NewRegisterTX creates Transaction of RegisterType type. -func NewRegisterTX(register *RegisterTX) *Transaction { - return &Transaction{ - Type: RegisterType, - Version: 0, - Nonce: rand.Uint32(), - Data: register, - Attributes: []Attribute{}, - Cosigners: []Cosigner{}, - Inputs: []Input{}, - Outputs: []Output{}, - Scripts: []Witness{}, - Trimmed: false, - } -} - -// DecodeBinary implements Serializable interface. -func (tx *RegisterTX) DecodeBinary(br *io.BinReader) { - tx.AssetType = AssetType(br.ReadB()) - - tx.Name = br.ReadString() - - tx.Amount.DecodeBinary(br) - tx.Precision = uint8(br.ReadB()) - - tx.Owner.DecodeBinary(br) - - tx.Admin.DecodeBinary(br) -} - -// EncodeBinary implements Serializable interface. -func (tx *RegisterTX) EncodeBinary(bw *io.BinWriter) { - bw.WriteB(byte(tx.AssetType)) - bw.WriteString(tx.Name) - tx.Amount.EncodeBinary(bw) - bw.WriteB(byte(tx.Precision)) - bw.WriteBytes(tx.Owner.Bytes()) - tx.Admin.EncodeBinary(bw) -} - -// registeredAsset is a wrapper for RegisterTransaction -type registeredAsset struct { - AssetType AssetType `json:"type,omitempty"` - Name json.RawMessage `json:"name,omitempty"` - Amount util.Fixed8 `json:"amount,omitempty"` - Precision uint8 `json:"precision,omitempty"` - Owner keys.PublicKey `json:"owner,omitempty"` - Admin string `json:"admin,omitempty"` -} diff --git a/pkg/core/transaction/register_test.go b/pkg/core/transaction/register_test.go deleted file mode 100644 index 23d52ab0e..000000000 --- a/pkg/core/transaction/register_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package transaction - -import ( - "testing" - - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -func TestRegisterTX(t *testing.T) { - someuint160, _ := util.Uint160DecodeStringBE("4d3b96ae1bcc5a585e075e3b81920210dec16302") - registerTx := &RegisterTX{ - AssetType: UtilityToken, - Name: "this is some token I created", - Amount: util.Fixed8FromInt64(1000000), - Precision: 8, - Admin: someuint160, - } - tx := NewRegisterTX(registerTx) - _ = tx.Hash() - - testserdes.EncodeDecodeBinary(t, tx, new(Transaction)) -} - -//TODO NEO3.0: update binary -/* -func TestDecodeRegisterTXFromRawString(t *testing.T) { - rawTX := "400000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b00000000" - b, err := hex.DecodeString(rawTX) - require.NoError(t, err) - - tx := &Transaction{} - assert.NoError(t, testserdes.DecodeBinary(b, tx)) - assert.Equal(t, RegisterType, tx.Type) - txData := tx.Data.(*RegisterTX) - assert.Equal(t, GoverningToken, txData.AssetType) - assert.Equal(t, "[{\"lang\":\"zh-CN\",\"name\":\"小蚁股\"},{\"lang\":\"en\",\"name\":\"AntShare\"}]", txData.Name) - assert.Equal(t, util.Fixed8FromInt64(100000000), txData.Amount) - assert.Equal(t, uint8(0), txData.Precision) - assert.Equal(t, keys.PublicKey{}, txData.Owner) - assert.Equal(t, "Abf2qMs1pzQb8kYk9RuxtUb9jtRKJVuBJt", address.Uint160ToString(txData.Admin)) - assert.Equal(t, "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b", tx.Hash().StringLE()) - - testserdes.EncodeDecodeBinary(t, tx, new(Transaction)) -} -*/ diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index 1fe75f6a8..b52cb1bc0 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -176,9 +176,6 @@ func (t *Transaction) decodeData(r *io.BinReader) { case InvocationType: t.Data = &InvocationTX{} t.Data.(*InvocationTX).DecodeBinary(r) - case RegisterType: - t.Data = &RegisterTX{} - t.Data.(*RegisterTX).DecodeBinary(r) default: r.Err = fmt.Errorf("invalid TX type %x", t.Type) } @@ -301,8 +298,7 @@ type transactionJSON struct { Outputs []Output `json:"vout"` Scripts []Witness `json:"scripts"` - Script string `json:"script,omitempty"` - Asset *registeredAsset `json:"asset,omitempty"` + Script string `json:"script,omitempty"` } // MarshalJSON implements json.Marshaler interface. @@ -326,16 +322,6 @@ func (t *Transaction) MarshalJSON() ([]byte, error) { switch t.Type { case InvocationType: tx.Script = hex.EncodeToString(t.Data.(*InvocationTX).Script) - case RegisterType: - transaction := *t.Data.(*RegisterTX) - tx.Asset = ®isteredAsset{ - AssetType: transaction.AssetType, - Name: json.RawMessage(transaction.Name), - Amount: transaction.Amount, - Precision: transaction.Precision, - Owner: transaction.Owner, - Admin: address.Uint160ToString(transaction.Admin), - } } return json.Marshal(tx) } @@ -371,19 +357,6 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { t.Data = &InvocationTX{ Script: bytes, } - case RegisterType: - admin, err := address.StringToUint160(tx.Asset.Admin) - if err != nil { - return err - } - t.Data = &RegisterTX{ - AssetType: tx.Asset.AssetType, - Name: string(tx.Asset.Name), - Amount: tx.Asset.Amount, - Precision: tx.Asset.Precision, - Owner: tx.Asset.Owner, - Admin: admin, - } } if t.Hash() != tx.TxID { return errors.New("txid doesn't match transaction hash") diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index 5985eba59..47e37f093 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -4,7 +4,6 @@ import ( "encoding/hex" "testing" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/stretchr/testify/assert" @@ -103,33 +102,3 @@ func TestMarshalUnmarshalJSONInvocationTX(t *testing.T) { testserdes.MarshalUnmarshalJSON(t, tx, new(Transaction)) } - -func TestMarshalUnmarshalJSONRegisterTX(t *testing.T) { - tx := &Transaction{ - Type: RegisterType, - Version: 5, - Data: &RegisterTX{ - AssetType: 0, - Name: `[{"lang":"zh-CN","name":"小蚁股"},{"lang":"en","name":"AntShare"}]`, - Amount: 1000000, - Precision: 0, - Owner: keys.PublicKey{}, - Admin: util.Uint160{}, - }, - Attributes: []Attribute{}, - Inputs: []Input{{ - PrevHash: util.Uint256{5, 6, 7, 8}, - PrevIndex: uint16(12), - }}, - Outputs: []Output{{ - AssetID: util.Uint256{1, 2, 3}, - Amount: util.Fixed8FromInt64(1), - ScriptHash: util.Uint160{1, 2, 3}, - Position: 0, - }}, - Scripts: []Witness{}, - Trimmed: false, - } - - testserdes.MarshalUnmarshalJSON(t, tx, new(Transaction)) -} diff --git a/pkg/core/transaction/type.go b/pkg/core/transaction/type.go index 9b13881e2..df13a6d84 100644 --- a/pkg/core/transaction/type.go +++ b/pkg/core/transaction/type.go @@ -11,15 +11,12 @@ type TXType uint8 // Constants for all valid transaction types. const ( - RegisterType TXType = 0x40 InvocationType TXType = 0xd1 ) // String implements the stringer interface. func (t TXType) String() string { switch t { - case RegisterType: - return "RegisterTransaction" case InvocationType: return "InvocationTransaction" default: @@ -46,8 +43,6 @@ func (t *TXType) UnmarshalJSON(data []byte) error { // TXTypeFromString searches for TXType by string name. func TXTypeFromString(jsonString string) (TXType, error) { switch jsonString = strings.TrimSpace(jsonString); jsonString { - case "RegisterTransaction": - return RegisterType, nil case "InvocationTransaction": return InvocationType, nil default: diff --git a/pkg/core/util.go b/pkg/core/util.go index dc518197e..5a963c80c 100644 --- a/pkg/core/util.go +++ b/pkg/core/util.go @@ -89,45 +89,6 @@ func deployNativeContracts() *transaction.Transaction { return tx } -func init() { - admin := hash.Hash160([]byte{byte(opcode.OLDPUSH1)}) - registerTX := &transaction.RegisterTX{ - AssetType: transaction.GoverningToken, - Name: "[{\"lang\":\"zh-CN\",\"name\":\"小蚁股\"},{\"lang\":\"en\",\"name\":\"AntShare\"}]", - Amount: util.Fixed8FromInt64(100000000), - Precision: 0, - Admin: admin, - } - - governingTokenTX = *transaction.NewRegisterTX(registerTX) - // TODO NEO3.0: nonce should be constant to avoid variability of token hash - governingTokenTX.Nonce = 0 - governingTokenTX.Sender = hash.Hash160([]byte{byte(opcode.OLDPUSH1)}) - - admin = hash.Hash160([]byte{0x00}) - registerTX = &transaction.RegisterTX{ - AssetType: transaction.UtilityToken, - Name: "[{\"lang\":\"zh-CN\",\"name\":\"小蚁币\"},{\"lang\":\"en\",\"name\":\"AntCoin\"}]", - Amount: calculateUtilityAmount(), - Precision: 8, - Admin: admin, - } - utilityTokenTX = *transaction.NewRegisterTX(registerTX) - // TODO NEO3.0: nonce should be constant to avoid variability of token hash - utilityTokenTX.Nonce = 0 - utilityTokenTX.Sender = hash.Hash160([]byte{byte(opcode.OLDPUSH1)}) -} - -// GoverningTokenID returns the governing token (NEO) hash. -func GoverningTokenID() util.Uint256 { - return governingTokenTX.Hash() -} - -// UtilityTokenID returns the utility token (GAS) hash. -func UtilityTokenID() util.Uint256 { - return utilityTokenTX.Hash() -} - func getValidators(cfg config.ProtocolConfiguration) ([]*keys.PublicKey, error) { validators := make([]*keys.PublicKey, len(cfg.StandbyValidators)) for i, pubKeyStr := range cfg.StandbyValidators { diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index d6f9f02a5..992b70eec 100644 --- a/pkg/core/util_test.go +++ b/pkg/core/util_test.go @@ -42,19 +42,3 @@ func TestGetConsensusAddressMainNet(t *testing.T) { assert.Equal(t, consensusScript, script.String()) assert.Equal(t, consensusAddr, address.Uint160ToString(script)) } - -func TestUtilityTokenTX(t *testing.T) { - //TODO: After we added Nonce field to transaction.Transaction, UtilityTockenTx hash - // has been changed. Update it for better times. - // Old hash is "602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7" - expect := "f882fb865bab84b99623f21eedd902286af7da8d8a4609d7acefce04c851dc1c" - assert.Equal(t, expect, UtilityTokenID().StringLE()) -} - -func TestGoverningTokenTX(t *testing.T) { - //TODO: After we added Nonce field to transaction.Transaction, GoveringTockenTx hash - // has been changed. Update it for better times. - // Old hash is "c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b" - expect := "1a5e0e3eac2abced7de9ee2de0820a5c85e63756fcdfc29b82fead86a7c07c78" - assert.Equal(t, expect, GoverningTokenID().StringLE()) -} diff --git a/pkg/interop/transaction/transaction.go b/pkg/interop/transaction/transaction.go index 83500f031..545a9b89f 100644 --- a/pkg/interop/transaction/transaction.go +++ b/pkg/interop/transaction/transaction.go @@ -24,7 +24,6 @@ func GetHash(t Transaction) []byte { // GetType returns the type of the given transaction. Possible values: // MinerTransaction = 0x00 // EnrollmentTransaction = 0x20 -// RegisterTransaction = 0x40 // StateType = 0x90 // AgencyTransaction = 0xb0 // PublishTransaction = 0xd0 From 35b30ccfdf1cfb79b6eea6b73da40de337228362 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 13:04:20 +0300 Subject: [PATCH 32/42] core: drop OLDPUSH1, it's no longer needed Fixes #927. --- pkg/core/util.go | 2 +- pkg/rpc/server/testdata/testblocks.acc | Bin 6540 -> 6540 bytes pkg/vm/context.go | 6 ------ pkg/vm/json_test.go | 4 ---- pkg/vm/opcode/opcode.go | 3 +-- pkg/vm/opcode/opcode_string.go | 3 +-- 6 files changed, 3 insertions(+), 15 deletions(-) diff --git a/pkg/core/util.go b/pkg/core/util.go index 5a963c80c..8600d4b41 100644 --- a/pkg/core/util.go +++ b/pkg/core/util.go @@ -51,7 +51,7 @@ func createGenesisBlock(cfg config.ProtocolConfiguration) (*block.Block, error) NextConsensus: nextConsensus, Script: transaction.Witness{ InvocationScript: []byte{}, - VerificationScript: []byte{byte(opcode.OLDPUSH1)}, + VerificationScript: []byte{byte(opcode.PUSH1)}, }, } diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index eaba989ac469b157d5dd7f1f02e58a7e6c4df32f..fdea207f7c4d0158cbb6a1faca840efe8d391bd5 100644 GIT binary patch delta 1905 zcmV-%2afoRGmJBkOaoUK+L2Eqe>pv5mHLb^07EnSZE9c5u4S>99Q(Ti_ilJcP<69U z7nOQxCM$`&Q3~!BZM2TL4T%5hxdCCZrPZ@A6}6Cdk_}j7a+wT3Bi?Sxv#+DP+{bB!!vBJATonxc3EsOoi@RE#oXC&WZrfq44{9T< z5=o9~{mTn(z<3B}UBJej2xjd4c-XV+s*~Xtm9q^3ngk%v6by(j;M-G&ma=*NCUP+B zINf!@!Y4p>V-bM1Nz*<*}axiDcm}!d>8Om zgX;LvJrTmo)JMZOzE(HCdVWR1ZH&5D10rTnLhp({l#PK$4RIlxu3G-Eb6MwZ0iVJNZhjAEj^YeX^NM8~))92Gaw~tL|b6Xs7%}!Z{5o z#UTJ~e+)7tG*jj0FmKhe#0)@p(gwb2jX>>`(TBI7GNcfpF&SkC)BtZ_ZfW$b3z=4{ zM!JUcl*d`p9xIzzo+}c~jLK6VHf8V8%6h3noO_ow@60goT%P%Nc^>RZ|=5&XXh2(6$hNqp6xz z3ky|!$PN6@sL6tUe{*-c3_zcc=^~WVXcah|a`l_)#K~*KN=zr<=15DavcUOI&07j# zo0Dody)NXzZKu^H6B%E9tT_Nbj)@}P^GZ96zn~02-*qbis{XB&6{+>`uQ;NJUK#vvT=^TSlFl8;xVmn2eJjl9R` zdfAJ>hi1tVr~LcWhYUa=e5>L9q$~vQ+8}K;8kS|H)zf6)?S^|1tf{qDM4-^Q)L-jzb#1bS%*@m>&s6pXK5NG0 zWHFrJpnITkq5p!WPGSqNO>y&-3x!#)m3f$pt;rMe0%3_Xu&7HG6&gI@=vpds2pi>O zPO<}5HIv~Np|gGw69FJ+#;4AK*;icVf!`%l-a^#ZQlE46*|3}AqVN{WDRqUDu@WE& zTNv72000001(Waw9e?(t?*yb!P5p3dqR$M5x?Z0HThPjUq%7Jo`Z+PZ`*@42(?r=( zQQatQ*LuRO6pX&9)WHf0?g(@BB{#^(Pn!%t#i?p`Il#42g3E_yR$JpkC>O3jTU1;E zZb&c)M-2x|azylNPnD);q0k;xi`|Z3?Qn7ZQ08@3HV>5ndVdRV6%0UU6%)R<3*l@e z{p`R{i+_7y&qfJA?I*1JHG;Cf>hX{aA@3(r z_U`JU*JmgiB+bnyla&@A30xT3UH||900xur1|5HT7oS;9V}`|bX9t4|x2&n$`SRf5 zJMJ3s=PSPuFncCVT9L2qPG^&N?)WI_T@ zgj|1~;@b>Bwy}##5@9KEC4%(&Fi^NDjG*H1qJe|}tWdcqqd|M?sd;UX_Rh$^cKW0I zy&lZKK3UzJVuzG=X%Fy>BfNb23_zUGNzC}XLPy+X_WSS62OOUWK16d|NQj;TNj`v3aF6 delta 1905 zcmV-%2afoRGmJBkOange*pW{oe^^?|tL1?YYDz-8MA=43NQbo9C~Tw5zG81A4PXcl z%(ep8#OX^hI@JZLi!vr)lxmfAF8u3_t=R z)_9Vy47OGuuTcj9KM~SIGOhstxiL4H$^Bf7u*!|8UNKM)+UkM}2C2P*D?+&Dw}3H% zVV|9&wm>dOy(J7l))W-jH)7gR&8vW5pN^! zJPSBF;ip#1IxccaHqt0C2>$ej^OS1mVw2$)m9q^3ngk#uG*ux7yaUQ%$IUW3BZ`Gm z9+3mx6EO@{75nJR&cpYU#|9t+KkwL+>INf!A+|aKmb=prlyE0Q@Wqxxxi>wOsAQC0 zh2gm(1oPYZZbmUFUkZ z(wX>4#od_t?5_h8&N6&>aw6kI@^YV6NP8f-39zfwMV>ItGaJ+Uudhj4nSo=Hx)-&7 zI+H65K$!O7J-}D*60S|mqI&?LMNTIHncUOVR7Let#BGcFZgF&zbt_W+!jtKh4J6Q(ak_F zD-1yF@Ri~m?|~z_gYEVs=n_&z0q8zkb-Y7T_83`I4^4EIVr;!G&K7-74+GpF2r>7;IuYetDwE+Cp_7yj z-5>*Hm%JAJJ*#7ET>t)2r+mpztU zqG!Jx_&9dWs^Nw7VhljmX7O4vcVz5lb`jXrCd?)@^Bh$AxS--%bF64WeqLAVz z-r4uDW4WA#B5Qg#SzujZD^O#is?^Sze^vOE3_vDV^`ARf3{tEes-SU$I+jO012VLP z6FBHlt7)au!qDcd!X<-g>@JT3AHjm~C)#k*=m8r>iT1cK`&C7bwv7xx_d^C%M$v)+ zb4Z}G!s@E#{y$7#TgWHmHb(R=B`5k%2qc49 z9d{Es!js__p|gGw69FK3asG;Aay+QpNRvLD$}_^UuV2n0pnGpJk4sYznw5`}u@WE& zLhsmK000001(Waw9e;RyZk=a5tnD!Z%V(#s%#Tq0Xst}JV}-uprDDf z?RG6A{RPJWrgDpFjOI?v>78Nj4QpO~&bJIeX<`>0PDBI?kXsQtSwhm;@qzE9PEgzq zvSYw>)@BnG{S`lCvJ=amwUf(i^*h|ePv~DzpmZVKl?P9@4}X*&rwl;n@r%4BLx?HE zA(k-QLL$hg(mglea(4ba(*X}`hINyMslzPnTqla&@A2}AGLUH||900xur1|5HF`B6m>WyCQ~Hn&lT(_Xbxz(IqV zSxfI;T+29Y2~(dTEYsJ{S(5**YnPSdIU>KzeGcSm0ulq&LqNt(L&HN1K#fjQp+O4> zpFo88E$CEve!Xt?YWEq6f~BDXND~HPl+%da=I+3EeQJ)KE6NVPQh>9+Ya zia>wBYa$Fl#nGxv6{}2_cCT_?92M;NPQcCVXGvmu&CipmYT0;UHmpB|*Ob<|@&QBR ztB2062{#uQPz}&y8in#Gt5@9dEzZ6jt;B1Z^XqO?)X1_Af8;TNj`fT)er diff --git a/pkg/vm/context.go b/pkg/vm/context.go index 08c439ac4..1cecbc4f9 100644 --- a/pkg/vm/context.go +++ b/pkg/vm/context.go @@ -77,12 +77,6 @@ func (c *Context) Next() (opcode.Opcode, []byte, error) { var numtoread int switch instr { - case opcode.OLDPUSH1: - // OLDPUSH1 is used during transition to NEO3 in verification scripts. - // FIXME remove #927 - if len(c.prog) == 1 { - return opcode.PUSH1, nil, nil - } case opcode.PUSHDATA1: if c.nextip >= len(c.prog) { err = errNoInstParam diff --git a/pkg/vm/json_test.go b/pkg/vm/json_test.go index 4c35e5641..00eb106a2 100644 --- a/pkg/vm/json_test.go +++ b/pkg/vm/json_test.go @@ -135,12 +135,8 @@ func testFile(t *testing.T, filename string) { require.NoErrorf(t, json.Unmarshal(data, ut), "file: %s", filename) t.Run(ut.Category+":"+ut.Name, func(t *testing.T) { - isRot := strings.HasSuffix(filename, "ROT.json") for i := range ut.Tests { test := ut.Tests[i] - if isRot && test.Name == "Without push" { - return // FIXME #927 single ROT is interpreted as PUSH1 - } t.Run(ut.Tests[i].Name, func(t *testing.T) { prog := []byte(test.Script) vm := load(prog) diff --git a/pkg/vm/opcode/opcode.go b/pkg/vm/opcode/opcode.go index b8d56666e..76149a798 100644 --- a/pkg/vm/opcode/opcode.go +++ b/pkg/vm/opcode/opcode.go @@ -1,6 +1,6 @@ package opcode -//go:generate stringer -type=Opcode +//go:generate stringer -type=Opcode -linecomment // Opcode represents a single operation code for the NEO virtual machine. type Opcode byte @@ -87,7 +87,6 @@ const ( TUCK Opcode = 0x4E SWAP Opcode = 0x50 ROT Opcode = 0x51 - OLDPUSH1 Opcode = 0x51 // FIXME remove #927 ROLL Opcode = 0x52 REVERSE3 Opcode = 0x53 REVERSE4 Opcode = 0x54 diff --git a/pkg/vm/opcode/opcode_string.go b/pkg/vm/opcode/opcode_string.go index d5ab10d51..6b44af438 100644 --- a/pkg/vm/opcode/opcode_string.go +++ b/pkg/vm/opcode/opcode_string.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -type Opcode -linecomment"; DO NOT EDIT. +// Code generated by "stringer -type=Opcode -linecomment"; DO NOT EDIT. package opcode @@ -77,7 +77,6 @@ func _() { _ = x[TUCK-78] _ = x[SWAP-80] _ = x[ROT-81] - _ = x[OLDPUSH1-81] _ = x[ROLL-82] _ = x[REVERSE3-83] _ = x[REVERSE4-84] From f63b286c35d94181cee348a75f26c31c435fcbb2 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 13:05:50 +0300 Subject: [PATCH 33/42] core: update genesis block to store timestamp in ms --- pkg/core/helper_test.go | 2 +- pkg/core/util.go | 2 +- pkg/core/util_test.go | 2 +- pkg/rpc/server/testdata/testblocks.acc | Bin 6540 -> 6540 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index 4fd07a32a..521baf96e 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -60,7 +60,7 @@ func newBlock(cfg config.ProtocolConfiguration, index uint32, prev util.Uint256, Base: block.Base{ Version: 0, PrevHash: prev, - Timestamp: uint64(time.Now().UTC().Unix()) + uint64(index), + Timestamp: uint64(time.Now().UTC().Unix())*1000 + uint64(index), Index: index, NextConsensus: witness.ScriptHash(), Script: witness, diff --git a/pkg/core/util.go b/pkg/core/util.go index 8600d4b41..c3bee9ff3 100644 --- a/pkg/core/util.go +++ b/pkg/core/util.go @@ -46,7 +46,7 @@ func createGenesisBlock(cfg config.ProtocolConfiguration) (*block.Block, error) base := block.Base{ Version: 0, PrevHash: util.Uint256{}, - Timestamp: uint64(time.Date(2016, 7, 15, 15, 8, 21, 0, time.UTC).Unix()), + Timestamp: uint64(time.Date(2016, 7, 15, 15, 8, 21, 0, time.UTC).Unix()) * 1000, // Milliseconds. Index: 0, NextConsensus: nextConsensus, Script: transaction.Witness{ diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index 992b70eec..7ddc937b8 100644 --- a/pkg/core/util_test.go +++ b/pkg/core/util_test.go @@ -20,7 +20,7 @@ func TestGenesisBlockMainNet(t *testing.T) { // have been changed. Consequently, hash of the genesis block has been changed. // Update expected genesis block hash for better times. // Old hash is "d42561e3d30e15be6400b6df2f328e02d2bf6354c41dce433bc57687c82144bf" - expect := "d2e6d56c734f24c294a74785023af23f20347d97ef92e7bff1b337e37acbf2dd" + expect := "30b7e37836146ef63ffdc28411c6c22153b69d8fb10b1d5b96ea662cfb19d2e8" assert.Equal(t, expect, block.Hash().StringLE()) } diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index fdea207f7c4d0158cbb6a1faca840efe8d391bd5..9b244c9d131fc0f4074f5a2da4e8bc5033aa9c98 100644 GIT binary patch delta 1961 zcmV;a2UhruGmJAV1^@s6mj(a;00000sq1Blt(vI%<|gAb(ycbz6bmR|A^zWY0u7k)3Q5qlGfQZ2$R|plG;Iy9~3+R*K7nQRO0-6LMwOV%;1%fs21oZf3=@p5< zDIUqED@@_Pa8;+&DoxoIlg9=i2GTO|gK`0r?FJx!$E2^+EmoH*8a5pNh! zv<=15yri$LyH~J#S(5?8;y(iS%?v;riB==yj3VEx7Wy}Or z?Z4jeVnhD$fLx|n3KQu}!>@53?t{}d5F-2tq`Rv(PhCEhli?Skv$P1)10bHgx`s{2 zjR}mtist0>$Rdi#|Fub=vZg%o$>5BmjK`Cw3?K>9GVz0Q0RR94lkf%|fBl{p6hr&V zeFXsau{zU&oL^d?-leXD9l@N-tY>igdhEZk&rpDAH+AWDhM)ynHwhqHWCSK zBy}n=%nU$IfbAcU$I`14K(bMi*#7I+bXZ5w#xyUMhfIFlAab^?p}~g^DKH{Po!*#` z|AtDStI5@8rOeu~+1Fa=e~0&13_$)!^Gv^#OqnPZ)5?96OcM$^2^g|OCqnyMOI|5( zZMG?heJ21@nYd5dK0TW)IW9{%#W(R%DsCoJV4WRNAHC zE&=LlvYGxnwFb>>oeu^tVFt519vhR94v)+{r|~FXxr>O^xEF z^A)4DOvhmR1}=nY`+emvSPVb_{e$#RsM-ICYaG_Fb+Kd7=@Zcy`}9g_m25iqlbl--_4AoNwDkV~9TiAajyRMo8rvUSteFe*N2{ zca|AUS`od!Bc?I$(%_~d_3oIX1L(kD)k^Z^3E(`M`T2@ArAEV~d4iid6%GiEdXI0; z2!aptMKyP!yp!P7rYEY6^9~vYg!0zlyt$n}^>koqP7|)QAi~ok8$v-dsz)_Q>4!Q!7&Ki*j|! z*6#))YlexeAdO(Ly}CO)kjw|N3GNXh2kmgi=6@NJvN~}C`v_34Q-AfSLkvK7Ty6r0 z9g8eEw=hDY8UmvFC?F8e1PQCu>tU*#yZmc)FQ@q&GNA5MGaH&2i{%zvNhzDFF60b=$Vla&@A3Dz?4gK_}?00xur1|5IYc%XDU9jB&U2)3|^f;yE! z^dGpBdxm5+==un)6~E`4u6PZn;#t1pA^Ewu(0?6R($3a?{Z1S0grx9=`!<5x$Q_j@c6#)JGmCx#3?Jb0J)fXcyt_g zUNS;I-r;}1z~&481= vm1N1NUxtM^JUM zPZyPXX(lU)yip477HzbSxebW_>bU`7v8C0sFcr0sc9IN0EY}IrAN_Dsvnb$jrxzu! z^bzyPbRPFS1c*LxaoQNbiMUpsZmHNS?FlIr%8|`Y{3$I%enael%GJ{C$Aql)n&m}vv;1)T*6Sf6wbizuJ~A+7LwNX zL{EOnFanhy`f`~JKqKC6%CoPdyxhlWg~I=WZ(J1&{R!T?Ig7hmot(&z)o$Bitq*D= ztP)9%YW>R#Zoqg5XI;R?od{;^{dm~3>#CFC7nQRO0-6LM&lC)ZFW}o#hnBK={w8uT z?Bq-cO^4}~e!2?uF?p=Klg9=i23Q!{UH|}-?FJx!@!Y4p>V-bM1Nz*<*}axiDcm}! zd>8OmgX;LvJrTmo)JMZOzE(HCdVWR1ZH&5D10rTnLhp({l#PK$4RIlxu3G-Eb6MwZ0iVJNZhjAEj^YeX^NM8~))92Gaw~tL|b6Xs7%} z!Z{5o#UTJ~e+)7tG*jj0FmKhe#0)@p(gwb2jX>>`(TBI7GNcfpF&SkC)BtZ_ZfW$b z3z=4{M!JUcl*d`p9xIzzo+}c~jLK6VHf8V8%6h3noO_ow@60goT%P%Nc^>RZ|=5&XXh2(6$hN zqp6xz3ky|!$PN6@sL6tUe{*-c3_zcc=^~WVXcah|a`l_)#K~*KN=zr<=15DavcUOI z&07j#o0Dody)NXzZKu^H6B%E9tT_Nbj)@}P^GZ96zn~02-*qbis{XB&6{+>`uQ;NJUK#vvT=^TSlFl8;xVmn2eJ zjl9R`dfAJ>hi1tVr~LcWhYUa=e5>L9q$~vQ+8}K;8kS|H)zf6)?S^|1tf{qDM4-^Q)L-jzb#1bS%*@m>&s6pX zK5NG0WHFrJpnITkq5p!WPGSqNO>y&-3x!#)m3f$pt;rMe0%3_Xu&7HG6&gI@=vpds z2pi>OPO<}5HIv~Np|gGw69FJ+#;4AK*;icVf!`%l-a^#ZQlE46*|3}AqVN{WDRqUD zu@WE&TNv72000001(Waw9e?(t?*yb!P5p3dqR$M5x?Z0HThPjUq%7Jo`Z+PZ`*@42 z(?r=(QQatQ*LuRO6pX&9)WHf0?g(@BB{#^(Pn!%t#i?p`Il#42g3E_yR$JpkC>O3j zTU1;EZb&c)M-2x|azylNPnD);q0k;xi`|Z3?Qn7ZQ08@3HV>5ndVdRV6%0UU6%)R< z3*l@e{p`R{i+_7y&qfJA?I*1JHG;Cf>hX{a zA@3(r_U`JU*JmgiB+bnyla&@A30xT3UH||900xur1|5HT7oS;9V}`|bX9t4|x2&n$ z`SRf5JMJ3s=PSPuFncCVT9L2qPG^&N?) zWI_T@gj|1~;@b>Bwy}##5@9KEC4%(&Fi^NDjG*H1qJe|}tWdcqqd|M?sd;UX_Rh$^ zcKW0Iy&lZKK3UzJVuzG=X%Fy>BfNb23_zUGNzC}XLPy+X_WSS62OOUWK16d|NQj;TNj`wQ;rk From dfb26f9ab2077a09341ed41fe4cd5ba66d56cf23 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 15:24:23 +0300 Subject: [PATCH 34/42] block: don't attempt verification if there was a decoding error --- pkg/core/block/block.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/core/block/block.go b/pkg/core/block/block.go index cee27d060..54d88fa31 100644 --- a/pkg/core/block/block.go +++ b/pkg/core/block/block.go @@ -160,6 +160,9 @@ func (b *Block) DecodeBinary(br *io.BinReader) { txes[i] = tx } b.Transactions = txes + if br.Err != nil { + return + } br.Err = b.Verify() } From 2ef9ec0756a5fe80458a5f253cdb240aaafd00c8 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 16:02:55 +0300 Subject: [PATCH 35/42] rpc/server: allow specifying number for getblockheader As it should be allowed. --- pkg/rpc/server/server.go | 33 +++++++++++++++++++++------------ pkg/rpc/server/server_test.go | 4 ++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 4615e4509..4145d7bf9 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -382,31 +382,39 @@ func (s *Server) getConnectionCount(_ request.Params) (interface{}, *response.Er return s.coreServer.PeerCount(), nil } -func (s *Server) getBlock(reqParams request.Params) (interface{}, *response.Error) { +func (s *Server) blockHashFromParam(param *request.Param) (util.Uint256, *response.Error) { var hash util.Uint256 - param, ok := reqParams.Value(0) - if !ok { - return nil, response.ErrInvalidParams - } - switch param.Type { case request.StringT: var err error hash, err = param.GetUint256() if err != nil { - return nil, response.ErrInvalidParams + return hash, response.ErrInvalidParams } case request.NumberT: num, err := s.blockHeightFromParam(param) if err != nil { - return nil, response.ErrInvalidParams + return hash, response.ErrInvalidParams } hash = s.chain.GetHeaderHash(num) default: + return hash, response.ErrInvalidParams + } + return hash, nil +} + +func (s *Server) getBlock(reqParams request.Params) (interface{}, *response.Error) { + param, ok := reqParams.Value(0) + if !ok { return nil, response.ErrInvalidParams } + hash, respErr := s.blockHashFromParam(param) + if respErr != nil { + return nil, respErr + } + block, err := s.chain.GetBlock(hash) if err != nil { return nil, response.NewInternalServerError(fmt.Sprintf("Problem locating block with hash: %s", hash), err) @@ -771,13 +779,14 @@ func (s *Server) getBlockSysFee(reqParams request.Params) (interface{}, *respons func (s *Server) getBlockHeader(reqParams request.Params) (interface{}, *response.Error) { var verbose bool - param, ok := reqParams.ValueWithType(0, request.StringT) + param, ok := reqParams.Value(0) if !ok { return nil, response.ErrInvalidParams } - hash, err := param.GetUint256() - if err != nil { - return nil, response.ErrInvalidParams + + hash, respErr := s.blockHashFromParam(param) + if respErr != nil { + return nil, respErr } param, ok = reqParams.ValueWithType(1, request.NumberT) diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 3db6daa48..e66498e94 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -910,6 +910,10 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] t.Run("verbose=0", func(t *testing.T) { runCase(t, fmt.Sprintf(rpc, `["`+testHeaderHash+`", 0]`), &encoded, new(string)) }) + + t.Run("by number", func(t *testing.T) { + runCase(t, fmt.Sprintf(rpc, `[1]`), &encoded, new(string)) + }) }) t.Run("verbose != 0", func(t *testing.T) { From 21efccd30041a1ab78f08624fe68a670a4de7f4e Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 16:07:04 +0300 Subject: [PATCH 36/42] transaction: remove type field, set Version to 0 Two changes being done here, because they require a lot of updates to tests. Now we're back into version 0 and we only have one type of transaction. It also removes GetType and GetScript interops, both are obsolete in Neo 3. --- integration/performance_test.go | 2 +- pkg/compiler/syscall.go | 2 - pkg/consensus/block_test.go | 2 +- pkg/consensus/consensus_test.go | 10 +- pkg/core/block/block_test.go | 2 +- pkg/core/blockchain.go | 162 +++++++++++----------- pkg/core/blockchain_test.go | 21 ++- pkg/core/dao/dao_test.go | 2 +- pkg/core/helper_test.go | 10 +- pkg/core/interop_neo.go | 29 ---- pkg/core/interop_neo_test.go | 27 +--- pkg/core/interops.go | 3 - pkg/core/interops_test.go | 2 - pkg/core/mempool/mem_pool_test.go | 36 ++--- pkg/core/native_contract_test.go | 2 +- pkg/core/transaction/invocation.go | 48 ------- pkg/core/transaction/invocation_test.go | 25 ---- pkg/core/transaction/transaction.go | 80 +++++------ pkg/core/transaction/transaction_test.go | 24 ++-- pkg/core/transaction/txer.go | 9 -- pkg/core/transaction/type.go | 51 ------- pkg/core/util.go | 2 +- pkg/core/util_test.go | 2 +- pkg/interop/transaction/transaction.go | 19 --- pkg/rpc/client/nep5.go | 2 +- pkg/rpc/client/rpc.go | 2 +- pkg/rpc/client/rpc_test.go | 22 +-- pkg/rpc/client/wsclient_test.go | 4 +- pkg/rpc/server/server.go | 8 +- pkg/rpc/server/server_test.go | 39 +++--- pkg/rpc/server/subscription_test.go | 14 +- pkg/rpc/server/testdata/testblocks.acc | Bin 6540 -> 6532 bytes pkg/smartcontract/context/context_test.go | 2 +- 33 files changed, 216 insertions(+), 449 deletions(-) delete mode 100644 pkg/core/transaction/invocation.go delete mode 100644 pkg/core/transaction/invocation_test.go delete mode 100644 pkg/core/transaction/txer.go delete mode 100644 pkg/core/transaction/type.go diff --git a/integration/performance_test.go b/integration/performance_test.go index d5e80e03b..68592cc87 100644 --- a/integration/performance_test.go +++ b/integration/performance_test.go @@ -77,7 +77,7 @@ func getTX(t *testing.B, wif *keys.WIF) *transaction.Transaction { fromAddressHash, err := address.StringToUint160(fromAddress) require.NoError(t, err) - tx := transaction.NewInvocationTX([]byte{0x51}, 1) + tx := transaction.New([]byte{0x51}, 1) tx.Version = 0 tx.Sender = fromAddressHash tx.Attributes = append(tx.Attributes, diff --git a/pkg/compiler/syscall.go b/pkg/compiler/syscall.go index c002d2bd7..9fa81cbbd 100644 --- a/pkg/compiler/syscall.go +++ b/pkg/compiler/syscall.go @@ -70,8 +70,6 @@ var syscalls = map[string]map[string]string{ "GetInputs": "Neo.Transaction.GetInputs", "GetOutputs": "Neo.Transaction.GetOutputs", "GetReferences": "Neo.Transaction.GetReferences", - "GetScript": "Neo.InvocationTransaction.GetScript", - "GetType": "Neo.Transaction.GetType", "GetUnspentCoins": "Neo.Transaction.GetUnspentCoins", "GetWitnesses": "Neo.Transaction.GetWitnesses", }, diff --git a/pkg/consensus/block_test.go b/pkg/consensus/block_test.go index 6aeb82328..312da1199 100644 --- a/pkg/consensus/block_test.go +++ b/pkg/consensus/block_test.go @@ -45,7 +45,7 @@ func TestNeoBlock_Setters(t *testing.T) { b.Block.PrevHash = util.Uint256{9, 8, 7} require.Equal(t, util.Uint256{9, 8, 7}, b.PrevHash()) - txx := []block.Transaction{transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 1)} + txx := []block.Transaction{transaction.New([]byte{byte(opcode.PUSH1)}, 1)} b.SetTransactions(txx) require.Equal(t, txx, b.Transactions()) } diff --git a/pkg/consensus/consensus_test.go b/pkg/consensus/consensus_test.go index 766201de5..44ef14532 100644 --- a/pkg/consensus/consensus_test.go +++ b/pkg/consensus/consensus_test.go @@ -23,7 +23,7 @@ import ( func TestNewService(t *testing.T) { srv := newTestService(t) - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.ValidUntilBlock = 1 addSender(t, tx) signTx(t, srv.Chain.FeePerByte(), tx) @@ -40,7 +40,7 @@ func TestService_GetVerified(t *testing.T) { srv := newTestService(t) var txs []*transaction.Transaction for i := 0; i < 4; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 123 + uint32(i) tx.ValidUntilBlock = 1 txs = append(txs, tx) @@ -54,7 +54,7 @@ func TestService_GetVerified(t *testing.T) { p := new(Payload) p.message = &message{} p.SetType(payload.PrepareRequestType) - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 999 p.SetPayload(&prepareRequest{transactionHashes: hashes}) p.SetValidatorIndex(1) @@ -121,7 +121,7 @@ func TestService_getTx(t *testing.T) { srv := newTestService(t) t.Run("transaction in mempool", func(t *testing.T) { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 1234 tx.ValidUntilBlock = 1 addSender(t, tx) @@ -138,7 +138,7 @@ func TestService_getTx(t *testing.T) { }) t.Run("transaction in local cache", func(t *testing.T) { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 4321 tx.ValidUntilBlock = 1 h := tx.Hash() diff --git a/pkg/core/block/block_test.go b/pkg/core/block/block_test.go index 715652b04..01a8d7b73 100644 --- a/pkg/core/block/block_test.go +++ b/pkg/core/block/block_test.go @@ -85,7 +85,7 @@ func newDumbBlock() *Block { Nonce: 1111, }, Transactions: []*transaction.Transaction{ - transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0), + transaction.New([]byte{byte(opcode.PUSH1)}, 0), }, } } diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index a7ff7d317..4af9caad1 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -363,20 +363,18 @@ func (bc *Blockchain) notificationDispatcher() { if len(txFeed) != 0 || len(notificationFeed) != 0 || len(executionFeed) != 0 { var aerIdx int for _, tx := range event.block.Transactions { - if tx.Type == transaction.InvocationType { - aer := event.appExecResults[aerIdx] - if !aer.TxHash.Equals(tx.Hash()) { - panic("inconsistent application execution results") - } - aerIdx++ - for ch := range executionFeed { - ch <- aer - } - if aer.VMState == "HALT" { - for i := range aer.Events { - for ch := range notificationFeed { - ch <- &aer.Events[i] - } + aer := event.appExecResults[aerIdx] + if !aer.TxHash.Equals(tx.Hash()) { + panic("inconsistent application execution results") + } + aerIdx++ + for ch := range executionFeed { + ch <- aer + } + if aer.VMState == "HALT" { + for i := range aer.Events { + for ch := range notificationFeed { + ch <- &aer.Events[i] } } } @@ -620,79 +618,75 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { } } - // Process the underlying type of the TX. - switch t := tx.Data.(type) { - case *transaction.InvocationTX: - systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) - v := SpawnVM(systemInterop) - v.LoadScript(t.Script) - v.SetPriceGetter(getPrice) - if bc.config.FreeGasLimit > 0 { - v.SetGasLimit(bc.config.FreeGasLimit + tx.SystemFee) - } + systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) + v := SpawnVM(systemInterop) + v.LoadScript(tx.Script) + v.SetPriceGetter(getPrice) + if bc.config.FreeGasLimit > 0 { + v.SetGasLimit(bc.config.FreeGasLimit + tx.SystemFee) + } - err := v.Run() - if !v.HasFailed() { - _, err := systemInterop.DAO.Persist() - if err != nil { - return errors.Wrap(err, "failed to persist invocation results") - } - for _, note := range systemInterop.Notifications { - arr, ok := note.Item.Value().([]vm.StackItem) - if !ok || len(arr) != 4 { - continue - } - op, ok := arr[0].Value().([]byte) - if !ok || (string(op) != "transfer" && string(op) != "Transfer") { - continue - } - var from []byte - fromValue := arr[1].Value() - // we don't have `from` set when we are minting tokens - if fromValue != nil { - from, ok = fromValue.([]byte) - if !ok { - continue - } - } - var to []byte - toValue := arr[2].Value() - // we don't have `to` set when we are burning tokens - if toValue != nil { - to, ok = toValue.([]byte) - if !ok { - continue - } - } - amount, ok := arr[3].Value().(*big.Int) - if !ok { - bs, ok := arr[3].Value().([]byte) - if !ok { - continue - } - amount = emit.BytesToInt(bs) - } - bc.processNEP5Transfer(cache, tx, block, note.ScriptHash, from, to, amount.Int64()) - } - } else { - bc.log.Warn("contract invocation failed", - zap.String("tx", tx.Hash().StringLE()), - zap.Uint32("block", block.Index), - zap.Error(err)) - } - aer := &state.AppExecResult{ - TxHash: tx.Hash(), - Trigger: trigger.Application, - VMState: v.State(), - GasConsumed: v.GasConsumed(), - Stack: v.Estack().ToContractParameters(), - Events: systemInterop.Notifications, - } - appExecResults = append(appExecResults, aer) - err = cache.PutAppExecResult(aer) + err := v.Run() + if !v.HasFailed() { + _, err := systemInterop.DAO.Persist() if err != nil { - return errors.Wrap(err, "failed to Store notifications") + return errors.Wrap(err, "failed to persist invocation results") } + for _, note := range systemInterop.Notifications { + arr, ok := note.Item.Value().([]vm.StackItem) + if !ok || len(arr) != 4 { + continue + } + op, ok := arr[0].Value().([]byte) + if !ok || (string(op) != "transfer" && string(op) != "Transfer") { + continue + } + var from []byte + fromValue := arr[1].Value() + // we don't have `from` set when we are minting tokens + if fromValue != nil { + from, ok = fromValue.([]byte) + if !ok { + continue + } + } + var to []byte + toValue := arr[2].Value() + // we don't have `to` set when we are burning tokens + if toValue != nil { + to, ok = toValue.([]byte) + if !ok { + continue + } + } + amount, ok := arr[3].Value().(*big.Int) + if !ok { + bs, ok := arr[3].Value().([]byte) + if !ok { + continue + } + amount = emit.BytesToInt(bs) + } + bc.processNEP5Transfer(cache, tx, block, note.ScriptHash, from, to, amount.Int64()) + } + } else { + bc.log.Warn("contract invocation failed", + zap.String("tx", tx.Hash().StringLE()), + zap.Uint32("block", block.Index), + zap.Error(err)) + } + aer := &state.AppExecResult{ + TxHash: tx.Hash(), + Trigger: trigger.Application, + VMState: v.State(), + GasConsumed: v.GasConsumed(), + Stack: v.Estack().ToContractParameters(), + Events: systemInterop.Notifications, + } + appExecResults = append(appExecResults, aer) + err = cache.PutAppExecResult(aer) + if err != nil { + return errors.Wrap(err, "failed to Store notifications") } } diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index 3eb3c39be..1b50e88d9 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -102,7 +102,7 @@ func TestScriptFromWitness(t *testing.T) { func TestGetHeader(t *testing.T) { bc := newTestChain(t) - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.ValidUntilBlock = bc.BlockHeight() + 1 assert.Nil(t, addSender(tx)) assert.Nil(t, signTx(bc, tx)) @@ -267,7 +267,7 @@ func TestSubscriptions(t *testing.T) { emit.Bytes(script.BinWriter, []byte("yay!")) emit.Syscall(script.BinWriter, "Neo.Runtime.Notify") require.NoError(t, script.Err) - txGood1 := transaction.NewInvocationTX(script.Bytes(), 0) + txGood1 := transaction.New(script.Bytes(), 0) txGood1.Sender = neoOwner txGood1.Nonce = 1 txGood1.ValidUntilBlock = 100500 @@ -279,7 +279,7 @@ func TestSubscriptions(t *testing.T) { emit.Syscall(script.BinWriter, "Neo.Runtime.Notify") emit.Opcode(script.BinWriter, opcode.THROW) require.NoError(t, script.Err) - txBad := transaction.NewInvocationTX(script.Bytes(), 0) + txBad := transaction.New(script.Bytes(), 0) txBad.Sender = neoOwner txBad.Nonce = 2 txBad.ValidUntilBlock = 100500 @@ -289,7 +289,7 @@ func TestSubscriptions(t *testing.T) { emit.Bytes(script.BinWriter, []byte("yay! yay! yay!")) emit.Syscall(script.BinWriter, "Neo.Runtime.Notify") require.NoError(t, script.Err) - txGood2 := transaction.NewInvocationTX(script.Bytes(), 0) + txGood2 := transaction.New(script.Bytes(), 0) txGood2.Sender = neoOwner txGood2.Nonce = 3 txGood2.ValidUntilBlock = 100500 @@ -311,14 +311,11 @@ func TestSubscriptions(t *testing.T) { for _, txExpected := range invBlock.Transactions { tx := <-txCh require.Equal(t, txExpected, tx) - if txExpected.Type == transaction.InvocationType { - exec := <-executionCh - require.Equal(t, tx.Hash(), exec.TxHash) - if exec.VMState == "HALT" { - notif := <-notificationCh - inv := tx.Data.(*transaction.InvocationTX) - require.Equal(t, hash.Hash160(inv.Script), notif.ScriptHash) - } + exec := <-executionCh + require.Equal(t, tx.Hash(), exec.TxHash) + if exec.VMState == "HALT" { + notif := <-notificationCh + require.Equal(t, hash.Hash160(tx.Script), notif.ScriptHash) } } assert.Empty(t, txCh) diff --git a/pkg/core/dao/dao_test.go b/pkg/core/dao/dao_test.go index 725dd2766..77c62bc0f 100644 --- a/pkg/core/dao/dao_test.go +++ b/pkg/core/dao/dao_test.go @@ -220,7 +220,7 @@ func TestGetCurrentHeaderHeight_Store(t *testing.T) { func TestStoreAsTransaction(t *testing.T) { dao := NewSimple(storage.NewMemoryStore()) - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 1) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 1) hash := tx.Hash() err := dao.StoreAsTransaction(tx, 0) require.NoError(t, err) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index 521baf96e..06e394ca0 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -138,7 +138,7 @@ func newDumbBlock() *block.Block { Nonce: 1111, }, Transactions: []*transaction.Transaction{ - transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0), + transaction.New([]byte{byte(opcode.PUSH1)}, 0), }, } } @@ -240,7 +240,7 @@ func TestCreateBasicChain(t *testing.T) { txScript := script.Bytes() invFee := util.Fixed8FromFloat(100) - txDeploy := transaction.NewInvocationTX(txScript, invFee) + txDeploy := transaction.New(txScript, invFee) txDeploy.Nonce = getNextNonce() txDeploy.ValidUntilBlock = validUntilBlock txDeploy.Sender = priv0ScriptHash @@ -254,7 +254,7 @@ func TestCreateBasicChain(t *testing.T) { script = io.NewBufBinWriter() emit.AppCallWithOperationAndArgs(script.BinWriter, hash.Hash160(avm), "Put", "testkey", "testvalue") - txInv := transaction.NewInvocationTX(script.Bytes(), 0) + txInv := transaction.New(script.Bytes(), 0) txInv.Nonce = getNextNonce() txInv.ValidUntilBlock = validUntilBlock txInv.Sender = priv0ScriptHash @@ -285,7 +285,7 @@ func TestCreateBasicChain(t *testing.T) { sh := hash.Hash160(avm) w := io.NewBufBinWriter() emit.AppCallWithOperationAndArgs(w.BinWriter, sh, "init") - initTx := transaction.NewInvocationTX(w.Bytes(), 0) + initTx := transaction.New(w.Bytes(), 0) initTx.Nonce = getNextNonce() initTx.ValidUntilBlock = validUntilBlock initTx.Sender = priv0ScriptHash @@ -375,7 +375,7 @@ func newNEP5Transfer(sc, from, to util.Uint160, amount int64) *transaction.Trans emit.Opcode(w.BinWriter, opcode.ASSERT) script := w.Bytes() - return transaction.NewInvocationTX(script, 0) + return transaction.New(script, 0) } func addSender(txs ...*transaction.Transaction) error { diff --git a/pkg/core/interop_neo.go b/pkg/core/interop_neo.go index 74b5e364e..915fe5313 100644 --- a/pkg/core/interop_neo.go +++ b/pkg/core/interop_neo.go @@ -152,17 +152,6 @@ func txGetReferences(ic *interop.Context, v *vm.VM) error { return nil } -// txGetType returns current transaction type. -func txGetType(ic *interop.Context, v *vm.VM) error { - txInterface := v.Estack().Pop().Value() - tx, ok := txInterface.(*transaction.Transaction) - if !ok { - return errors.New("value is not a transaction") - } - v.Estack().PushVal(int(tx.Type)) - return nil -} - // txGetUnspentCoins returns current transaction unspent coins. func txGetUnspentCoins(ic *interop.Context, v *vm.VM) error { txInterface := v.Estack().Pop().Value() @@ -206,24 +195,6 @@ func txGetWitnesses(ic *interop.Context, v *vm.VM) error { return nil } -// invocationTx_GetScript returns invocation script from the current transaction. -func invocationTxGetScript(ic *interop.Context, v *vm.VM) error { - txInterface := v.Estack().Pop().Value() - tx, ok := txInterface.(*transaction.Transaction) - if !ok { - return errors.New("value is not a transaction") - } - inv, ok := tx.Data.(*transaction.InvocationTX) - if tx.Type != transaction.InvocationType || !ok { - return errors.New("value is not an invocation transaction") - } - // It's important not to share inv.Script slice with the code running in VM. - script := make([]byte, len(inv.Script)) - copy(script, inv.Script) - v.Estack().PushVal(script) - return nil -} - // witnessGetVerificationScript returns current witness' script. func witnessGetVerificationScript(ic *interop.Context, v *vm.VM) error { witInterface := v.Estack().Pop().Value() diff --git a/pkg/core/interop_neo_test.go b/pkg/core/interop_neo_test.go index e9ec0b2fe..3dd0065be 100644 --- a/pkg/core/interop_neo_test.go +++ b/pkg/core/interop_neo_test.go @@ -212,27 +212,6 @@ func TestTxGetOutputs(t *testing.T) { require.Equal(t, tx.Outputs[0], *value[0].Value().(*transaction.Output)) } -func TestTxGetType(t *testing.T) { - v, tx, context, chain := createVMAndPushTX(t) - defer chain.Close() - - err := txGetType(context, v) - require.NoError(t, err) - value := v.Estack().Pop().Value().(*big.Int) - require.Equal(t, big.NewInt(int64(tx.Type)), value) -} - -func TestInvocationTxGetScript(t *testing.T) { - v, tx, context, chain := createVMAndPushTX(t) - defer chain.Close() - - err := invocationTxGetScript(context, v) - require.NoError(t, err) - value := v.Estack().Pop().Value().([]byte) - inv := tx.Data.(*transaction.InvocationTX) - require.Equal(t, inv.Script, value) -} - func TestWitnessGetVerificationScript(t *testing.T) { v := vm.New() script := []byte{byte(opcode.PUSHM1), byte(opcode.RET)} @@ -290,14 +269,14 @@ func TestECDSAVerify(t *testing.T) { }) t.Run("signed interop item", func(t *testing.T) { - tx := transaction.NewInvocationTX([]byte{0, 1, 2}, 1) + tx := transaction.New([]byte{0, 1, 2}, 1) msg := tx.GetSignedPart() sign := priv.Sign(msg) runCase(t, false, true, sign, priv.PublicKey().Bytes(), vm.NewInteropItem(tx)) }) t.Run("signed script container", func(t *testing.T) { - tx := transaction.NewInvocationTX([]byte{0, 1, 2}, 1) + tx := transaction.New([]byte{0, 1, 2}, 1) msg := tx.GetSignedPart() sign := priv.Sign(msg) ic.Container = tx @@ -617,7 +596,7 @@ func createVMAndAccState(t *testing.T) (*vm.VM, *state.Account, *interop.Context func createVMAndTX(t *testing.T) (*vm.VM, *transaction.Transaction, *interop.Context, *Blockchain) { v := vm.New() script := []byte{byte(opcode.PUSH1), byte(opcode.RET)} - tx := transaction.NewInvocationTX(script, 0) + tx := transaction.New(script, 0) bytes := make([]byte, 1) attributes := append(tx.Attributes, transaction.Attribute{ diff --git a/pkg/core/interops.go b/pkg/core/interops.go index 3a6aba2ea..1548345cc 100644 --- a/pkg/core/interops.go +++ b/pkg/core/interops.go @@ -150,7 +150,6 @@ var neoInterops = []interop.Function{ {Name: "Neo.Header.GetVersion", Func: headerGetVersion, Price: 1}, {Name: "Neo.Input.GetHash", Func: inputGetHash, Price: 1}, {Name: "Neo.Input.GetIndex", Func: inputGetIndex, Price: 1}, - {Name: "Neo.InvocationTransaction.GetScript", Func: invocationTxGetScript, Price: 1}, {Name: "Neo.Iterator.Concat", Func: iterator.Concat, Price: 1}, {Name: "Neo.Iterator.Create", Func: iterator.Create, Price: 1}, {Name: "Neo.Iterator.Key", Func: iterator.Key, Price: 1}, @@ -179,7 +178,6 @@ var neoInterops = []interop.Function{ {Name: "Neo.Transaction.GetInputs", Func: txGetInputs, Price: 1}, {Name: "Neo.Transaction.GetOutputs", Func: txGetOutputs, Price: 1}, {Name: "Neo.Transaction.GetReferences", Func: txGetReferences, Price: 200}, - {Name: "Neo.Transaction.GetType", Func: txGetType, Price: 1}, {Name: "Neo.Transaction.GetUnspentCoins", Func: txGetUnspentCoins, Price: 200}, {Name: "Neo.Transaction.GetWitnesses", Func: txGetWitnesses, Price: 200}, {Name: "Neo.Witness.GetVerificationScript", Func: witnessGetVerificationScript, Price: 100}, @@ -241,7 +239,6 @@ var neoInterops = []interop.Function{ {Name: "AntShares.Transaction.GetInputs", Func: txGetInputs, Price: 1}, {Name: "AntShares.Transaction.GetOutputs", Func: txGetOutputs, Price: 1}, {Name: "AntShares.Transaction.GetReferences", Func: txGetReferences, Price: 200}, - {Name: "AntShares.Transaction.GetType", Func: txGetType, Price: 1}, } // initIDinInteropsSlice initializes IDs from names in one given diff --git a/pkg/core/interops_test.go b/pkg/core/interops_test.go index c1ca1bdfa..d1aa1b836 100644 --- a/pkg/core/interops_test.go +++ b/pkg/core/interops_test.go @@ -60,7 +60,6 @@ func TestUnexpectedNonInterops(t *testing.T) { headerGetVersion, inputGetHash, inputGetIndex, - invocationTxGetScript, outputGetAssetID, outputGetScriptHash, outputGetValue, @@ -75,7 +74,6 @@ func TestUnexpectedNonInterops(t *testing.T) { txGetInputs, txGetOutputs, txGetReferences, - txGetType, txGetUnspentCoins, txGetWitnesses, witnessGetVerificationScript, diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index e1b720420..5a1129a96 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -31,7 +31,7 @@ func (fs *FeerStub) GetUtilityTokenBalance(uint160 util.Uint160) util.Fixed8 { func testMemPoolAddRemoveWithFeer(t *testing.T, fs Feer) { mp := NewMemPool(10) - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 0 _, _, ok := mp.TryGetValue(tx.Hash()) require.Equal(t, false, ok) @@ -65,7 +65,7 @@ func TestMemPoolAddRemoveWithInputs(t *testing.T) { mpLessInputs := func(i, j int) bool { return mp.inputs[i].Cmp(mp.inputs[j]) < 0 } - txm1 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + txm1 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) txm1.Nonce = 1 for i := 0; i < 5; i++ { txm1.Inputs = append(txm1.Inputs, transaction.Input{PrevHash: hash1, PrevIndex: uint16(100 - i)}) @@ -75,7 +75,7 @@ func TestMemPoolAddRemoveWithInputs(t *testing.T) { assert.Equal(t, len(txm1.Inputs), len(mp.inputs)) assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - txm2 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + txm2 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) txm2.Nonce = 1 for i := 0; i < 10; i++ { txm2.Inputs = append(txm2.Inputs, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i)}) @@ -104,21 +104,21 @@ func TestMemPoolAddRemoveWithInputs(t *testing.T) { func TestMemPoolVerifyInputs(t *testing.T) { mp := NewMemPool(10) - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 1 inhash1 := random.Uint256() tx.Inputs = append(tx.Inputs, transaction.Input{PrevHash: inhash1, PrevIndex: 0}) require.Equal(t, true, mp.Verify(tx, &FeerStub{})) require.NoError(t, mp.Add(tx, &FeerStub{})) - tx2 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx2 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx2.Nonce = 2 inhash2 := random.Uint256() tx2.Inputs = append(tx2.Inputs, transaction.Input{PrevHash: inhash2, PrevIndex: 0}) require.Equal(t, true, mp.Verify(tx2, &FeerStub{})) require.NoError(t, mp.Add(tx2, &FeerStub{})) - tx3 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx3 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx3.Nonce = 3 // Different index number, but the same PrevHash as in tx1. tx3.Inputs = append(tx3.Inputs, transaction.Input{PrevHash: inhash1, PrevIndex: 1}) @@ -135,7 +135,7 @@ func TestOverCapacity(t *testing.T) { mp := NewMemPool(mempoolSize) for i := 0; i < mempoolSize; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = uint32(i) require.NoError(t, mp.Add(tx, fs)) } @@ -145,7 +145,7 @@ func TestOverCapacity(t *testing.T) { // Fees are also prioritized. for i := 0; i < mempoolSize; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Attributes = append(tx.Attributes, transaction.Attribute{ Usage: transaction.Hash1, Data: util.Uint256{1, 2, 3, 4}.BytesBE(), @@ -159,7 +159,7 @@ func TestOverCapacity(t *testing.T) { require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) } // Less prioritized txes are not allowed anymore. - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Attributes = append(tx.Attributes, transaction.Attribute{ Usage: transaction.Hash1, Data: util.Uint256{1, 2, 3, 4}.BytesBE(), @@ -172,7 +172,7 @@ func TestOverCapacity(t *testing.T) { require.Equal(t, true, sort.IsSorted(sort.Reverse(mp.verifiedTxes))) // Low net fee, but higher per-byte fee is still a better combination. - tx = transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx = transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = txcnt tx.NetworkFee = util.Fixed8FromFloat(0.00007) txcnt++ @@ -185,7 +185,7 @@ func TestOverCapacity(t *testing.T) { // High priority always wins over low priority. fs.lowPriority = false for i := 0; i < mempoolSize; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = txcnt txcnt++ require.NoError(t, mp.Add(tx, fs)) @@ -194,7 +194,7 @@ func TestOverCapacity(t *testing.T) { } // Good luck with low priority now. fs.lowPriority = true - tx = transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx = transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = txcnt require.Error(t, mp.Add(tx, fs)) require.Equal(t, mempoolSize, mp.Count()) @@ -208,7 +208,7 @@ func TestGetVerified(t *testing.T) { txes := make([]*transaction.Transaction, 0, mempoolSize) for i := 0; i < mempoolSize; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = uint32(i) txes = append(txes, tx) require.NoError(t, mp.Add(tx, fs)) @@ -234,7 +234,7 @@ func TestRemoveStale(t *testing.T) { txes1 := make([]*transaction.Transaction, 0, mempoolSize/2) txes2 := make([]*transaction.Transaction, 0, mempoolSize/2) for i := 0; i < mempoolSize; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = uint32(i) if i%2 == 0 { txes1 = append(txes1, tx) @@ -263,7 +263,7 @@ func TestRemoveStale(t *testing.T) { func TestMemPoolFees(t *testing.T) { mp := NewMemPool(10) sender0 := util.Uint160{1, 2, 3} - tx0 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx0 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx0.NetworkFee = util.Fixed8FromInt64(11000) tx0.Sender = sender0 // insufficient funds to add transaction, but balance should be stored @@ -276,7 +276,7 @@ func TestMemPoolFees(t *testing.T) { }, mp.fees[sender0]) // no problems with adding another transaction with lower fee - tx1 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx1 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx1.NetworkFee = util.Fixed8FromInt64(7000) tx1.Sender = sender0 require.NoError(t, mp.Add(tx1, &FeerStub{})) @@ -287,7 +287,7 @@ func TestMemPoolFees(t *testing.T) { }, mp.fees[sender0]) // balance shouldn't change after adding one more transaction - tx2 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx2 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx2.NetworkFee = util.Fixed8FromFloat(3000) tx2.Sender = sender0 require.NoError(t, mp.Add(tx2, &FeerStub{})) @@ -299,7 +299,7 @@ func TestMemPoolFees(t *testing.T) { }, mp.fees[sender0]) // can't add more transactions as we don't have enough GAS - tx3 := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx3 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx3.NetworkFee = util.Fixed8FromFloat(0.5) tx3.Sender = sender0 require.Equal(t, false, mp.Verify(tx3, &FeerStub{})) diff --git a/pkg/core/native_contract_test.go b/pkg/core/native_contract_test.go index fd2d10024..a95e8cd0b 100644 --- a/pkg/core/native_contract_test.go +++ b/pkg/core/native_contract_test.go @@ -92,7 +92,7 @@ func TestNativeContract_Invoke(t *testing.T) { w := io.NewBufBinWriter() emit.AppCallWithOperationAndArgs(w.BinWriter, tn.Metadata().Hash, "sum", int64(14), int64(28)) script := w.Bytes() - tx := transaction.NewInvocationTX(script, 0) + tx := transaction.New(script, 0) validUntil := chain.blockHeight + 1 tx.ValidUntilBlock = validUntil require.NoError(t, addSender(tx)) diff --git a/pkg/core/transaction/invocation.go b/pkg/core/transaction/invocation.go deleted file mode 100644 index f68929764..000000000 --- a/pkg/core/transaction/invocation.go +++ /dev/null @@ -1,48 +0,0 @@ -package transaction - -import ( - "errors" - "math/rand" - - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// InvocationTX represents a invocation transaction and is used to -// deploy smart contract to the NEO blockchain. -type InvocationTX struct { - // Script output of the smart contract. - Script []byte -} - -// NewInvocationTX returns a new invocation transaction. -func NewInvocationTX(script []byte, gas util.Fixed8) *Transaction { - return &Transaction{ - Type: InvocationType, - Version: 1, - Nonce: rand.Uint32(), - Data: &InvocationTX{ - Script: script, - }, - SystemFee: gas, - Attributes: []Attribute{}, - Cosigners: []Cosigner{}, - Inputs: []Input{}, - Outputs: []Output{}, - Scripts: []Witness{}, - } -} - -// DecodeBinary implements Serializable interface. -func (tx *InvocationTX) DecodeBinary(br *io.BinReader) { - tx.Script = br.ReadVarBytes() - if br.Err == nil && len(tx.Script) == 0 { - br.Err = errors.New("no script") - return - } -} - -// EncodeBinary implements Serializable interface. -func (tx *InvocationTX) EncodeBinary(bw *io.BinWriter) { - bw.WriteVarBytes(tx.Script) -} diff --git a/pkg/core/transaction/invocation_test.go b/pkg/core/transaction/invocation_test.go deleted file mode 100644 index 4efecbe96..000000000 --- a/pkg/core/transaction/invocation_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package transaction - -import ( - "encoding/hex" - "testing" - - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestInvocationZeroScript(t *testing.T) { - // Zero-length script. - in, err := hex.DecodeString("000000000000000000") - require.NoError(t, err) - - inv := &InvocationTX{} - assert.Error(t, testserdes.DecodeBinary(in, inv)) - - // PUSH1 script. - in, err = hex.DecodeString("01510000000000000000") - require.NoError(t, err) - - assert.NoError(t, testserdes.DecodeBinary(in, inv)) -} diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index b52cb1bc0..f3923b35f 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -4,7 +4,7 @@ import ( "encoding/hex" "encoding/json" "errors" - "fmt" + "math/rand" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" "github.com/nspcc-dev/neo-go/pkg/encoding/address" @@ -26,9 +26,6 @@ const ( // Transaction is a process recorded in the NEO blockchain. type Transaction struct { - // The type of the transaction. - Type TXType - // The trading version which is currently 0. Version uint8 @@ -48,9 +45,8 @@ type Transaction struct { // transaction should fail verification. ValidUntilBlock uint32 - // Data specific to the type of the transaction. - // This is always a pointer to a Transaction. - Data TXer + // Code to run in NeoVM for this transaction. + Script []byte // Transaction attributes. Attributes []Attribute @@ -89,6 +85,22 @@ func NewTrimmedTX(hash util.Uint256) *Transaction { } } +// New returns a new transaction to execute given script and pay given system +// fee. +func New(script []byte, gas util.Fixed8) *Transaction { + return &Transaction{ + Version: 0, + Nonce: rand.Uint32(), + Script: script, + SystemFee: gas, + Attributes: []Attribute{}, + Cosigners: []Cosigner{}, + Inputs: []Input{}, + Outputs: []Output{}, + Scripts: []Witness{}, + } +} + // Hash returns the hash of the transaction. func (t *Transaction) Hash() util.Uint256 { if t.hash.Equals(util.Uint256{}) { @@ -121,8 +133,11 @@ func (t *Transaction) AddInput(in *Input) { // DecodeBinary implements Serializable interface. func (t *Transaction) DecodeBinary(br *io.BinReader) { - t.Type = TXType(br.ReadB()) t.Version = uint8(br.ReadB()) + if t.Version > 0 { + br.Err = errors.New("only version 0 is supported") + return + } t.Nonce = br.ReadU32LE() t.Sender.DecodeBinary(br) t.SystemFee.DecodeBinary(br) @@ -140,7 +155,6 @@ func (t *Transaction) DecodeBinary(br *io.BinReader) { return } t.ValidUntilBlock = br.ReadU32LE() - t.decodeData(br) br.ReadArray(&t.Attributes) @@ -154,6 +168,12 @@ func (t *Transaction) DecodeBinary(br *io.BinReader) { } } + t.Script = br.ReadVarBytes() + if br.Err == nil && len(t.Script) == 0 { + br.Err = errors.New("no script") + return + } + br.ReadArray(&t.Inputs) br.ReadArray(&t.Outputs) for i := range t.Outputs { @@ -171,16 +191,6 @@ func (t *Transaction) DecodeBinary(br *io.BinReader) { } } -func (t *Transaction) decodeData(r *io.BinReader) { - switch t.Type { - case InvocationType: - t.Data = &InvocationTX{} - t.Data.(*InvocationTX).DecodeBinary(r) - default: - r.Err = fmt.Errorf("invalid TX type %x", t.Type) - } -} - // EncodeBinary implements Serializable interface. func (t *Transaction) EncodeBinary(bw *io.BinWriter) { t.encodeHashableFields(bw) @@ -190,11 +200,10 @@ func (t *Transaction) EncodeBinary(bw *io.BinWriter) { // encodeHashableFields encodes the fields that are not used for // signing the transaction, which are all fields except the scripts. func (t *Transaction) encodeHashableFields(bw *io.BinWriter) { - if t.Data == nil { - bw.Err = errors.New("transaction has no data") + if len(t.Script) == 0 { + bw.Err = errors.New("transaction has no script") return } - bw.WriteB(byte(t.Type)) bw.WriteB(byte(t.Version)) bw.WriteU32LE(t.Nonce) t.Sender.EncodeBinary(bw) @@ -202,15 +211,13 @@ func (t *Transaction) encodeHashableFields(bw *io.BinWriter) { t.NetworkFee.EncodeBinary(bw) bw.WriteU32LE(t.ValidUntilBlock) - // Underlying TXer. - t.Data.EncodeBinary(bw) - // Attributes bw.WriteArray(t.Attributes) // Cosigners bw.WriteArray(t.Cosigners) + bw.WriteVarBytes(t.Script) // Inputs bw.WriteArray(t.Inputs) @@ -285,7 +292,6 @@ func (t *Transaction) FeePerByte() util.Fixed8 { type transactionJSON struct { TxID util.Uint256 `json:"txid"` Size int `json:"size"` - Type TXType `json:"type"` Version uint8 `json:"version"` Nonce uint32 `json:"nonce"` Sender string `json:"sender"` @@ -294,11 +300,10 @@ type transactionJSON struct { ValidUntilBlock uint32 `json:"valid_until_block"` Attributes []Attribute `json:"attributes"` Cosigners []Cosigner `json:"cosigners"` + Script string `json:"script"` Inputs []Input `json:"vin"` Outputs []Output `json:"vout"` Scripts []Witness `json:"scripts"` - - Script string `json:"script,omitempty"` } // MarshalJSON implements json.Marshaler interface. @@ -306,23 +311,19 @@ func (t *Transaction) MarshalJSON() ([]byte, error) { tx := transactionJSON{ TxID: t.Hash(), Size: io.GetVarSize(t), - Type: t.Type, Version: t.Version, Nonce: t.Nonce, Sender: address.Uint160ToString(t.Sender), ValidUntilBlock: t.ValidUntilBlock, Attributes: t.Attributes, Cosigners: t.Cosigners, + Script: hex.EncodeToString(t.Script), Inputs: t.Inputs, Outputs: t.Outputs, Scripts: t.Scripts, SystemFee: t.SystemFee, NetworkFee: t.NetworkFee, } - switch t.Type { - case InvocationType: - tx.Script = hex.EncodeToString(t.Data.(*InvocationTX).Script) - } return json.Marshal(tx) } @@ -332,7 +333,6 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, tx); err != nil { return err } - t.Type = tx.Type t.Version = tx.Version t.Nonce = tx.Nonce t.ValidUntilBlock = tx.ValidUntilBlock @@ -348,15 +348,9 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { return errors.New("cannot unmarshal tx: bad sender") } t.Sender = sender - switch tx.Type { - case InvocationType: - bytes, err := hex.DecodeString(tx.Script) - if err != nil { - return err - } - t.Data = &InvocationTX{ - Script: bytes, - } + t.Script, err = hex.DecodeString(tx.Script) + if err != nil { + return err } if t.Hash() != tx.TxID { return errors.New("txid doesn't match transaction hash") diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index 47e37f093..2ea9bea19 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -61,30 +61,32 @@ func TestDecodeEncodeInvocationTX(t *testing.T) { } */ -func TestNewInvocationTX(t *testing.T) { +func TestNew(t *testing.T) { script := []byte{0x51} - tx := NewInvocationTX(script, 1) - txData := tx.Data.(*InvocationTX) - assert.Equal(t, InvocationType, tx.Type) + tx := New(script, 1) assert.Equal(t, util.Fixed8(1), tx.SystemFee) - assert.Equal(t, script, txData.Script) + assert.Equal(t, script, tx.Script) // Update hash fields to match tx2 that is gonna autoupdate them on decode. _ = tx.Hash() testserdes.EncodeDecodeBinary(t, tx, new(Transaction)) } -func TestEncodingTXWithNoData(t *testing.T) { +func TestEncodingTXWithNoScript(t *testing.T) { _, err := testserdes.EncodeBinary(new(Transaction)) require.Error(t, err) } +func TestDecodingTXWithNoScript(t *testing.T) { + txBin, err := hex.DecodeString("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") + require.NoError(t, err) + err = testserdes.DecodeBinary(txBin, new(Transaction)) + require.Error(t, err) +} + func TestMarshalUnmarshalJSONInvocationTX(t *testing.T) { tx := &Transaction{ - Type: InvocationType, - Version: 3, - Data: &InvocationTX{ - Script: []byte{1, 2, 3, 4}, - }, + Version: 0, + Script: []byte{1, 2, 3, 4}, Attributes: []Attribute{}, Inputs: []Input{{ PrevHash: util.Uint256{5, 6, 7, 8}, diff --git a/pkg/core/transaction/txer.go b/pkg/core/transaction/txer.go deleted file mode 100644 index f48077f4d..000000000 --- a/pkg/core/transaction/txer.go +++ /dev/null @@ -1,9 +0,0 @@ -package transaction - -import "github.com/nspcc-dev/neo-go/pkg/io" - -// TXer is interface that can act as the underlying data of -// a transaction. -type TXer interface { - io.Serializable -} diff --git a/pkg/core/transaction/type.go b/pkg/core/transaction/type.go deleted file mode 100644 index df13a6d84..000000000 --- a/pkg/core/transaction/type.go +++ /dev/null @@ -1,51 +0,0 @@ -package transaction - -import ( - "strings" - - "github.com/pkg/errors" -) - -// TXType is the type of a transaction. -type TXType uint8 - -// Constants for all valid transaction types. -const ( - InvocationType TXType = 0xd1 -) - -// String implements the stringer interface. -func (t TXType) String() string { - switch t { - case InvocationType: - return "InvocationTransaction" - default: - return "UnknownTransaction" - } -} - -// MarshalJSON implements the json marshaller interface. -func (t TXType) MarshalJSON() ([]byte, error) { - return []byte(`"` + t.String() + `"`), nil -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (t *TXType) UnmarshalJSON(data []byte) error { - l := len(data) - if l < 2 || data[0] != '"' || data[l-1] != '"' { - return errors.New("wrong format") - } - var err error - *t, err = TXTypeFromString(string(data[1 : l-1])) - return err -} - -// TXTypeFromString searches for TXType by string name. -func TXTypeFromString(jsonString string) (TXType, error) { - switch jsonString = strings.TrimSpace(jsonString); jsonString { - case "InvocationTransaction": - return InvocationType, nil - default: - return 0, errors.New("unknown state") - } -} diff --git a/pkg/core/util.go b/pkg/core/util.go index c3bee9ff3..52362bc9d 100644 --- a/pkg/core/util.go +++ b/pkg/core/util.go @@ -77,7 +77,7 @@ func deployNativeContracts() *transaction.Transaction { buf := io.NewBufBinWriter() emit.Syscall(buf.BinWriter, "Neo.Native.Deploy") script := buf.Bytes() - tx := transaction.NewInvocationTX(script, 0) + tx := transaction.New(script, 0) tx.Nonce = 0 tx.Sender = hash.Hash160([]byte{byte(opcode.PUSH1)}) tx.Scripts = []transaction.Witness{ diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index 7ddc937b8..b49bd3d49 100644 --- a/pkg/core/util_test.go +++ b/pkg/core/util_test.go @@ -20,7 +20,7 @@ func TestGenesisBlockMainNet(t *testing.T) { // have been changed. Consequently, hash of the genesis block has been changed. // Update expected genesis block hash for better times. // Old hash is "d42561e3d30e15be6400b6df2f328e02d2bf6354c41dce433bc57687c82144bf" - expect := "30b7e37836146ef63ffdc28411c6c22153b69d8fb10b1d5b96ea662cfb19d2e8" + expect := "2535d4b8b244c8a036ed356ee4448e041dc6e8f1d81abdcc7e3d0640c66f6cc8" assert.Equal(t, expect, block.Hash().StringLE()) } diff --git a/pkg/interop/transaction/transaction.go b/pkg/interop/transaction/transaction.go index 545a9b89f..4f975fd8e 100644 --- a/pkg/interop/transaction/transaction.go +++ b/pkg/interop/transaction/transaction.go @@ -21,18 +21,6 @@ func GetHash(t Transaction) []byte { return nil } -// GetType returns the type of the given transaction. Possible values: -// MinerTransaction = 0x00 -// EnrollmentTransaction = 0x20 -// StateType = 0x90 -// AgencyTransaction = 0xb0 -// PublishTransaction = 0xd0 -// InvocationTransaction = 0xd1 -// It uses `Neo.Transaction.GetType` syscall. -func GetType(t Transaction) byte { - return 0x00 -} - // GetAttributes returns a slice of attributes for agiven transaction. Refer to // attribute package on how to use them. This function uses // `Neo.Transaction.GetAttributes` syscall. @@ -69,13 +57,6 @@ func GetOutputs(t Transaction) []output.Output { return []output.Output{} } -// GetScript returns the script stored in a given Invocation transaction. -// Calling it for any other Transaction type would lead to failure. It uses -// `Neo.InvocationTransaction.GetScript` syscall. -func GetScript(t Transaction) []byte { - return nil -} - // GetWitnesses returns a slice of witnesses of a given Transaction. Refer to // witness package on how to use them. This function uses // `Neo.Transaction.GetWitnesses` syscall. diff --git a/pkg/rpc/client/nep5.go b/pkg/rpc/client/nep5.go index d04a085be..95fcf83ec 100644 --- a/pkg/rpc/client/nep5.go +++ b/pkg/rpc/client/nep5.go @@ -108,7 +108,7 @@ func (c *Client) CreateNEP5TransferTx(acc *wallet.Account, to util.Uint160, toke emit.Opcode(w.BinWriter, opcode.ASSERT) script := w.Bytes() - tx := transaction.NewInvocationTX(script, gas) + tx := transaction.New(script, gas) tx.Sender = from tx.Cosigners = []transaction.Cosigner{ { diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index b0d0a5987..d0d572e85 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -423,7 +423,7 @@ func (c *Client) SignAndPushInvocationTx(script []byte, acc *wallet.Account, sys var txHash util.Uint256 var err error - tx := transaction.NewInvocationTX(script, sysfee) + tx := transaction.New(script, sysfee) tx.SystemFee = sysfee validUntilBlock, err := c.CalculateValidUntilBlock() diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index 33077fd76..aa657036e 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -31,17 +31,17 @@ type rpcClientTestCase struct { check func(t *testing.T, c *Client, result interface{}) } -const hexB1 = "0000000028de4a34063483263ea9899827792bfdc4acf6b533e7294dbb4838b820e9a40b5a448a04e699901d0ed78a62d11e2d0754f152dce78e08c8227d95bdf1df932a3eefd85e0000000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae76294130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb03005704000000000000d10102000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000f66a0d0000000000b0040000590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001abec5362f11e75b6e02e407bb98d63675d14384101000001fd08010c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b694130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bbd10103000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000967a0d0000000000b00400005d0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b52380001abec5362f11e75b6e02e407bb98d63675d14384101000001fd08010c40cfb0f8c01f320069f8f826cc5e3a9538e4eee4d228f1f2c53028be61c2df99b4341005ff8f50bde0e4827c7b0828eab59faca6eb2315fd11cd802daf88354fc90c4022deeaf06116faad8d9665dbb504a0049bb9f5b57713c85bfd894e12d3d46a73617199ff0854e3d5dde0dece92d8f1fd496b78c71727cfc03819f1d109ef827e0c406f68afac9da6dc56172ae57f56c5f1f3767d12d1a0aee2fecae80133b8e725578639b2ab15f230ce528ed4c85dfcfa4b231d5ff4ecc48555e68adf45e2e475500c4042a504fae6914f86b1318a3e278e8ca18e92db7fa432f05364824ea96a95899a0b3c0b07a910a3782b17fc46bc2a6b31259d1d046fcc508d7873e90ec67cc70794130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" +const hexB1 = "000000001409900d6f330df2624b9ad49e4e68c04bab6757b684b4ae46e995ec9278002d6aa5da3b3922db2ae0fb51e6058d123d441650db8a187e7b7a34c55927fae217b91274847201000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb030057040000000000000002000000abec5362f11e75b6e02e407bb98d63675d14384100000000000000000e670d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d14384101590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001fd08010c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb0003000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000ae760d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d143841015d0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238000001fd08010c4001c81faa8317a390c211d5e03451ed852ff02ec6c401c450558bc90c60a01912c3e1018de98e7458f6f96c68aad71ffb0e92327fcdfa4aabb5ea5834ec7afbf10c40a84e9bc36ffbf18a1ee79254182d2939dd3a7b9278e13893856f187ab44dec259c8a15d4f449a21aa6970234d79d81fee0aca1807341b977ff66d503a78c82920c4085495bb8d86b95a4afc1659ce1d993e1a7843e3dcb19696ce0422294dadddc73438780d5bc629560f576e0e75cff062c03e237d4e609dfaa9869135e23a487650c40ae25f2c563b978f931c3a8b5a18854d9bb77abf48c7554f2008f97696caca180cd40d4d0e47b3f4d86082e631547d1a4729c7ed60dda64fab9cd9a2270dd113294130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" -const hexTxMoveNeo = "d10102000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000f66a0d0000000000b0040000590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001abec5362f11e75b6e02e407bb98d63675d14384101000001fd08010c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b694130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" +const hexTxMoveNeo = "0002000000abec5362f11e75b6e02e407bb98d63675d14384100000000000000000e670d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d14384101590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001fd08010c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" -const b1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"size":1687,"nextblockhash":"0x96a0856f49798732e6eae4026a5f3e919b96250d847bcb3560d03bbad895c740","confirmations":4,"hash":"0xf7c3cecbe8fb15560c3113dd03911e52858a233b32cdc761ca03bc0721553424","version":0,"previousblockhash":"0x0ba4e920b83848bb4d29e733b5f6acc4fd2b79279889a93e26833406344ade28","merkleroot":"0x2a93dff1bd957d22c8088ee7dc52f154072d1ed1628ad70e1d9099e6048a445a","time":1591275326,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae762","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xf93ae1dbd2167e9b4a06431741297b351ac6a8ea3ae8892785c49f690a40b2c0","size":578,"type":"InvocationTransaction","version":1,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087935","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b6","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238"},{"txid":"0xe2caf7a9ce32a0daad81fd76f67aa64ffbe7cedf0fdeb8c57c466b6f5833bf0b","size":582,"type":"InvocationTransaction","version":1,"nonce":3,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0088335","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c40cfb0f8c01f320069f8f826cc5e3a9538e4eee4d228f1f2c53028be61c2df99b4341005ff8f50bde0e4827c7b0828eab59faca6eb2315fd11cd802daf88354fc90c4022deeaf06116faad8d9665dbb504a0049bb9f5b57713c85bfd894e12d3d46a73617199ff0854e3d5dde0dece92d8f1fd496b78c71727cfc03819f1d109ef827e0c406f68afac9da6dc56172ae57f56c5f1f3767d12d1a0aee2fecae80133b8e725578639b2ab15f230ce528ed4c85dfcfa4b231d5ff4ecc48555e68adf45e2e475500c4042a504fae6914f86b1318a3e278e8ca18e92db7fa432f05364824ea96a95899a0b3c0b07a910a3782b17fc46bc2a6b31259d1d046fcc508d7873e90ec67cc707","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"script":"0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238"}]}}` +const b1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"size":1685,"nextblockhash":"0x14a61952de5bf47e2550bb97439de44ea60f79e052419e8b263b1b41d7065b0f","confirmations":4,"hash":"0xc826db8aa7a05fbd336eb0fca66efea7330cdc09cc8cf8e3cd9a3d9a87b751ac","version":0,"previousblockhash":"0x2d007892ec95e946aeb484b65767ab4bc0684e9ed49a4b62f20d336f0d900914","merkleroot":"0x17e2fa2759c5347a7b7e188adb5016443d128d05e651fbe02adb22393bdaa56a","time":1591360099001,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xd24f8ab43462f8a2f788fa9073b8b32b4417aeddea19dfcc8dfb543d68e90de5","size":577,"version":0,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087835","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]},{"txid":"0xf3304d751f7f6e871a610644529aa4f8fcc60a31592352eea54b86be472614f1","size":581,"version":0,"nonce":3,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0088235","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c4001c81faa8317a390c211d5e03451ed852ff02ec6c401c450558bc90c60a01912c3e1018de98e7458f6f96c68aad71ffb0e92327fcdfa4aabb5ea5834ec7afbf10c40a84e9bc36ffbf18a1ee79254182d2939dd3a7b9278e13893856f187ab44dec259c8a15d4f449a21aa6970234d79d81fee0aca1807341b977ff66d503a78c82920c4085495bb8d86b95a4afc1659ce1d993e1a7843e3dcb19696ce0422294dadddc73438780d5bc629560f576e0e75cff062c03e237d4e609dfaa9869135e23a487650c40ae25f2c563b978f931c3a8b5a18854d9bb77abf48c7554f2008f97696caca180cd40d4d0e47b3f4d86082e631547d1a4729c7ed60dda64fab9cd9a2270dd1132","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}]}}` -const hexHeader1 = "0000000028de4a34063483263ea9899827792bfdc4acf6b533e7294dbb4838b820e9a40b5a448a04e699901d0ed78a62d11e2d0754f152dce78e08c8227d95bdf1df932a3eefd85e0000000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae76294130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb00" +const hexHeader1 = "000000001409900d6f330df2624b9ad49e4e68c04bab6757b684b4ae46e995ec9278002d6aa5da3b3922db2ae0fb51e6058d123d441650db8a187e7b7a34c55927fae217b91274847201000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb00" -const header1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"hash":"0xf7c3cecbe8fb15560c3113dd03911e52858a233b32cdc761ca03bc0721553424","size":518,"version":0,"previousblockhash":"0x0ba4e920b83848bb4d29e733b5f6acc4fd2b79279889a93e26833406344ade28","merkleroot":"0x2a93dff1bd957d22c8088ee7dc52f154072d1ed1628ad70e1d9099e6048a445a","time":1591275326,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40585acaabe5810f6a4a42bb44d946494887b4d9286ca3ccbe626f240d60080fccb602d7c4eda9d1aeeb6958adbd604aa227cd7e9238e5ea1925bf57af4c8726270c40785af1caba4069090bbcf6cf2a4eae8dcf9d706f719c8681c6c8599d21052ea1e982f1c35ea8241580c67d5ac33426135ef44575636dafdc3fa769f1d7f09fd20c400222d67892af0cb6561faf5107013f11d24432ae0100b9313799c9fd5c8db0ca8da95e31500fdaea820b06a9bd822b42b8e6b7803182619f9da3b6402e48bd250c40d614157118af153bbb89642280b4bf55fc4873d3bfd7cef3f30946598caa227b566d6c9a116f23ef3c0b383ae1a756cb3a2e724936d22830fef486f3946ae762","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"confirmations":6,"nextblockhash":"0x96a0856f49798732e6eae4026a5f3e919b96250d847bcb3560d03bbad895c740"}}` +const header1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"hash":"0xc826db8aa7a05fbd336eb0fca66efea7330cdc09cc8cf8e3cd9a3d9a87b751ac","size":518,"version":0,"previousblockhash":"0x2d007892ec95e946aeb484b65767ab4bc0684e9ed49a4b62f20d336f0d900914","merkleroot":"0x17e2fa2759c5347a7b7e188adb5016443d128d05e651fbe02adb22393bdaa56a","time":1591360099001,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"confirmations":6,"nextblockhash":"0x14a61952de5bf47e2550bb97439de44ea60f79e052419e8b263b1b41d7065b0f"}}` -const txMoveNeoVerbose = `{"id":5,"jsonrpc":"2.0","result":{"blockhash":"0xf7c3cecbe8fb15560c3113dd03911e52858a233b32cdc761ca03bc0721553424","confirmations":6,"blocktime":1591275326,"txid":"0xf93ae1dbd2167e9b4a06431741297b351ac6a8ea3ae8892785c49f690a40b2c0","size":578,"type":"InvocationTransaction","version":1,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087935","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c4076ef230b83bf1964ed734fc264df284de8eedbdf0e6403389c812146d34535863142e50aa61f4c6a6a9140441a180aba10166a62a1030458ef9725144f4bc5670c40c122b669c1e3d4346bebe959ffc3c9551533f00ad3b42a512dce6b90fa62f5779f211f576d80c3883ebe3d50b854d472c91c2632ed9c2da7d932b5f6d37fdaa40c4089accd1ef5b0a489acd360c9da7bdd1ad52550b4384d5bb76052debc136680be18d00f4c9c3ac3d9c3e4914c01e6b70f2cc0efc625c5b55ebd656f0f1bb650bb0c407d8de81ebfea87a1bbf366ff472eccdaa6e82a1988d8832318f2f66c7fd2e61f91c4a856d2778215b4d45703728da8a487aa71e53740b603d17d8af7d1a3f7b6","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238"}}` +const txMoveNeoVerbose = `{"id":5,"jsonrpc":"2.0","result":{"blockhash":"0xc826db8aa7a05fbd336eb0fca66efea7330cdc09cc8cf8e3cd9a3d9a87b751ac","confirmations":6,"blocktime":1591360099001,"txid":"0xd24f8ab43462f8a2f788fa9073b8b32b4417aeddea19dfcc8dfb543d68e90de5","size":577,"version":0,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087835","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}}` // getResultBlock1 returns data for block number 1 which is used by several tests. func getResultBlock1() *result.Block { @@ -54,14 +54,14 @@ func getResultBlock1() *result.Block { if err != nil { panic(err) } - b2Hash, err := util.Uint256DecodeStringLE("96a0856f49798732e6eae4026a5f3e919b96250d847bcb3560d03bbad895c740") + b2Hash, err := util.Uint256DecodeStringLE("14a61952de5bf47e2550bb97439de44ea60f79e052419e8b263b1b41d7065b0f") if err != nil { panic(err) } return &result.Block{ Block: b, BlockMetadata: result.BlockMetadata{ - Size: 1687, + Size: 1685, NextBlockHash: &b2Hash, Confirmations: 4, }, @@ -616,7 +616,7 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "positive", invoke: func(c *Client) (interface{}, error) { - return nil, c.SendRawTransaction(transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0)) + return nil, c.SendRawTransaction(transaction.New([]byte{byte(opcode.PUSH1)}, 0)) }, serverResponse: `{"jsonrpc":"2.0","id":1,"result":true}`, result: func(c *Client) interface{} { @@ -737,7 +737,7 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ { name: "sendrawtransaction_bad_server_answer", invoke: func(c *Client) (interface{}, error) { - return nil, c.SendRawTransaction(transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0)) + return nil, c.SendRawTransaction(transaction.New([]byte{byte(opcode.PUSH1)}, 0)) }, }, { @@ -1063,7 +1063,7 @@ var rpcClientErrorCases = map[string][]rpcClientErrorCase{ { name: "sendrawtransaction_unmarshalling_error", invoke: func(c *Client) (interface{}, error) { - return nil, c.SendRawTransaction(transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0)) + return nil, c.SendRawTransaction(transaction.New([]byte{byte(opcode.PUSH1)}, 0)) }, }, { diff --git a/pkg/rpc/client/wsclient_test.go b/pkg/rpc/client/wsclient_test.go index 879999712..445eb05e8 100644 --- a/pkg/rpc/client/wsclient_test.go +++ b/pkg/rpc/client/wsclient_test.go @@ -117,8 +117,8 @@ func TestWSClientEvents(t *testing.T) { var events = []string{ `{"jsonrpc":"2.0","method":"transaction_executed","params":[{"txid":"0xe1cd5e57e721d2a2e05fb1f08721b12057b25ab1dd7fd0f33ee1639932fdfad7","executions":[{"trigger":"Application","contract":"0x0000000000000000000000000000000000000000","vmstate":"HALT","gas_consumed":"2.291","stack":[],"notifications":[{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"636f6e74726163742063616c6c"},{"type":"ByteArray","value":"7472616e73666572"},{"type":"Array","value":[{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}]}},{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"7472616e73666572"},{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}}]}]}]}`, `{"jsonrpc":"2.0","method":"notification_from_execution","params":[{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"636f6e74726163742063616c6c"},{"type":"ByteArray","value":"7472616e73666572"},{"type":"Array","value":[{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}]}}]}`, - `{"jsonrpc":"2.0","method":"transaction_added","params":[{"txid":"0xd3c3104eb1c059985ddeacc3a149634c830b39cf3fa37f4a2f7af0e4980ff370","size":269,"type":"InvocationTransaction","version":1,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036921","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c40cf193534761a987324a355749f5e4ef8499ff5948df6ee8a4b9834cbe025103ad08a74a00e1e248c73f3d967b23d09af0d200d9cb742ec0aa911f7f783cbd2e0","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"01e8030c14316e851039019d39dfc2c37d6c3fee19fd5809870c14769162241eedf97c2481652adf1ba0f5bf57431b13c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238"}]}`, - `{"jsonrpc":"2.0","method":"block_added","params":[{"hash":"0x3c99815f393807efd7a620a04eed66440a3c89d41ff18fd42c08f71784fc1c16","version":0,"previousblockhash":"0xb6533ac10e71fb02348af87c0a723131939ee08713a7f31075d24beb54100f1a","merkleroot":"0x7470df300c48107d36ffd3da09b155a35650f1020d019abb0c3abb7bf91a09e2","time":1590609889,"index":207,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c4095dfc789359ca154c07f1bfdc28e0ac512f78156825efafd9b31a6a8009cef6339de6f8331aad35f6dc8af9a7723a07fb9319ccad54c91ab9be155964efa5f920c4067ac11066db9e47f64cf876e3d6dd07e28324d51b53faf2a42ccafc371050efbe0b5809c80672ea116a557bfbdbf789b7bca008064834db80c7c91a768bcec760c40aefd42910ad6a6f9c3ba17a5b38e8de7188d0b36972c47d3054715209ca79d9811beff9a762ebd1c78584ff3110222419b2cdba6c22bbcbb554195bf9df09bb30c40368c314b35b051a4a258828d3327e8c22053166eeb749d50a9a33e2620ba156042124979a1554524daf9f7b371ec0da5b41404a1b5e0d42fe0032859e114833c","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xde4481fdbef5d3726d0052661f950e69e4594dd6589913c628e20c1413f85b74","size":196,"type":"InvocationTransaction","version":1,"nonce":8,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0029621","valid_until_block":1200,"attributes":[],"cosigners":[],"vin":[],"vout":[],"scripts":[{"invocation":"0c40b192490537d5ec2c747fdf6ad8d73d0e3aae105c3d9ed96e7e032b28018fa54996661b17aaa107adc7a73a8ca3916b61a4b2b673e1b2a30c3c7117a01cf937a1","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"10c00c04696e69740c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b52"},{"txid":"0xd3c3104eb1c059985ddeacc3a149634c830b39cf3fa37f4a2f7af0e4980ff370","size":269,"type":"InvocationTransaction","version":1,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036921","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"vin":[],"vout":[],"scripts":[{"invocation":"0c40cf193534761a987324a355749f5e4ef8499ff5948df6ee8a4b9834cbe025103ad08a74a00e1e248c73f3d967b23d09af0d200d9cb742ec0aa911f7f783cbd2e0","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}],"script":"01e8030c14316e851039019d39dfc2c37d6c3fee19fd5809870c14769162241eedf97c2481652adf1ba0f5bf57431b13c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238"}]}]}`, + `{"jsonrpc":"2.0","method":"transaction_added","params":[{"txid":"0xe1e0200a69f3096010c75dd003653e5bd945e414d0b0a3b95e3dfe291534c8e5","size":267,"version":0,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036721","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"script":"007b0c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c40b61d89290451852143490194e09a547d79b8b6cda05691c085160cc0ddebc6e3a508defae7ac04e015c85af6b6fcb487a954c2a884d4cc147c9959f776844b3c","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}`, + `{"jsonrpc":"2.0","method":"block_added","params":[{"hash":"0x73f4157bc918f0af115522380b13dadf505773f91e818288edb0de4fcce104b4","version":0,"previousblockhash":"0x3c664cf156f2f418e92fd24621ac3b56da4a4c1e56c443fe360d52324d8f060f","merkleroot":"0xfa9e8e7a506c1a38fa1f090237156debd055c8cf41d743ae4f37fe3c278ff2e0","time":1591360099006,"index":6,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40d7690b2335898b192d408f3565fb8da0f994a305999f1b7b87000934831f76d680442ea2c44200c2b154c12a0ee587046eeec45f749b73ce3bc97ac172487f350c400835fd349d184a691087b24a827d82bad3026ffa0e7f2841e85fb91f5c9549e6a1430883586cbbfba3a450a0198608e19c0b1630677bbd9495e3f48c8c4835c40c400fd2d4dfee36f99de6df35b1c857eb7c8b9b26574a781114081b066b806a1bcae129d05329298b0e6b4728da90928d4a375157dd7472fb37351a20d1a84996790c404b58d5f6374bf6c2ab12f51e6f78a07852e027279879a5fb25b5e6371ad9d89749127e7b8f8eae3df45bfe187ae226aa1aeead061006da7c4e665d97950c9a3e","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xe1e0200a69f3096010c75dd003653e5bd945e414d0b0a3b95e3dfe291534c8e5","size":267,"version":0,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036721","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"script":"007b0c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c40b61d89290451852143490194e09a547d79b8b6cda05691c085160cc0ddebc6e3a508defae7ac04e015c85af6b6fcb487a954c2a884d4cc147c9959f776844b3c","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}]}`, `{"jsonrpc":"2.0","method":"event_missed","params":[]}`, } srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 4145d7bf9..79fdeae1e 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -496,13 +496,7 @@ func (s *Server) getApplicationLog(reqParams request.Params) (interface{}, *resp return nil, response.NewRPCError("Error while getting transaction", "", nil) } - var scriptHash util.Uint160 - switch t := tx.Data.(type) { - case *transaction.InvocationTX: - scriptHash = hash.Hash160(t.Script) - default: - return nil, response.NewRPCError("Invalid transaction type", "", nil) - } + scriptHash := hash.Hash160(tx.Script) return result.NewApplicationLog(appExecResult, scriptHash), nil } diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index e66498e94..81afdc448 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -20,6 +20,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/internal/testchain" + "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/rpc/response" "github.com/nspcc-dev/neo-go/pkg/rpc/response/result" @@ -54,12 +55,12 @@ var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["70c9d7804dd19bb8d60740824d45055d117a4c51559de1b51aed0a6a127b353c"]`, + params: `["2a6bf372fb96d05735eeb685805396818ac3f21e748528f4d6ebdecfd07ddce4"]`, result: func(e *executor) interface{} { return &result.ApplicationLog{} }, check: func(t *testing.T, e *executor, acc interface{}) { res, ok := acc.(*result.ApplicationLog) require.True(t, ok) - expectedTxHash, err := util.Uint256DecodeStringLE("70c9d7804dd19bb8d60740824d45055d117a4c51559de1b51aed0a6a127b353c") + expectedTxHash, err := util.Uint256DecodeStringLE("2a6bf372fb96d05735eeb685805396818ac3f21e748528f4d6ebdecfd07ddce4") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) @@ -82,11 +83,6 @@ var rpcTestCases = map[string][]rpcTestCase{ params: `["d24cc1d52b5c0216cbf3835bb5bac8ccf32639fa1ab6627ec4e2b9f33f7ec02f"]`, fail: true, }, - { - name: "invalid tx type", - params: `["f9adfde059810f37b3d0686d67f6b29034e0c669537df7e59b40c14a0508b9ed"]`, - fail: true, - }, }, "getcontractstate": { { @@ -333,7 +329,6 @@ var rpcTestCases = map[string][]rpcTestCase{ for i, tx := range res.Transactions { actualTx := block.Transactions[i] require.True(t, ok) - require.Equal(t, actualTx.Type, tx.Type) require.Equal(t, actualTx.Nonce, tx.Nonce) require.Equal(t, block.Transactions[i].Hash(), tx.Hash()) } @@ -489,7 +484,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "gettransactionheight": { { name: "positive", - params: `["70c9d7804dd19bb8d60740824d45055d117a4c51559de1b51aed0a6a127b353c"]`, + params: `["2a6bf372fb96d05735eeb685805396818ac3f21e748528f4d6ebdecfd07ddce4"]`, result: func(e *executor) interface{} { h := 0 return &h @@ -683,7 +678,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "sendrawtransaction": { { name: "positive", - params: `["d1010a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000aab9050000000000b00400005d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001316e851039019d39dfc2c37d6c3fee19fd58098701000001420c40fadd2f9ddbe9484ef3577f131b0dec21b46a0d1c2fedd498ec258e378683d35d7159fd21120d832c1bff891c36bd765b50546ac762db4f4735f2df23ba2ec84a290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, + params: `["000a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000c2b5050000000000b00400000001316e851039019d39dfc2c37d6c3fee19fd580987015d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001420c4070b2b74b193b574fede47432a9bfa192726603a7f1ef6f6589f192943eb5978f47d25a7834ae7f42a0ebf4e013d1d1c2d1bb61417890335e9804ef26a94d2c00290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, result: func(e *executor) interface{} { v := true return &v @@ -691,7 +686,7 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { name: "negative", - params: `["d1010a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000aab9050000000000b00400005d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b52380001316e851039019d39dfc2c37d6c3fee19fd58098701000001420c40fadd2f9ddbe9484ef3577f131b0dec21b46a0d1c2fedd498ec258e378683d35d7159fd21120d832c1bff891c36bd765b50546ac762db4f4735f2df23ba2ec84a290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad5"]`, + params: `["000a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000c2b5050000000000b00400000001316e851039019d39dfc2c37d6c3fee19fd580987015d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001420c4070b2b74b193b574fede47432a9bfa192726603a7f1ef6f6589f192943eb5978f47d25a7834ae7f42a0ebf4e013d1d1c2d1bb61417890335e9804ef26a94d2c00290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906aff"]`, fail: true, }, { @@ -821,7 +816,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] newTx := func() *transaction.Transaction { height := chain.BlockHeight() - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = height + 1 tx.ValidUntilBlock = height + 10 tx.Sender = acc0.PrivateKey().GetScriptHash() @@ -848,26 +843,32 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] t.Run("getrawtransaction", func(t *testing.T) { block, _ := chain.GetBlock(chain.GetHeaderHash(0)) - TXHash := block.Transactions[0].Hash() - rpc := fmt.Sprintf(`{"jsonrpc": "2.0", "id": 1, "method": "getrawtransaction", "params": ["%s"]}"`, TXHash.StringLE()) + tx := block.Transactions[0] + rpc := fmt.Sprintf(`{"jsonrpc": "2.0", "id": 1, "method": "getrawtransaction", "params": ["%s"]}"`, tx.Hash().StringLE()) body := doRPCCall(rpc, httpSrv.URL, t) result := checkErrGetResult(t, body, false) var res string err := json.Unmarshal(result, &res) require.NoErrorf(t, err, "could not parse response: %s", result) - assert.Equal(t, "d10100000000ca61e52e881d41374e640f819cd118cc153b21a700000000000000000000000000000000000000000541123e7fe80000000001000111", res) + txBin, err := testserdes.EncodeBinary(tx) + require.NoError(t, err) + expected := hex.EncodeToString(txBin) + assert.Equal(t, expected, res) }) t.Run("getrawtransaction 2 arguments", func(t *testing.T) { block, _ := chain.GetBlock(chain.GetHeaderHash(0)) - TXHash := block.Transactions[0].Hash() - rpc := fmt.Sprintf(`{"jsonrpc": "2.0", "id": 1, "method": "getrawtransaction", "params": ["%s", 0]}"`, TXHash.StringLE()) + tx := block.Transactions[0] + rpc := fmt.Sprintf(`{"jsonrpc": "2.0", "id": 1, "method": "getrawtransaction", "params": ["%s", 0]}"`, tx.Hash().StringLE()) body := doRPCCall(rpc, httpSrv.URL, t) result := checkErrGetResult(t, body, false) var res string err := json.Unmarshal(result, &res) require.NoErrorf(t, err, "could not parse response: %s", result) - assert.Equal(t, "d10100000000ca61e52e881d41374e640f819cd118cc153b21a700000000000000000000000000000000000000000541123e7fe80000000001000111", res) + txBin, err := testserdes.EncodeBinary(tx) + require.NoError(t, err) + expected := hex.EncodeToString(txBin) + assert.Equal(t, expected, res) }) t.Run("getrawtransaction 2 arguments, verbose", func(t *testing.T) { @@ -945,7 +946,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] expected = append(expected, tx.Tx.Hash()) } for i := 0; i < 5; i++ { - tx := transaction.NewInvocationTX([]byte{byte(opcode.PUSH1)}, 0) + tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) assert.NoError(t, mp.Add(tx, &FeerStub{})) expected = append(expected, tx.Hash()) } diff --git a/pkg/rpc/server/subscription_test.go b/pkg/rpc/server/subscription_test.go index ef0ba8155..c11265cfe 100644 --- a/pkg/rpc/server/subscription_test.go +++ b/pkg/rpc/server/subscription_test.go @@ -9,7 +9,6 @@ import ( "github.com/gorilla/websocket" "github.com/nspcc-dev/neo-go/pkg/core" - "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/internal/testchain" "github.com/nspcc-dev/neo-go/pkg/rpc/response" @@ -98,17 +97,12 @@ func TestSubscriptions(t *testing.T) { for _, b := range getTestBlocks(t) { require.NoError(t, chain.AddBlock(b)) - for _, tx := range b.Transactions { - var mayNotify bool - - if tx.Type == transaction.InvocationType { - resp := getNotification(t, respMsgs) - require.Equal(t, response.ExecutionEventID, resp.Event) - mayNotify = true - } + for range b.Transactions { + resp := getNotification(t, respMsgs) + require.Equal(t, response.ExecutionEventID, resp.Event) for { resp := getNotification(t, respMsgs) - if mayNotify && resp.Event == response.NotificationEventID { + if resp.Event == response.NotificationEventID { continue } require.Equal(t, response.TransactionEventID, resp.Event) diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index 9b244c9d131fc0f4074f5a2da4e8bc5033aa9c98..c8d5926be373db0ccdafc3a03fd2dacda3c28d8e 100644 GIT binary patch delta 3429 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 Nqh0q9%=I(2{{cB-4uJpw delta 3398 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 Date: Fri, 5 Jun 2020 17:26:11 +0300 Subject: [PATCH 37/42] transaction: drop Inputs and Outputs, forget UTXO --- cli/wallet/multisig.go | 11 - pkg/compiler/syscall.go | 19 +- pkg/core/blockchain.go | 243 ---------------------- pkg/core/blockchainer/blockchainer.go | 2 - pkg/core/dao/cacheddao.go | 26 +-- pkg/core/dao/dao.go | 53 ----- pkg/core/dao/dao_test.go | 19 -- pkg/core/interop_neo.go | 168 --------------- pkg/core/interop_neo_test.go | 111 ---------- pkg/core/interops.go | 17 -- pkg/core/interops_test.go | 9 - pkg/core/mempool/mem_pool.go | 81 +------- pkg/core/mempool/mem_pool_test.go | 74 ------- pkg/core/spent_coin.go | 10 - pkg/core/state/unspent_coin.go | 60 ------ pkg/core/state/unspent_coin_test.go | 47 ----- pkg/core/storage/store.go | 2 - pkg/core/storage/store_test.go | 2 - pkg/core/transaction/inout.go | 8 - pkg/core/transaction/input.go | 94 --------- pkg/core/transaction/input_test.go | 144 ------------- pkg/core/transaction/output.go | 82 -------- pkg/core/transaction/transaction.go | 47 ----- pkg/core/transaction/transaction_test.go | 14 +- pkg/core/util_test.go | 2 +- pkg/interop/input/input.go | 22 -- pkg/interop/output/output.go | 28 --- pkg/interop/transaction/transaction.go | 31 --- pkg/network/helper_test.go | 8 - pkg/rpc/client/client.go | 35 ---- pkg/rpc/client/rpc_test.go | 16 +- pkg/rpc/client/wsclient_test.go | 4 +- pkg/rpc/response/result/tx_output.go | 27 --- pkg/rpc/response/result/tx_raw_output.go | 4 - pkg/rpc/server/server_test.go | 10 +- pkg/rpc/server/testdata/testblocks.acc | Bin 6532 -> 6516 bytes pkg/smartcontract/context/context_test.go | 9 - 37 files changed, 30 insertions(+), 1509 deletions(-) delete mode 100644 pkg/core/spent_coin.go delete mode 100644 pkg/core/state/unspent_coin.go delete mode 100644 pkg/core/state/unspent_coin_test.go delete mode 100644 pkg/core/transaction/inout.go delete mode 100644 pkg/core/transaction/input.go delete mode 100644 pkg/core/transaction/input_test.go delete mode 100644 pkg/core/transaction/output.go delete mode 100644 pkg/interop/input/input.go delete mode 100644 pkg/interop/output/output.go delete mode 100644 pkg/rpc/response/result/tx_output.go diff --git a/cli/wallet/multisig.go b/cli/wallet/multisig.go index 883e3149e..639b77235 100644 --- a/cli/wallet/multisig.go +++ b/cli/wallet/multisig.go @@ -121,15 +121,4 @@ func writeParameterContext(c *context.ParameterContext, filename string) error { func printTxInfo(t *transaction.Transaction) { fmt.Printf("Hash: %s\n", t.Hash().StringLE()) - for i := range t.Inputs { - fmt.Printf("Input%02d: [%2d] %s\n", i, t.Inputs[i].PrevIndex, t.Inputs[i].PrevHash.StringLE()) - } - for i := range t.Outputs { - fmt.Printf("Output%02d:\n", i) - fmt.Printf("\tAssetID : %s\n", t.Outputs[i].AssetID.StringLE()) - fmt.Printf("\tAmount : %s\n", t.Outputs[i].Amount.String()) - h := t.Outputs[i].ScriptHash - fmt.Printf("\tScriptHash: %s\n", t.Outputs[i].ScriptHash.StringLE()) - fmt.Printf("\tToAddr : %s\n", address.Uint160ToString(h)) - } } diff --git a/pkg/compiler/syscall.go b/pkg/compiler/syscall.go index 9fa81cbbd..8d47d5a5e 100644 --- a/pkg/compiler/syscall.go +++ b/pkg/compiler/syscall.go @@ -65,13 +65,9 @@ var syscalls = map[string]map[string]string{ "GetTransaction": "Neo.Block.GetTransaction", }, "transaction": { - "GetAttributes": "Neo.Transaction.GetAttributes", - "GetHash": "Neo.Transaction.GetHash", - "GetInputs": "Neo.Transaction.GetInputs", - "GetOutputs": "Neo.Transaction.GetOutputs", - "GetReferences": "Neo.Transaction.GetReferences", - "GetUnspentCoins": "Neo.Transaction.GetUnspentCoins", - "GetWitnesses": "Neo.Transaction.GetWitnesses", + "GetAttributes": "Neo.Transaction.GetAttributes", + "GetHash": "Neo.Transaction.GetHash", + "GetWitnesses": "Neo.Transaction.GetWitnesses", }, "asset": { "Create": "Neo.Asset.Create", @@ -93,15 +89,6 @@ var syscalls = map[string]map[string]string{ "Migrate": "Neo.Contract.Migrate", "GetStorageContext": "Neo.Contract.GetStorageContext", }, - "input": { - "GetHash": "Neo.Input.GetHash", - "GetIndex": "Neo.Input.GetIndex", - }, - "output": { - "GetAssetID": "Neo.Output.GetAssetID", - "GetValue": "Neo.Output.GetValue", - "GetScriptHash": "Neo.Output.GetScriptHash", - }, "engine": { "GetScriptContainer": "System.ExecutionEngine.GetScriptContainer", "GetCallingScriptHash": "System.ExecutionEngine.GetCallingScriptHash", diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 4af9caad1..aac4134be 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -2,7 +2,6 @@ package core import ( "fmt" - "math" "math/big" "sort" "sync" @@ -559,65 +558,6 @@ func (bc *Blockchain) storeBlock(block *block.Block) error { return err } - if err := cache.PutUnspentCoinState(tx.Hash(), state.NewUnspentCoin(block.Index, tx)); err != nil { - return err - } - - // Process TX outputs. - if err := processOutputs(tx, cache); err != nil { - return err - } - - // Process TX inputs that are grouped by previous hash. - for _, inputs := range transaction.GroupInputsByPrevHash(tx.Inputs) { - prevHash := inputs[0].PrevHash - unspent, err := cache.GetUnspentCoinState(prevHash) - if err != nil { - return err - } - for _, input := range inputs { - if len(unspent.States) <= int(input.PrevIndex) { - return fmt.Errorf("bad input: %s/%d", input.PrevHash.StringLE(), input.PrevIndex) - } - if unspent.States[input.PrevIndex].State&state.CoinSpent != 0 { - return fmt.Errorf("double spend: %s/%d", input.PrevHash.StringLE(), input.PrevIndex) - } - unspent.States[input.PrevIndex].State |= state.CoinSpent - unspent.States[input.PrevIndex].SpendHeight = block.Index - prevTXOutput := &unspent.States[input.PrevIndex].Output - account, err := cache.GetAccountStateOrNew(prevTXOutput.ScriptHash) - if err != nil { - return err - } - - balancesLen := len(account.Balances[prevTXOutput.AssetID]) - if balancesLen <= 1 { - delete(account.Balances, prevTXOutput.AssetID) - } else { - var index = -1 - for i, balance := range account.Balances[prevTXOutput.AssetID] { - if balance.Tx.Equals(input.PrevHash) && balance.Index == input.PrevIndex { - index = i - break - } - } - if index >= 0 { - last := balancesLen - 1 - if last > index { - account.Balances[prevTXOutput.AssetID][index] = account.Balances[prevTXOutput.AssetID][last] - } - account.Balances[prevTXOutput.AssetID] = account.Balances[prevTXOutput.AssetID][:last] - } - } - if err = cache.PutAccountState(account); err != nil { - return err - } - } - if err = cache.PutUnspentCoinState(prevHash, unspent); err != nil { - return err - } - } - systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) v := SpawnVM(systemInterop) v.LoadScript(tx.Script) @@ -837,25 +777,6 @@ func (bc *Blockchain) LastBatch() *storage.MemBatch { return bc.lastBatch } -// processOutputs processes transaction outputs. -func processOutputs(tx *transaction.Transaction, dao *dao.Cached) error { - for index, output := range tx.Outputs { - account, err := dao.GetAccountStateOrNew(output.ScriptHash) - if err != nil { - return err - } - account.Balances[output.AssetID] = append(account.Balances[output.AssetID], state.UnspentBalance{ - Tx: tx.Hash(), - Index: uint16(index), - Value: output.Amount, - }) - if err = dao.PutAccountState(account); err != nil { - return err - } - } - return nil -} - // persist flushes current in-memory Store contents to the persistent storage. func (bc *Blockchain) persist() error { var ( @@ -1046,15 +967,6 @@ func (bc *Blockchain) GetAccountState(scriptHash util.Uint160) *state.Account { return as } -// GetUnspentCoinState returns unspent coin state for given tx hash. -func (bc *Blockchain) GetUnspentCoinState(hash util.Uint256) *state.UnspentCoin { - ucs, err := bc.dao.GetUnspentCoinState(hash) - if ucs == nil && err != storage.ErrKeyNotFound { - bc.log.Warn("failed to get unspent coin state", zap.Error(err)) - } - return ucs -} - // GetConfig returns the config stored in the blockchain. func (bc *Blockchain) GetConfig() config.ProtocolConfiguration { return bc.config @@ -1155,36 +1067,6 @@ func (bc *Blockchain) CalculateClaimable(value int64, startHeight, endHeight uin return amount * util.Fixed8(value) } -// References maps transaction's inputs into a slice of InOuts, effectively -// joining each Input with the corresponding Output. -// @TODO: unfortunately we couldn't attach this method to the Transaction struct in the -// transaction package because of a import cycle problem. Perhaps we should think to re-design -// the code base to avoid this situation. -func (bc *Blockchain) References(t *transaction.Transaction) ([]transaction.InOut, error) { - return bc.references(t.Inputs) -} - -// references is an internal implementation of References that operates directly -// on a slice of Input. -func (bc *Blockchain) references(ins []transaction.Input) ([]transaction.InOut, error) { - references := make([]transaction.InOut, 0, len(ins)) - - for _, inputs := range transaction.GroupInputsByPrevHash(ins) { - prevHash := inputs[0].PrevHash - unspent, err := bc.dao.GetUnspentCoinState(prevHash) - if err != nil { - return nil, errors.New("bad input reference") - } - for _, in := range inputs { - if int(in.PrevIndex) > len(unspent.States)-1 { - return nil, errors.New("bad input reference") - } - references = append(references, transaction.InOut{In: *in, Out: unspent.States[in.PrevIndex].Output}) - } - } - return references, nil -} - // FeePerByte returns transaction network fee per byte. // TODO: should be implemented as part of PolicyContract func (bc *Blockchain) FeePerByte() util.Fixed8 { @@ -1253,28 +1135,11 @@ func (bc *Blockchain) verifyTx(t *transaction.Transaction, block *block.Block) e if netFee < 0 { return errors.Errorf("insufficient funds: net fee is %v, need %v", t.NetworkFee, needNetworkFee) } - if transaction.HaveDuplicateInputs(t.Inputs) { - return errors.New("invalid transaction's inputs") - } if block == nil { if ok := bc.memPool.Verify(t, bc); !ok { return errors.New("invalid transaction due to conflicts with the memory pool") } } - if bc.dao.IsDoubleSpend(t) { - return errors.New("invalid transaction caused by double spending") - } - if err := bc.verifyOutputs(t); err != nil { - return errors.Wrap(err, "wrong outputs") - } - refs, err := bc.References(t) - if err != nil { - return err - } - results := refsAndOutsToResults(refs, t.Outputs) - if err := bc.verifyResults(t, results); err != nil { - return err - } for _, a := range t.Attributes { if a.Usage == transaction.ECDH02 || a.Usage == transaction.ECDH03 { @@ -1298,9 +1163,6 @@ func (bc *Blockchain) isTxStillRelevant(t *transaction.Transaction) bool { if bc.dao.HasTransaction(t.Hash()) { return false } - if bc.dao.IsDoubleSpend(t) { - return false - } for i := range t.Scripts { if !vm.IsStandardContract(t.Scripts[i].VerificationScript) { recheckWitness = true @@ -1357,88 +1219,6 @@ func (bc *Blockchain) PoolTx(t *transaction.Transaction) error { return nil } -func (bc *Blockchain) verifyOutputs(t *transaction.Transaction) error { - for assetID, outputs := range t.GroupOutputByAssetID() { - assetState := bc.GetAssetState(assetID) - if assetState == nil { - return fmt.Errorf("no asset state for %s", assetID.StringLE()) - } - - if assetState.Expiration < bc.blockHeight+1 && assetState.AssetType != transaction.GoverningToken && assetState.AssetType != transaction.UtilityToken { - return fmt.Errorf("asset %s expired", assetID.StringLE()) - } - - for _, out := range outputs { - if int64(out.Amount)%int64(math.Pow10(8-int(assetState.Precision))) != 0 { - return fmt.Errorf("output is not compliant with %s asset precision", assetID.StringLE()) - } - } - } - - return nil -} - -func (bc *Blockchain) verifyResults(t *transaction.Transaction, results []*transaction.Result) error { - var resultsDestroy []*transaction.Result - var resultsIssue []*transaction.Result - for _, re := range results { - if re.Amount.GreaterThan(util.Fixed8(0)) { - resultsDestroy = append(resultsDestroy, re) - } - - if re.Amount.LessThan(util.Fixed8(0)) { - resultsIssue = append(resultsIssue, re) - } - } - if len(resultsDestroy) > 1 { - return errors.New("tx has more than 1 destroy output") - } - - if len(resultsIssue) > 0 { - return errors.New("non issue/miner/claim tx issues tokens") - } - - return nil -} - -// GetTransactionResults returns the transaction results aggregate by assetID. -// Golang of GetTransationResults method in C# (https://github.com/neo-project/neo/blob/master/neo/Network/P2P/Payloads/Transaction.cs#L207) -func (bc *Blockchain) GetTransactionResults(t *transaction.Transaction) []*transaction.Result { - references, err := bc.References(t) - if err != nil { - return nil - } - return refsAndOutsToResults(references, t.Outputs) -} - -// mapReferencesToResults returns cumulative results of transaction based in its -// references and outputs. -func refsAndOutsToResults(references []transaction.InOut, outputs []transaction.Output) []*transaction.Result { - var results []*transaction.Result - tempResult := make(map[util.Uint256]util.Fixed8) - - for _, inout := range references { - c := tempResult[inout.Out.AssetID] - tempResult[inout.Out.AssetID] = c.Add(inout.Out.Amount) - } - for _, output := range outputs { - c := tempResult[output.AssetID] - tempResult[output.AssetID] = c.Sub(output.Amount) - } - - results = []*transaction.Result{} // this assignment is necessary. (Most of the time amount == 0 and results is the empty slice.) - for assetID, amount := range tempResult { - if amount != util.Fixed8(0) { - results = append(results, &transaction.Result{ - AssetID: assetID, - Amount: amount, - }) - } - } - - return results -} - //GetStandByValidators returns validators from the configuration. func (bc *Blockchain) GetStandByValidators() (keys.PublicKeys, error) { return getValidators(bc.config) @@ -1458,29 +1238,7 @@ func (bc *Blockchain) GetEnrollments() ([]state.Validator, error) { // to verify whether the transaction is bonafide or not. // Golang implementation of GetScriptHashesForVerifying method in C# (https://github.com/neo-project/neo/blob/master/neo/Network/P2P/Payloads/Transaction.cs#L190) func (bc *Blockchain) GetScriptHashesForVerifying(t *transaction.Transaction) ([]util.Uint160, error) { - references, err := bc.References(t) - if err != nil { - return nil, err - } hashes := make(map[util.Uint160]bool) - for i := range references { - hashes[references[i].Out.ScriptHash] = true - } - - for a, outputs := range t.GroupOutputByAssetID() { - as := bc.GetAssetState(a) - if as == nil { - return nil, errors.New("Invalid operation") - } - if as.AssetType&transaction.DutyFlag != 0 { - for _, o := range outputs { - h := o.ScriptHash - if _, ok := hashes[h]; !ok { - hashes[h] = true - } - } - } - } hashes[t.Sender] = true for _, c := range t.Cosigners { hashes[c.Account] = true @@ -1567,7 +1325,6 @@ func (bc *Blockchain) verifyHashAgainstScript(hash util.Uint160, witness *transa // is used for easy interop access and can be omitted for transactions that are // not yet added into any block. // Golang implementation of VerifyWitnesses method in C# (https://github.com/neo-project/neo/blob/master/neo/SmartContract/Helper.cs#L87). -// Unfortunately the IVerifiable interface could not be implemented because we can't move the References method in blockchain.go to the transaction.go file. func (bc *Blockchain) verifyTxWitnesses(t *transaction.Transaction, block *block.Block) error { hashes, err := bc.GetScriptHashesForVerifying(t) if err != nil { diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index 4d197ed05..ed04267f4 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -44,8 +44,6 @@ type Blockchainer interface { GetStorageItems(hash util.Uint160) (map[string]*state.StorageItem, error) GetTestVM() *vm.VM GetTransaction(util.Uint256) (*transaction.Transaction, uint32, error) - GetUnspentCoinState(util.Uint256) *state.UnspentCoin - References(t *transaction.Transaction) ([]transaction.InOut, error) mempool.Feer // fee interface PoolTx(*transaction.Transaction) error SubscribeForBlocks(ch chan<- *block.Block) diff --git a/pkg/core/dao/cacheddao.go b/pkg/core/dao/cacheddao.go index 50d3b9514..9fc792308 100644 --- a/pkg/core/dao/cacheddao.go +++ b/pkg/core/dao/cacheddao.go @@ -15,7 +15,6 @@ type Cached struct { DAO accounts map[util.Uint160]*state.Account contracts map[util.Uint160]*state.Contract - unspents map[util.Uint256]*state.UnspentCoin balances map[util.Uint160]*state.NEP5Balances transfers map[util.Uint160]map[uint32]*state.NEP5TransferLog } @@ -24,10 +23,9 @@ type Cached struct { func NewCached(d DAO) *Cached { accs := make(map[util.Uint160]*state.Account) ctrs := make(map[util.Uint160]*state.Contract) - unspents := make(map[util.Uint256]*state.UnspentCoin) balances := make(map[util.Uint160]*state.NEP5Balances) transfers := make(map[util.Uint160]map[uint32]*state.NEP5TransferLog) - return &Cached{d.GetWrapped(), accs, ctrs, unspents, balances, transfers} + return &Cached{d.GetWrapped(), accs, ctrs, balances, transfers} } // GetAccountStateOrNew retrieves Account from cache or underlying store @@ -77,20 +75,6 @@ func (cd *Cached) DeleteContractState(hash util.Uint160) error { return cd.DAO.DeleteContractState(hash) } -// GetUnspentCoinState retrieves UnspentCoin from cache or underlying store. -func (cd *Cached) GetUnspentCoinState(hash util.Uint256) (*state.UnspentCoin, error) { - if cd.unspents[hash] != nil { - return cd.unspents[hash], nil - } - return cd.DAO.GetUnspentCoinState(hash) -} - -// PutUnspentCoinState saves given UnspentCoin in the cache. -func (cd *Cached) PutUnspentCoinState(hash util.Uint256, ucs *state.UnspentCoin) error { - cd.unspents[hash] = ucs - return nil -} - // GetNEP5Balances retrieves NEP5Balances for the acc. func (cd *Cached) GetNEP5Balances(acc util.Uint160) (*state.NEP5Balances, error) { if bs := cd.balances[acc]; bs != nil { @@ -167,13 +151,6 @@ func (cd *Cached) Persist() (int, error) { } buf.Reset() } - for hash := range cd.unspents { - err := cd.DAO.putUnspentCoinState(hash, cd.unspents[hash], buf) - if err != nil { - return 0, err - } - buf.Reset() - } for acc, bs := range cd.balances { err := cd.DAO.putNEP5Balances(acc, bs, buf) if err != nil { @@ -197,7 +174,6 @@ func (cd *Cached) GetWrapped() DAO { return &Cached{cd.DAO.GetWrapped(), cd.accounts, cd.contracts, - cd.unspents, cd.balances, cd.transfers, } diff --git a/pkg/core/dao/dao.go b/pkg/core/dao/dao.go index 363aa9244..49886f59f 100644 --- a/pkg/core/dao/dao.go +++ b/pkg/core/dao/dao.go @@ -36,11 +36,9 @@ type DAO interface { GetStorageItems(hash util.Uint160) (map[string]*state.StorageItem, error) GetStorageItemsWithPrefix(hash util.Uint160, prefix []byte) (map[string]*state.StorageItem, error) GetTransaction(hash util.Uint256) (*transaction.Transaction, uint32, error) - GetUnspentCoinState(hash util.Uint256) (*state.UnspentCoin, error) GetVersion() (string, error) GetWrapped() DAO HasTransaction(hash util.Uint256) bool - IsDoubleSpend(tx *transaction.Transaction) bool Persist() (int, error) PutAccountState(as *state.Account) error PutAppExecResult(aer *state.AppExecResult) error @@ -50,14 +48,12 @@ type DAO interface { PutNEP5Balances(acc util.Uint160, bs *state.NEP5Balances) error PutNEP5TransferLog(acc util.Uint160, index uint32, lg *state.NEP5TransferLog) error PutStorageItem(scripthash util.Uint160, key []byte, si *state.StorageItem) error - PutUnspentCoinState(hash util.Uint256, ucs *state.UnspentCoin) error PutVersion(v string) error StoreAsBlock(block *block.Block) error StoreAsCurrentBlock(block *block.Block) error StoreAsTransaction(tx *transaction.Transaction, index uint32) error putAccountState(as *state.Account, buf *io.BufBinWriter) error putNEP5Balances(acc util.Uint160, bs *state.NEP5Balances, buf *io.BufBinWriter) error - putUnspentCoinState(hash util.Uint256, ucs *state.UnspentCoin, buf *io.BufBinWriter) error } // Simple is memCached wrapper around DB, simple DAO implementation. @@ -275,31 +271,6 @@ func (dao *Simple) AppendNEP5Transfer(acc util.Uint160, index uint32, tr *state. // -- end transfer log. -// -- start unspent coins. - -// GetUnspentCoinState retrieves UnspentCoinState from the given store. -func (dao *Simple) GetUnspentCoinState(hash util.Uint256) (*state.UnspentCoin, error) { - unspent := &state.UnspentCoin{} - key := storage.AppendPrefix(storage.STCoin, hash.BytesLE()) - err := dao.GetAndDecode(unspent, key) - if err != nil { - return nil, err - } - return unspent, nil -} - -// PutUnspentCoinState puts given UnspentCoinState into the given store. -func (dao *Simple) PutUnspentCoinState(hash util.Uint256, ucs *state.UnspentCoin) error { - return dao.putUnspentCoinState(hash, ucs, io.NewBufBinWriter()) -} - -func (dao *Simple) putUnspentCoinState(hash util.Uint256, ucs *state.UnspentCoin, buf *io.BufBinWriter) error { - key := storage.AppendPrefix(storage.STCoin, hash.BytesLE()) - return dao.putWithBuffer(ucs, key, buf) -} - -// -- end unspent coins. - // -- start notification event. // GetAppExecResult gets application execution result from the @@ -567,30 +538,6 @@ func (dao *Simple) StoreAsTransaction(tx *transaction.Transaction, index uint32) return dao.Store.Put(key, buf.Bytes()) } -// IsDoubleSpend verifies that the input transactions are not double spent. -func (dao *Simple) IsDoubleSpend(tx *transaction.Transaction) bool { - return dao.checkUsedInputs(tx.Inputs, state.CoinSpent) -} - -func (dao *Simple) checkUsedInputs(inputs []transaction.Input, coin state.Coin) bool { - if len(inputs) == 0 { - return false - } - for _, inputs := range transaction.GroupInputsByPrevHash(inputs) { - prevHash := inputs[0].PrevHash - unspent, err := dao.GetUnspentCoinState(prevHash) - if err != nil { - return true - } - for _, input := range inputs { - if int(input.PrevIndex) >= len(unspent.States) || (unspent.States[input.PrevIndex].State&coin) != 0 { - return true - } - } - } - return false -} - // Persist flushes all the changes made into the (supposedly) persistent // underlying store. func (dao *Simple) Persist() (int, error) { diff --git a/pkg/core/dao/dao_test.go b/pkg/core/dao/dao_test.go index 77c62bc0f..13b8bef89 100644 --- a/pkg/core/dao/dao_test.go +++ b/pkg/core/dao/dao_test.go @@ -94,25 +94,6 @@ func TestDeleteContractState(t *testing.T) { require.Nil(t, gotContractState) } -func TestGetUnspentCoinState_Err(t *testing.T) { - dao := NewSimple(storage.NewMemoryStore()) - hash := random.Uint256() - gotUnspentCoinState, err := dao.GetUnspentCoinState(hash) - require.Error(t, err) - require.Nil(t, gotUnspentCoinState) -} - -func TestPutGetUnspentCoinState(t *testing.T) { - dao := NewSimple(storage.NewMemoryStore()) - hash := random.Uint256() - unspentCoinState := &state.UnspentCoin{Height: 42, States: []state.OutputState{}} - err := dao.PutUnspentCoinState(hash, unspentCoinState) - require.NoError(t, err) - gotUnspentCoinState, err := dao.GetUnspentCoinState(hash) - require.NoError(t, err) - require.Equal(t, unspentCoinState, gotUnspentCoinState) -} - func TestPutGetAppExecResult(t *testing.T) { dao := NewSimple(storage.NewMemoryStore()) hash := random.Uint256() diff --git a/pkg/core/interop_neo.go b/pkg/core/interop_neo.go index 915fe5313..8ffc11a85 100644 --- a/pkg/core/interop_neo.go +++ b/pkg/core/interop_neo.go @@ -10,7 +10,6 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/core/interop/runtime" "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/core/storage" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/smartcontract" @@ -88,95 +87,6 @@ func txGetAttributes(ic *interop.Context, v *vm.VM) error { return nil } -// txGetInputs returns current transaction inputs. -func txGetInputs(ic *interop.Context, v *vm.VM) error { - txInterface := v.Estack().Pop().Value() - tx, ok := txInterface.(*transaction.Transaction) - if !ok { - return errors.New("value is not a transaction") - } - if len(tx.Inputs) > vm.MaxArraySize { - return errors.New("too many inputs") - } - inputs := make([]vm.StackItem, 0, len(tx.Inputs)) - for i := range tx.Inputs { - inputs = append(inputs, vm.NewInteropItem(&tx.Inputs[i])) - } - v.Estack().PushVal(inputs) - return nil -} - -// txGetOutputs returns current transaction outputs. -func txGetOutputs(ic *interop.Context, v *vm.VM) error { - txInterface := v.Estack().Pop().Value() - tx, ok := txInterface.(*transaction.Transaction) - if !ok { - return errors.New("value is not a transaction") - } - if len(tx.Outputs) > vm.MaxArraySize { - return errors.New("too many outputs") - } - outputs := make([]vm.StackItem, 0, len(tx.Outputs)) - for i := range tx.Outputs { - outputs = append(outputs, vm.NewInteropItem(&tx.Outputs[i])) - } - v.Estack().PushVal(outputs) - return nil -} - -// txGetReferences returns current transaction references. -func txGetReferences(ic *interop.Context, v *vm.VM) error { - txInterface := v.Estack().Pop().Value() - tx, ok := txInterface.(*transaction.Transaction) - if !ok { - return fmt.Errorf("type mismatch: %T is not a Transaction", txInterface) - } - refs, err := ic.Chain.References(tx) - if err != nil { - return err - } - if len(refs) > vm.MaxArraySize { - return errors.New("too many references") - } - - stackrefs := make([]vm.StackItem, 0, len(refs)) - for i := range tx.Inputs { - for j := range refs { - if refs[j].In == tx.Inputs[i] { - stackrefs = append(stackrefs, vm.NewInteropItem(refs[j])) - break - } - } - } - v.Estack().PushVal(stackrefs) - return nil -} - -// txGetUnspentCoins returns current transaction unspent coins. -func txGetUnspentCoins(ic *interop.Context, v *vm.VM) error { - txInterface := v.Estack().Pop().Value() - tx, ok := txInterface.(*transaction.Transaction) - if !ok { - return errors.New("value is not a transaction") - } - ucs, err := ic.DAO.GetUnspentCoinState(tx.Hash()) - if err == storage.ErrKeyNotFound { - v.Estack().PushVal([]vm.StackItem{}) - return nil - } else if err != nil { - return errors.New("no unspent coin state found") - } - - items := make([]vm.StackItem, 0, len(ucs.States)) - for i := range items { - if ucs.States[i].State&state.CoinSpent == 0 { - items = append(items, vm.NewInteropItem(&ucs.States[i].Output)) - } - } - v.Estack().PushVal(items) - return nil -} - // txGetWitnesses returns current transaction witnesses. func txGetWitnesses(ic *interop.Context, v *vm.VM) error { txInterface := v.Estack().Pop().Value() @@ -209,84 +119,6 @@ func witnessGetVerificationScript(ic *interop.Context, v *vm.VM) error { return nil } -// popInputFromVM returns transaction.Input from the first estack element. -func popInputFromVM(v *vm.VM) (*transaction.Input, error) { - inInterface := v.Estack().Pop().Value() - input, ok := inInterface.(*transaction.Input) - if !ok { - txio, ok := inInterface.(transaction.InOut) - if !ok { - return nil, fmt.Errorf("type mismatch: %T is not an Input or InOut", inInterface) - } - input = &txio.In - } - return input, nil -} - -// inputGetHash returns hash from the given input. -func inputGetHash(ic *interop.Context, v *vm.VM) error { - input, err := popInputFromVM(v) - if err != nil { - return err - } - v.Estack().PushVal(input.PrevHash.BytesBE()) - return nil -} - -// inputGetIndex returns index from the given input. -func inputGetIndex(ic *interop.Context, v *vm.VM) error { - input, err := popInputFromVM(v) - if err != nil { - return err - } - v.Estack().PushVal(input.PrevIndex) - return nil -} - -// popOutputFromVM returns transaction.Input from the first estack element. -func popOutputFromVM(v *vm.VM) (*transaction.Output, error) { - outInterface := v.Estack().Pop().Value() - output, ok := outInterface.(*transaction.Output) - if !ok { - txio, ok := outInterface.(transaction.InOut) - if !ok { - return nil, fmt.Errorf("type mismatch: %T is not an Output or InOut", outInterface) - } - output = &txio.Out - } - return output, nil -} - -// outputGetAssetId returns asset ID from the given output. -func outputGetAssetID(ic *interop.Context, v *vm.VM) error { - output, err := popOutputFromVM(v) - if err != nil { - return err - } - v.Estack().PushVal(output.AssetID.BytesBE()) - return nil -} - -// outputGetScriptHash returns scripthash from the given output. -func outputGetScriptHash(ic *interop.Context, v *vm.VM) error { - output, err := popOutputFromVM(v) - if err != nil { - return err - } - v.Estack().PushVal(output.ScriptHash.BytesBE()) - return nil -} - -// outputGetValue returns value (amount) from the given output. -func outputGetValue(ic *interop.Context, v *vm.VM) error { - output, err := popOutputFromVM(v) - if err != nil { - return err - } - v.Estack().PushVal(int64(output.Amount)) - return nil -} - // attrGetData returns tx attribute data. func attrGetData(ic *interop.Context, v *vm.VM) error { attrInterface := v.Estack().Pop().Value() diff --git a/pkg/core/interop_neo_test.go b/pkg/core/interop_neo_test.go index 3dd0065be..b15339b53 100644 --- a/pkg/core/interop_neo_test.go +++ b/pkg/core/interop_neo_test.go @@ -25,8 +25,6 @@ import ( ) /* Missing tests: - * TestTxGetReferences - * TestTxGetUnspentCoins * TestTxGetWitnesses * TestBcGetAccount * TestBcGetAsset @@ -192,26 +190,6 @@ func TestTxGetAttributes(t *testing.T) { require.Equal(t, tx.Attributes[0].Usage, value[0].Value().(*transaction.Attribute).Usage) } -func TestTxGetInputs(t *testing.T) { - v, tx, context, chain := createVMAndPushTX(t) - defer chain.Close() - - err := txGetInputs(context, v) - require.NoError(t, err) - value := v.Estack().Pop().Value().([]vm.StackItem) - require.Equal(t, tx.Inputs[0], *value[0].Value().(*transaction.Input)) -} - -func TestTxGetOutputs(t *testing.T) { - v, tx, context, chain := createVMAndPushTX(t) - defer chain.Close() - - err := txGetOutputs(context, v) - require.NoError(t, err) - value := v.Estack().Pop().Value().([]vm.StackItem) - require.Equal(t, tx.Outputs[0], *value[0].Value().(*transaction.Output)) -} - func TestWitnessGetVerificationScript(t *testing.T) { v := vm.New() script := []byte{byte(opcode.PUSHM1), byte(opcode.RET)} @@ -304,81 +282,6 @@ func TestECDSAVerify(t *testing.T) { }) } -func TestPopInputFromVM(t *testing.T) { - v, tx, _, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Inputs[0])) - - input, err := popInputFromVM(v) - require.NoError(t, err) - require.Equal(t, tx.Inputs[0], *input) -} - -func TestInputGetHash(t *testing.T) { - v, tx, context, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Inputs[0])) - - err := inputGetHash(context, v) - require.NoError(t, err) - hash := v.Estack().Pop().Value() - require.Equal(t, tx.Inputs[0].PrevHash.BytesBE(), hash) -} - -func TestInputGetIndex(t *testing.T) { - v, tx, context, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Inputs[0])) - - err := inputGetIndex(context, v) - require.NoError(t, err) - index := v.Estack().Pop().Value() - require.Equal(t, big.NewInt(int64(tx.Inputs[0].PrevIndex)), index) -} - -func TestPopOutputFromVM(t *testing.T) { - v, tx, _, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0])) - - output, err := popOutputFromVM(v) - require.NoError(t, err) - require.Equal(t, tx.Outputs[0], *output) -} - -func TestOutputGetAssetID(t *testing.T) { - v, tx, context, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0])) - - err := outputGetAssetID(context, v) - require.NoError(t, err) - assetID := v.Estack().Pop().Value() - require.Equal(t, tx.Outputs[0].AssetID.BytesBE(), assetID) -} - -func TestOutputGetScriptHash(t *testing.T) { - v, tx, context, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0])) - - err := outputGetScriptHash(context, v) - require.NoError(t, err) - scriptHash := v.Estack().Pop().Value() - require.Equal(t, tx.Outputs[0].ScriptHash.BytesBE(), scriptHash) -} - -func TestOutputGetValue(t *testing.T) { - v, tx, context, chain := createVMAndTX(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(&tx.Outputs[0])) - - err := outputGetValue(context, v) - require.NoError(t, err) - amount := v.Estack().Pop().Value() - require.Equal(t, big.NewInt(int64(tx.Outputs[0].Amount)), amount) -} - func TestAttrGetData(t *testing.T) { v, tx, context, chain := createVMAndTX(t) defer chain.Close() @@ -604,21 +507,7 @@ func createVMAndTX(t *testing.T) (*vm.VM, *transaction.Transaction, *interop.Con Data: bytes, }) - inputs := append(tx.Inputs, transaction.Input{ - PrevHash: random.Uint256(), - PrevIndex: 1, - }) - - outputs := append(tx.Outputs, transaction.Output{ - AssetID: random.Uint256(), - Amount: 10, - ScriptHash: random.Uint160(), - Position: 1, - }) - tx.Attributes = attributes - tx.Inputs = inputs - tx.Outputs = outputs chain := newTestChain(t) context := chain.newInteropContext(trigger.Application, dao.NewSimple(storage.NewMemoryStore()), nil, tx) return v, tx, context, chain diff --git a/pkg/core/interops.go b/pkg/core/interops.go index 1548345cc..a1ce73e46 100644 --- a/pkg/core/interops.go +++ b/pkg/core/interops.go @@ -148,17 +148,12 @@ var neoInterops = []interop.Function{ {Name: "Neo.Header.GetPrevHash", Func: headerGetPrevHash, Price: 1}, {Name: "Neo.Header.GetTimestamp", Func: headerGetTimestamp, Price: 1}, {Name: "Neo.Header.GetVersion", Func: headerGetVersion, Price: 1}, - {Name: "Neo.Input.GetHash", Func: inputGetHash, Price: 1}, - {Name: "Neo.Input.GetIndex", Func: inputGetIndex, Price: 1}, {Name: "Neo.Iterator.Concat", Func: iterator.Concat, Price: 1}, {Name: "Neo.Iterator.Create", Func: iterator.Create, Price: 1}, {Name: "Neo.Iterator.Key", Func: iterator.Key, Price: 1}, {Name: "Neo.Iterator.Keys", Func: iterator.Keys, Price: 1}, {Name: "Neo.Iterator.Values", Func: iterator.Values, Price: 1}, {Name: "Neo.Native.Deploy", Func: native.Deploy, Price: 1}, - {Name: "Neo.Output.GetAssetId", Func: outputGetAssetID, Price: 1}, - {Name: "Neo.Output.GetScriptHash", Func: outputGetScriptHash, Price: 1}, - {Name: "Neo.Output.GetValue", Func: outputGetValue, Price: 1}, {Name: "Neo.Runtime.CheckWitness", Func: runtime.CheckWitness, Price: 200}, {Name: "Neo.Runtime.Deserialize", Func: runtimeDeserialize, Price: 1}, {Name: "Neo.Runtime.GetTime", Func: runtimeGetTime, Price: 1}, @@ -175,10 +170,6 @@ var neoInterops = []interop.Function{ {Name: "Neo.StorageContext.AsReadOnly", Func: storageContextAsReadOnly, Price: 1}, {Name: "Neo.Transaction.GetAttributes", Func: txGetAttributes, Price: 1}, {Name: "Neo.Transaction.GetHash", Func: txGetHash, Price: 1}, - {Name: "Neo.Transaction.GetInputs", Func: txGetInputs, Price: 1}, - {Name: "Neo.Transaction.GetOutputs", Func: txGetOutputs, Price: 1}, - {Name: "Neo.Transaction.GetReferences", Func: txGetReferences, Price: 200}, - {Name: "Neo.Transaction.GetUnspentCoins", Func: txGetUnspentCoins, Price: 200}, {Name: "Neo.Transaction.GetWitnesses", Func: txGetWitnesses, Price: 200}, {Name: "Neo.Witness.GetVerificationScript", Func: witnessGetVerificationScript, Price: 100}, @@ -222,11 +213,6 @@ var neoInterops = []interop.Function{ {Name: "AntShares.Header.GetPrevHash", Func: headerGetPrevHash, Price: 1}, {Name: "AntShares.Header.GetTimestamp", Func: headerGetTimestamp, Price: 1}, {Name: "AntShares.Header.GetVersion", Func: headerGetVersion, Price: 1}, - {Name: "AntShares.Input.GetHash", Func: inputGetHash, Price: 1}, - {Name: "AntShares.Input.GetIndex", Func: inputGetIndex, Price: 1}, - {Name: "AntShares.Output.GetAssetId", Func: outputGetAssetID, Price: 1}, - {Name: "AntShares.Output.GetScriptHash", Func: outputGetScriptHash, Price: 1}, - {Name: "AntShares.Output.GetValue", Func: outputGetValue, Price: 1}, {Name: "AntShares.Runtime.CheckWitness", Func: runtime.CheckWitness, Price: 200}, {Name: "AntShares.Runtime.Log", Func: runtimeLog, Price: 1}, {Name: "AntShares.Runtime.Notify", Func: runtimeNotify, Price: 1}, @@ -236,9 +222,6 @@ var neoInterops = []interop.Function{ {Name: "AntShares.Storage.Put", Func: storagePut, Price: 0}, {Name: "AntShares.Transaction.GetAttributes", Func: txGetAttributes, Price: 1}, {Name: "AntShares.Transaction.GetHash", Func: txGetHash, Price: 1}, - {Name: "AntShares.Transaction.GetInputs", Func: txGetInputs, Price: 1}, - {Name: "AntShares.Transaction.GetOutputs", Func: txGetOutputs, Price: 1}, - {Name: "AntShares.Transaction.GetReferences", Func: txGetReferences, Price: 200}, } // initIDinInteropsSlice initializes IDs from names in one given diff --git a/pkg/core/interops_test.go b/pkg/core/interops_test.go index d1aa1b836..04babc946 100644 --- a/pkg/core/interops_test.go +++ b/pkg/core/interops_test.go @@ -58,11 +58,6 @@ func TestUnexpectedNonInterops(t *testing.T) { headerGetPrevHash, headerGetTimestamp, headerGetVersion, - inputGetHash, - inputGetIndex, - outputGetAssetID, - outputGetScriptHash, - outputGetValue, storageContextAsReadOnly, storageDelete, storageFind, @@ -71,10 +66,6 @@ func TestUnexpectedNonInterops(t *testing.T) { storagePutEx, txGetAttributes, txGetHash, - txGetInputs, - txGetOutputs, - txGetReferences, - txGetUnspentCoins, txGetWitnesses, witnessGetVerificationScript, } diff --git a/pkg/core/mempool/mem_pool.go b/pkg/core/mempool/mem_pool.go index 49741e170..f0ed818b4 100644 --- a/pkg/core/mempool/mem_pool.go +++ b/pkg/core/mempool/mem_pool.go @@ -12,8 +12,8 @@ import ( var ( // ErrConflict is returned when transaction being added is incompatible - // with the contents of the memory pool (using the same inputs as some - // other transaction in the pool) + // with the contents of the memory pool (Sender doesn't have enough GAS + // to pay for all transactions in the pool). ErrConflict = errors.New("conflicts with the memory pool") // ErrDup is returned when transaction being added is already present // in the memory pool. @@ -51,7 +51,6 @@ type Pool struct { lock sync.RWMutex verifiedMap map[util.Uint256]*item verifiedTxes items - inputs []*transaction.Input fees map[util.Uint160]utilityBalanceAndFees capacity int @@ -120,35 +119,6 @@ func (mp *Pool) containsKey(hash util.Uint256) bool { return false } -// findIndexForInput finds an index in a sorted Input pointers slice that is -// appropriate to place this input into (or which contains an identical Input). -func findIndexForInput(slice []*transaction.Input, input *transaction.Input) int { - return sort.Search(len(slice), func(n int) bool { - return input.Cmp(slice[n]) <= 0 - }) -} - -// pushInputToSortedSlice pushes new Input into the given slice. -func pushInputToSortedSlice(slice *[]*transaction.Input, input *transaction.Input) { - n := findIndexForInput(*slice, input) - *slice = append(*slice, input) - if n != len(*slice)-1 { - copy((*slice)[n+1:], (*slice)[n:]) - (*slice)[n] = input - } -} - -// dropInputFromSortedSlice removes given input from the given slice. -func dropInputFromSortedSlice(slice *[]*transaction.Input, input *transaction.Input) { - n := findIndexForInput(*slice, input) - if n == len(*slice) || *input != *(*slice)[n] { - // Not present. - return - } - copy((*slice)[n:], (*slice)[n+1:]) - *slice = (*slice)[:len(*slice)-1] -} - // tryAddSendersFee tries to add system fee and network fee to the total sender`s fee in mempool // and returns false if sender has not enough GAS to pay func (mp *Pool) tryAddSendersFee(tx *transaction.Transaction, feer Feer) bool { @@ -229,12 +199,6 @@ func (mp *Pool) Add(t *transaction.Transaction, fee Feer) error { } mp.addSendersFee(pItem.txn) - // For lots of inputs it might be easier to push them all and sort - // afterwards, but that requires benchmarking. - for i := range t.Inputs { - pushInputToSortedSlice(&mp.inputs, &t.Inputs[i]) - } - updateMempoolMetrics(len(mp.verifiedTxes)) mp.lock.Unlock() return nil @@ -260,9 +224,6 @@ func (mp *Pool) Remove(hash util.Uint256) { senderFee := mp.fees[it.txn.Sender] senderFee.feeSum -= it.txn.SystemFee + it.txn.NetworkFee mp.fees[it.txn.Sender] = senderFee - for i := range it.txn.Inputs { - dropInputFromSortedSlice(&mp.inputs, &it.txn.Inputs[i]) - } } updateMempoolMetrics(len(mp.verifiedTxes)) mp.lock.Unlock() @@ -276,23 +237,15 @@ func (mp *Pool) RemoveStale(isOK func(*transaction.Transaction) bool, feer Feer) // We can reuse already allocated slice // because items are iterated one-by-one in increasing order. newVerifiedTxes := mp.verifiedTxes[:0] - newInputs := mp.inputs[:0] mp.fees = make(map[util.Uint160]utilityBalanceAndFees) // it'd be nice to reuse existing map, but we can't easily clear it for _, itm := range mp.verifiedTxes { if isOK(itm.txn) && mp.tryAddSendersFee(itm.txn, feer) { newVerifiedTxes = append(newVerifiedTxes, itm) - for i := range itm.txn.Inputs { - newInputs = append(newInputs, &itm.txn.Inputs[i]) - } } else { delete(mp.verifiedMap, itm.txn.Hash()) } } - sort.Slice(newInputs, func(i, j int) bool { - return newInputs[i].Cmp(newInputs[j]) < 0 - }) mp.verifiedTxes = newVerifiedTxes - mp.inputs = newInputs mp.lock.Unlock() } @@ -317,8 +270,7 @@ func (mp *Pool) TryGetValue(hash util.Uint256) (*transaction.Transaction, util.F return nil, 0, false } -// GetVerifiedTransactions returns a slice of Input from all the transactions in the memory pool -// whose hash is not included in excludedHashes. +// GetVerifiedTransactions returns a slice of transactions with their fees. func (mp *Pool) GetVerifiedTransactions() []TxWithFee { mp.lock.RLock() defer mp.lock.RUnlock() @@ -333,32 +285,15 @@ func (mp *Pool) GetVerifiedTransactions() []TxWithFee { return t } -// areInputsInPool tries to find inputs in a given sorted pool and returns true -// if it finds any. -func areInputsInPool(inputs []transaction.Input, pool []*transaction.Input) bool { - for i := range inputs { - n := findIndexForInput(pool, &inputs[i]) - if n < len(pool) && *pool[n] == inputs[i] { - return true - } - } - return false -} - // checkTxConflicts is an internal unprotected version of Verify. func (mp *Pool) checkTxConflicts(tx *transaction.Transaction, fee Feer) bool { - if areInputsInPool(tx.Inputs, mp.inputs) { - return false - } - if !mp.checkBalanceAndUpdate(tx, fee) { - return false - } - return true + return mp.checkBalanceAndUpdate(tx, fee) } -// Verify verifies if the inputs of a transaction tx are already used in any other transaction in the memory pool. -// If yes, the transaction tx is not a valid transaction and the function return false. -// If no, the transaction tx is a valid transaction and the function return true. +// Verify checks if a Sender of tx is able to pay for it (and all the other +// transactions in the pool). If yes, the transaction tx is a valid +// transaction and the function returns true. If no, the transaction tx is +// considered to be invalid the function returns false. func (mp *Pool) Verify(tx *transaction.Transaction, feer Feer) bool { mp.lock.RLock() defer mp.lock.RUnlock() diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index 5a1129a96..33474540d 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -5,7 +5,6 @@ import ( "testing" "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/internal/random" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/stretchr/testify/assert" @@ -56,79 +55,6 @@ func TestMemPoolAddRemove(t *testing.T) { t.Run("high priority", func(t *testing.T) { testMemPoolAddRemoveWithFeer(t, fs) }) } -func TestMemPoolAddRemoveWithInputs(t *testing.T) { - mp := NewMemPool(50) - hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") - require.NoError(t, err) - hash2, err := util.Uint256DecodeStringBE("629397158f852e838077bb2715b13a2e29b0a51c2157e5466321b70ed7904ce9") - require.NoError(t, err) - mpLessInputs := func(i, j int) bool { - return mp.inputs[i].Cmp(mp.inputs[j]) < 0 - } - txm1 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) - txm1.Nonce = 1 - for i := 0; i < 5; i++ { - txm1.Inputs = append(txm1.Inputs, transaction.Input{PrevHash: hash1, PrevIndex: uint16(100 - i)}) - } - require.NoError(t, mp.Add(txm1, &FeerStub{})) - // Look inside. - assert.Equal(t, len(txm1.Inputs), len(mp.inputs)) - assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - - txm2 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) - txm2.Nonce = 1 - for i := 0; i < 10; i++ { - txm2.Inputs = append(txm2.Inputs, transaction.Input{PrevHash: hash2, PrevIndex: uint16(i)}) - } - require.NoError(t, mp.Add(txm2, &FeerStub{})) - assert.Equal(t, len(txm1.Inputs)+len(txm2.Inputs), len(mp.inputs)) - assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - - mp.Remove(txm1.Hash()) - assert.Equal(t, len(txm2.Inputs), len(mp.inputs)) - assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - - require.NoError(t, mp.Add(txm1, &FeerStub{})) - assert.Equal(t, len(txm1.Inputs)+len(txm2.Inputs), len(mp.inputs)) - assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) - - mp.RemoveStale(func(t *transaction.Transaction) bool { - if t.Hash() == txm2.Hash() { - return false - } - return true - }, &FeerStub{}) - assert.Equal(t, len(txm1.Inputs), len(mp.inputs)) - assert.True(t, sort.SliceIsSorted(mp.inputs, mpLessInputs)) -} - -func TestMemPoolVerifyInputs(t *testing.T) { - mp := NewMemPool(10) - tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) - tx.Nonce = 1 - inhash1 := random.Uint256() - tx.Inputs = append(tx.Inputs, transaction.Input{PrevHash: inhash1, PrevIndex: 0}) - require.Equal(t, true, mp.Verify(tx, &FeerStub{})) - require.NoError(t, mp.Add(tx, &FeerStub{})) - - tx2 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) - tx2.Nonce = 2 - inhash2 := random.Uint256() - tx2.Inputs = append(tx2.Inputs, transaction.Input{PrevHash: inhash2, PrevIndex: 0}) - require.Equal(t, true, mp.Verify(tx2, &FeerStub{})) - require.NoError(t, mp.Add(tx2, &FeerStub{})) - - tx3 := transaction.New([]byte{byte(opcode.PUSH1)}, 0) - tx3.Nonce = 3 - // Different index number, but the same PrevHash as in tx1. - tx3.Inputs = append(tx3.Inputs, transaction.Input{PrevHash: inhash1, PrevIndex: 1}) - require.Equal(t, true, mp.Verify(tx3, &FeerStub{})) - // The same input as in tx2. - tx3.Inputs = append(tx3.Inputs, transaction.Input{PrevHash: inhash2, PrevIndex: 0}) - require.Equal(t, false, mp.Verify(tx3, &FeerStub{})) - require.Error(t, mp.Add(tx3, &FeerStub{})) -} - func TestOverCapacity(t *testing.T) { var fs = &FeerStub{lowPriority: true} const mempoolSize = 10 diff --git a/pkg/core/spent_coin.go b/pkg/core/spent_coin.go deleted file mode 100644 index 9d42cb8af..000000000 --- a/pkg/core/spent_coin.go +++ /dev/null @@ -1,10 +0,0 @@ -package core - -import "github.com/nspcc-dev/neo-go/pkg/core/transaction" - -// spentCoin represents the state of a single spent coin output. -type spentCoin struct { - Output *transaction.Output - StartHeight uint32 - EndHeight uint32 -} diff --git a/pkg/core/state/unspent_coin.go b/pkg/core/state/unspent_coin.go deleted file mode 100644 index a0f1e635e..000000000 --- a/pkg/core/state/unspent_coin.go +++ /dev/null @@ -1,60 +0,0 @@ -package state - -import ( - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/io" -) - -// UnspentCoin hold the state of a unspent coin. -type UnspentCoin struct { - Height uint32 - States []OutputState -} - -// OutputState combines transaction output (UTXO) and its state -// (spent/claimed...) along with the height of spend (if it's spent). -type OutputState struct { - transaction.Output - - SpendHeight uint32 - State Coin -} - -// NewUnspentCoin returns a new unspent coin state with N confirmed states. -func NewUnspentCoin(height uint32, tx *transaction.Transaction) *UnspentCoin { - u := &UnspentCoin{ - Height: height, - States: make([]OutputState, len(tx.Outputs)), - } - for i := range tx.Outputs { - u.States[i] = OutputState{Output: tx.Outputs[i]} - } - return u -} - -// EncodeBinary encodes UnspentCoin to the given BinWriter. -func (s *UnspentCoin) EncodeBinary(bw *io.BinWriter) { - bw.WriteU32LE(s.Height) - bw.WriteArray(s.States) - bw.WriteVarUint(uint64(len(s.States))) -} - -// DecodeBinary decodes UnspentCoin from the given BinReader. -func (s *UnspentCoin) DecodeBinary(br *io.BinReader) { - s.Height = br.ReadU32LE() - br.ReadArray(&s.States) -} - -// EncodeBinary implements Serializable interface. -func (o *OutputState) EncodeBinary(w *io.BinWriter) { - o.Output.EncodeBinary(w) - w.WriteU32LE(o.SpendHeight) - w.WriteB(byte(o.State)) -} - -// DecodeBinary implements Serializable interface. -func (o *OutputState) DecodeBinary(r *io.BinReader) { - o.Output.DecodeBinary(r) - o.SpendHeight = r.ReadU32LE() - o.State = Coin(r.ReadB()) -} diff --git a/pkg/core/state/unspent_coin_test.go b/pkg/core/state/unspent_coin_test.go deleted file mode 100644 index 51e778ab7..000000000 --- a/pkg/core/state/unspent_coin_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package state - -import ( - "testing" - - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/internal/random" - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -func TestDecodeEncodeUnspentCoin(t *testing.T) { - unspent := &UnspentCoin{ - Height: 100500, - States: []OutputState{ - { - Output: transaction.Output{ - AssetID: random.Uint256(), - Amount: util.Fixed8(42), - ScriptHash: random.Uint160(), - }, - SpendHeight: 201000, - State: CoinSpent, - }, - { - Output: transaction.Output{ - AssetID: random.Uint256(), - Amount: util.Fixed8(420), - ScriptHash: random.Uint160(), - }, - SpendHeight: 0, - State: CoinConfirmed, - }, - { - Output: transaction.Output{ - AssetID: random.Uint256(), - Amount: util.Fixed8(4200), - ScriptHash: random.Uint160(), - }, - SpendHeight: 111000, - State: CoinSpent & CoinClaimed, - }, - }, - } - - testserdes.EncodeDecodeBinary(t, unspent, new(UnspentCoin)) -} diff --git a/pkg/core/storage/store.go b/pkg/core/storage/store.go index 12a46dd69..6aab1c9c2 100644 --- a/pkg/core/storage/store.go +++ b/pkg/core/storage/store.go @@ -10,8 +10,6 @@ const ( DataBlock KeyPrefix = 0x01 DataTransaction KeyPrefix = 0x02 STAccount KeyPrefix = 0x40 - STCoin KeyPrefix = 0x44 - STSpentCoin KeyPrefix = 0x45 STValidator KeyPrefix = 0x48 STAsset KeyPrefix = 0x4c STNotification KeyPrefix = 0x4d diff --git a/pkg/core/storage/store_test.go b/pkg/core/storage/store_test.go index 9c9f6ef70..7b90b4d67 100644 --- a/pkg/core/storage/store_test.go +++ b/pkg/core/storage/store_test.go @@ -11,7 +11,6 @@ var ( DataBlock, DataTransaction, STAccount, - STCoin, STValidator, STAsset, STContract, @@ -26,7 +25,6 @@ var ( 0x01, 0x02, 0x40, - 0x44, 0x48, 0x4c, 0x50, diff --git a/pkg/core/transaction/inout.go b/pkg/core/transaction/inout.go deleted file mode 100644 index 75bc026ac..000000000 --- a/pkg/core/transaction/inout.go +++ /dev/null @@ -1,8 +0,0 @@ -package transaction - -// InOut represents an Input bound to its corresponding Output which is a useful -// combination for many purposes. -type InOut struct { - In Input - Out Output -} diff --git a/pkg/core/transaction/input.go b/pkg/core/transaction/input.go deleted file mode 100644 index 40462fba2..000000000 --- a/pkg/core/transaction/input.go +++ /dev/null @@ -1,94 +0,0 @@ -package transaction - -import ( - "sort" - - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// Input represents a Transaction input (CoinReference). -type Input struct { - // The hash of the previous transaction. - PrevHash util.Uint256 `json:"txid"` - - // The index of the previous transaction. - PrevIndex uint16 `json:"vout"` -} - -// DecodeBinary implements Serializable interface. -func (in *Input) DecodeBinary(br *io.BinReader) { - br.ReadBytes(in.PrevHash[:]) - in.PrevIndex = br.ReadU16LE() -} - -// EncodeBinary implements Serializable interface. -func (in *Input) EncodeBinary(bw *io.BinWriter) { - bw.WriteBytes(in.PrevHash[:]) - bw.WriteU16LE(in.PrevIndex) -} - -// Cmp compares two Inputs by their hash and index allowing to make a set of -// transactions ordered. -func (in *Input) Cmp(other *Input) int { - hashcmp := in.PrevHash.CompareTo(other.PrevHash) - if hashcmp == 0 { - return int(in.PrevIndex) - int(other.PrevIndex) - } - return hashcmp -} - -// MapInputsToSorted maps given slice of inputs into a new slice of pointers -// to inputs sorted by their PrevHash and PrevIndex. -func MapInputsToSorted(ins []Input) []*Input { - ptrs := make([]*Input, len(ins)) - for i := range ins { - ptrs[i] = &ins[i] - } - sort.Slice(ptrs, func(i, j int) bool { - return ptrs[i].Cmp(ptrs[j]) < 0 - }) - return ptrs -} - -// GroupInputsByPrevHash groups all TX inputs by their previous hash into -// several slices (which actually are subslices of one new slice with pointers). -// Each of these slices contains at least one element. -func GroupInputsByPrevHash(ins []Input) [][]*Input { - if len(ins) == 0 { - return nil - } - - ptrs := MapInputsToSorted(ins) - var first int - res := make([][]*Input, 0) - currentHash := ptrs[0].PrevHash - - for i := range ptrs { - if !currentHash.Equals(ptrs[i].PrevHash) { - res = append(res, ptrs[first:i]) - first = i - currentHash = ptrs[i].PrevHash - } - } - res = append(res, ptrs[first:]) - return res -} - -// HaveDuplicateInputs checks inputs for duplicates and returns true if there are -// any. -func HaveDuplicateInputs(ins []Input) bool { - if len(ins) < 2 { - return false - } - if len(ins) == 2 { - return ins[0] == ins[1] - } - ptrs := MapInputsToSorted(ins) - for i := 1; i < len(ptrs); i++ { - if *ptrs[i] == *ptrs[i-1] { - return true - } - } - return false -} diff --git a/pkg/core/transaction/input_test.go b/pkg/core/transaction/input_test.go deleted file mode 100644 index c8b9fad06..000000000 --- a/pkg/core/transaction/input_test.go +++ /dev/null @@ -1,144 +0,0 @@ -package transaction - -import ( - "testing" - - "github.com/nspcc-dev/neo-go/pkg/util" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestGroupInputsByPrevHash0(t *testing.T) { - inputs := make([]Input, 0) - res := GroupInputsByPrevHash(inputs) - require.Equal(t, 0, len(res)) -} - -func TestGroupInputsByPrevHash1(t *testing.T) { - inputs := make([]Input, 0) - hash, err := util.Uint256DecodeStringLE("46168f963d6d8168a870405f66cc9e13a235791013b8ee2f90cc20a8293bd1af") - require.NoError(t, err) - inputs = append(inputs, Input{PrevHash: hash, PrevIndex: 42}) - res := GroupInputsByPrevHash(inputs) - require.Equal(t, 1, len(res)) - require.Equal(t, 1, len(res[0])) - assert.Equal(t, hash, res[0][0].PrevHash) - assert.Equal(t, uint16(42), res[0][0].PrevIndex) -} - -func TestGroupInputsByPrevHashMany(t *testing.T) { - hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") - require.NoError(t, err) - hash2, err := util.Uint256DecodeStringBE("629397158f852e838077bb2715b13a2e29b0a51c2157e5466321b70ed7904ce9") - require.NoError(t, err) - hash3, err := util.Uint256DecodeStringBE("caa41245c3e48ddc13dabe989ba8fbc59418e9228fef9efb62855b0b17d7448b") - require.NoError(t, err) - inputs := make([]Input, 0) - for i := 0; i < 10; i++ { - inputs = append(inputs, Input{PrevHash: hash1, PrevIndex: uint16(i)}) - inputs = append(inputs, Input{PrevHash: hash2, PrevIndex: uint16(i)}) - inputs = append(inputs, Input{PrevHash: hash3, PrevIndex: uint16(i)}) - } - for i := 15; i < 20; i++ { - inputs = append(inputs, Input{PrevHash: hash3, PrevIndex: uint16(i)}) - } - for i := 10; i < 15; i++ { - inputs = append(inputs, Input{PrevHash: hash2, PrevIndex: uint16(i)}) - inputs = append(inputs, Input{PrevHash: hash3, PrevIndex: uint16(i)}) - } - seen := make(map[uint16]bool) - res := GroupInputsByPrevHash(inputs) - require.Equal(t, 3, len(res)) - assert.Equal(t, hash2, res[0][0].PrevHash) - assert.Equal(t, 15, len(res[0])) - for i := range res[0] { - assert.Equal(t, res[0][i].PrevHash, res[0][0].PrevHash) - assert.Equal(t, false, seen[res[0][i].PrevIndex]) - seen[res[0][i].PrevIndex] = true - } - seen = make(map[uint16]bool) - assert.Equal(t, hash1, res[1][0].PrevHash) - assert.Equal(t, 10, len(res[1])) - for i := range res[1] { - assert.Equal(t, res[1][i].PrevHash, res[1][0].PrevHash) - assert.Equal(t, false, seen[res[1][i].PrevIndex]) - seen[res[1][i].PrevIndex] = true - } - seen = make(map[uint16]bool) - assert.Equal(t, hash3, res[2][0].PrevHash) - assert.Equal(t, 20, len(res[2])) - for i := range res[2] { - assert.Equal(t, res[2][i].PrevHash, res[2][0].PrevHash) - assert.Equal(t, false, seen[res[2][i].PrevIndex]) - seen[res[2][i].PrevIndex] = true - } -} - -func TestHaveDuplicateInputs0(t *testing.T) { - inputs := make([]Input, 0) - require.False(t, HaveDuplicateInputs(inputs)) -} - -func TestHaveDuplicateInputs1(t *testing.T) { - inputs := make([]Input, 0) - hash, err := util.Uint256DecodeStringLE("46168f963d6d8168a870405f66cc9e13a235791013b8ee2f90cc20a8293bd1af") - require.NoError(t, err) - inputs = append(inputs, Input{PrevHash: hash, PrevIndex: 42}) - require.False(t, HaveDuplicateInputs(inputs)) -} - -func TestHaveDuplicateInputs2True(t *testing.T) { - inputs := make([]Input, 0) - hash, err := util.Uint256DecodeStringLE("46168f963d6d8168a870405f66cc9e13a235791013b8ee2f90cc20a8293bd1af") - require.NoError(t, err) - inputs = append(inputs, Input{PrevHash: hash, PrevIndex: 42}) - inputs = append(inputs, Input{PrevHash: hash, PrevIndex: 42}) - require.True(t, HaveDuplicateInputs(inputs)) -} - -func TestHaveDuplicateInputs2FalseInd(t *testing.T) { - inputs := make([]Input, 0) - hash, err := util.Uint256DecodeStringLE("46168f963d6d8168a870405f66cc9e13a235791013b8ee2f90cc20a8293bd1af") - require.NoError(t, err) - inputs = append(inputs, Input{PrevHash: hash, PrevIndex: 42}) - inputs = append(inputs, Input{PrevHash: hash, PrevIndex: 41}) - require.False(t, HaveDuplicateInputs(inputs)) -} - -func TestHaveDuplicateInputs2FalseHash(t *testing.T) { - inputs := make([]Input, 0) - hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") - require.NoError(t, err) - hash2, err := util.Uint256DecodeStringBE("629397158f852e838077bb2715b13a2e29b0a51c2157e5466321b70ed7904ce9") - require.NoError(t, err) - inputs = append(inputs, Input{PrevHash: hash1, PrevIndex: 42}) - inputs = append(inputs, Input{PrevHash: hash2, PrevIndex: 42}) - require.False(t, HaveDuplicateInputs(inputs)) -} - -func TestHaveDuplicateInputsMFalse(t *testing.T) { - inputs := make([]Input, 0) - hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") - require.NoError(t, err) - hash2, err := util.Uint256DecodeStringBE("629397158f852e838077bb2715b13a2e29b0a51c2157e5466321b70ed7904ce9") - require.NoError(t, err) - for i := 0; i < 10; i++ { - inputs = append(inputs, Input{PrevHash: hash1, PrevIndex: uint16(i)}) - inputs = append(inputs, Input{PrevHash: hash2, PrevIndex: uint16(i)}) - } - require.False(t, HaveDuplicateInputs(inputs)) -} - -func TestHaveDuplicateInputsMTrue(t *testing.T) { - inputs := make([]Input, 0) - hash1, err := util.Uint256DecodeStringBE("a83ba6ede918a501558d3170a124324aedc89909e64c4ff2c6f863094f980b25") - require.NoError(t, err) - hash2, err := util.Uint256DecodeStringBE("629397158f852e838077bb2715b13a2e29b0a51c2157e5466321b70ed7904ce9") - require.NoError(t, err) - for i := 0; i < 10; i++ { - inputs = append(inputs, Input{PrevHash: hash1, PrevIndex: uint16(i)}) - inputs = append(inputs, Input{PrevHash: hash2, PrevIndex: uint16(i)}) - } - inputs = append(inputs, Input{PrevHash: hash1, PrevIndex: 0}) - require.True(t, HaveDuplicateInputs(inputs)) -} diff --git a/pkg/core/transaction/output.go b/pkg/core/transaction/output.go deleted file mode 100644 index 11ad85b2e..000000000 --- a/pkg/core/transaction/output.go +++ /dev/null @@ -1,82 +0,0 @@ -package transaction - -import ( - "encoding/json" - - "github.com/nspcc-dev/neo-go/pkg/encoding/address" - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// Output represents a Transaction output. -type Output struct { - // The NEO asset id used in the transaction. - AssetID util.Uint256 `json:"asset"` - - // Amount of AssetType send or received. - Amount util.Fixed8 `json:"value"` - - // The address of the recipient. - ScriptHash util.Uint160 `json:"address"` - - // The position of the Output in slice []Output. This is actually set in NewTransactionOutputRaw - // and used for displaying purposes. - Position int `json:"n"` -} - -type outputAux struct { - AssetID util.Uint256 `json:"asset"` - Amount util.Fixed8 `json:"value"` - ScriptHash string `json:"address"` - Position int `json:"n"` -} - -// NewOutput returns a new transaction output. -func NewOutput(assetID util.Uint256, amount util.Fixed8, scriptHash util.Uint160) *Output { - return &Output{ - AssetID: assetID, - Amount: amount, - ScriptHash: scriptHash, - } -} - -// DecodeBinary implements Serializable interface. -func (out *Output) DecodeBinary(br *io.BinReader) { - br.ReadBytes(out.AssetID[:]) - out.Amount.DecodeBinary(br) - br.ReadBytes(out.ScriptHash[:]) -} - -// EncodeBinary implements Serializable interface. -func (out *Output) EncodeBinary(bw *io.BinWriter) { - bw.WriteBytes(out.AssetID[:]) - out.Amount.EncodeBinary(bw) - bw.WriteBytes(out.ScriptHash[:]) -} - -// MarshalJSON implements the Marshaler interface. -func (out *Output) MarshalJSON() ([]byte, error) { - return json.Marshal(map[string]interface{}{ - "asset": out.AssetID, - "value": out.Amount, - "address": address.Uint160ToString(out.ScriptHash), - "n": out.Position, - }) -} - -// UnmarshalJSON implements json.Unmarshaler interface. -func (out *Output) UnmarshalJSON(data []byte) error { - var outAux outputAux - err := json.Unmarshal(data, &outAux) - if err != nil { - return err - } - out.ScriptHash, err = address.StringToUint160(outAux.ScriptHash) - if err != nil { - return err - } - out.Amount = outAux.Amount - out.AssetID = outAux.AssetID - out.Position = outAux.Position - return nil -} diff --git a/pkg/core/transaction/transaction.go b/pkg/core/transaction/transaction.go index f3923b35f..f0d1f8763 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -54,12 +54,6 @@ type Transaction struct { // Transaction cosigners (not include Sender). Cosigners []Cosigner - // The inputs of the transaction. - Inputs []Input - - // The outputs of the transaction. - Outputs []Output - // The scripts that comes with this transaction. // Scripts exist out of the verification script // and invocation script. @@ -95,8 +89,6 @@ func New(script []byte, gas util.Fixed8) *Transaction { SystemFee: gas, Attributes: []Attribute{}, Cosigners: []Cosigner{}, - Inputs: []Input{}, - Outputs: []Output{}, Scripts: []Witness{}, } } @@ -121,16 +113,6 @@ func (t *Transaction) VerificationHash() util.Uint256 { return t.verificationHash } -// AddOutput adds the given output to the transaction outputs. -func (t *Transaction) AddOutput(out *Output) { - t.Outputs = append(t.Outputs, *out) -} - -// AddInput adds the given input to the transaction inputs. -func (t *Transaction) AddInput(in *Input) { - t.Inputs = append(t.Inputs, *in) -} - // DecodeBinary implements Serializable interface. func (t *Transaction) DecodeBinary(br *io.BinReader) { t.Version = uint8(br.ReadB()) @@ -174,14 +156,6 @@ func (t *Transaction) DecodeBinary(br *io.BinReader) { return } - br.ReadArray(&t.Inputs) - br.ReadArray(&t.Outputs) - for i := range t.Outputs { - if t.Outputs[i].Amount.LessThan(0) { - br.Err = errors.New("negative output") - return - } - } br.ReadArray(&t.Scripts) // Create the hash of the transaction at decode, so we dont need @@ -218,11 +192,6 @@ func (t *Transaction) encodeHashableFields(bw *io.BinWriter) { bw.WriteArray(t.Cosigners) bw.WriteVarBytes(t.Script) - // Inputs - bw.WriteArray(t.Inputs) - - // Outputs - bw.WriteArray(t.Outputs) } // createHash creates the hash of the transaction. @@ -240,16 +209,6 @@ func (t *Transaction) createHash() error { return nil } -// GroupOutputByAssetID groups all TX outputs by their assetID. -func (t Transaction) GroupOutputByAssetID() map[util.Uint256][]*Output { - m := make(map[util.Uint256][]*Output) - for i := range t.Outputs { - hash := t.Outputs[i].AssetID - m[hash] = append(m[hash], &t.Outputs[i]) - } - return m -} - // GetSignedPart returns a part of the transaction which must be signed. func (t *Transaction) GetSignedPart() []byte { buf := io.NewBufBinWriter() @@ -301,8 +260,6 @@ type transactionJSON struct { Attributes []Attribute `json:"attributes"` Cosigners []Cosigner `json:"cosigners"` Script string `json:"script"` - Inputs []Input `json:"vin"` - Outputs []Output `json:"vout"` Scripts []Witness `json:"scripts"` } @@ -318,8 +275,6 @@ func (t *Transaction) MarshalJSON() ([]byte, error) { Attributes: t.Attributes, Cosigners: t.Cosigners, Script: hex.EncodeToString(t.Script), - Inputs: t.Inputs, - Outputs: t.Outputs, Scripts: t.Scripts, SystemFee: t.SystemFee, NetworkFee: t.NetworkFee, @@ -338,8 +293,6 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { t.ValidUntilBlock = tx.ValidUntilBlock t.Attributes = tx.Attributes t.Cosigners = tx.Cosigners - t.Inputs = tx.Inputs - t.Outputs = tx.Outputs t.Scripts = tx.Scripts t.SystemFee = tx.SystemFee t.NetworkFee = tx.NetworkFee diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index 2ea9bea19..bbc082d18 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -88,18 +88,8 @@ func TestMarshalUnmarshalJSONInvocationTX(t *testing.T) { Version: 0, Script: []byte{1, 2, 3, 4}, Attributes: []Attribute{}, - Inputs: []Input{{ - PrevHash: util.Uint256{5, 6, 7, 8}, - PrevIndex: uint16(12), - }}, - Outputs: []Output{{ - AssetID: util.Uint256{1, 2, 3}, - Amount: util.Fixed8FromInt64(1), - ScriptHash: util.Uint160{1, 2, 3}, - Position: 0, - }}, - Scripts: []Witness{}, - Trimmed: false, + Scripts: []Witness{}, + Trimmed: false, } testserdes.MarshalUnmarshalJSON(t, tx, new(Transaction)) diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index b49bd3d49..da254c162 100644 --- a/pkg/core/util_test.go +++ b/pkg/core/util_test.go @@ -20,7 +20,7 @@ func TestGenesisBlockMainNet(t *testing.T) { // have been changed. Consequently, hash of the genesis block has been changed. // Update expected genesis block hash for better times. // Old hash is "d42561e3d30e15be6400b6df2f328e02d2bf6354c41dce433bc57687c82144bf" - expect := "2535d4b8b244c8a036ed356ee4448e041dc6e8f1d81abdcc7e3d0640c66f6cc8" + expect := "e4cfc549c87d4ab7b570c368d05853ffb70eb9ef0f7d9c7a2e6e9e5d713ebbf4" assert.Equal(t, expect, block.Hash().StringLE()) } diff --git a/pkg/interop/input/input.go b/pkg/interop/input/input.go deleted file mode 100644 index e577f2815..000000000 --- a/pkg/interop/input/input.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -Package input provides functions dealing with transaction inputs. -*/ -package input - -// Input is an opaque data structure that can only be created by -// transaction.GetInputs and it represents transaction's input. It's similar -// to Neo .net framework's TransactionInput. -type Input struct{} - -// GetHash returns the hash stored in the given input (which also is a -// transaction ID represented as 32 byte slice containing 256 bit BE value). -// It uses `Neo.Input.GetHash` syscall. -func GetHash(in Input) []byte { - return nil -} - -// GetIndex returns the index stored in the given input (which is a -// transaction's output number). It uses `Neo.Input.GetIndex` syscall. -func GetIndex(in Input) int { - return 0 -} diff --git a/pkg/interop/output/output.go b/pkg/interop/output/output.go deleted file mode 100644 index 01ad0c828..000000000 --- a/pkg/interop/output/output.go +++ /dev/null @@ -1,28 +0,0 @@ -/* -Package output provides functions dealing with transaction outputs. -*/ -package output - -// Output is an opaque data structure that can only be created by -// transaction.GetOutputs and it represents transaction's output. It's similar -// to Neo .net framework's TransactionOutput. -type Output struct{} - -// GetAssetID returns the asset ID (256 bit BE value in a 32 byte slice) of the -// given output. It uses `Neo.Output.GetAssetId` syscall. -func GetAssetID(out Output) []byte { - return nil -} - -// GetValue returns the value (asset quantity) of the given output. It uses -// `Neo.Output.GetValue` syscall. -func GetValue(out Output) int { - return 0 -} - -// GetScriptHash returns the script hash (receiver's address represented as -// 20 byte slice containing 160 bit BE value) of the given output. It uses -// `Neo.Output.GetScriptHash` syscall. -func GetScriptHash(out Output) []byte { - return nil -} diff --git a/pkg/interop/transaction/transaction.go b/pkg/interop/transaction/transaction.go index 4f975fd8e..fc44f37c4 100644 --- a/pkg/interop/transaction/transaction.go +++ b/pkg/interop/transaction/transaction.go @@ -5,8 +5,6 @@ package transaction import ( "github.com/nspcc-dev/neo-go/pkg/interop/attribute" - "github.com/nspcc-dev/neo-go/pkg/interop/input" - "github.com/nspcc-dev/neo-go/pkg/interop/output" "github.com/nspcc-dev/neo-go/pkg/interop/witness" ) @@ -28,35 +26,6 @@ func GetAttributes(t Transaction) []attribute.Attribute { return []attribute.Attribute{} } -// GetReferences returns a slice of references for a given Transaction. Elements -// of this slice can be casted to any of input.Input or output.Output, depending -// on which information you're interested in (as reference technically contains -// both input and corresponding output), refer to input and output package on -// how to use them. This function uses `Neo.Transaction.GetReferences` syscall. -func GetReferences(t Transaction) []interface{} { - return []interface{}{} -} - -// GetUnspentCoins returns a slice of not yet spent ouputs of a given transaction. -// This function uses `Neo.Transaction.GetUnspentCoint` syscall. -func GetUnspentCoins(t Transaction) []output.Output { - return []output.Output{} -} - -// GetInputs returns a slice of inputs of a given Transaction. Refer to input -// package on how to use them. This function uses `Neo.Transaction.GetInputs` -// syscall. -func GetInputs(t Transaction) []input.Input { - return []input.Input{} -} - -// GetOutputs returns a slice of outputs of a given Transaction. Refer to output -// package on how to use them. This function uses `Neo.Transaction.GetOutputs` -// syscall. -func GetOutputs(t Transaction) []output.Output { - return []output.Output{} -} - // GetWitnesses returns a slice of witnesses of a given Transaction. Refer to // witness package on how to use them. This function uses // `Neo.Transaction.GetWitnesses` syscall. diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index 8beed2bf3..d8ffaabde 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -35,10 +35,6 @@ func (chain testChain) CalculateClaimable(int64, uint32, uint32) util.Fixed8 { panic("TODO") } -func (chain testChain) References(t *transaction.Transaction) ([]transaction.InOut, error) { - panic("TODO") -} - func (chain testChain) FeePerByte() util.Fixed8 { panic("TODO") } @@ -126,10 +122,6 @@ func (chain testChain) GetTransaction(util.Uint256) (*transaction.Transaction, u panic("TODO") } -func (chain testChain) GetUnspentCoinState(util.Uint256) *state.UnspentCoin { - panic("TODO") -} - func (chain testChain) GetMemPool() *mempool.Pool { panic("TODO") } diff --git a/pkg/rpc/client/client.go b/pkg/rpc/client/client.go index d9ead3469..1f2c1cad2 100644 --- a/pkg/rpc/client/client.go +++ b/pkg/rpc/client/client.go @@ -8,16 +8,12 @@ import ( "net" "net/http" "net/url" - "sort" "sync" "time" - "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/rpc/request" "github.com/nspcc-dev/neo-go/pkg/rpc/response" - "github.com/nspcc-dev/neo-go/pkg/util" "github.com/pkg/errors" ) @@ -197,34 +193,3 @@ func (c *Client) Ping() error { _ = conn.Close() return nil } - -// unspentsToInputs uses UnspentBalances to create a slice of inputs for a new -// transcation containing the required amount of asset. -func unspentsToInputs(utxos state.UnspentBalances, required util.Fixed8) ([]transaction.Input, util.Fixed8, error) { - var ( - num, i uint16 - selected = util.Fixed8(0) - ) - sort.Sort(utxos) - - for _, us := range utxos { - if selected >= required { - break - } - selected += us.Value - num++ - } - if selected < required { - return nil, util.Fixed8(0), errors.New("cannot compose inputs for transaction; check sender balance") - } - - inputs := make([]transaction.Input, 0, num) - for i = 0; i < num; i++ { - inputs = append(inputs, transaction.Input{ - PrevHash: utxos[i].Tx, - PrevIndex: utxos[i].Index, - }) - } - - return inputs, selected, nil -} diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index aa657036e..c10f2e1df 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -31,17 +31,17 @@ type rpcClientTestCase struct { check func(t *testing.T, c *Client, result interface{}) } -const hexB1 = "000000001409900d6f330df2624b9ad49e4e68c04bab6757b684b4ae46e995ec9278002d6aa5da3b3922db2ae0fb51e6058d123d441650db8a187e7b7a34c55927fae217b91274847201000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb030057040000000000000002000000abec5362f11e75b6e02e407bb98d63675d14384100000000000000000e670d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d14384101590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001fd08010c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb0003000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000ae760d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d143841015d0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238000001fd08010c4001c81faa8317a390c211d5e03451ed852ff02ec6c401c450558bc90c60a01912c3e1018de98e7458f6f96c68aad71ffb0e92327fcdfa4aabb5ea5834ec7afbf10c40a84e9bc36ffbf18a1ee79254182d2939dd3a7b9278e13893856f187ab44dec259c8a15d4f449a21aa6970234d79d81fee0aca1807341b977ff66d503a78c82920c4085495bb8d86b95a4afc1659ce1d993e1a7843e3dcb19696ce0422294dadddc73438780d5bc629560f576e0e75cff062c03e237d4e609dfaa9869135e23a487650c40ae25f2c563b978f931c3a8b5a18854d9bb77abf48c7554f2008f97696caca180cd40d4d0e47b3f4d86082e631547d1a4729c7ed60dda64fab9cd9a2270dd113294130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" +const hexB1 = "00000000e862e7907fc987cd58ddb3abb754aeb8812c9377c45e737a036fe88a622c3b8f301f2e84a86b207270830e7929530ccb841a3df7379fe6f0ac8865b33316839501cdd0847201000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40ab634ce91590e77b246cee8b204e8a270268ee1ef32434cece73f425a7dbc90f1bed1dbe914edcaa2653167ad170ae10e16a9b2c6b7e0af1f711fb848fbb1b7f0c40232de6ad07ee3846bafa96302d37602349501a556df575e7df0743e45b076d6a0c6c6dd4cad3898f9e8848dd054abd303b229fd12984042f241f0e668f39a0fb0c408b4af43057df189a9d471010b5150bab442040403147c5e502bda38cde3ff8bce803f01245e07e2bfb95d57349c55dcc27e3710b82f2735d0f40eb4342908e330c40cda66f743d4ed8d856f5376953f9169581c668a9370245aef16202ebef9bb3f7f81234be62ec287d701ad7d8bf5042648019af9fe5baa0a8e05d279bfdb1d4c994130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb030057040000000000000002000000abec5362f11e75b6e02e407bb98d63675d14384100000000000000003e5f0d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d14384101590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b523801fd08010c402d96d8fde4ba266f89bc71ef117361967e0d11ed84cd60942a27bc99994dc58adf36a0e74ce976aac657a87a3c19c38e8ca450c67420046b81d98c60fd8feb040c40b3c15d5d23e0403a36cf559caee2979ca6ef00fe255df0e5c3daac4da051016b41eba42668934cd3308359451bafdd5419d059179fd40859684a3b91388bf9d80c407ac048cf8540b091955a374a0f36dae560c92c0134886507a589edf58b9dfbb4e3dbd5450be34e269d2e5454eb14eb7d6280d6101b4529410f829d37634849be0c403bba4113a687ff8507c1753f8519557531cf9df51ecc20deeb2c2b003ec5a1f7588cdd50b99e40b4f8039bb56c5df7ec9e7d6ea4b02fe23792510da21c7557f394130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb0003000000abec5362f11e75b6e02e407bb98d63675d1438410000000000000000de6e0d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d143841015d0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b523801fd08010c4063fb12aa9f3fb83f6324ea9c7ec11fa9e995b51140f480409d68cf4d625e598b0632d6610602984bfa2f5e5ea9bcc62a0e6d818dd271b38530c0d1b8a71b4e0c0c4013e091eac6f304668d647c5c032fd1020597ea5204545e21c38655a6343d58492118f1231ede91af848af7e1d987d1a8816966f5fc1a7821c6c6f62734267bde0c40daadd04a7a4141d96c58de2d373e672ca071e2b82138ef52df016ac522710385db2ac73743d2fe73061fa5d6cb0ff73a7ec7f0667e4c8bff6aa0d5783128d36e0c40dab85cd87d3f92be9532292bdc6f420b0ecbf2f877c70c6a9921ee0fc900dfc53998cf020a51fa9af3d0608f6a2b9048cea3c0b586485802bbd278b261eee8a494130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" -const hexTxMoveNeo = "0002000000abec5362f11e75b6e02e407bb98d63675d14384100000000000000000e670d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d14384101590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001fd08010c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" +const hexTxMoveNeo = "0002000000abec5362f11e75b6e02e407bb98d63675d14384100000000000000003e5f0d0000000000b00400000001abec5362f11e75b6e02e407bb98d63675d14384101590218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b523801fd08010c402d96d8fde4ba266f89bc71ef117361967e0d11ed84cd60942a27bc99994dc58adf36a0e74ce976aac657a87a3c19c38e8ca450c67420046b81d98c60fd8feb040c40b3c15d5d23e0403a36cf559caee2979ca6ef00fe255df0e5c3daac4da051016b41eba42668934cd3308359451bafdd5419d059179fd40859684a3b91388bf9d80c407ac048cf8540b091955a374a0f36dae560c92c0134886507a589edf58b9dfbb4e3dbd5450be34e269d2e5454eb14eb7d6280d6101b4529410f829d37634849be0c403bba4113a687ff8507c1753f8519557531cf9df51ecc20deeb2c2b003ec5a1f7588cdd50b99e40b4f8039bb56c5df7ec9e7d6ea4b02fe23792510da21c7557f394130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb" -const b1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"size":1685,"nextblockhash":"0x14a61952de5bf47e2550bb97439de44ea60f79e052419e8b263b1b41d7065b0f","confirmations":4,"hash":"0xc826db8aa7a05fbd336eb0fca66efea7330cdc09cc8cf8e3cd9a3d9a87b751ac","version":0,"previousblockhash":"0x2d007892ec95e946aeb484b65767ab4bc0684e9ed49a4b62f20d336f0d900914","merkleroot":"0x17e2fa2759c5347a7b7e188adb5016443d128d05e651fbe02adb22393bdaa56a","time":1591360099001,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xd24f8ab43462f8a2f788fa9073b8b32b4417aeddea19dfcc8dfb543d68e90de5","size":577,"version":0,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087835","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]},{"txid":"0xf3304d751f7f6e871a610644529aa4f8fcc60a31592352eea54b86be472614f1","size":581,"version":0,"nonce":3,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0088235","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c4001c81faa8317a390c211d5e03451ed852ff02ec6c401c450558bc90c60a01912c3e1018de98e7458f6f96c68aad71ffb0e92327fcdfa4aabb5ea5834ec7afbf10c40a84e9bc36ffbf18a1ee79254182d2939dd3a7b9278e13893856f187ab44dec259c8a15d4f449a21aa6970234d79d81fee0aca1807341b977ff66d503a78c82920c4085495bb8d86b95a4afc1659ce1d993e1a7843e3dcb19696ce0422294dadddc73438780d5bc629560f576e0e75cff062c03e237d4e609dfaa9869135e23a487650c40ae25f2c563b978f931c3a8b5a18854d9bb77abf48c7554f2008f97696caca180cd40d4d0e47b3f4d86082e631547d1a4729c7ed60dda64fab9cd9a2270dd1132","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}]}}` +const b1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"size":1681,"nextblockhash":"0xf2afe371a27c9dbac4f4a8ad8eba750898b7c04aa298e64fe9e488e947976045","confirmations":4,"hash":"0xbd178d8d4a28ec082c034f817ce2423221281a31e7e00014dbf732c4053033d2","version":0,"previousblockhash":"0x8f3b2c628ae86f037a735ec477932c81b8ae54b7abb3dd58cd87c97f90e762e8","merkleroot":"0x95831633b36588acf0e69f37f73d1a84cb0c5329790e837072206ba8842e1f30","time":1591366176001,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40ab634ce91590e77b246cee8b204e8a270268ee1ef32434cece73f425a7dbc90f1bed1dbe914edcaa2653167ad170ae10e16a9b2c6b7e0af1f711fb848fbb1b7f0c40232de6ad07ee3846bafa96302d37602349501a556df575e7df0743e45b076d6a0c6c6dd4cad3898f9e8848dd054abd303b229fd12984042f241f0e668f39a0fb0c408b4af43057df189a9d471010b5150bab442040403147c5e502bda38cde3ff8bce803f01245e07e2bfb95d57349c55dcc27e3710b82f2735d0f40eb4342908e330c40cda66f743d4ed8d856f5376953f9169581c668a9370245aef16202ebef9bb3f7f81234be62ec287d701ad7d8bf5042648019af9fe5baa0a8e05d279bfdb1d4c9","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0x8af9ccb8e7e0f0a73e77b78dc52750e77c50f78b09ecc2f0669c0b459cc7dd89","size":575,"version":0,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087635","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238","scripts":[{"invocation":"0c402d96d8fde4ba266f89bc71ef117361967e0d11ed84cd60942a27bc99994dc58adf36a0e74ce976aac657a87a3c19c38e8ca450c67420046b81d98c60fd8feb040c40b3c15d5d23e0403a36cf559caee2979ca6ef00fe255df0e5c3daac4da051016b41eba42668934cd3308359451bafdd5419d059179fd40859684a3b91388bf9d80c407ac048cf8540b091955a374a0f36dae560c92c0134886507a589edf58b9dfbb4e3dbd5450be34e269d2e5454eb14eb7d6280d6101b4529410f829d37634849be0c403bba4113a687ff8507c1753f8519557531cf9df51ecc20deeb2c2b003ec5a1f7588cdd50b99e40b4f8039bb56c5df7ec9e7d6ea4b02fe23792510da21c7557f3","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]},{"txid":"0xe7cff9e4820e53232dae619a3e6f57a9430dc240b5ed7b5c0ea2cfee3e90c985","size":579,"version":0,"nonce":3,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0088035","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0300e87648170000000c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c143b7d3711c6f0ccf9b1dca903d1bfa1d896f1238c41627d5b5238","scripts":[{"invocation":"0c4063fb12aa9f3fb83f6324ea9c7ec11fa9e995b51140f480409d68cf4d625e598b0632d6610602984bfa2f5e5ea9bcc62a0e6d818dd271b38530c0d1b8a71b4e0c0c4013e091eac6f304668d647c5c032fd1020597ea5204545e21c38655a6343d58492118f1231ede91af848af7e1d987d1a8816966f5fc1a7821c6c6f62734267bde0c40daadd04a7a4141d96c58de2d373e672ca071e2b82138ef52df016ac522710385db2ac73743d2fe73061fa5d6cb0ff73a7ec7f0667e4c8bff6aa0d5783128d36e0c40dab85cd87d3f92be9532292bdc6f420b0ecbf2f877c70c6a9921ee0fc900dfc53998cf020a51fa9af3d0608f6a2b9048cea3c0b586485802bbd278b261eee8a4","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}]}}` -const hexHeader1 = "000000001409900d6f330df2624b9ad49e4e68c04bab6757b684b4ae46e995ec9278002d6aa5da3b3922db2ae0fb51e6058d123d441650db8a187e7b7a34c55927fae217b91274847201000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e94130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb00" +const hexHeader1 = "00000000e862e7907fc987cd58ddb3abb754aeb8812c9377c45e737a036fe88a622c3b8f301f2e84a86b207270830e7929530ccb841a3df7379fe6f0ac8865b33316839501cdd0847201000001000000abec5362f11e75b6e02e407bb98d63675d14384101fd08010c40ab634ce91590e77b246cee8b204e8a270268ee1ef32434cece73f425a7dbc90f1bed1dbe914edcaa2653167ad170ae10e16a9b2c6b7e0af1f711fb848fbb1b7f0c40232de6ad07ee3846bafa96302d37602349501a556df575e7df0743e45b076d6a0c6c6dd4cad3898f9e8848dd054abd303b229fd12984042f241f0e668f39a0fb0c408b4af43057df189a9d471010b5150bab442040403147c5e502bda38cde3ff8bce803f01245e07e2bfb95d57349c55dcc27e3710b82f2735d0f40eb4342908e330c40cda66f743d4ed8d856f5376953f9169581c668a9370245aef16202ebef9bb3f7f81234be62ec287d701ad7d8bf5042648019af9fe5baa0a8e05d279bfdb1d4c994130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb00" -const header1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"hash":"0xc826db8aa7a05fbd336eb0fca66efea7330cdc09cc8cf8e3cd9a3d9a87b751ac","size":518,"version":0,"previousblockhash":"0x2d007892ec95e946aeb484b65767ab4bc0684e9ed49a4b62f20d336f0d900914","merkleroot":"0x17e2fa2759c5347a7b7e188adb5016443d128d05e651fbe02adb22393bdaa56a","time":1591360099001,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40bac8992a77bd21ba670f2bf5097387a42b227878b361c69bfeeeb55c4b68bdff7db5c93b8f6d84876e473bba84bf27dc7de8d35b8179e120a60a6bc01562ac740c401c876fdb2fbffc599ac9ffbc85f7e6087855fd40e12b23888718e381c93de2614cce5bdfb1108ff72a73b85d4a6556dad6578a59bfa0e61b93c775cb1c1924f20c40fd992b9d776da1d2da390915e743f4213ce8a6db862b6354cccbcb3bf8b4edd14562cb546cbbcb3e2d096c9e527d4ee7879c5bbfd01d9a2bb00a1986820e1c320c40fcf3d76b809078a872970bd3bde5836589a7f62660098bbfb82a1cb470b75cc480d527a3829de89c897bacc6c29dfc3e4b84368aa1f69c9bce704fb3399fc04e","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"confirmations":6,"nextblockhash":"0x14a61952de5bf47e2550bb97439de44ea60f79e052419e8b263b1b41d7065b0f"}}` +const header1Verbose = `{"id":5,"jsonrpc":"2.0","result":{"hash":"0xbd178d8d4a28ec082c034f817ce2423221281a31e7e00014dbf732c4053033d2","size":518,"version":0,"previousblockhash":"0x8f3b2c628ae86f037a735ec477932c81b8ae54b7abb3dd58cd87c97f90e762e8","merkleroot":"0x95831633b36588acf0e69f37f73d1a84cb0c5329790e837072206ba8842e1f30","time":1591366176001,"index":1,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40ab634ce91590e77b246cee8b204e8a270268ee1ef32434cece73f425a7dbc90f1bed1dbe914edcaa2653167ad170ae10e16a9b2c6b7e0af1f711fb848fbb1b7f0c40232de6ad07ee3846bafa96302d37602349501a556df575e7df0743e45b076d6a0c6c6dd4cad3898f9e8848dd054abd303b229fd12984042f241f0e668f39a0fb0c408b4af43057df189a9d471010b5150bab442040403147c5e502bda38cde3ff8bce803f01245e07e2bfb95d57349c55dcc27e3710b82f2735d0f40eb4342908e330c40cda66f743d4ed8d856f5376953f9169581c668a9370245aef16202ebef9bb3f7f81234be62ec287d701ad7d8bf5042648019af9fe5baa0a8e05d279bfdb1d4c9","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"confirmations":6,"nextblockhash":"0xf2afe371a27c9dbac4f4a8ad8eba750898b7c04aa298e64fe9e488e947976045"}}` -const txMoveNeoVerbose = `{"id":5,"jsonrpc":"2.0","result":{"blockhash":"0xc826db8aa7a05fbd336eb0fca66efea7330cdc09cc8cf8e3cd9a3d9a87b751ac","confirmations":6,"blocktime":1591360099001,"txid":"0xd24f8ab43462f8a2f788fa9073b8b32b4417aeddea19dfcc8dfb543d68e90de5","size":577,"version":0,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087835","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c4015b24aa11983bbf098384be4ebf5c283c3b4b2d2f6bf17b1a2a32f59627c7eb6370748b231acce2eb1ab5db3cdbf6943084634d12f69bf7b0aa447f96ebaf7d40c40a6777566463018e3f82fbbd370eef65b8454e50978401d1d97df05d9eda3b2bd5f5f882a94f8adbeaa2a55f64bd4ec23398fca26e8b364e5f57c771d71b3ec3d0c4032f5b1e3af669f4f14c2579de8f7ce46e30b35f7ed70892389251d50779477d2506b330dc9dd47f8c406218656d60b669479433bd9f762888091dc94415de5690c404b6ca943c34be335466c25ed442d17abc24d6a78db407a8c2a2c43fb911f0cbdbb28ec791b5f9de01b2db26105aa35193113a3a382c1ed02fbaf82b42468853a","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}}` +const txMoveNeoVerbose = `{"id":5,"jsonrpc":"2.0","result":{"blockhash":"0xbd178d8d4a28ec082c034f817ce2423221281a31e7e00014dbf732c4053033d2","confirmations":6,"blocktime":1591366176001,"txid":"0x8af9ccb8e7e0f0a73e77b78dc52750e77c50f78b09ecc2f0669c0b459cc7dd89","size":575,"version":0,"nonce":2,"sender":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","sys_fee":"0","net_fee":"0.0087635","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x4138145d67638db97b402ee0b6751ef16253ecab","scopes":1}],"script":"0218ddf5050c14316e851039019d39dfc2c37d6c3fee19fd5809870c14abec5362f11e75b6e02e407bb98d63675d14384113c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238","scripts":[{"invocation":"0c402d96d8fde4ba266f89bc71ef117361967e0d11ed84cd60942a27bc99994dc58adf36a0e74ce976aac657a87a3c19c38e8ca450c67420046b81d98c60fd8feb040c40b3c15d5d23e0403a36cf559caee2979ca6ef00fe255df0e5c3daac4da051016b41eba42668934cd3308359451bafdd5419d059179fd40859684a3b91388bf9d80c407ac048cf8540b091955a374a0f36dae560c92c0134886507a589edf58b9dfbb4e3dbd5450be34e269d2e5454eb14eb7d6280d6101b4529410f829d37634849be0c403bba4113a687ff8507c1753f8519557531cf9df51ecc20deeb2c2b003ec5a1f7588cdd50b99e40b4f8039bb56c5df7ec9e7d6ea4b02fe23792510da21c7557f3","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}]}}` // getResultBlock1 returns data for block number 1 which is used by several tests. func getResultBlock1() *result.Block { @@ -54,14 +54,14 @@ func getResultBlock1() *result.Block { if err != nil { panic(err) } - b2Hash, err := util.Uint256DecodeStringLE("14a61952de5bf47e2550bb97439de44ea60f79e052419e8b263b1b41d7065b0f") + b2Hash, err := util.Uint256DecodeStringLE("f2afe371a27c9dbac4f4a8ad8eba750898b7c04aa298e64fe9e488e947976045") if err != nil { panic(err) } return &result.Block{ Block: b, BlockMetadata: result.BlockMetadata{ - Size: 1685, + Size: 1681, NextBlockHash: &b2Hash, Confirmations: 4, }, diff --git a/pkg/rpc/client/wsclient_test.go b/pkg/rpc/client/wsclient_test.go index 445eb05e8..6050c35f3 100644 --- a/pkg/rpc/client/wsclient_test.go +++ b/pkg/rpc/client/wsclient_test.go @@ -117,8 +117,8 @@ func TestWSClientEvents(t *testing.T) { var events = []string{ `{"jsonrpc":"2.0","method":"transaction_executed","params":[{"txid":"0xe1cd5e57e721d2a2e05fb1f08721b12057b25ab1dd7fd0f33ee1639932fdfad7","executions":[{"trigger":"Application","contract":"0x0000000000000000000000000000000000000000","vmstate":"HALT","gas_consumed":"2.291","stack":[],"notifications":[{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"636f6e74726163742063616c6c"},{"type":"ByteArray","value":"7472616e73666572"},{"type":"Array","value":[{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}]}},{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"7472616e73666572"},{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}}]}]}]}`, `{"jsonrpc":"2.0","method":"notification_from_execution","params":[{"contract":"0x1b4357bff5a01bdf2a6581247cf9ed1e24629176","state":{"type":"Array","value":[{"type":"ByteArray","value":"636f6e74726163742063616c6c"},{"type":"ByteArray","value":"7472616e73666572"},{"type":"Array","value":[{"type":"ByteArray","value":"769162241eedf97c2481652adf1ba0f5bf57431b"},{"type":"ByteArray","value":"316e851039019d39dfc2c37d6c3fee19fd580987"},{"type":"Integer","value":"1000"}]}]}}]}`, - `{"jsonrpc":"2.0","method":"transaction_added","params":[{"txid":"0xe1e0200a69f3096010c75dd003653e5bd945e414d0b0a3b95e3dfe291534c8e5","size":267,"version":0,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036721","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"script":"007b0c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c40b61d89290451852143490194e09a547d79b8b6cda05691c085160cc0ddebc6e3a508defae7ac04e015c85af6b6fcb487a954c2a884d4cc147c9959f776844b3c","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}`, - `{"jsonrpc":"2.0","method":"block_added","params":[{"hash":"0x73f4157bc918f0af115522380b13dadf505773f91e818288edb0de4fcce104b4","version":0,"previousblockhash":"0x3c664cf156f2f418e92fd24621ac3b56da4a4c1e56c443fe360d52324d8f060f","merkleroot":"0xfa9e8e7a506c1a38fa1f090237156debd055c8cf41d743ae4f37fe3c278ff2e0","time":1591360099006,"index":6,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40d7690b2335898b192d408f3565fb8da0f994a305999f1b7b87000934831f76d680442ea2c44200c2b154c12a0ee587046eeec45f749b73ce3bc97ac172487f350c400835fd349d184a691087b24a827d82bad3026ffa0e7f2841e85fb91f5c9549e6a1430883586cbbfba3a450a0198608e19c0b1630677bbd9495e3f48c8c4835c40c400fd2d4dfee36f99de6df35b1c857eb7c8b9b26574a781114081b066b806a1bcae129d05329298b0e6b4728da90928d4a375157dd7472fb37351a20d1a84996790c404b58d5f6374bf6c2ab12f51e6f78a07852e027279879a5fb25b5e6371ad9d89749127e7b8f8eae3df45bfe187ae226aa1aeead061006da7c4e665d97950c9a3e","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0xe1e0200a69f3096010c75dd003653e5bd945e414d0b0a3b95e3dfe291534c8e5","size":267,"version":0,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036721","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"script":"007b0c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238","vin":[],"vout":[],"scripts":[{"invocation":"0c40b61d89290451852143490194e09a547d79b8b6cda05691c085160cc0ddebc6e3a508defae7ac04e015c85af6b6fcb487a954c2a884d4cc147c9959f776844b3c","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}]}`, + `{"jsonrpc":"2.0","method":"transaction_added","params":[{"txid":"0x1c615d4043c98fc0e285c2f40cc3601cf4ebe1cf9d2b404dfc67c9cd085444ec","size":265,"version":0,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036521","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"script":"007b0c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238","scripts":[{"invocation":"0c4034d02f3b97a220ffe79640e482b887ec0e44dcc95e719f5e2b43b29987f0c9822b9af0499d90094c6ad3ba191e434a3df5dd378d3b73318cf47c9f2d6d801cc8","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}`, + `{"jsonrpc":"2.0","method":"block_added","params":[{"hash":"0x765ea65b4de6addfee29b1c90ac922d1901c8d7ab7f2366da9a8ad3dd71ca703","version":0,"previousblockhash":"0xbdeed527a43ab72d5d8cecf1dc6ee142112ff8a8eaaaebc7206d3df3bf3c1169","merkleroot":"0xa1b321f59b127cddd23b0cd47fc9ec7920647d30d7ab23318a106597b9c9abad","time":1591366176006,"index":6,"nextconsensus":"AXSvJVzydxXuL9da4GVwK25zdesCrVKkHL","witnesses":[{"invocation":"0c40da1f4b546a8a60e96596351234d7709391866bb3590a290133bc0c45837f1dac6351ee32506a7e0bbf6fcbcc3ec01222ccfe84bc1d4071221f4c432ebf569b620c40ee5906328012a8a4a411e7fa23aa8ba21fedb81b11581e5a287cad961fa36d2a20b2069549a5a14860d9e9ae3640ea20f9191d60ab7c2aeddf43edd6dabe558c0c40f5391e79e7d62f7ccaa900511d530f89de183fa51bc4af744bda81f763e14ddd7fb953e69b0901660d4752f240d5269344d0b64b50b124d1a316ad72486da15e0c40012f773faef2aee4af59e083b443ebe6cf404d12f49d32966c5f48f2c203e284429615aa2d34c827356d55c3be1612f67a5b725f6ff49b9b95b1f60306a72b71","verification":"130c2102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e0c2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd620c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20c2103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699140b413073b3bb"}],"consensus_data":{"primary":0,"nonce":"0000000000000457"},"tx":[{"txid":"0x1c615d4043c98fc0e285c2f40cc3601cf4ebe1cf9d2b404dfc67c9cd085444ec","size":265,"version":0,"nonce":9,"sender":"ALHF9wsXZVEuCGgmDA6ZNsCLtrb4A1g4yG","sys_fee":"0","net_fee":"0.0036521","valid_until_block":1200,"attributes":[],"cosigners":[{"account":"0x870958fd19ee3f6c7dc3c2df399d013910856e31","scopes":1}],"script":"007b0c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14769162241eedf97c2481652adf1ba0f5bf57431b41627d5b5238","scripts":[{"invocation":"0c4034d02f3b97a220ffe79640e482b887ec0e44dcc95e719f5e2b43b29987f0c9822b9af0499d90094c6ad3ba191e434a3df5dd378d3b73318cf47c9f2d6d801cc8","verification":"0c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"}]}]}]}`, `{"jsonrpc":"2.0","method":"event_missed","params":[]}`, } srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { diff --git a/pkg/rpc/response/result/tx_output.go b/pkg/rpc/response/result/tx_output.go deleted file mode 100644 index 4078de755..000000000 --- a/pkg/rpc/response/result/tx_output.go +++ /dev/null @@ -1,27 +0,0 @@ -package result - -import ( - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/encoding/address" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -// TransactionOutput is a wrapper to represent transaction's output. -type TransactionOutput struct { - N int `json:"n"` - Asset string `json:"asset"` - Value util.Fixed8 `json:"value"` - Address string `json:"address"` -} - -// NewTxOutput converts out to a TransactionOutput. -func NewTxOutput(out *transaction.Output) *TransactionOutput { - addr := address.Uint160ToString(out.ScriptHash) - - return &TransactionOutput{ - N: out.Position, - Asset: "0x" + out.AssetID.String(), - Value: out.Amount, - Address: addr, - } -} diff --git a/pkg/rpc/response/result/tx_raw_output.go b/pkg/rpc/response/result/tx_raw_output.go index ae47dda50..e3372019d 100644 --- a/pkg/rpc/response/result/tx_raw_output.go +++ b/pkg/rpc/response/result/tx_raw_output.go @@ -28,10 +28,6 @@ type TransactionMetadata struct { func NewTransactionOutputRaw(tx *transaction.Transaction, header *block.Header, chain blockchainer.Blockchainer) TransactionOutputRaw { // confirmations formula confirmations := int(chain.BlockHeight() - header.Base.Index + 1) - // set index position - for i, o := range tx.Outputs { - o.Position = i - } return TransactionOutputRaw{ Transaction: tx, TransactionMetadata: TransactionMetadata{ diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 81afdc448..ca1d11690 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -55,12 +55,12 @@ var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["2a6bf372fb96d05735eeb685805396818ac3f21e748528f4d6ebdecfd07ddce4"]`, + params: `["5878052c7e9843786d64a9aeab16e74fabffd5abad9a0404aaf4f4bf2b6213e9"]`, result: func(e *executor) interface{} { return &result.ApplicationLog{} }, check: func(t *testing.T, e *executor, acc interface{}) { res, ok := acc.(*result.ApplicationLog) require.True(t, ok) - expectedTxHash, err := util.Uint256DecodeStringLE("2a6bf372fb96d05735eeb685805396818ac3f21e748528f4d6ebdecfd07ddce4") + expectedTxHash, err := util.Uint256DecodeStringLE("5878052c7e9843786d64a9aeab16e74fabffd5abad9a0404aaf4f4bf2b6213e9") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) @@ -484,7 +484,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "gettransactionheight": { { name: "positive", - params: `["2a6bf372fb96d05735eeb685805396818ac3f21e748528f4d6ebdecfd07ddce4"]`, + params: `["5878052c7e9843786d64a9aeab16e74fabffd5abad9a0404aaf4f4bf2b6213e9"]`, result: func(e *executor) interface{} { h := 0 return &h @@ -678,7 +678,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "sendrawtransaction": { { name: "positive", - params: `["000a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000c2b5050000000000b00400000001316e851039019d39dfc2c37d6c3fee19fd580987015d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001420c4070b2b74b193b574fede47432a9bfa192726603a7f1ef6f6589f192943eb5978f47d25a7834ae7f42a0ebf4e013d1d1c2d1bb61417890335e9804ef26a94d2c00290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, + params: `["000a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000f2ad050000000000b00400000001316e851039019d39dfc2c37d6c3fee19fd580987015d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b523801420c40df953141271169421cebab5d27a0163e294d7c7f2d0525b4498745344814fd3d6c5c591c9b1723d05d42856f409adb084cf67acc921cfafc629133a5eb5e7a7e290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906ad4"]`, result: func(e *executor) interface{} { v := true return &v @@ -686,7 +686,7 @@ var rpcTestCases = map[string][]rpcTestCase{ }, { name: "negative", - params: `["000a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000c2b5050000000000b00400000001316e851039019d39dfc2c37d6c3fee19fd580987015d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b5238000001420c4070b2b74b193b574fede47432a9bfa192726603a7f1ef6f6589f192943eb5978f47d25a7834ae7f42a0ebf4e013d1d1c2d1bb61417890335e9804ef26a94d2c00290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906aff"]`, + params: `["000a000000316e851039019d39dfc2c37d6c3fee19fd5809870000000000000000f2ad050000000000b00400000001316e851039019d39dfc2c37d6c3fee19fd580987015d0300e87648170000000c1420728274afafc36f43a071d328cfa3e629d9cbb00c14316e851039019d39dfc2c37d6c3fee19fd58098713c00c087472616e736665720c14897720d8cd76f4f00abfa37c0edd889c208fde9b41627d5b523801420c40df953141271169421cebab5d27a0163e294d7c7f2d0525b4498745344814fd3d6c5c591c9b1723d05d42856f409adb084cf67acc921cfafc629133a5eb5e7a7e290c2102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc20b410a906aff"]`, fail: true, }, { diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index c8d5926be373db0ccdafc3a03fd2dacda3c28d8e..b24ef7a0edeaf8ca596f63bdee9f8c23c9df1af2 100644 GIT binary patch delta 3188 zcmXZbcOcaN9|!Qeb4L0&qpXDEe2KI9W>r2Mk(IqNE-N!DUz~AfWOGI`GcPmLH+zqt zN~pWC_g;yU)%f}Pe&2t*|9t)Nd_12~G8E~%G!O_R^`GzTt=X-n;0I%d%%>YF-x$|4 zhKmyXdu@DiRGw>bcA`qjlDy(kL^q_5S0o}(*a&zRb>-%vT*1n2Rjgx!3|nLdbZ8{? zE(%|1ud~jYvKl1dz7vnsixYx5@9^vk$bR_XOZlUGa*&a0o4Y+#Z>mDjhz&RDRl_vz znj`8KO8@PU`7|oIg$oaWD6y4l+8z1Z%_o_XVscp29sMgN9tVD_v$U9{d$b;|fV&6j z?WZTn`LUYQ)LLzlO8f<*!clMu0bYbtGG3wZ6aeG3D3WHg9MAGJn3!I(UaV9@f}oT} z-!iPNIAKQlsCA8MmqmRp6n&aO_Px_*{a$F%`(nhNuQemMiBU~Sk^#V>GS5dh^~T0b z59C~oj@dH8`<-9N!PINM*}*oy<}@50vB)qv^i7MSf1E`zIW{IFPLFbcXq=hYKEnp7UT7aW$d6RR5sR;w)DyNL44lntHnvO`o%>(!8~zeUNeJ~Ffh+~Sl7+k8d4|tNaBx&ML7^+{e3|uZ*ZWq~pX(eR})d;1FjWT>xaSIw5D`gm{$3%ybMX z12*h>x!5yAgkxxhPTvbBW&?L{7lBduTg~PwK`{q2NYdbDx4U)#M{Rx}KZ%(2C zFuRxOxLA*@k!iS&TZoBG(^3lx&h6mPJ%-vk{#MxQ3*=FF|JS7rdQ4eqmWJ7E#V4WH-~sMMgU0QhVKROd(i=xHZY zLuzwgHLsFz)VI5_e^+^`9h-h0QWqBg^!=Hfd{aI1X~L#V@Y*u3=!JRylg)vy2)`$S z>I?))RuO|m*uPrp*es3p*roNmD^H8GI^R5{^J`A3CQ^Ev^MZ@K7i;%CmgN~M zO*em+qRclK^cMckBRA@f?!ls8UX+O&b9FV}|7b&xRcc*Y(B7D*)S6CVM=wMi^^2Yx*O%v^M88-33yn!wB}581R;lo#`?y>uK+>b|w2dIM86VO~D)qmmS^ zU7@ulWhGu|_`?KV*qsqF6EaR@d(WQr6#%cahpc5e$z^SIwpE5VbX-Gf$%&d@*fEq@UF@8;!206P}emjOkCnF(luR@%07L1 zUTSr!!$hcDIgz&{0f(2;hu};YR~i0S3zbjx5kVH*e!mAE&d8D6nnCvr~G^K^uQEHd&m`=E8{Le zJ>;GMfSLj2Rb6$net^;UFV4nqN!dD{a#oAIKR$~WzLn0l=uUEYA|5N~l52*L6rHYj zBC4i;!?wWR#+8)Km&5T#S+@aD)(1O4noUxTIDJU(@$pBnfum8{^PXdS4Wu{Q5VqqR z;$01FGT=41MZLw2`lF=S)YO0cStV^NWeP>tLx1mV>9%Bd1+V=m&6Cllck?5SiuP<} zGwxjjgZ&N$yMhVxH{lpY;VmexGy$&;31;ja6ATtsc zkx2+)6(V#q8=j-3q4LOCfYy@toEfwzUj`LBbgAm*+h Vv^OcPsME_I@aJc2$F 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 Ny6YK=x%LO%{{TP(-J$>h diff --git a/pkg/smartcontract/context/context_test.go b/pkg/smartcontract/context/context_test.go index efa7e82ac..ecd26e3e1 100644 --- a/pkg/smartcontract/context/context_test.go +++ b/pkg/smartcontract/context/context_test.go @@ -166,15 +166,6 @@ func newParam(typ smartcontract.ParamType, name string) wallet.ContractParam { func getContractTx() *transaction.Transaction { tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) - tx.AddInput(&transaction.Input{ - PrevHash: util.Uint256{1, 2, 3, 4}, - PrevIndex: 5, - }) - tx.AddOutput(&transaction.Output{ - AssetID: util.Uint256{7, 8, 9}, - Amount: 10, - ScriptHash: util.Uint160{11, 12}, - }) tx.Attributes = make([]transaction.Attribute, 0) tx.Scripts = make([]transaction.Witness, 0) tx.Hash() From bf6435eeaa729d61572aebe0a4220428567712a6 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 18:23:48 +0300 Subject: [PATCH 38/42] storage: drop STValidator prefix, it's not used --- pkg/core/storage/store.go | 1 - pkg/core/storage/store_test.go | 2 -- 2 files changed, 3 deletions(-) diff --git a/pkg/core/storage/store.go b/pkg/core/storage/store.go index 6aab1c9c2..6400c2a87 100644 --- a/pkg/core/storage/store.go +++ b/pkg/core/storage/store.go @@ -10,7 +10,6 @@ const ( DataBlock KeyPrefix = 0x01 DataTransaction KeyPrefix = 0x02 STAccount KeyPrefix = 0x40 - STValidator KeyPrefix = 0x48 STAsset KeyPrefix = 0x4c STNotification KeyPrefix = 0x4d STContract KeyPrefix = 0x50 diff --git a/pkg/core/storage/store_test.go b/pkg/core/storage/store_test.go index 7b90b4d67..b2a9a9bcd 100644 --- a/pkg/core/storage/store_test.go +++ b/pkg/core/storage/store_test.go @@ -11,7 +11,6 @@ var ( DataBlock, DataTransaction, STAccount, - STValidator, STAsset, STContract, STStorage, @@ -25,7 +24,6 @@ var ( 0x01, 0x02, 0x40, - 0x48, 0x4c, 0x50, 0x70, From a986e2a0641d37ac35f6a0261501c13fa702d22d Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 18:42:58 +0300 Subject: [PATCH 39/42] *: drop support for old on-chain assets You no longer can transfer them, so creating/renewing/storing doesn't make much sense. --- pkg/compiler/syscall.go | 13 -- pkg/core/blockchain.go | 11 -- pkg/core/blockchainer/blockchainer.go | 1 - pkg/core/dao/dao.go | 26 --- pkg/core/dao/dao_test.go | 12 -- pkg/core/gas_price.go | 9 -- pkg/core/gas_price_test.go | 15 -- pkg/core/interop_neo.go | 225 -------------------------- pkg/core/interop_neo_test.go | 116 +------------ pkg/core/interops.go | 22 --- pkg/core/interops_test.go | 9 -- pkg/core/state/asset.go | 78 --------- pkg/core/state/asset_test.go | 41 ----- pkg/core/storage/store.go | 1 - pkg/core/storage/store_test.go | 2 - pkg/core/transaction/asset_type.go | 16 -- pkg/core/transaction/result.go | 9 -- pkg/interop/asset/asset.go | 97 ----------- pkg/interop/blockchain/blockchain.go | 9 -- pkg/network/helper_test.go | 3 - 20 files changed, 1 insertion(+), 714 deletions(-) delete mode 100644 pkg/core/state/asset.go delete mode 100644 pkg/core/state/asset_test.go delete mode 100644 pkg/core/transaction/asset_type.go delete mode 100644 pkg/core/transaction/result.go delete mode 100644 pkg/interop/asset/asset.go diff --git a/pkg/compiler/syscall.go b/pkg/compiler/syscall.go index 8d47d5a5e..ef1502cb8 100644 --- a/pkg/compiler/syscall.go +++ b/pkg/compiler/syscall.go @@ -40,7 +40,6 @@ var syscalls = map[string]map[string]string{ }, "blockchain": { "GetAccount": "Neo.Blockchain.GetAccount", - "GetAsset": "Neo.Blockchain.GetAsset", "GetBlock": "Neo.Blockchain.GetBlock", "GetContract": "Neo.Blockchain.GetContract", "GetHeader": "Neo.Blockchain.GetHeader", @@ -69,18 +68,6 @@ var syscalls = map[string]map[string]string{ "GetHash": "Neo.Transaction.GetHash", "GetWitnesses": "Neo.Transaction.GetWitnesses", }, - "asset": { - "Create": "Neo.Asset.Create", - "GetAdmin": "Neo.Asset.GetAdmin", - "GetAmount": "Neo.Asset.GetAmount", - "GetAssetID": "Neo.Asset.GetAssetID", - "GetAssetType": "Neo.Asset.GetAssetType", - "GetAvailable": "Neo.Asset.GetAvailable", - "GetIssuer": "Neo.Asset.GetIssuer", - "GetOwner": "Neo.Asset.GetOwner", - "GetPrecision": "Neo.Asset.GetPrecision", - "Renew": "Neo.Asset.Renew", - }, "contract": { "GetScript": "Neo.Contract.GetScript", "IsPayable": "Neo.Contract.IsPayable", diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index aac4134be..8eb65985d 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -938,17 +938,6 @@ func (bc *Blockchain) HeaderHeight() uint32 { return uint32(bc.headerListLen() - 1) } -// GetAssetState returns asset state from its assetID. -func (bc *Blockchain) GetAssetState(assetID util.Uint256) *state.Asset { - asset, err := bc.dao.GetAssetState(assetID) - if asset == nil && err != storage.ErrKeyNotFound { - bc.log.Warn("failed to get asset state", - zap.Stringer("asset", assetID), - zap.Error(err)) - } - return asset -} - // GetContractState returns contract by its script hash. func (bc *Blockchain) GetContractState(hash util.Uint160) *state.Contract { contract, err := bc.dao.GetContractState(hash) diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index ed04267f4..7d93f307b 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -32,7 +32,6 @@ type Blockchainer interface { CurrentBlockHash() util.Uint256 HasBlock(util.Uint256) bool HasTransaction(util.Uint256) bool - GetAssetState(util.Uint256) *state.Asset GetAccountState(util.Uint160) *state.Account GetAppExecResult(util.Uint256) (*state.AppExecResult, error) GetNEP5TransferLog(util.Uint160) *state.NEP5TransferLog diff --git a/pkg/core/dao/dao.go b/pkg/core/dao/dao.go index 49886f59f..59e6261f8 100644 --- a/pkg/core/dao/dao.go +++ b/pkg/core/dao/dao.go @@ -23,7 +23,6 @@ type DAO interface { GetAccountStateOrNew(hash util.Uint160) (*state.Account, error) GetAndDecode(entity io.Serializable, key []byte) error GetAppExecResult(hash util.Uint256) (*state.AppExecResult, error) - GetAssetState(assetID util.Uint256) (*state.Asset, error) GetBatch() *storage.MemBatch GetBlock(hash util.Uint256) (*block.Block, error) GetContractState(hash util.Uint160) (*state.Contract, error) @@ -42,7 +41,6 @@ type DAO interface { Persist() (int, error) PutAccountState(as *state.Account) error PutAppExecResult(aer *state.AppExecResult) error - PutAssetState(as *state.Asset) error PutContractState(cs *state.Contract) error PutCurrentHeader(hashAndIndex []byte) error PutNEP5Balances(acc util.Uint160, bs *state.NEP5Balances) error @@ -141,30 +139,6 @@ func (dao *Simple) putAccountState(as *state.Account, buf *io.BufBinWriter) erro // -- end accounts. -// -- start assets. - -// GetAssetState returns given asset state as recorded in the given store. -func (dao *Simple) GetAssetState(assetID util.Uint256) (*state.Asset, error) { - asset := &state.Asset{} - key := storage.AppendPrefix(storage.STAsset, assetID.BytesBE()) - err := dao.GetAndDecode(asset, key) - if err != nil { - return nil, err - } - if asset.ID != assetID { - return nil, fmt.Errorf("found asset id is not equal to expected") - } - return asset, nil -} - -// PutAssetState puts given asset state into the given store. -func (dao *Simple) PutAssetState(as *state.Asset) error { - key := storage.AppendPrefix(storage.STAsset, as.ID.BytesBE()) - return dao.Put(as, key) -} - -// -- end assets. - // -- start contracts. // GetContractState returns contract state as recorded in the given diff --git a/pkg/core/dao/dao_test.go b/pkg/core/dao/dao_test.go index 13b8bef89..640620a11 100644 --- a/pkg/core/dao/dao_test.go +++ b/pkg/core/dao/dao_test.go @@ -7,7 +7,6 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/core/storage" "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/internal/random" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" @@ -59,17 +58,6 @@ func TestPutAndGetAccountStateOrNew(t *testing.T) { require.Equal(t, accountState.ScriptHash, gotAccount.ScriptHash) } -func TestPutAndGetAssetState(t *testing.T) { - dao := NewSimple(storage.NewMemoryStore()) - id := random.Uint256() - assetState := &state.Asset{ID: id, Owner: keys.PublicKey{}} - err := dao.PutAssetState(assetState) - require.NoError(t, err) - gotAssetState, err := dao.GetAssetState(id) - require.NoError(t, err) - require.Equal(t, assetState, gotAssetState) -} - func TestPutAndGetContractState(t *testing.T) { dao := NewSimple(storage.NewMemoryStore()) contractState := &state.Contract{Script: []byte{}, ParamList: []smartcontract.ParamType{}} diff --git a/pkg/core/gas_price.go b/pkg/core/gas_price.go index 7d248d5ec..56094bc0b 100644 --- a/pkg/core/gas_price.go +++ b/pkg/core/gas_price.go @@ -41,10 +41,6 @@ func getSyscallPrice(v *vm.VM, id uint32) util.Fixed8 { } const ( - neoAssetCreate = 0x1fc6c583 // Neo.Asset.Create - antSharesAssetCreate = 0x99025068 // AntShares.Asset.Create - neoAssetRenew = 0x71908478 // Neo.Asset.Renew - antSharesAssetRenew = 0xaf22447b // AntShares.Asset.Renew neoContractCreate = 0x6ea56cf6 // Neo.Contract.Create neoContractMigrate = 0x90621b47 // Neo.Contract.Migrate antSharesContractCreate = 0x2a28d29b // AntShares.Contract.Create @@ -58,11 +54,6 @@ func getSyscallPrice(v *vm.VM, id uint32) util.Fixed8 { estack := v.Estack() switch id { - case neoAssetCreate, antSharesAssetCreate: - return util.Fixed8FromInt64(5000) - case neoAssetRenew, antSharesAssetRenew: - arg := estack.Peek(1).BigInt().Int64() - return util.Fixed8FromInt64(arg * 5000) case neoContractCreate, neoContractMigrate, antSharesContractCreate, antSharesContractMigrate: return smartcontract.GetDeploymentPrice(smartcontract.PropertyState(estack.Peek(3).BigInt().Int64())) case systemStoragePut, systemStoragePutEx, neoStoragePut, antSharesStoragePut: diff --git a/pkg/core/gas_price_test.go b/pkg/core/gas_price_test.go index 661120696..87faae008 100644 --- a/pkg/core/gas_price_test.go +++ b/pkg/core/gas_price_test.go @@ -23,21 +23,6 @@ func TestGetPrice(t *testing.T) { v := SpawnVM(systemInterop) v.SetPriceGetter(getPrice) - t.Run("Neo.Asset.Create", func(t *testing.T) { - // Neo.Asset.Create: 83c5c61f - v.Load([]byte{byte(opcode.SYSCALL), 0x83, 0xc5, 0xc6, 0x1f}) - checkGas(t, util.Fixed8FromInt64(5000), v) - }) - - t.Run("Neo.Asset.Renew", func(t *testing.T) { - // Neo.Asset.Renew: 78849071 (requires push 09 push 09 before) - v.Load([]byte{byte(opcode.PUSH9), byte(opcode.PUSH9), byte(opcode.SYSCALL), 0x78, 0x84, 0x90, 0x71}) - require.NoError(t, v.StepInto()) // push 9 - require.NoError(t, v.StepInto()) // push 9 - - checkGas(t, util.Fixed8FromInt64(9*5000), v) - }) - t.Run("Neo.Contract.Create (no props)", func(t *testing.T) { // Neo.Contract.Create: f66ca56e (requires push properties on fourth position) v.Load([]byte{byte(opcode.PUSH0), byte(opcode.PUSH0), byte(opcode.PUSH0), byte(opcode.PUSH0), diff --git a/pkg/core/interop_neo.go b/pkg/core/interop_neo.go index 8ffc11a85..5997a8764 100644 --- a/pkg/core/interop_neo.go +++ b/pkg/core/interop_neo.go @@ -4,19 +4,15 @@ import ( "bytes" "errors" "fmt" - "math" "sort" "github.com/nspcc-dev/neo-go/pkg/core/interop" - "github.com/nspcc-dev/neo-go/pkg/core/interop/runtime" "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" - gherr "github.com/pkg/errors" ) const ( @@ -28,15 +24,6 @@ const ( MaxContractParametersNum = 252 // MaxContractStringLen is the maximum length for contract metadata strings. MaxContractStringLen = 252 - // MaxAssetNameLen is the maximum length of asset name. - MaxAssetNameLen = 1024 - // MaxAssetPrecision is the maximum precision of asset. - MaxAssetPrecision = 8 - // BlocksPerYear is a multiplier for asset renewal. - BlocksPerYear = 2000000 - // DefaultAssetLifetime is the default lifetime of an asset (which differs - // from assets created by register tx). - DefaultAssetLifetime = 1 + BlocksPerYear ) // headerGetVersion returns version from the header. @@ -156,21 +143,6 @@ func bcGetAccount(ic *interop.Context, v *vm.VM) error { return nil } -// bcGetAsset returns an asset. -func bcGetAsset(ic *interop.Context, v *vm.VM) error { - asbytes := v.Estack().Pop().Bytes() - ashash, err := util.Uint256DecodeBytesBE(asbytes) - if err != nil { - return err - } - as, err := ic.DAO.GetAssetState(ashash) - if err != nil { - return errors.New("asset not found") - } - v.Estack().PushVal(vm.NewInteropItem(as)) - return nil -} - // accountGetBalance returns balance for a given account. func accountGetBalance(ic *interop.Context, v *vm.VM) error { accInterface := v.Estack().Pop().Value() @@ -374,203 +346,6 @@ func contractMigrate(ic *interop.Context, v *vm.VM) error { return contractDestroy(ic, v) } -// assetCreate creates an asset. -func assetCreate(ic *interop.Context, v *vm.VM) error { - if ic.Trigger != trigger.Application { - return errors.New("can't create asset when not triggered by an application") - } - atype := transaction.AssetType(v.Estack().Pop().BigInt().Int64()) - switch atype { - case transaction.Currency, transaction.Share, transaction.Invoice, transaction.Token: - // ok - default: - return fmt.Errorf("wrong asset type: %x", atype) - } - name := string(v.Estack().Pop().Bytes()) - if len(name) > MaxAssetNameLen { - return errors.New("too big name") - } - amount := util.Fixed8(v.Estack().Pop().BigInt().Int64()) - if amount == util.Fixed8(0) { - return errors.New("asset amount can't be zero") - } - if amount < -util.Satoshi() { - return errors.New("asset amount can't be negative (except special -Satoshi value") - } - if atype == transaction.Invoice && amount != -util.Satoshi() { - return errors.New("invoice assets can only have -Satoshi amount") - } - precision := byte(v.Estack().Pop().BigInt().Int64()) - if precision > MaxAssetPrecision { - return fmt.Errorf("can't have asset precision of more than %d", MaxAssetPrecision) - } - if atype == transaction.Share && precision != 0 { - return errors.New("share assets can only have zero precision") - } - if amount != -util.Satoshi() && (int64(amount)%int64(math.Pow10(int(MaxAssetPrecision-precision))) != 0) { - return errors.New("given asset amount has fractional component") - } - owner, err := keys.NewPublicKeyFromBytes(v.Estack().Pop().Bytes()) - if err != nil { - return gherr.Wrap(err, "failed to get owner key") - } - if owner.IsInfinity() { - return errors.New("can't have infinity as an owner key") - } - witnessOk, err := runtime.CheckKeyedWitness(ic, v, owner) - if err != nil { - return err - } - if !witnessOk { - return errors.New("witness check didn't succeed") - } - admin, err := util.Uint160DecodeBytesBE(v.Estack().Pop().Bytes()) - if err != nil { - return gherr.Wrap(err, "failed to get admin") - } - issuer, err := util.Uint160DecodeBytesBE(v.Estack().Pop().Bytes()) - if err != nil { - return gherr.Wrap(err, "failed to get issuer") - } - asset := &state.Asset{ - ID: ic.Tx.Hash(), - AssetType: atype, - Name: name, - Amount: amount, - Precision: precision, - Owner: *owner, - Admin: admin, - Issuer: issuer, - Expiration: ic.Chain.BlockHeight() + DefaultAssetLifetime, - } - err = ic.DAO.PutAssetState(asset) - if err != nil { - return gherr.Wrap(err, "failed to Store asset") - } - v.Estack().PushVal(vm.NewInteropItem(asset)) - return nil -} - -// assetGetAdmin returns asset admin. -func assetGetAdmin(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(as.Admin.BytesBE()) - return nil -} - -// assetGetAmount returns the overall amount of asset available. -func assetGetAmount(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(int64(as.Amount)) - return nil -} - -// assetGetAssetId returns the id of an asset. -func assetGetAssetID(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(as.ID.BytesBE()) - return nil -} - -// assetGetAssetType returns type of an asset. -func assetGetAssetType(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(int(as.AssetType)) - return nil -} - -// assetGetAvailable returns available (not yet issued) amount of asset. -func assetGetAvailable(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(int(as.Available)) - return nil -} - -// assetGetIssuer returns issuer of an asset. -func assetGetIssuer(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(as.Issuer.BytesBE()) - return nil -} - -// assetGetOwner returns owner of an asset. -func assetGetOwner(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(as.Owner.Bytes()) - return nil -} - -// assetGetPrecision returns precision used to measure this asset. -func assetGetPrecision(ic *interop.Context, v *vm.VM) error { - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - v.Estack().PushVal(int(as.Precision)) - return nil -} - -// assetRenew updates asset expiration date. -func assetRenew(ic *interop.Context, v *vm.VM) error { - if ic.Trigger != trigger.Application { - return errors.New("can't create asset when not triggered by an application") - } - asInterface := v.Estack().Pop().Value() - as, ok := asInterface.(*state.Asset) - if !ok { - return fmt.Errorf("%T is not an asset state", as) - } - years := byte(v.Estack().Pop().BigInt().Int64()) - // Not sure why C# code regets an asset from the Store, but we also do it. - asset, err := ic.DAO.GetAssetState(as.ID) - if err != nil { - return errors.New("can't renew non-existent asset") - } - if asset.Expiration < ic.Chain.BlockHeight()+1 { - asset.Expiration = ic.Chain.BlockHeight() + 1 - } - expiration := uint64(asset.Expiration) + uint64(years)*BlocksPerYear - if expiration > math.MaxUint32 { - expiration = math.MaxUint32 - } - asset.Expiration = uint32(expiration) - err = ic.DAO.PutAssetState(asset) - if err != nil { - return gherr.Wrap(err, "failed to Store asset") - } - v.Estack().PushVal(expiration) - return nil -} - // runtimeSerialize serializes top stack item into a ByteArray. func runtimeSerialize(_ *interop.Context, v *vm.VM) error { return vm.RuntimeSerialize(v) diff --git a/pkg/core/interop_neo_test.go b/pkg/core/interop_neo_test.go index b15339b53..90e1ce2ae 100644 --- a/pkg/core/interop_neo_test.go +++ b/pkg/core/interop_neo_test.go @@ -27,14 +27,11 @@ import ( /* Missing tests: * TestTxGetWitnesses * TestBcGetAccount - * TestBcGetAsset * TestAccountGetBalance * TestAccountIsStandard * TestCreateContractStateFromVM * TestContractCreate * TestContractMigrate - * TestAssetCreate - * TestAssetRenew * TestRuntimeSerialize * TestRuntimeDeserialize */ @@ -337,95 +334,7 @@ func TestContractIsPayable(t *testing.T) { require.Equal(t, contractState.IsPayable(), isPayable) } -func TestAssetGetAdmin(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetAdmin(context, v) - require.NoError(t, err) - admin := v.Estack().Pop().Value() - require.Equal(t, assetState.Admin.BytesBE(), admin) -} - -func TestAssetGetAmount(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetAmount(context, v) - require.NoError(t, err) - amount := v.Estack().Pop().Value() - require.Equal(t, big.NewInt(int64(assetState.Amount)), amount) -} - -func TestAssetGetAssetID(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetAssetID(context, v) - require.NoError(t, err) - assetID := v.Estack().Pop().Value() - require.Equal(t, assetState.ID.BytesBE(), assetID) -} - -func TestAssetGetAssetType(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetAssetType(context, v) - require.NoError(t, err) - assetType := v.Estack().Pop().Value() - require.Equal(t, big.NewInt(int64(assetState.AssetType)), assetType) -} - -func TestAssetGetAvailable(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetAvailable(context, v) - require.NoError(t, err) - available := v.Estack().Pop().Value() - require.Equal(t, big.NewInt(int64(assetState.Available)), available) -} - -func TestAssetGetIssuer(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetIssuer(context, v) - require.NoError(t, err) - issuer := v.Estack().Pop().Value() - require.Equal(t, assetState.Issuer.BytesBE(), issuer) -} - -func TestAssetGetOwner(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetOwner(context, v) - require.NoError(t, err) - owner := v.Estack().Pop().Value() - require.Equal(t, assetState.Owner.Bytes(), owner) -} - -func TestAssetGetPrecision(t *testing.T) { - v, assetState, context, chain := createVMAndAssetState(t) - defer chain.Close() - v.Estack().PushVal(vm.NewInteropItem(assetState)) - - err := assetGetPrecision(context, v) - require.NoError(t, err) - precision := v.Estack().Pop().Value() - require.Equal(t, big.NewInt(int64(assetState.Precision)), precision) -} - -// Helper functions to create VM, InteropContext, TX, Account, Contract, Asset. +// Helper functions to create VM, InteropContext, TX, Account, Contract. func createVMAndPushBlock(t *testing.T) (*vm.VM, *block.Block, *interop.Context, *Blockchain) { v := vm.New() @@ -442,29 +351,6 @@ func createVMAndPushTX(t *testing.T) (*vm.VM, *transaction.Transaction, *interop return v, tx, context, chain } -func createVMAndAssetState(t *testing.T) (*vm.VM, *state.Asset, *interop.Context, *Blockchain) { - v := vm.New() - assetState := &state.Asset{ - ID: util.Uint256{}, - AssetType: transaction.GoverningToken, - Name: "TestAsset", - Amount: 1, - Available: 2, - Precision: 1, - FeeMode: 1, - FeeAddress: random.Uint160(), - Owner: keys.PublicKey{X: big.NewInt(1), Y: big.NewInt(1)}, - Admin: random.Uint160(), - Issuer: random.Uint160(), - Expiration: 10, - IsFrozen: false, - } - - chain := newTestChain(t) - context := chain.newInteropContext(trigger.Application, dao.NewSimple(storage.NewMemoryStore()), nil, nil) - return v, assetState, context, chain -} - func createVMAndContractState(t *testing.T) (*vm.VM, *state.Contract, *interop.Context, *Blockchain) { v := vm.New() contractState := &state.Contract{ diff --git a/pkg/core/interops.go b/pkg/core/interops.go index a1ce73e46..a781bcdb5 100644 --- a/pkg/core/interops.go +++ b/pkg/core/interops.go @@ -105,23 +105,12 @@ var neoInterops = []interop.Function{ {Name: "Neo.Account.GetBalance", Func: accountGetBalance, Price: 1}, {Name: "Neo.Account.GetScriptHash", Func: accountGetScriptHash, Price: 1}, {Name: "Neo.Account.IsStandard", Func: accountIsStandard, Price: 100}, - {Name: "Neo.Asset.Create", Func: assetCreate, Price: 0}, - {Name: "Neo.Asset.GetAdmin", Func: assetGetAdmin, Price: 1}, - {Name: "Neo.Asset.GetAmount", Func: assetGetAmount, Price: 1}, - {Name: "Neo.Asset.GetAssetId", Func: assetGetAssetID, Price: 1}, - {Name: "Neo.Asset.GetAssetType", Func: assetGetAssetType, Price: 1}, - {Name: "Neo.Asset.GetAvailable", Func: assetGetAvailable, Price: 1}, - {Name: "Neo.Asset.GetIssuer", Func: assetGetIssuer, Price: 1}, - {Name: "Neo.Asset.GetOwner", Func: assetGetOwner, Price: 1}, - {Name: "Neo.Asset.GetPrecision", Func: assetGetPrecision, Price: 1}, - {Name: "Neo.Asset.Renew", Func: assetRenew, Price: 0}, {Name: "Neo.Attribute.GetData", Func: attrGetData, Price: 1}, {Name: "Neo.Attribute.GetUsage", Func: attrGetUsage, Price: 1}, {Name: "Neo.Block.GetTransaction", Func: blockGetTransaction, Price: 1}, {Name: "Neo.Block.GetTransactionCount", Func: blockGetTransactionCount, Price: 1}, {Name: "Neo.Block.GetTransactions", Func: blockGetTransactions, Price: 1}, {Name: "Neo.Blockchain.GetAccount", Func: bcGetAccount, Price: 100}, - {Name: "Neo.Blockchain.GetAsset", Func: bcGetAsset, Price: 100}, {Name: "Neo.Blockchain.GetBlock", Func: bcGetBlock, Price: 200}, {Name: "Neo.Blockchain.GetContract", Func: bcGetContract, Price: 100}, {Name: "Neo.Blockchain.GetHeader", Func: bcGetHeader, Price: 100}, @@ -180,23 +169,12 @@ var neoInterops = []interop.Function{ // Old compatibility APIs. {Name: "AntShares.Account.GetBalance", Func: accountGetBalance, Price: 1}, {Name: "AntShares.Account.GetScriptHash", Func: accountGetScriptHash, Price: 1}, - {Name: "AntShares.Asset.Create", Func: assetCreate, Price: 0}, - {Name: "AntShares.Asset.GetAdmin", Func: assetGetAdmin, Price: 1}, - {Name: "AntShares.Asset.GetAmount", Func: assetGetAmount, Price: 1}, - {Name: "AntShares.Asset.GetAssetId", Func: assetGetAssetID, Price: 1}, - {Name: "AntShares.Asset.GetAssetType", Func: assetGetAssetType, Price: 1}, - {Name: "AntShares.Asset.GetAvailable", Func: assetGetAvailable, Price: 1}, - {Name: "AntShares.Asset.GetIssuer", Func: assetGetIssuer, Price: 1}, - {Name: "AntShares.Asset.GetOwner", Func: assetGetOwner, Price: 1}, - {Name: "AntShares.Asset.GetPrecision", Func: assetGetPrecision, Price: 1}, - {Name: "AntShares.Asset.Renew", Func: assetRenew, Price: 0}, {Name: "AntShares.Attribute.GetData", Func: attrGetData, Price: 1}, {Name: "AntShares.Attribute.GetUsage", Func: attrGetUsage, Price: 1}, {Name: "AntShares.Block.GetTransaction", Func: blockGetTransaction, Price: 1}, {Name: "AntShares.Block.GetTransactionCount", Func: blockGetTransactionCount, Price: 1}, {Name: "AntShares.Block.GetTransactions", Func: blockGetTransactions, Price: 1}, {Name: "AntShares.Blockchain.GetAccount", Func: bcGetAccount, Price: 100}, - {Name: "AntShares.Blockchain.GetAsset", Func: bcGetAsset, Price: 100}, {Name: "AntShares.Blockchain.GetBlock", Func: bcGetBlock, Price: 200}, {Name: "AntShares.Blockchain.GetContract", Func: bcGetContract, Price: 100}, {Name: "AntShares.Blockchain.GetHeader", Func: bcGetHeader, Price: 100}, diff --git a/pkg/core/interops_test.go b/pkg/core/interops_test.go index 04babc946..ee78b1aa6 100644 --- a/pkg/core/interops_test.go +++ b/pkg/core/interops_test.go @@ -34,15 +34,6 @@ func TestUnexpectedNonInterops(t *testing.T) { funcs := []func(*interop.Context, *vm.VM) error{ accountGetBalance, accountGetScriptHash, - assetGetAdmin, - assetGetAmount, - assetGetAssetID, - assetGetAssetType, - assetGetAvailable, - assetGetIssuer, - assetGetOwner, - assetGetPrecision, - assetRenew, attrGetData, attrGetUsage, blockGetTransaction, diff --git a/pkg/core/state/asset.go b/pkg/core/state/asset.go deleted file mode 100644 index d59deba68..000000000 --- a/pkg/core/state/asset.go +++ /dev/null @@ -1,78 +0,0 @@ -package state - -import ( - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/util" -) - -const feeMode = 0x0 - -// Asset represents the state of an NEO registered Asset. -type Asset struct { - ID util.Uint256 - AssetType transaction.AssetType - Name string - Amount util.Fixed8 - Available util.Fixed8 - Precision uint8 - FeeMode uint8 - FeeAddress util.Uint160 - Owner keys.PublicKey - Admin util.Uint160 - Issuer util.Uint160 - Expiration uint32 - IsFrozen bool -} - -// DecodeBinary implements Serializable interface. -func (a *Asset) DecodeBinary(br *io.BinReader) { - br.ReadBytes(a.ID[:]) - a.AssetType = transaction.AssetType(br.ReadB()) - - a.Name = br.ReadString() - - a.Amount.DecodeBinary(br) - a.Available.DecodeBinary(br) - a.Precision = uint8(br.ReadB()) - a.FeeMode = uint8(br.ReadB()) - a.FeeAddress.DecodeBinary(br) - - a.Owner.DecodeBinary(br) - a.Admin.DecodeBinary(br) - a.Issuer.DecodeBinary(br) - a.Expiration = br.ReadU32LE() - a.IsFrozen = br.ReadBool() -} - -// EncodeBinary implements Serializable interface. -func (a *Asset) EncodeBinary(bw *io.BinWriter) { - bw.WriteBytes(a.ID[:]) - bw.WriteB(byte(a.AssetType)) - bw.WriteString(a.Name) - a.Amount.EncodeBinary(bw) - a.Available.EncodeBinary(bw) - bw.WriteB(byte(a.Precision)) - bw.WriteB(byte(a.FeeMode)) - a.FeeAddress.EncodeBinary(bw) - - a.Owner.EncodeBinary(bw) - - a.Admin.EncodeBinary(bw) - a.Issuer.EncodeBinary(bw) - bw.WriteU32LE(a.Expiration) - bw.WriteBool(a.IsFrozen) -} - -// GetName returns the asset name based on its type. -func (a *Asset) GetName() string { - - if a.AssetType == transaction.GoverningToken { - return "NEO" - } else if a.AssetType == transaction.UtilityToken { - return "NEOGas" - } - - return a.Name -} diff --git a/pkg/core/state/asset_test.go b/pkg/core/state/asset_test.go deleted file mode 100644 index e3cbf2950..000000000 --- a/pkg/core/state/asset_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package state - -import ( - "testing" - - "github.com/nspcc-dev/neo-go/pkg/core/transaction" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/internal/random" - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/nspcc-dev/neo-go/pkg/util" - "github.com/stretchr/testify/assert" -) - -func TestEncodeDecodeAssetState(t *testing.T) { - asset := &Asset{ - ID: random.Uint256(), - AssetType: transaction.Token, - Name: "super cool token", - Amount: util.Fixed8(1000000), - Available: util.Fixed8(100), - Precision: 0, - FeeMode: feeMode, - Owner: keys.PublicKey{}, - Admin: random.Uint160(), - Issuer: random.Uint160(), - Expiration: 10, - IsFrozen: false, - } - - testserdes.EncodeDecodeBinary(t, asset, new(Asset)) -} - -func TestAssetState_GetName_NEO(t *testing.T) { - asset := &Asset{AssetType: transaction.GoverningToken} - assert.Equal(t, "NEO", asset.GetName()) -} - -func TestAssetState_GetName_NEOGas(t *testing.T) { - asset := &Asset{AssetType: transaction.UtilityToken} - assert.Equal(t, "NEOGas", asset.GetName()) -} diff --git a/pkg/core/storage/store.go b/pkg/core/storage/store.go index 6400c2a87..960f9ba89 100644 --- a/pkg/core/storage/store.go +++ b/pkg/core/storage/store.go @@ -10,7 +10,6 @@ const ( DataBlock KeyPrefix = 0x01 DataTransaction KeyPrefix = 0x02 STAccount KeyPrefix = 0x40 - STAsset KeyPrefix = 0x4c STNotification KeyPrefix = 0x4d STContract KeyPrefix = 0x50 STStorage KeyPrefix = 0x70 diff --git a/pkg/core/storage/store_test.go b/pkg/core/storage/store_test.go index b2a9a9bcd..9b1e579e0 100644 --- a/pkg/core/storage/store_test.go +++ b/pkg/core/storage/store_test.go @@ -11,7 +11,6 @@ var ( DataBlock, DataTransaction, STAccount, - STAsset, STContract, STStorage, IXHeaderHashList, @@ -24,7 +23,6 @@ var ( 0x01, 0x02, 0x40, - 0x4c, 0x50, 0x70, 0x80, diff --git a/pkg/core/transaction/asset_type.go b/pkg/core/transaction/asset_type.go deleted file mode 100644 index 9d54eb28f..000000000 --- a/pkg/core/transaction/asset_type.go +++ /dev/null @@ -1,16 +0,0 @@ -package transaction - -// AssetType represents a NEO asset type. -type AssetType uint8 - -// Valid asset types. -const ( - CreditFlag AssetType = 0x40 - DutyFlag AssetType = 0x80 - GoverningToken AssetType = 0x00 - UtilityToken AssetType = 0x01 - Currency AssetType = 0x08 - Share AssetType = DutyFlag | 0x10 - Invoice AssetType = DutyFlag | 0x18 - Token AssetType = CreditFlag | 0x20 -) diff --git a/pkg/core/transaction/result.go b/pkg/core/transaction/result.go deleted file mode 100644 index b5c639bca..000000000 --- a/pkg/core/transaction/result.go +++ /dev/null @@ -1,9 +0,0 @@ -package transaction - -import "github.com/nspcc-dev/neo-go/pkg/util" - -// Result represents the Result of a transaction. -type Result struct { - AssetID util.Uint256 - Amount util.Fixed8 -} diff --git a/pkg/interop/asset/asset.go b/pkg/interop/asset/asset.go deleted file mode 100644 index 01547f64c..000000000 --- a/pkg/interop/asset/asset.go +++ /dev/null @@ -1,97 +0,0 @@ -/* -Package asset provides functions to work with regular UTXO assets (like NEO or GAS). -Mostly these are getters for Asset structure, but you can also create new assets -and renew them (although it's recommended to use NEP-5 standard for new tokens). -*/ -package asset - -// Asset represents NEO asset type that is used in interop functions, it's -// an opaque data structure that you can get data from only using functions from -// this package. It's similar in function to the Asset class in the Neo .net -// framework. To be able to use it you either need to get an existing Asset via -// blockchain.GetAsset function or create a new one via Create. -type Asset struct{} - -// GetAssetID returns ID (256-bit ID of Register transaction for this asset in BE -// representation) of the given asset. It uses `Neo.Asset.GetAssetId` syscall -// internally. -func GetAssetID(a Asset) []byte { - return nil -} - -// GetAssetType returns type of the given asset as a byte value. The value -// returned can be interpreted as a bit field with the following meaning: -// CreditFlag = 0x40 -// DutyFlag = 0x80 -// SystemShare = 0x00 -// SystemCoin = 0x01 -// Currency = 0x08 -// Share = DutyFlag | 0x10 -// Invoice = DutyFlag | 0x18 -// Token = CreditFlag | 0x20 -// It uses `Neo.Asset.GetAssetType` syscall internally. -func GetAssetType(a Asset) byte { - return 0x00 -} - -// GetAmount returns the total amount of the given asset as an integer -// multiplied by 10⁸. This value is the maximum possible circulating quantity of -// Asset. The function uses `Neo.Asset.GetAmount` syscall internally. -func GetAmount(a Asset) int { - return 0 -} - -// GetAvailable returns the amount of Asset currently available on the -// blockchain. It uses the same encoding as the result of GetAmount and its -// value can never exceed the value returned by GetAmount. This function uses -// `Neo.Asset.GetAvailable` syscall internally. -func GetAvailable(a Asset) int { - return 0 -} - -// GetPrecision returns precision of the given Asset. It uses -// `Neo.Asset.GetPrecision` syscall internally. -func GetPrecision(a Asset) byte { - return 0x00 -} - -// GetOwner returns the owner of the given Asset. It's represented as a -// serialized (in compressed form) public key (33 bytes long). This function -// uses `Neo.Asset.GetOwner` syscall internally. -func GetOwner(a Asset) []byte { - return nil -} - -// GetAdmin returns the admin of the given Asset represented as a 160 bit hash -// in BE form (contract script hash). Admin can modify attributes of this Asset. -// This function uses `Neo.Asset.GetAdmin` syscall internally. -func GetAdmin(a Asset) []byte { - return nil -} - -// GetIssuer returns the issuer of the given Asset represented as a 160 bit hash -// in BE form (contract script hash). Issuer can issue new tokens for this Asset. -// This function uses `Neo.Asset.GetIssuer` syscall internally. -func GetIssuer(a Asset) []byte { - return nil -} - -// Create registers a new asset on the blockchain (similar to old Register -// transaction). `assetType` parameter has the same set of possible values as -// GetAssetType result, `amount` must be multiplied by 10⁸, `precision` limits -// the smallest possible amount of new Asset to 10⁻ⁿ (where n is precision which -// can't exceed 8), `owner` is a public key of the owner in compressed serialized -// form (33 bytes), `admin` and `issuer` should be represented as 20-byte slices -// storing 160-bit hash in BE form. Created Asset is set to expire in one year, -// so you need to renew it in time. If successful, this function returns a new -// Asset. It uses `Neo.Asset.Create` syscall internally. -func Create(assetType byte, name string, amount int, precision byte, owner, admin, issuer []byte) Asset { - return Asset{} -} - -// Renew renews (make available for use) existing asset by the specified number -// of years. It returns the last block number when this asset will be active. -// It uses `Neo.Asset.Renew` syscall internally. -func Renew(asset Asset, years int) int { - return 0 -} diff --git a/pkg/interop/blockchain/blockchain.go b/pkg/interop/blockchain/blockchain.go index c38e4dd7d..bba276c7a 100644 --- a/pkg/interop/blockchain/blockchain.go +++ b/pkg/interop/blockchain/blockchain.go @@ -5,7 +5,6 @@ package blockchain import ( "github.com/nspcc-dev/neo-go/pkg/interop/account" - "github.com/nspcc-dev/neo-go/pkg/interop/asset" "github.com/nspcc-dev/neo-go/pkg/interop/block" "github.com/nspcc-dev/neo-go/pkg/interop/contract" "github.com/nspcc-dev/neo-go/pkg/interop/header" @@ -73,11 +72,3 @@ func GetAccount(scriptHash []byte) account.Account { func GetValidators() [][]byte { return nil } - -// GetAsset returns asset found by the given asset ID (256 bit in BE format -// represented as a slice of 32 bytes). Refer to the `asset` package for -// possible uses of returned structure. This function uses -// `Neo.Blockchain.GetAsset` syscall. -func GetAsset(assetID []byte) asset.Asset { - return asset.Asset{} -} diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index d8ffaabde..bdd85eecd 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -73,9 +73,6 @@ func (chain testChain) GetHeader(hash util.Uint256) (*block.Header, error) { panic("TODO") } -func (chain testChain) GetAssetState(util.Uint256) *state.Asset { - panic("TODO") -} func (chain testChain) GetAccountState(util.Uint160) *state.Account { panic("TODO") } From 63f4f3465922bda6ce572d7e6d77ecd4dd586e2d Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 19:01:10 +0300 Subject: [PATCH 40/42] mempool: drop TxWithFee type All the fees are in transaction, this makes no sense. --- pkg/consensus/consensus.go | 11 +++++------ pkg/core/blockchain.go | 6 +++--- pkg/core/blockchainer/blockchainer.go | 2 +- pkg/core/mempool/mem_pool.go | 19 ++++++------------- pkg/core/mempool/mem_pool_test.go | 14 ++++++-------- pkg/network/helper_test.go | 2 +- pkg/rpc/server/server.go | 2 +- pkg/rpc/server/server_test.go | 2 +- 8 files changed, 24 insertions(+), 34 deletions(-) diff --git a/pkg/consensus/consensus.go b/pkg/consensus/consensus.go index 190f3577c..e0098f70e 100644 --- a/pkg/consensus/consensus.go +++ b/pkg/consensus/consensus.go @@ -12,7 +12,6 @@ import ( "github.com/nspcc-dev/dbft/payload" coreb "github.com/nspcc-dev/neo-go/pkg/core/block" "github.com/nspcc-dev/neo-go/pkg/core/blockchainer" - "github.com/nspcc-dev/neo-go/pkg/core/mempool" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/io" @@ -394,13 +393,13 @@ func (s *service) getBlock(h util.Uint256) block.Block { func (s *service) getVerifiedTx(count int) []block.Transaction { pool := s.Config.Chain.GetMemPool() - var txx []mempool.TxWithFee + var txx []*transaction.Transaction if s.dbft.ViewNumber > 0 { - txx = make([]mempool.TxWithFee, 0, len(s.lastProposal)) + txx = make([]*transaction.Transaction, 0, len(s.lastProposal)) for i := range s.lastProposal { - if tx, fee, ok := pool.TryGetValue(s.lastProposal[i]); ok { - txx = append(txx, mempool.TxWithFee{Tx: tx, Fee: fee}) + if tx, ok := pool.TryGetValue(s.lastProposal[i]); ok { + txx = append(txx, tx) } } @@ -417,7 +416,7 @@ func (s *service) getVerifiedTx(count int) []block.Transaction { res := make([]block.Transaction, len(txx)) for i := range txx { - res[i] = txx[i].Tx + res[i] = txx[i] } return res diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 8eb65985d..1979b39d6 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -825,7 +825,7 @@ func (bc *Blockchain) headerListLen() (n int) { // GetTransaction returns a TX and its height by the given hash. func (bc *Blockchain) GetTransaction(hash util.Uint256) (*transaction.Transaction, uint32, error) { - if tx, _, ok := bc.memPool.TryGetValue(hash); ok { + if tx, ok := bc.memPool.TryGetValue(hash); ok { return tx, 0, nil // the height is not actually defined for memPool transaction. Not sure if zero is a good number in this case. } return bc.dao.GetTransaction(hash) @@ -1075,14 +1075,14 @@ func (bc *Blockchain) GetMemPool() *mempool.Pool { // ApplyPolicyToTxSet applies configured policies to given transaction set. It // expects slice to be ordered by fee and returns a subslice of it. -func (bc *Blockchain) ApplyPolicyToTxSet(txes []mempool.TxWithFee) []mempool.TxWithFee { +func (bc *Blockchain) ApplyPolicyToTxSet(txes []*transaction.Transaction) []*transaction.Transaction { if bc.config.MaxTransactionsPerBlock != 0 && len(txes) > bc.config.MaxTransactionsPerBlock { txes = txes[:bc.config.MaxTransactionsPerBlock] } maxFree := bc.config.MaxFreeTransactionsPerBlock if maxFree != 0 { lowStart := sort.Search(len(txes), func(i int) bool { - return bc.IsLowPriority(txes[i].Fee) + return bc.IsLowPriority(txes[i].NetworkFee) }) if lowStart+maxFree < len(txes) { txes = txes[:lowStart+maxFree] diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index 7d93f307b..5b84826b4 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -14,7 +14,7 @@ import ( // Blockchainer is an interface that abstract the implementation // of the blockchain. type Blockchainer interface { - ApplyPolicyToTxSet([]mempool.TxWithFee) []mempool.TxWithFee + ApplyPolicyToTxSet([]*transaction.Transaction) []*transaction.Transaction GetConfig() config.ProtocolConfiguration AddHeaders(...*block.Header) error AddBlock(*block.Block) error diff --git a/pkg/core/mempool/mem_pool.go b/pkg/core/mempool/mem_pool.go index f0ed818b4..748c8b811 100644 --- a/pkg/core/mempool/mem_pool.go +++ b/pkg/core/mempool/mem_pool.go @@ -33,12 +33,6 @@ type item struct { // items is a slice of item. type items []*item -// TxWithFee combines transaction and its precalculated network fee. -type TxWithFee struct { - Tx *transaction.Transaction - Fee util.Fixed8 -} - // utilityBalanceAndFees stores sender's balance and overall fees of // sender's transactions which are currently in mempool type utilityBalanceAndFees struct { @@ -260,26 +254,25 @@ func NewMemPool(capacity int) Pool { } // TryGetValue returns a transaction and its fee if it exists in the memory pool. -func (mp *Pool) TryGetValue(hash util.Uint256) (*transaction.Transaction, util.Fixed8, bool) { +func (mp *Pool) TryGetValue(hash util.Uint256) (*transaction.Transaction, bool) { mp.lock.RLock() defer mp.lock.RUnlock() if pItem, ok := mp.verifiedMap[hash]; ok { - return pItem.txn, pItem.txn.NetworkFee, ok + return pItem.txn, ok } - return nil, 0, false + return nil, false } // GetVerifiedTransactions returns a slice of transactions with their fees. -func (mp *Pool) GetVerifiedTransactions() []TxWithFee { +func (mp *Pool) GetVerifiedTransactions() []*transaction.Transaction { mp.lock.RLock() defer mp.lock.RUnlock() - var t = make([]TxWithFee, len(mp.verifiedTxes)) + var t = make([]*transaction.Transaction, len(mp.verifiedTxes)) for i := range mp.verifiedTxes { - t[i].Tx = mp.verifiedTxes[i].txn - t[i].Fee = mp.verifiedTxes[i].txn.NetworkFee + t[i] = mp.verifiedTxes[i].txn } return t diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index 33474540d..969652c11 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -32,16 +32,16 @@ func testMemPoolAddRemoveWithFeer(t *testing.T, fs Feer) { mp := NewMemPool(10) tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) tx.Nonce = 0 - _, _, ok := mp.TryGetValue(tx.Hash()) + _, ok := mp.TryGetValue(tx.Hash()) require.Equal(t, false, ok) require.NoError(t, mp.Add(tx, fs)) // Re-adding should fail. require.Error(t, mp.Add(tx, fs)) - tx2, _, ok := mp.TryGetValue(tx.Hash()) + tx2, ok := mp.TryGetValue(tx.Hash()) require.Equal(t, true, ok) require.Equal(t, tx, tx2) mp.Remove(tx.Hash()) - _, _, ok = mp.TryGetValue(tx.Hash()) + _, ok = mp.TryGetValue(tx.Hash()) require.Equal(t, false, ok) // Make sure nothing left in the mempool after removal. assert.Equal(t, 0, len(mp.verifiedMap)) @@ -142,9 +142,7 @@ func TestGetVerified(t *testing.T) { require.Equal(t, mempoolSize, mp.Count()) verTxes := mp.GetVerifiedTransactions() require.Equal(t, mempoolSize, len(verTxes)) - for _, txf := range verTxes { - require.Contains(t, txes, txf.Tx) - } + require.ElementsMatch(t, txes, verTxes) for _, tx := range txes { mp.Remove(tx.Hash()) } @@ -181,8 +179,8 @@ func TestRemoveStale(t *testing.T) { require.Equal(t, mempoolSize/2, mp.Count()) verTxes := mp.GetVerifiedTransactions() for _, txf := range verTxes { - require.NotContains(t, txes1, txf.Tx) - require.Contains(t, txes2, txf.Tx) + require.NotContains(t, txes1, txf) + require.Contains(t, txes2, txf) } } diff --git a/pkg/network/helper_test.go b/pkg/network/helper_test.go index bdd85eecd..fe60dac6d 100644 --- a/pkg/network/helper_test.go +++ b/pkg/network/helper_test.go @@ -25,7 +25,7 @@ type testChain struct { blockheight uint32 } -func (chain testChain) ApplyPolicyToTxSet([]mempool.TxWithFee) []mempool.TxWithFee { +func (chain testChain) ApplyPolicyToTxSet([]*transaction.Transaction) []*transaction.Transaction { panic("TODO") } func (chain testChain) GetConfig() config.ProtocolConfiguration { diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index 79fdeae1e..dbed9ab8b 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -461,7 +461,7 @@ func (s *Server) getRawMempool(_ request.Params) (interface{}, *response.Error) mp := s.chain.GetMemPool() hashList := make([]util.Uint256, 0) for _, item := range mp.GetVerifiedTransactions() { - hashList = append(hashList, item.Tx.Hash()) + hashList = append(hashList, item.Hash()) } return hashList, nil } diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index ca1d11690..69af43432 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -943,7 +943,7 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) [] // `expected` stores hashes of previously added txs expected := make([]util.Uint256, 0) for _, tx := range mp.GetVerifiedTransactions() { - expected = append(expected, tx.Tx.Hash()) + expected = append(expected, tx.Hash()) } for i := 0; i < 5; i++ { tx := transaction.New([]byte{byte(opcode.PUSH1)}, 0) From 9b19b08e068707380f8158310dc12c7fe2dd42a6 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Fri, 5 Jun 2020 19:05:08 +0300 Subject: [PATCH 41/42] docker: drop default privnet-blocks bootstraps They're no longer useful, their primary goal was to mint some GAS, but we have plenty of GAS now right in the genesis block. They also contained NEO transfer to non-multisig account, but that's easy to replicate using CLI. So keep the bootstrapping feature (just in case), but drop the default files used for it. --- .docker/1600-privnet-blocks-single.acc.gz | Bin 243629 -> 0 bytes .docker/6000-privnet-blocks.acc.gz | Bin 1697498 -> 0 bytes .docker/docker-compose.yml | 1 - Dockerfile | 2 -- 4 files changed, 3 deletions(-) delete mode 100644 .docker/1600-privnet-blocks-single.acc.gz delete mode 100644 .docker/6000-privnet-blocks.acc.gz diff --git a/.docker/1600-privnet-blocks-single.acc.gz b/.docker/1600-privnet-blocks-single.acc.gz deleted file mode 100644 index e8be800fb59bfd7c99412d920ceb65e501d2dea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243629 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

@R`1EX=@_JKaYb|Uyb@9JU#zzMMn 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 z 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%0DTL~7-?7`ELB{FX9LORi6xmD90p?yqyvx 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

x_s zb_YW&-f(ZebAY(3Fn+X_k0B>pBhM@wgNzZ38smHc=x1vQW?hsvDh~;a!AJFK6D$}% zdRs=HqA(0IL2ma`gTv}Zyss`4fk~|R!*dJzcXs*+k#28BAKXLw>r@MqYO9u{FIe$2 z-iw25n7QK7*YNxs;^96-tGGb?wW*nfd-OAGNVV zR!XMxr(9FFI^Sb#E*iAvMPQR{7{w?V5lQb#?H;D9u5K#2(rb%BCqydOrWvXAOh-!N zSq-f@^`!8$cvJvBe?60S|EG{kIDBn6Xw`hx&V>Dv_T~1IIx#pej>~_D5*pSzd&%q< zq(ElZ32K_XTmz@LKQYWTC^3o1pck4$8Er8{CIQeA`MOkkOhP*YuH$Vw#~%w`54L=F zJHx5>8a2|e1NG|8R=|fO-WVpDGKwWUrl2J%_aCwm=Sfw(*SrU7O{n@g$P{UPoM*e| zY<8!vA$}Yj0-b{eWWJ!GL%5gm-rHElk*6RJEUP zm$CP&Dk96(KJ*NydtM6wXXNbxq?giBcPMQ zo(t4ZS#{;NoAUCSZPlGCpU0I3ke5_00w|VU;jP`@wK2kfTzg-wQEs@(OzPez$3XZ} zbqt{WK%wZmU?>^d`B>4a@mYJs7%+|+iK=}>;rw|d$mq_beJW%E&4hXBB}4Z>8B)O0 zndW;&L*ODXjUyQ7-Rxh-e3YOOt$<6?#3|1r_nNxjO_jATVae@a*Gx&*SDRCVU(T7l zn_le1?>HP;=B#l8hV-rb^G!{@TPeT!s=gNZKt0D(zu3}rBwGg1 z^VK%g@fh~T#=4^(f=VuEgKsaIri}-f9mJ7{2-I$3^uQzh>g&vIE8w#mwHc1vL2r1rQu%vb^G;!pCd|1ro z;Vs!20!Ho6quLFBEgx$_tT!i*K(x3b|1A;l_Jg+Aw4G$_89W54c#J)|E^iA0))%rm zWXQZ>L0_q-^vej^x3YQbnChE4WzlViJTmmHpcC8Pe*zbXT~En`e5aZR)tTSHj$xE9 z5>^Qc&>P_pZ6MGLjwIe`=ZsmeE?t)Fz~LUt6n`lrDiN$Ml`}|PSIZIFbCRp^BOCIJ z{}R@9h+Bf(0Aj5|Mv_4VIb%5E_t#Ey50g{+VzDRL@?XXpFuQ>U}lF?ML@2^A&__m!|M%pu)ku|sMOjgsMR z7c=rTO%tbpw{FksuH8DfPv)?MAHIaF8sqm!N0ys_!QE`wd31o#G@bt~L2lqxF32B~b&}MJzq5nBElyUi|#?=uVl=N1P zSksxU?LgD)0{}jQLycK(79}@mE)K%;H#pkb%2rQWi&~=x^dvcW>b*WidS^uXvg#B; zUvD{)UW=#q_XQ9-lfit}w;$Iv`BnT@F4UH`NV4kW47()tA2W62P>*^q+s^pOMOcep z6x~tfMz{-X@2jO%wA8>Km}#2BG2Pu~@&&izLvy@1pVjIkW_s5+Y|LQVMz4rSTLokd zHH;eEIPFXZzf4d5Z4u6i_ohQ|RmfXptRv$2xS1WX*JU?9c;|yD)2g(7jVIw28lW%u zJ<%b$j$q9^Kf)k2`a~-%5bmwH2SIicq>ey-R}ne zG4JO{P8QL=96P%LS{U!8eZY7 zW1_ANNQ0w$UfNT{hyJ}Ai&!=}ICV6I^0qAi3=eMn(G=_3iPM&8J(82Bh)PwHq-CFx(<88HF{ZC>$=H_Qw z-6wR=slFwVHnpQ8J-wnEe>1k*-hZhcFPnZ%Iv2Y(dN}3Xz^3b9>bhPp47mCWeazvfTw z|G1v2f&ykU~!0wTudqG3lf)FGSx}A z!{ItHdimsIYHe{+<2e<>(wf|IY;@{ftGUm$S5Fag9rQZTI4&w%BWp#DB!5#(VS;_? zIATP7!3n%Ku#MgQ5%H(14BT{Kq-R(^EMtEynM|O-dg20Uio?IDr=uPKyH}i@rohGi z%=k5+g4A54J7*LBm70If4&u4@zxzZAl9S)UhgAH^;FE8E;l9-Px`}Q+dk}`I=)C9s-3eT)-5%;rHDx&E5)!|r&rD=Jz z{01ax0IqJN*=<1>6e&RP5!xq%RsJ_*2w#;nM)X0YUl^6ZTx8+UJmpQp6`C@4)LX26 zA@BQp_7$IPq^Ec*9C{n(nOtbNCW>G!F^J)T4B=6nA@hxIn+oBW^_vn1?M`mIeR+VJ zhu2s5*S0ey$v(TVu4-7*xfatUp*NfNlf0$MkB^WbkobBY`~0YXIL%ayu4|*WVOi@p zl+}7-W-`N510lQ)jhSbRr^jm#>2sM0@ipg2c_jQWVBV2u*;a!}e#InO#JHZxYmS&3 zChk)cQ&q!_k(X%ffT_z#$c3U~92J%Y$TaM1Tty{GK5m251iq z|0#wLfTHRA@%!zn1nyo9=a_<@SyF|}MS~tnUL6SNQh|9ZiQ6Z?D@?X*Gfi)m-eU*S zXtRiVLKyUw(TF_a-hI6DnpQrgkbniC>U?m{zRb3iKp zaI}^~Y+tgEvO3{Mc=P=@g=YkZOzP5}qt*|Y2VxB&{&r?x@8UAY!=o3x_S)}BpIZIgCWimBgHoUV4$)NVp%CQV z%d3_kvE0K$HH$dRf4S=RF|Q{?dD477|MzgS2@Zl{sB2tdI zV9>lO?a`bMcF>+eI7t{SBqc33({**JCp})atsl$AQ>Ms6mwOD=1bz2l;PD0G53=x| zOpJtF327{J#@mYWhhBHg4!ymK67<;i+o$fJk)w;4$oHq}sx6}>Mp(2nvzjqB8=Muv zlkN%h);6^B5N5tz@L&8HPB845juY<||HQcc7l&dSdnoNBxzqBww`pgf%w%(_$C* z8D@}*q=Yg3m?v(J-O4Yubxx4q72xU+N4`^cm(28p0Lg~cDn?4{!qu7oZ!}*^ynBAa zG*+H?=Vp8ch2%s^#7qyV%<^f+U>eaIo$2YA4|ruG_g$Y+xs^_j_J9DvgOSxPI}>oI zVoed%F@uJ_)zB0ujAWY98Q!niifgM%_NFj~g5DrC)y35DT~8D}drG&@ zmiSLcpZC5#wDGo^|2^ETk}kf;a32>i6bQm@`*}o}`In9v82(~)>V-vxa;2SmM|;Zh zc_UWX_Iiuv%(llR)ht7VR!S3Fbj3Y2XThbRa;=q1uiqhG6SGBb0P;J~;X?j^OmJB} z&gaiG{ZaR$49!^x47lgyJAeUEv-VeAqw&gmvtZ%SK7L=kgxA`))oh|0GP35HzQSyR?$CW-}cdnIz^YgS&dhH-CjyS z*EM3)2tyKZ=tRV&?mGIoLN3sv?x2T+61OFHo$+Sg{#Tk2SA|iF%Jj&93_)B@R_r4I zcC95x&!n1`1aAx0pKoD~4J37k~y{EE>y}y^- zT0SL;BhN*tI$BfYHs1P|6AeKk{Wx;KvfuU;8uqlneXP+t)n%(?4l8_s; z=dkHz*v9!3BACKN6nQU}+!p9JaXPgsYkdEYFqLKO$g*iWu_C7clW6kQmrTrn>B0B>%JrwCbfm#YX^Hc_c|d88P|^i@8b@-hJ`Vd@tb1pN#0@B@6-0gcjtbaF zS3J?nZiB+9Drd82dLV1-NVyr~)t(BzjvVZ+^*Zwsy;)gJcyON6RNlf^9%>xvAZ|D?Y+E?K#pXL- zx$kTKWC_Dq9~Ecz?7vKCgpZ97R37#KotY1kgN|ml!HS>nrvr7bAyt&dyxlT$EY$q= zr-b##BDp<*U&+wMZp7xY)N!2r!VKkH>EsDIWLekY-~xktTb=rU1gp+%!%W$1Kuf5e zk}Zj^Ji!BQc@}nU$R+X}pc^`|c;}oAH-RJ%NdT%2s(mIrd1+`RT57WvyZmVCu!_Cudbzol^jhN;*$<=Q-o(OLL>$6>j#Ga4AJ;Z~>>egTS97Wv6QrG;paPW4)f) z4|jasM~BWmC2OfPbZ4JSeL(7HZ+}sz7*ilZa_Hvyw($qE_#5(VOSW2siaB`zdcGow zGDTFb%Kr%We&^~@Z4>mrfd!afcL8S(DpeQTVvA0MYGI7fSlr}k*u;06UjqSwY(I5U zGeo7nP(Gt66Q~)g0_frR6grTD`;V3jBN%;C%oUWP4yFtoq;AU_g{v7y#v!@6M5S^(L#xbVjXej z`Y#&5E@6Btvm3hwN|3EX+HbGd7|*n_;*YM)OeeuS&TwIOBYsx8bevfZyVRv_6;FWn z38=m7Lo!7W;b<%w_i`LLzEK-Sb+jsj_XL-Jl>5+xFgD+}7K`W`=;&~2BE+{dwFIv{ z(?XXB_`-mAjFjnt=hz>G$$V1bG@_-IE3dVWYOUF$a3~c)w8nF_TwA;yJWpLmD_EN( zO_-k{uO}a*ts+D;8�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%0DudKuvUT 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≪CPwE~gd9@fEw^R3ppu@uYyRayLW?=|` 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 z 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

K|^BU?QT-*v=w!65fb?Zq_4l2ycc`tggojd;(< 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

H#sU%tplQpw%}mWMLoF)v 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