From 5fa11987d2bc875a1ee5b1c3cdec225ef165c4e9 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Wed, 15 Apr 2020 09:50:13 +0300 Subject: [PATCH 1/2] core: add validUntilBlock field to transaction 1. closes #841 2. Commented out test cases where binary transaction are used. These test cases marked with `TODO NEO3.0: Update binary` and need to be updated. 3. Updated other tests. 4. Added cache to calculateValidUntilBlock() RPC-client method. --- cli/wallet/wallet.go | 10 ++ pkg/consensus/consensus_test.go | 13 ++- pkg/consensus/payload_test.go | 5 +- pkg/consensus/recovery_message_test.go | 7 +- pkg/core/block/block_test.go | 9 +- pkg/core/blockchain.go | 4 + pkg/core/blockchain_test.go | 9 +- pkg/core/helper_test.go | 42 +++++-- pkg/core/transaction/miner_test.go | 11 +- pkg/core/transaction/transaction.go | 48 +++++--- pkg/core/util_test.go | 6 +- pkg/rpc/client/client.go | 15 +++ pkg/rpc/client/rpc.go | 43 +++++++ pkg/rpc/client/rpc_test.go | 150 +++++++++++++++++-------- pkg/rpc/server/server_test.go | 34 +++--- pkg/rpc/server/testdata/testblocks.acc | Bin 111756 -> 112624 bytes 16 files changed, 280 insertions(+), 126 deletions(-) diff --git a/cli/wallet/wallet.go b/cli/wallet/wallet.go index d3992d5c1..547e0e52a 100644 --- a/cli/wallet/wallet.go +++ b/cli/wallet/wallet.go @@ -264,6 +264,11 @@ func claimGas(ctx *cli.Context) error { } tx := transaction.NewClaimTX(&claim) + validUntilBlock, err := c.CalculateValidUntilBlock() + if err != nil { + return cli.NewExitError(err, 1) + } + tx.ValidUntilBlock = validUntilBlock tx.AddOutput(&transaction.Output{ AssetID: core.UtilityTokenID(), @@ -510,6 +515,11 @@ func transferAsset(ctx *cli.Context) error { } 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) } diff --git a/pkg/consensus/consensus_test.go b/pkg/consensus/consensus_test.go index 640c31399..6db174f3e 100644 --- a/pkg/consensus/consensus_test.go +++ b/pkg/consensus/consensus_test.go @@ -19,6 +19,7 @@ import ( func TestNewService(t *testing.T) { srv := newTestService(t) tx := transaction.NewMinerTX() + tx.ValidUntilBlock = 1 require.NoError(t, srv.Chain.PoolTx(tx)) var txx []block.Transaction @@ -30,11 +31,11 @@ func TestNewService(t *testing.T) { func TestService_GetVerified(t *testing.T) { srv := newTestService(t) - txs := []*transaction.Transaction{ - transaction.NewMinerTXWithNonce(123), - transaction.NewMinerTXWithNonce(124), - transaction.NewMinerTXWithNonce(125), - transaction.NewMinerTXWithNonce(126), + var txs []*transaction.Transaction + for i := 0; i < 4; i++ { + tx := transaction.NewMinerTXWithNonce(123 + uint32(i)) + tx.ValidUntilBlock = 1 + txs = append(txs, tx) } require.NoError(t, srv.Chain.PoolTx(txs[3])) @@ -107,6 +108,7 @@ func TestService_getTx(t *testing.T) { t.Run("transaction in mempool", func(t *testing.T) { tx := transaction.NewMinerTXWithNonce(1234) + tx.ValidUntilBlock = 1 h := tx.Hash() require.Equal(t, nil, srv.getTx(h)) @@ -120,6 +122,7 @@ func TestService_getTx(t *testing.T) { t.Run("transaction in local cache", func(t *testing.T) { tx := transaction.NewMinerTXWithNonce(4321) + tx.ValidUntilBlock = 1 h := tx.Hash() require.Equal(t, nil, srv.getTx(h)) diff --git a/pkg/consensus/payload_test.go b/pkg/consensus/payload_test.go index 949f5a5c5..9d993850b 100644 --- a/pkg/consensus/payload_test.go +++ b/pkg/consensus/payload_test.go @@ -1,7 +1,6 @@ package consensus import ( - "encoding/hex" "math/rand" "testing" @@ -73,6 +72,8 @@ func TestConsensusPayload_Setters(t *testing.T) { require.Equal(t, pl, p.GetRecoveryMessage()) } +//TODO NEO3.0: Update binary +/* func TestConsensusPayload_Hash(t *testing.T) { dataHex := "00000000d8fb8d3b143b5f98468ef701909c976505a110a01e26c5e99be9a90cff979199b6fc33000400000000008d2000184dc95de24018f9ad71f4448a2b438eaca8b4b2ab6b4524b5a69a45d920c35103f3901444320656c390ff39c0062f5e8e138ce446a40c7e4ba1af1f8247ebbdf49295933715d3a67949714ff924f8a28cec5b954c71eca3bfaf0e9d4b1f87b4e21e9ba4ae18f97de71501b5c5d07edc200bd66a46b9b28b1a371f2195c10b0af90000e24018f900000000014140c9faaee59942f58da0e5268bc199632f2a3ad0fcbee68681a4437f140b49512e8d9efc6880eb44d3490782895a5794f35eeccee2923ce0c76fa7a1890f934eac232103c089d7122b840a4935234e82e26ae5efd0c2acb627239dc9f207311337b6f2c1ac" data, err := hex.DecodeString(dataHex) @@ -82,7 +83,7 @@ func TestConsensusPayload_Hash(t *testing.T) { require.NoError(t, testserdes.DecodeBinary(data, &p)) require.Equal(t, p.Hash().String(), "45859759c8491597804f1922773947e0d37bf54484af82f80cd642f7b063aa56") } - +*/ func TestConsensusPayload_Serializable(t *testing.T) { for _, mt := range messageTypes { p := randomPayload(t, mt) diff --git a/pkg/consensus/recovery_message_test.go b/pkg/consensus/recovery_message_test.go index d6a0fdc94..67f5813af 100644 --- a/pkg/consensus/recovery_message_test.go +++ b/pkg/consensus/recovery_message_test.go @@ -1,15 +1,12 @@ package consensus import ( - "encoding/hex" - gio "io" "testing" "github.com/nspcc-dev/dbft/crypto" "github.com/nspcc-dev/dbft/payload" "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" "github.com/stretchr/testify/require" ) @@ -114,6 +111,8 @@ func TestRecoveryMessage_Setters(t *testing.T) { }) } +//TODO NEO3.0: Update binary +/* func TestRecoveryMessage_DecodeFromTestnet(t *testing.T) { hexDump := "00000000924b2fa6728782b6afb94873a377c49f31573005e7f2945beb27158ec2e887300d180000010000000000" + "fd29024100000120003db64b5e8e4ab7138abe65a3be48d3a3f5d10013ab9ffee489706078714f1ea20161e7ba952fdfd5f543891b1fe053af401bc34e9e3f63c90e3c0d6675d156344b00008e4ab71300000000030000414079946c76007e4297b06b074a20dc1d1d6871c74976f244df81bd03f4158a11dd485ed50fc0cc7c6ad352addd8440c5a55d7b7449650bb200e5e58b1fb8a0390c010041403631a490b17ca4fcfe52ed2e7a4ca4c0d3fcca67e73a1ef071f385db1d37cefa7a2de6e56654788647e9142425c29449b0bbfee5c46a96c4bdc79b23c1f862fc02004140147914878c23a9624a62598cebe2c75fdce80c1e19b5c73aa511630f67d4e5a660c63daad7fcfa9bd944f258f51427cb80730b8beb3015a3c2766325bf291a8e02000000989f8fa676ed07885a46ee08af10e1fa1893ef20fbd557dc3c1a9dc498189d5fceff694dcb2085e4969d90c56433b88fd7ba1caef9363829c70419a5314ac36541404f3ee34e11c521f2e31fee439206474d36951443014354ce81b32bd1787e6a92212737f7f72bee59c403ff74292ebf78c4091081174b5921c148cedcbe7bd585000100acfc8399bda6429c64b5c09885a3e4f1a0629f59125df03be956c00f5bb77616c43e43250e96700f80c42ef3e169e9ff9f906518acf0da17c53563ba41d91ebc41409957436afd1736970d4b5e52b8d845663d6b0335a34cf78ece733c71be876cf30125e9bfea197a607ea6945cef7ef28a74676ec23d14378f7ec23964544b6710014140b634941ecab3a5dd7251f9213bfbcff2021b1e3d966e6800007ea6f0d72ec46d2c04c042800e103091d2f5d184d997a10b890b13bf06b1078a4f1822d722891a232102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd62ac" @@ -128,7 +127,7 @@ func TestRecoveryMessage_DecodeFromTestnet(t *testing.T) { buf.ReadB() require.Equal(t, gio.EOF, buf.Err) } - +*/ func getKeys(t *testing.T, n int) []*privateKey { privs := make([]*privateKey, 0, n) for i := 0; i < n; i++ { diff --git a/pkg/core/block/block_test.go b/pkg/core/block/block_test.go index 0aec0bf7d..15e6acd37 100644 --- a/pkg/core/block/block_test.go +++ b/pkg/core/block/block_test.go @@ -1,19 +1,16 @@ package block import ( - "encoding/hex" "testing" "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/encoding/address" - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) // Test blocks are blocks from mainnet with their corresponding index. - +// TODO NEO3.0: Update binary +/* func TestDecodeBlock1(t *testing.T) { data, err := getBlockData(1) require.NoError(t, err) @@ -67,7 +64,7 @@ func TestTrimmedBlock(t *testing.T) { assert.True(t, trimmedBlock.Transactions[i].Trimmed) } } - +*/ func newDumbBlock() *Block { return &Block{ Base: Base{ diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 02b08f724..20ebc9f65 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -1340,6 +1340,10 @@ func (bc *Blockchain) verifyHeader(currHeader, prevHeader *block.Header) error { // verifyTx verifies whether a transaction is bonafide or not. func (bc *Blockchain) verifyTx(t *transaction.Transaction, block *block.Block) error { + height := bc.BlockHeight() + if t.ValidUntilBlock <= height || t.ValidUntilBlock > height+transaction.MaxValidUntilBlockIncrement { + return errors.Errorf("transaction has expired. ValidUntilBlock = %d, current height = %d", t.ValidUntilBlock, height) + } if io.GetVarSize(t) > transaction.MaxTransactionSize { return errors.Errorf("invalid transaction size = %d. It shoud be less then MaxTransactionSize = %d", io.GetVarSize(t), transaction.MaxTransactionSize) } diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index 4a571e438..8db37d6e0 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -7,7 +7,6 @@ import ( "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/hash" - "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -98,7 +97,9 @@ func TestScriptFromWitness(t *testing.T) { func TestGetHeader(t *testing.T) { bc := newTestChain(t) - block := bc.newBlock(transaction.NewMinerTX()) + tx := transaction.NewMinerTX() + tx.ValidUntilBlock = bc.BlockHeight() + 1 + block := bc.newBlock(tx) err := bc.AddBlock(block) assert.Nil(t, err) @@ -149,6 +150,8 @@ func TestHasBlock(t *testing.T) { } } +//TODO NEO3.0:Update binary +/* func TestGetTransaction(t *testing.T) { b1 := getDecodedBlock(t, 1) block := getDecodedBlock(t, 2) @@ -174,7 +177,7 @@ func TestGetTransaction(t *testing.T) { assert.NoError(t, bc.persist()) } } - +*/ func TestGetClaimable(t *testing.T) { bc := newTestChain(t) diff --git a/pkg/core/helper_test.go b/pkg/core/helper_test.go index ed491881d..b1a69871f 100644 --- a/pkg/core/helper_test.go +++ b/pkg/core/helper_test.go @@ -96,7 +96,9 @@ func (bc *Blockchain) genBlocks(n int) ([]*block.Block, error) { lastHash := bc.topBlock.Load().(*block.Block).Hash() lastIndex := bc.topBlock.Load().(*block.Block).Index for i := 0; i < n; i++ { - blocks[i] = newBlock(bc.config, uint32(i)+lastIndex+1, lastHash, transaction.NewMinerTXWithNonce(uint32(1234+i))) + minerTx := transaction.NewMinerTXWithNonce(uint32(1234 + i)) + minerTx.ValidUntilBlock = lastIndex + uint32(i) + 1 + blocks[i] = newBlock(bc.config, uint32(i)+lastIndex+1, lastHash, minerTx) if err := bc.AddBlock(blocks[i]); err != nil { return blocks, err } @@ -167,6 +169,8 @@ func TestCreateBasicChain(t *testing.T) { const prefix = "../rpc/server/testdata/" // To make enough GAS. const numOfEmptyBlocks = 200 + // Increase in case if you need more blocks + const validUntilBlock = numOfEmptyBlocks + 1000 // To be incremented after each created transaction to keep chain constant. var testNonce uint32 = 1 @@ -177,12 +181,20 @@ func TestCreateBasicChain(t *testing.T) { return testNonce } + // Creates new miner tx with specified validUntilBlock field + nextMinerTx := func(validUntilBlock uint32) *transaction.Transaction { + minerTx := transaction.NewMinerTXWithNonce(getNextNonce()) + minerTx.ValidUntilBlock = validUntilBlock + return minerTx + } + var neoAmount = util.Fixed8FromInt64(99999000) var neoRemainder = util.Fixed8FromInt64(100000000) - neoAmount bc := newTestChain(t) // Move almost all NEO to one simple account. txMoveNeo := transaction.NewContractTX() + txMoveNeo.ValidUntilBlock = validUntilBlock txMoveNeo.Nonce = getNextNonce() // use output of issue tx from genesis block as an input @@ -231,8 +243,7 @@ func TestCreateBasicChain(t *testing.T) { InvocationScript: invoc, VerificationScript: rawScript, }} - - b := bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), txMoveNeo) + b := bc.newBlock(nextMinerTx(validUntilBlock), txMoveNeo) require.NoError(t, bc.AddBlock(b)) t.Logf("txMoveNeo: %s", txMoveNeo.Hash().StringLE()) @@ -252,6 +263,7 @@ 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.AddInput(&transaction.Input{ PrevHash: txMoveNeo.Hash(), PrevIndex: 0, @@ -264,7 +276,7 @@ func TestCreateBasicChain(t *testing.T) { }) txNeoRound.Data = new(transaction.ContractTX) require.NoError(t, acc0.SignTx(txNeoRound)) - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), txNeoRound) + b = bc.newBlock(nextMinerTx(validUntilBlock), txNeoRound) require.NoError(t, bc.AddBlock(b)) t.Logf("txNeoRound: %s", txNeoRound.Hash().StringLE()) @@ -275,6 +287,7 @@ func TestCreateBasicChain(t *testing.T) { }) txClaim := transaction.NewClaimTX(claim) txClaim.Nonce = getNextNonce() + txClaim.ValidUntilBlock = validUntilBlock txClaim.Data = claim neoGas, sysGas, err := bc.CalculateClaimable(neoAmount, 1, bc.BlockHeight()) require.NoError(t, err) @@ -286,7 +299,7 @@ func TestCreateBasicChain(t *testing.T) { Position: 0, }) require.NoError(t, acc0.SignTx(txClaim)) - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), txClaim) + b = bc.newBlock(nextMinerTx(validUntilBlock), txClaim) require.NoError(t, bc.AddBlock(b)) t.Logf("txClaim: %s", txClaim.Hash().StringLE()) @@ -315,6 +328,7 @@ func TestCreateBasicChain(t *testing.T) { invFee := util.Fixed8FromFloat(100) txDeploy := transaction.NewInvocationTX(txScript, invFee) txDeploy.Nonce = getNextNonce() + txDeploy.ValidUntilBlock = validUntilBlock txDeploy.AddInput(&transaction.Input{ PrevHash: txClaim.Hash(), PrevIndex: 0, @@ -327,7 +341,7 @@ func TestCreateBasicChain(t *testing.T) { }) gasOwned -= invFee require.NoError(t, acc0.SignTx(txDeploy)) - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), txDeploy) + b = bc.newBlock(nextMinerTx(validUntilBlock), txDeploy) require.NoError(t, bc.AddBlock(b)) t.Logf("txDeploy: %s", txDeploy.Hash().StringLE()) @@ -337,7 +351,8 @@ func TestCreateBasicChain(t *testing.T) { txInv := transaction.NewInvocationTX(script.Bytes(), 0) txInv.Nonce = getNextNonce() - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), txInv) + txInv.ValidUntilBlock = validUntilBlock + b = bc.newBlock(nextMinerTx(validUntilBlock), txInv) require.NoError(t, bc.AddBlock(b)) t.Logf("txInv: %s", txInv.Hash().StringLE()) @@ -345,6 +360,7 @@ func TestCreateBasicChain(t *testing.T) { require.NoError(t, err) txNeo0to1 := transaction.NewContractTX() txNeo0to1.Nonce = getNextNonce() + txNeo0to1.ValidUntilBlock = validUntilBlock txNeo0to1.Data = new(transaction.ContractTX) txNeo0to1.AddInput(&transaction.Input{ PrevHash: txNeoRound.Hash(), @@ -362,7 +378,7 @@ func TestCreateBasicChain(t *testing.T) { }) require.NoError(t, acc0.SignTx(txNeo0to1)) - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), txNeo0to1) + b = bc.newBlock(nextMinerTx(validUntilBlock), txNeo0to1) require.NoError(t, bc.AddBlock(b)) sh := hash.Hash160(avm) @@ -370,15 +386,18 @@ func TestCreateBasicChain(t *testing.T) { emit.AppCallWithOperationAndArgs(w.BinWriter, sh, "init") initTx := transaction.NewInvocationTX(w.Bytes(), 0) initTx.Nonce = getNextNonce() + initTx.ValidUntilBlock = validUntilBlock transferTx := newNEP5Transfer(sh, sh, priv0.GetScriptHash(), 1000) transferTx.Nonce = getNextNonce() + transferTx.ValidUntilBlock = validUntilBlock - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), initTx, transferTx) + b = bc.newBlock(nextMinerTx(validUntilBlock), initTx, transferTx) require.NoError(t, bc.AddBlock(b)) transferTx = newNEP5Transfer(sh, priv0.GetScriptHash(), priv1.GetScriptHash(), 123) transferTx.Nonce = getNextNonce() - b = bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()), transferTx) + transferTx.ValidUntilBlock = validUntilBlock + b = bc.newBlock(nextMinerTx(validUntilBlock), transferTx) require.NoError(t, bc.AddBlock(b)) if saveChain { @@ -406,6 +425,7 @@ 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.AddInput(&transaction.Input{ PrevHash: txNeo0to1.Hash(), PrevIndex: 1, @@ -425,7 +445,7 @@ func TestCreateBasicChain(t *testing.T) { // Blocks for `submitblock` test. If you are planning to modify test chain from `testblocks.acc`, // please, update params value of `empty block` and `positive` tests. var blocks []*block.Block - blocks = append(blocks, bc.newBlock(), bc.newBlock(transaction.NewMinerTXWithNonce(getNextNonce()))) + blocks = append(blocks, bc.newBlock(), bc.newBlock(nextMinerTx(validUntilBlock))) for i, b := range blocks { data, err := testserdes.EncodeBinary(b) require.NoError(t, err) diff --git a/pkg/core/transaction/miner_test.go b/pkg/core/transaction/miner_test.go index 6e4d0fc3a..b15814952 100644 --- a/pkg/core/transaction/miner_test.go +++ b/pkg/core/transaction/miner_test.go @@ -1,13 +1,7 @@ package transaction -import ( - "encoding/hex" - "testing" - - "github.com/nspcc-dev/neo-go/pkg/internal/testserdes" - "github.com/stretchr/testify/assert" -) - +// TODO NEO3.0: Update binary +/* func TestEncodeDecodeMiner(t *testing.T) { // transaction from mainnet a1f219dc6be4c35eca172e65e02d4591045220221b1543f1a4b67b9e9442c264 rawtx := "0000fcd30e22000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60c8000000000000001f72e68b4e39602912106d53b229378a082784b200" @@ -24,3 +18,4 @@ func TestEncodeDecodeMiner(t *testing.T) { 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 49dc4e292..1bb333a5c 100644 --- a/pkg/core/transaction/transaction.go +++ b/pkg/core/transaction/transaction.go @@ -17,6 +17,9 @@ const ( // MaxTransactionSize is the upper limit size in bytes that a transaction can reach. It is // set to be 102400. MaxTransactionSize = 102400 + // MaxValidUntilBlockIncrement is the upper increment size of blockhain height in blocs after + // exceeding that a transaction should fail validation. It is set to be 2102400. + MaxValidUntilBlockIncrement = 2102400 ) // Transaction is a process recorded in the NEO blockchain. @@ -30,6 +33,10 @@ type Transaction struct { // Random number to avoid hash collision. Nonce uint32 + // Maximum blockchain height exceeding which + // transaction should fail verification. + ValidUntilBlock uint32 + // Data specific to the type of the transaction. // This is always a pointer to a Transaction. Data TXer @@ -111,6 +118,7 @@ func (t *Transaction) DecodeBinary(br *io.BinReader) { t.Type = TXType(br.ReadB()) t.Version = uint8(br.ReadB()) t.Nonce = br.ReadU32LE() + t.ValidUntilBlock = br.ReadU32LE() t.decodeData(br) br.ReadArray(&t.Attributes) @@ -182,6 +190,7 @@ func (t *Transaction) encodeHashableFields(bw *io.BinWriter) { bw.WriteB(byte(t.Type)) bw.WriteB(byte(t.Version)) bw.WriteU32LE(t.Nonce) + bw.WriteU32LE(t.ValidUntilBlock) // Underlying TXer. if !noData { @@ -257,15 +266,16 @@ func NewTransactionFromBytes(b []byte) (*Transaction, error) { // transactionJSON is a wrapper for Transaction and // used for correct marhalling of transaction.Data type transactionJSON struct { - TxID util.Uint256 `json:"txid"` - Size int `json:"size"` - Type TXType `json:"type"` - Version uint8 `json:"version"` - Nonce uint32 `json:"nonce"` - Attributes []Attribute `json:"attributes"` - Inputs []Input `json:"vin"` - Outputs []Output `json:"vout"` - Scripts []Witness `json:"scripts"` + TxID util.Uint256 `json:"txid"` + Size int `json:"size"` + Type TXType `json:"type"` + Version uint8 `json:"version"` + Nonce uint32 `json:"nonce"` + ValidUntilBlock uint32 `json:"valid_until_block"` + Attributes []Attribute `json:"attributes"` + Inputs []Input `json:"vin"` + Outputs []Output `json:"vout"` + Scripts []Witness `json:"scripts"` Claims []Input `json:"claims,omitempty"` PublicKey *keys.PublicKey `json:"pubkey,omitempty"` @@ -279,15 +289,16 @@ type transactionJSON struct { // MarshalJSON implements json.Marshaler interface. func (t *Transaction) MarshalJSON() ([]byte, error) { tx := transactionJSON{ - TxID: t.Hash(), - Size: io.GetVarSize(t), - Type: t.Type, - Version: t.Version, - Nonce: t.Nonce, - Attributes: t.Attributes, - Inputs: t.Inputs, - Outputs: t.Outputs, - Scripts: t.Scripts, + TxID: t.Hash(), + Size: io.GetVarSize(t), + Type: t.Type, + Version: t.Version, + Nonce: t.Nonce, + ValidUntilBlock: t.ValidUntilBlock, + Attributes: t.Attributes, + Inputs: t.Inputs, + Outputs: t.Outputs, + Scripts: t.Scripts, } switch t.Type { case ClaimType: @@ -338,6 +349,7 @@ func (t *Transaction) UnmarshalJSON(data []byte) error { t.Type = tx.Type t.Version = tx.Version t.Nonce = tx.Nonce + t.ValidUntilBlock = tx.ValidUntilBlock t.Attributes = tx.Attributes t.Inputs = tx.Inputs t.Outputs = tx.Outputs diff --git a/pkg/core/util_test.go b/pkg/core/util_test.go index 629c6f1a6..22ba5d085 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 := "8c5e44474b2b942286071254fd4bffddd3febd0511b101e566331b5f8f041902" + expect := "cf98b48f81ce3162cdd0883bb0c4cbf3abc105623ba7a61133a776c1e33a2466" assert.Equal(t, expect, block.Hash().StringLE()) } @@ -47,7 +47,7 @@ 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 := "057ea06225860f0f7e69cca1e0052652918629929591b8138a516431be144ba8" + expect := "8dd7d330dd7fc103836409bdcba826d15d88119c7f843357266b253aede72dfb" assert.Equal(t, expect, UtilityTokenID().StringLE()) } @@ -55,6 +55,6 @@ 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 := "cd3a3b5654465238c3a4ac30eeb1bfd1171378d59b27f7d2e6893ce9d6150825" + expect := "0589624521f631b389197e1a69b1b92db0a45cc70f45c3409dfecc439e99bfa9" assert.Equal(t, expect, GoverningTokenID().StringLE()) } diff --git a/pkg/rpc/client/client.go b/pkg/rpc/client/client.go index a18f42ef0..cc4513f6d 100644 --- a/pkg/rpc/client/client.go +++ b/pkg/rpc/client/client.go @@ -24,6 +24,8 @@ const ( defaultDialTimeout = 4 * time.Second defaultRequestTimeout = 4 * time.Second defaultClientVersion = "2.0" + // number of blocks after which cache is expired + cacheTimeout = 100 ) // Client represents the middleman for executing JSON RPC calls @@ -40,6 +42,7 @@ type Client struct { wif *keys.WIF balancerMu *sync.Mutex balancer request.BalanceGetter + cache cache } // Options defines options for the RPC client. @@ -57,6 +60,18 @@ type Options struct { Version string } +// cache stores cache values for the RPC client methods +type cache struct { + calculateValidUntilBlock calculateValidUntilBlockCache +} + +// calculateValidUntilBlockCache stores cached number of validators and +// cache expiration value in blocks +type calculateValidUntilBlockCache struct { + validatorsCount uint32 + expiresAt uint32 +} + // New returns a new Client ready to use. func New(ctx context.Context, endpoint string, opts Options) (*Client, error) { url, err := url.Parse(endpoint) diff --git a/pkg/rpc/client/rpc.go b/pkg/rpc/client/rpc.go index fa9d3e9c9..386a4af4b 100644 --- a/pkg/rpc/client/rpc.go +++ b/pkg/rpc/client/rpc.go @@ -490,6 +490,13 @@ func (c *Client) TransferAsset(asset util.Uint256, address string, amount util.F 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") } @@ -504,6 +511,12 @@ func (c *Client) SignAndPushInvocationTx(script []byte, acc *wallet.Account, sys var err error tx := transaction.NewInvocationTX(script, sysfee) + validUntilBlock, err := c.CalculateValidUntilBlock() + if err != nil { + return txHash, errors.Wrap(err, "failed to add validUntilBlock to transaction") + } + tx.ValidUntilBlock = validUntilBlock + gas := sysfee + netfee if gas > 0 { @@ -545,3 +558,33 @@ func (c *Client) ValidateAddress(address string) error { } return nil } + +// CalculateValidUntilBlock calculates ValidUntilBlock field for tx as +// current blockchain height + number of validators. Number of validators +// is the length of blockchain validators list got from GetValidators() +// method. Validators count is being cached and updated every 100 blocks. +func (c *Client) CalculateValidUntilBlock() (uint32, error) { + var ( + result uint32 + validatorsCount uint32 + ) + blockCount, err := c.GetBlockCount() + if err != nil { + return result, errors.Wrapf(err, "cannot get block count") + } + + if c.cache.calculateValidUntilBlock.expiresAt > blockCount { + validatorsCount = c.cache.calculateValidUntilBlock.validatorsCount + } else { + validators, err := c.GetValidators() + if err != nil { + return result, errors.Wrapf(err, "cannot get validators") + } + validatorsCount = uint32(len(validators)) + c.cache.calculateValidUntilBlock = calculateValidUntilBlockCache{ + validatorsCount: validatorsCount, + expiresAt: blockCount + cacheTimeout, + } + } + return blockCount + validatorsCount, nil +} diff --git a/pkg/rpc/client/rpc_test.go b/pkg/rpc/client/rpc_test.go index 339a6ed1d..2d69e426c 100644 --- a/pkg/rpc/client/rpc_test.go +++ b/pkg/rpc/client/rpc_test.go @@ -8,6 +8,8 @@ import ( "net/http/httptest" "testing" + "github.com/nspcc-dev/neo-go/pkg/rpc/request" + "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" @@ -37,7 +39,7 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ 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":"0xcd3a3b5654465238c3a4ac30eeb1bfd1171378d59b27f7d2e6893ce9d6150825","value":"94"}]}}`, + serverResponse: `{"jsonrpc":"2.0","id": 1,"result":{"version":0,"script_hash":"0x1179716da2e9523d153a35fb3ad10c561b1e5b1a","frozen":false,"votes":[],"balances":[{"asset":"0x0589624521f631b389197e1a69b1b92db0a45cc70f45c3409dfecc439e99bfa9","value":"94"}]}}`, result: func(c *Client) interface{} { scriptHash, err := util.Uint160DecodeStringLE("1179716da2e9523d153a35fb3ad10c561b1e5b1a") if err != nil { @@ -96,7 +98,7 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ invoke: func(c *Client) (interface{}, error) { return c.GetAssetState(util.Uint256{}) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"id":"0xcd3a3b5654465238c3a4ac30eeb1bfd1171378d59b27f7d2e6893ce9d6150825","type":0,"name":"NEO","amount":"100000000","available":"100000000","precision":0,"owner":"00","admin":"Abf2qMs1pzQb8kYk9RuxtUb9jtRKJVuBJt","issuer":"AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM","expiration":4000000,"is_frozen":false}}`, + serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"id":"0x0589624521f631b389197e1a69b1b92db0a45cc70f45c3409dfecc439e99bfa9","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(), @@ -134,45 +136,45 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "byIndex_positive", invoke: func(c *Client) (interface{}, error) { - return c.GetBlockByIndex(1) + return c.GetBlockByIndex(5) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000999086db552ba8f84734bddca55b25a8d3d8c5f866f941209169c38d35376e99b29ffa96224227f5e033c9a291bceef2724429d596c3a6944cafd6995fdb6dcbe013dd5b010000004ded49fea284b451be48d3a3f5d10013ab9ffee489706078714f1ea201c340356a91d94e398170e47447d6a0f60aa5470e209782a5452403115a49166db3e1c4a3898122db19f779c30f8ccd0b7d401acdf71eda340655e4ae5237a64961bf4034dd47955e5a71627dafc39dd92999140e9eaeec6b11dbb2b313efa3f1093ed915b4455e199c69ec53778f94ffc236b92f8b97fff97a1f6bbb3770c0c0b3844a40fbe743bd5c90b2f5255e0b073281d7aeb2fb516572f36bec8446bcc37ac755cbf10d08b16c95644db1b2dddc2df5daa377880b20198fc7b967ac6e76474b22df8b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae0100004ded49fe00000000"}`, + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000a78c4548ad5fd899f4980cffcc8610f4dc22037de3f1fd374cc4384e1eb24e85f0bd34849ad1bda48acd6b9c9401654f9e6499f95dab85923de66c3b1242d59c858e955e050000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140445e8de1ba402cab0bffedc32840b3587c8f6b272c02ea2b4a609419fbcb85a3cf5cd183ea7d28788eb19a12265be1d2f43f7986de66c8d8585d66825a0701fc40d935dfb83310d3433a7afc0bbb15f4c0686a624734cee6f6b98d5d95e660401c5b35c7cfd802fa82759aab288373ad894d82056d29109e6142d8c1397f60706f4076e9fd7bef3b9a8ce12904414cc55293161bcb536a4939200dd3c586c4d60ded565780d307598b8dcf4eebb64f53cc9fc0c381d47e58b7cec1b9392097a2b3ec407b03a25d83d429810b7a929f48b8125d3bfff5982f876c0dbd1d9dbbf08534d3235a4709c7f779449ed865ca1d2e29729c0210174782869a09c2b821bd15fda18b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae010000d50400000500000000000000"}`, 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, "e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c", res.Hash().StringLE()) - assert.Equal(t, "996e37358dc369912041f966f8c5d8d3a8255ba5dcbd3447f8a82b55db869099", res.PrevHash.StringLE()) - assert.Equal(t, "cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2", res.MerkleRoot.StringLE()) + assert.Equal(t, "a928e6e394bbc8ebb02b88fa14efb2860c9de376b4809ba078e7e47ca9a77af9", res.Hash().StringLE()) + assert.Equal(t, "854eb21e4e38c44c37fdf1e37d0322dcf41086ccff0c98f499d85fad48458ca7", res.PrevHash.StringLE()) + assert.Equal(t, "9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0", res.MerkleRoot.StringLE()) assert.Equal(t, 1, len(res.Transactions)) - assert.Equal(t, "cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2", res.Transactions[0].Hash().StringLE()) + assert.Equal(t, "9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0", res.Transactions[0].Hash().StringLE()) }, }, { name: "byIndex_verbose_positive", invoke: func(c *Client) (i interface{}, err error) { - return c.GetBlockByIndexVerbose(1) + return c.GetBlockByIndexVerbose(5) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xe93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c","size":452,"version":0,"nextblockhash":"0xcc37d5bc460e72c9423015cb8d579c13e7b03b93bfaa1a23cf4fa777988e035f","previousblockhash":"0x996e37358dc369912041f966f8c5d8d3a8255ba5dcbd3447f8a82b55db869099","merkleroot":"0xcb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2","time":1541215200,"index":1,"nonce":"51b484a2fe49ed4d","nextconsensus":"AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU","confirmations":10534,"script":{"invocation":"40356a91d94e398170e47447d6a0f60aa5470e209782a5452403115a49166db3e1c4a3898122db19f779c30f8ccd0b7d401acdf71eda340655e4ae5237a64961bf4034dd47955e5a71627dafc39dd92999140e9eaeec6b11dbb2b313efa3f1093ed915b4455e199c69ec53778f94ffc236b92f8b97fff97a1f6bbb3770c0c0b3844a40fbe743bd5c90b2f5255e0b073281d7aeb2fb516572f36bec8446bcc37ac755cbf10d08b16c95644db1b2dddc2df5daa377880b20198fc7b967ac6e76474b22df","verification":"532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae"},"tx":[{"txid":"0xcb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2","size":10,"type":"MinerTransaction","version":0,"attributes":[],"vin":[],"vout":[],"scripts":[],"sys_fee":"0","net_fee":"0","nonce":4266257741}]}}`, + serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xa928e6e394bbc8ebb02b88fa14efb2860c9de376b4809ba078e7e47ca9a77af9","size":523,"version":0,"nextblockhash":"0x5ff4068d996cbefb6fb6e36f6c8085a79f7ab28cc3149b6f49a55cf97fa4b513","previousblockhash":"0x854eb21e4e38c44c37fdf1e37d0322dcf41086ccff0c98f499d85fad48458ca7","merkleroot":"0x9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0","time":1586859653,"index":5,"nonce":"0000000000000457","nextconsensus":"AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU","confirmations":203,"script":{"invocation":"40445e8de1ba402cab0bffedc32840b3587c8f6b272c02ea2b4a609419fbcb85a3cf5cd183ea7d28788eb19a12265be1d2f43f7986de66c8d8585d66825a0701fc40d935dfb83310d3433a7afc0bbb15f4c0686a624734cee6f6b98d5d95e660401c5b35c7cfd802fa82759aab288373ad894d82056d29109e6142d8c1397f60706f4076e9fd7bef3b9a8ce12904414cc55293161bcb536a4939200dd3c586c4d60ded565780d307598b8dcf4eebb64f53cc9fc0c381d47e58b7cec1b9392097a2b3ec407b03a25d83d429810b7a929f48b8125d3bfff5982f876c0dbd1d9dbbf08534d3235a4709c7f779449ed865ca1d2e29729c0210174782869a09c2b821bd15fda1","verification":"532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae"},"tx":[{"sys_fee":"0","net_fee":"0","txid":"0x9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0","size":14,"type":"MinerTransaction","version":0,"nonce":1237,"valid_until_block":5,"attributes":[],"vin":[],"vout":[],"scripts":[]}]}}`, result: func(c *Client) interface{} { - hash, err := util.Uint256DecodeStringLE("e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c") + hash, err := util.Uint256DecodeStringLE("a928e6e394bbc8ebb02b88fa14efb2860c9de376b4809ba078e7e47ca9a77af9") if err != nil { panic(err) } - nextBlockHash, err := util.Uint256DecodeStringLE("cc37d5bc460e72c9423015cb8d579c13e7b03b93bfaa1a23cf4fa777988e035f") + nextBlockHash, err := util.Uint256DecodeStringLE("5ff4068d996cbefb6fb6e36f6c8085a79f7ab28cc3149b6f49a55cf97fa4b513") if err != nil { panic(err) } - prevBlockHash, err := util.Uint256DecodeStringLE("996e37358dc369912041f966f8c5d8d3a8255ba5dcbd3447f8a82b55db869099") + prevBlockHash, err := util.Uint256DecodeStringLE("854eb21e4e38c44c37fdf1e37d0322dcf41086ccff0c98f499d85fad48458ca7") if err != nil { panic(err) } - merkleRoot, err := util.Uint256DecodeStringLE("cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2") + merkleRoot, err := util.Uint256DecodeStringLE("9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0") if err != nil { panic(err) } - invScript, err := hex.DecodeString("40356a91d94e398170e47447d6a0f60aa5470e209782a5452403115a49166db3e1c4a3898122db19f779c30f8ccd0b7d401acdf71eda340655e4ae5237a64961bf4034dd47955e5a71627dafc39dd92999140e9eaeec6b11dbb2b313efa3f1093ed915b4455e199c69ec53778f94ffc236b92f8b97fff97a1f6bbb3770c0c0b3844a40fbe743bd5c90b2f5255e0b073281d7aeb2fb516572f36bec8446bcc37ac755cbf10d08b16c95644db1b2dddc2df5daa377880b20198fc7b967ac6e76474b22df") + invScript, err := hex.DecodeString("40445e8de1ba402cab0bffedc32840b3587c8f6b272c02ea2b4a609419fbcb85a3cf5cd183ea7d28788eb19a12265be1d2f43f7986de66c8d8585d66825a0701fc40d935dfb83310d3433a7afc0bbb15f4c0686a624734cee6f6b98d5d95e660401c5b35c7cfd802fa82759aab288373ad894d82056d29109e6142d8c1397f60706f4076e9fd7bef3b9a8ce12904414cc55293161bcb536a4939200dd3c586c4d60ded565780d307598b8dcf4eebb64f53cc9fc0c381d47e58b7cec1b9392097a2b3ec407b03a25d83d429810b7a929f48b8125d3bfff5982f876c0dbd1d9dbbf08534d3235a4709c7f779449ed865ca1d2e29729c0210174782869a09c2b821bd15fda1") if err != nil { panic(err) } @@ -180,21 +182,22 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ if err != nil { panic(err) } - tx := transaction.NewMinerTXWithNonce(4266257741) + tx := transaction.NewMinerTXWithNonce(1237) + tx.ValidUntilBlock = 5 // Update hashes for correct result comparison. _ = tx.Hash() return &result.Block{ Hash: hash, - Size: 452, + Size: 523, Version: 0, NextBlockHash: &nextBlockHash, PreviousBlockHash: prevBlockHash, MerkleRoot: merkleRoot, - Time: 1541215200, - Index: 1, - Nonce: "51b484a2fe49ed4d", + Time: 1586859653, + Index: 5, + Nonce: "0000000000000457", NextConsensus: "AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU", - Confirmations: 10534, + Confirmations: 203, Script: transaction.Witness{ InvocationScript: invScript, VerificationScript: verifScript, @@ -212,53 +215,53 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "byHash_positive", invoke: func(c *Client) (interface{}, error) { - hash, err := util.Uint256DecodeStringLE("e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c") + hash, err := util.Uint256DecodeStringLE("f97aa7a97ce4e778a09b80b476e39d0c86b2ef14fa882bb0ebc8bb94e3e628a9") if err != nil { panic(err) } return c.GetBlockByHash(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000999086db552ba8f84734bddca55b25a8d3d8c5f866f941209169c38d35376e99b29ffa96224227f5e033c9a291bceef2724429d596c3a6944cafd6995fdb6dcbe013dd5b010000004ded49fea284b451be48d3a3f5d10013ab9ffee489706078714f1ea201c340356a91d94e398170e47447d6a0f60aa5470e209782a5452403115a49166db3e1c4a3898122db19f779c30f8ccd0b7d401acdf71eda340655e4ae5237a64961bf4034dd47955e5a71627dafc39dd92999140e9eaeec6b11dbb2b313efa3f1093ed915b4455e199c69ec53778f94ffc236b92f8b97fff97a1f6bbb3770c0c0b3844a40fbe743bd5c90b2f5255e0b073281d7aeb2fb516572f36bec8446bcc37ac755cbf10d08b16c95644db1b2dddc2df5daa377880b20198fc7b967ac6e76474b22df8b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae0100004ded49fe00000000"}`, + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00000000a78c4548ad5fd899f4980cffcc8610f4dc22037de3f1fd374cc4384e1eb24e85f0bd34849ad1bda48acd6b9c9401654f9e6499f95dab85923de66c3b1242d59c858e955e050000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140445e8de1ba402cab0bffedc32840b3587c8f6b272c02ea2b4a609419fbcb85a3cf5cd183ea7d28788eb19a12265be1d2f43f7986de66c8d8585d66825a0701fc40d935dfb83310d3433a7afc0bbb15f4c0686a624734cee6f6b98d5d95e660401c5b35c7cfd802fa82759aab288373ad894d82056d29109e6142d8c1397f60706f4076e9fd7bef3b9a8ce12904414cc55293161bcb536a4939200dd3c586c4d60ded565780d307598b8dcf4eebb64f53cc9fc0c381d47e58b7cec1b9392097a2b3ec407b03a25d83d429810b7a929f48b8125d3bfff5982f876c0dbd1d9dbbf08534d3235a4709c7f779449ed865ca1d2e29729c0210174782869a09c2b821bd15fda18b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae010000d50400000500000000000000"}`, 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, "e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c", res.Hash().StringLE()) - assert.Equal(t, "996e37358dc369912041f966f8c5d8d3a8255ba5dcbd3447f8a82b55db869099", res.PrevHash.StringLE()) - assert.Equal(t, "cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2", res.MerkleRoot.StringLE()) + assert.Equal(t, "a928e6e394bbc8ebb02b88fa14efb2860c9de376b4809ba078e7e47ca9a77af9", res.Hash().StringLE()) + assert.Equal(t, "854eb21e4e38c44c37fdf1e37d0322dcf41086ccff0c98f499d85fad48458ca7", res.PrevHash.StringLE()) + assert.Equal(t, "9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0", res.MerkleRoot.StringLE()) assert.Equal(t, 1, len(res.Transactions)) - assert.Equal(t, "cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2", res.Transactions[0].Hash().StringLE()) + assert.Equal(t, "9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0", res.Transactions[0].Hash().StringLE()) }, }, { name: "byHash_verbose_positive", invoke: func(c *Client) (i interface{}, err error) { - hash, err := util.Uint256DecodeStringLE("e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c") + hash, err := util.Uint256DecodeStringLE("f97aa7a97ce4e778a09b80b476e39d0c86b2ef14fa882bb0ebc8bb94e3e628a9") if err != nil { panic(err) } return c.GetBlockByHashVerbose(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xe93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c","size":452,"version":0,"nextblockhash":"0xcc37d5bc460e72c9423015cb8d579c13e7b03b93bfaa1a23cf4fa777988e035f","previousblockhash":"0x996e37358dc369912041f966f8c5d8d3a8255ba5dcbd3447f8a82b55db869099","merkleroot":"0xcb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2","time":1541215200,"index":1,"nonce":"51b484a2fe49ed4d","nextconsensus":"AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU","confirmations":10534,"script":{"invocation":"40356a91d94e398170e47447d6a0f60aa5470e209782a5452403115a49166db3e1c4a3898122db19f779c30f8ccd0b7d401acdf71eda340655e4ae5237a64961bf4034dd47955e5a71627dafc39dd92999140e9eaeec6b11dbb2b313efa3f1093ed915b4455e199c69ec53778f94ffc236b92f8b97fff97a1f6bbb3770c0c0b3844a40fbe743bd5c90b2f5255e0b073281d7aeb2fb516572f36bec8446bcc37ac755cbf10d08b16c95644db1b2dddc2df5daa377880b20198fc7b967ac6e76474b22df","verification":"532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae"},"tx":[{"txid":"0xcb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2","size":10,"type":"MinerTransaction","version":0,"attributes":[],"vin":[],"vout":[],"scripts":[],"sys_fee":"0","net_fee":"0","nonce":4266257741}]}}`, + serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"hash":"0xa928e6e394bbc8ebb02b88fa14efb2860c9de376b4809ba078e7e47ca9a77af9","size":523,"version":0,"nextblockhash":"0x5ff4068d996cbefb6fb6e36f6c8085a79f7ab28cc3149b6f49a55cf97fa4b513","previousblockhash":"0x854eb21e4e38c44c37fdf1e37d0322dcf41086ccff0c98f499d85fad48458ca7","merkleroot":"0x9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0","time":1586859653,"index":5,"nonce":"0000000000000457","nextconsensus":"AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU","confirmations":203,"script":{"invocation":"40445e8de1ba402cab0bffedc32840b3587c8f6b272c02ea2b4a609419fbcb85a3cf5cd183ea7d28788eb19a12265be1d2f43f7986de66c8d8585d66825a0701fc40d935dfb83310d3433a7afc0bbb15f4c0686a624734cee6f6b98d5d95e660401c5b35c7cfd802fa82759aab288373ad894d82056d29109e6142d8c1397f60706f4076e9fd7bef3b9a8ce12904414cc55293161bcb536a4939200dd3c586c4d60ded565780d307598b8dcf4eebb64f53cc9fc0c381d47e58b7cec1b9392097a2b3ec407b03a25d83d429810b7a929f48b8125d3bfff5982f876c0dbd1d9dbbf08534d3235a4709c7f779449ed865ca1d2e29729c0210174782869a09c2b821bd15fda1","verification":"532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae"},"tx":[{"sys_fee":"0","net_fee":"0","txid":"0x9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0","size":14,"type":"MinerTransaction","version":0,"nonce":1237,"valid_until_block":5,"attributes":[],"vin":[],"vout":[],"scripts":[]}]}}`, result: func(c *Client) interface{} { - hash, err := util.Uint256DecodeStringLE("e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c") + hash, err := util.Uint256DecodeStringLE("a928e6e394bbc8ebb02b88fa14efb2860c9de376b4809ba078e7e47ca9a77af9") if err != nil { panic(err) } - nextBlockHash, err := util.Uint256DecodeStringLE("cc37d5bc460e72c9423015cb8d579c13e7b03b93bfaa1a23cf4fa777988e035f") + nextBlockHash, err := util.Uint256DecodeStringLE("5ff4068d996cbefb6fb6e36f6c8085a79f7ab28cc3149b6f49a55cf97fa4b513") if err != nil { panic(err) } - prevBlockHash, err := util.Uint256DecodeStringLE("996e37358dc369912041f966f8c5d8d3a8255ba5dcbd3447f8a82b55db869099") + prevBlockHash, err := util.Uint256DecodeStringLE("854eb21e4e38c44c37fdf1e37d0322dcf41086ccff0c98f499d85fad48458ca7") if err != nil { panic(err) } - merkleRoot, err := util.Uint256DecodeStringLE("cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2") + merkleRoot, err := util.Uint256DecodeStringLE("9cd542123b6ce63d9285ab5df999649e4f6501949c6bcd8aa4bdd19a8434bdf0") if err != nil { panic(err) } - invScript, err := hex.DecodeString("40356a91d94e398170e47447d6a0f60aa5470e209782a5452403115a49166db3e1c4a3898122db19f779c30f8ccd0b7d401acdf71eda340655e4ae5237a64961bf4034dd47955e5a71627dafc39dd92999140e9eaeec6b11dbb2b313efa3f1093ed915b4455e199c69ec53778f94ffc236b92f8b97fff97a1f6bbb3770c0c0b3844a40fbe743bd5c90b2f5255e0b073281d7aeb2fb516572f36bec8446bcc37ac755cbf10d08b16c95644db1b2dddc2df5daa377880b20198fc7b967ac6e76474b22df") + invScript, err := hex.DecodeString("40445e8de1ba402cab0bffedc32840b3587c8f6b272c02ea2b4a609419fbcb85a3cf5cd183ea7d28788eb19a12265be1d2f43f7986de66c8d8585d66825a0701fc40d935dfb83310d3433a7afc0bbb15f4c0686a624734cee6f6b98d5d95e660401c5b35c7cfd802fa82759aab288373ad894d82056d29109e6142d8c1397f60706f4076e9fd7bef3b9a8ce12904414cc55293161bcb536a4939200dd3c586c4d60ded565780d307598b8dcf4eebb64f53cc9fc0c381d47e58b7cec1b9392097a2b3ec407b03a25d83d429810b7a929f48b8125d3bfff5982f876c0dbd1d9dbbf08534d3235a4709c7f779449ed865ca1d2e29729c0210174782869a09c2b821bd15fda1") if err != nil { panic(err) } @@ -266,21 +269,22 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ if err != nil { panic(err) } - tx := transaction.NewMinerTXWithNonce(4266257741) + tx := transaction.NewMinerTXWithNonce(1237) + tx.ValidUntilBlock = 5 // Update hashes for correct result comparison. _ = tx.Hash() return &result.Block{ Hash: hash, - Size: 452, + Size: 523, Version: 0, NextBlockHash: &nextBlockHash, PreviousBlockHash: prevBlockHash, MerkleRoot: merkleRoot, - Time: 1541215200, - Index: 1, - Nonce: "51b484a2fe49ed4d", + Time: 1586859653, + Index: 5, + Nonce: "0000000000000457", NextConsensus: "AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU", - Confirmations: 10534, + Confirmations: 203, Script: transaction.Witness{ InvocationScript: invScript, VerificationScript: verifScript, @@ -606,19 +610,19 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "positive", invoke: func(c *Client) (i interface{}, err error) { - hash, err := util.Uint256DecodeStringLE("cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2") + hash, err := util.Uint256DecodeStringLE("0b698b4ac68fc3206e65868e8f51ea5ac29e92b5faf9e79562cd57fc744d47c5") if err != nil { panic(err) } return c.GetRawTransaction(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00004ded49fe00000000"}`, + serverResponse: `{"id":1,"jsonrpc":"2.0","result":"00001dac2b7c0100000000000000"}`, 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, "cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2", res.Hash().StringLE()) + assert.Equal(t, "0b698b4ac68fc3206e65868e8f51ea5ac29e92b5faf9e79562cd57fc744d47c5", res.Hash().StringBE()) assert.Equal(t, transaction.MinerType, res.Type) assert.Equal(t, false, res.Trimmed) }, @@ -626,19 +630,20 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ { name: "verbose_positive", invoke: func(c *Client) (interface{}, error) { - hash, err := util.Uint256DecodeStringLE("cb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2") + hash, err := util.Uint256DecodeStringLE("0b698b4ac68fc3206e65868e8f51ea5ac29e92b5faf9e79562cd57fc744d47c5") if err != nil { panic(err) } return c.GetRawTransactionVerbose(hash) }, - serverResponse: `{"id":1,"jsonrpc":"2.0","result":{"nonce":4266257741,"type":"MinerTransaction","version":0,"attributes":[],"vin":[],"vout":[],"scripts":[],"txid":"0xcb6ddb5f99d6af4c94a6c396d5294472f2eebc91a2c933e0f527422296fa9fb2","size":10,"sys_fee":"0","net_fee":"0","blockhash":"0xe93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c","confirmations":20875,"blocktime":1541215200}}`, + serverResponse: `{"jsonrpc":"2.0","id":1,"result":{"sys_fee":"0","net_fee":"0","blockhash":"0x77007ec4921dd78e91c26bee9c14b49148ae08140f698accea49ecc279e68435","confirmations":210,"blocktime":1468595301,"txid":"0xc5474d74fc57cd6295e7f9fab5929ec25aea518f8e86656e20c38fc64a8b690b","size":14,"type":"MinerTransaction","version":0,"nonce":2083236893,"valid_until_block":1,"attributes":[],"vin":[],"vout":[],"scripts":[]}}`, result: func(c *Client) interface{} { - blockHash, err := util.Uint256DecodeStringLE("e93d17a52967f9e69314385482bf86f85260e811b46bf4d4b261a7f4135a623c") + blockHash, err := util.Uint256DecodeStringLE("77007ec4921dd78e91c26bee9c14b49148ae08140f698accea49ecc279e68435") if err != nil { panic(err) } - tx := transaction.NewMinerTXWithNonce(4266257741) + tx := transaction.NewMinerTXWithNonce(2083236893) + tx.ValidUntilBlock = 1 // Update hashes for correct result comparison. _ = tx.Hash() @@ -648,8 +653,8 @@ var rpcClientTestCases = map[string][]rpcClientTestCase{ SysFee: 0, NetFee: 0, Blockhash: blockHash, - Confirmations: 20875, - Timestamp: uint32(1541215200), + Confirmations: 210, + Timestamp: uint32(1468595301), }, } }, @@ -1438,3 +1443,50 @@ func requestHandler(t *testing.T, w http.ResponseWriter, resp string) { t.Fatalf("Error encountered while encoding response: %s", err.Error()) } } + +func TestCalculateValidUntilBlock(t *testing.T) { + var ( + getBlockCountCalled int + getValidatorsCalled int + ) + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + r := request.NewIn() + err := r.DecodeData(req.Body) + if err != nil { + t.Fatalf("Cannot decode request body: %s", req.Body) + } + var response string + switch r.Method { + case "getblockcount": + getBlockCountCalled++ + response = `{"jsonrpc":"2.0","id":1,"result":50}` + case "getvalidators": + getValidatorsCalled++ + response = `{"id":1,"jsonrpc":"2.0","result":[{"publickey":"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2","votes":"0","active":true},{"publickey":"02103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e","votes":"0","active":true},{"publickey":"03d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee699","votes":"0","active":true},{"publickey":"02a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd62","votes":"0","active":true}]}` + default: + t.Fatalf("Bad request method: %s", r.Method) + } + requestHandler(t, w, response) + })) + defer srv.Close() + + endpoint := srv.URL + opts := Options{} + c, err := New(context.TODO(), endpoint, opts) + if err != nil { + t.Fatal(err) + } + + validUntilBlock, err := c.CalculateValidUntilBlock() + assert.NoError(t, err) + assert.Equal(t, uint32(54), validUntilBlock) + assert.Equal(t, 1, getBlockCountCalled) + assert.Equal(t, 1, getValidatorsCalled) + + // check, whether caching is working + validUntilBlock, err = c.CalculateValidUntilBlock() + assert.NoError(t, err) + assert.Equal(t, uint32(54), validUntilBlock) + assert.Equal(t, 2, getBlockCountCalled) + assert.Equal(t, 1, getValidatorsCalled) +} diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index b4a7ff552..1a0108ce8 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -49,14 +49,14 @@ var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["0d77a6c348097c4b29fd9d0fe8657c621bc7d804034c71272e3c4f13775138f2"]`, + params: `["e5a6be3cd796e2284a55ebb2061f85d3f199263bbf659dbd5b670a6506e7a4a0"]`, 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("0d77a6c348097c4b29fd9d0fe8657c621bc7d804034c71272e3c4f13775138f2") + expectedTxHash, err := util.Uint256DecodeStringLE("e5a6be3cd796e2284a55ebb2061f85d3f199263bbf659dbd5b670a6506e7a4a0") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) @@ -251,7 +251,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "getassetstate": { { name: "positive", - params: `["057ea06225860f0f7e69cca1e0052652918629929591b8138a516431be144ba8"]`, + params: `["8dd7d330dd7fc103836409bdcba826d15d88119c7f843357266b253aede72dfb"]`, result: func(e *executor) interface{} { return &result.AssetState{} }, check: func(t *testing.T, e *executor, as interface{}) { res, ok := as.(*result.AssetState) @@ -405,25 +405,25 @@ var rpcTestCases = map[string][]rpcTestCase{ "getblockheader": { { name: "positive, no verbose", - params: `["7c32645dab0d87cfaddd5db053e2430c669f807e9efc2b91d1f50a824893352f"]`, + params: `["02b9e6f634578f34c6026f1676e25aa04f58889a320fba8bc632c6fe48c26cf1"]`, result: func(e *executor) interface{} { - expected := "000000002534685cc322d339f957ea368a654bf30b834be4cac0b8441375cce2a37630625507db78d2a2f3130c6073bd68f57202248fdc8966fa8706e88eb0fc61df74085384945e010000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140b622b3bdddb8c5e52ae8b4bce5665eb6e2aca950ba72386ea0d37e364af2c7fc40f009c47e1a2140bee90d1e2f81c705d6f2499fe6230b27d1f225c45f38d3c440ec01e743024c2c63dccb2ca4a555eeadb2e6115fe6bc42a8d5c17093828e4ea779b36c6d1535c70c047c709183fc1c93139153291dd0edb614dd3e17d67038dd400f7635816214254b7fba0bb480e2a0ab149c84854adcb542124e67f4cedbf551690f8048271c3f05bbe50f576dcbaf3607afffa2551480cdc24908df0fd47c60408d724d6cfb9bf99e38dc42974f084d110057d3f23a04f5bbf99f5712dad17ae842416bb3e30fee034a317280565cb772f8a61fd09cb05e76db27c5fc7722819f8b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae00" + expected := "000000009456b8c7f89bdfe012a30a2be9af5218e048ae7372115ce3e39cc847c01e9e7f9cffa26c112eb147a995520e47afbc45a192d9bf1a8e9b8f80497e5d92c4e9f2129e965e010000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd0401408ee2187395071a089e3b9743b1a718fa28a8700676451317f7454aade98cf779b0afb5634a7e104f92e2df8e8b1c1b7b3b0e9fd61f4c0e9ea07ce112cef12b9a40fcb441c89b0c2047ba71a86d759bc2554dda55369798e6ab63e6c7713b06a8178f13586edf6a673f20bf5ed7bdc727f9e0c6f487cf667e505a26236d73887ae940691972a6f4ccef19a03a3d5948dfcf992af2c6a3c5b033a0f9235d2b8967291d9f61495ff1a681f240517c8d892eaa805e667bca40abcf03d441c68a9ec59deb4005890a59d83c7cb0416895e4768123e900603d5b140bf799bc9879fb628c598193db2b7a8e07ab54733c1c67b60c97a1a8048961cc0afd0b048e878866ffd7298b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae00" return &expected }, }, { name: "positive, verbose 0", - params: `["7c32645dab0d87cfaddd5db053e2430c669f807e9efc2b91d1f50a824893352f", 0]`, + params: `["02b9e6f634578f34c6026f1676e25aa04f58889a320fba8bc632c6fe48c26cf1", 0]`, result: func(e *executor) interface{} { - expected := "000000002534685cc322d339f957ea368a654bf30b834be4cac0b8441375cce2a37630625507db78d2a2f3130c6073bd68f57202248fdc8966fa8706e88eb0fc61df74085384945e010000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140b622b3bdddb8c5e52ae8b4bce5665eb6e2aca950ba72386ea0d37e364af2c7fc40f009c47e1a2140bee90d1e2f81c705d6f2499fe6230b27d1f225c45f38d3c440ec01e743024c2c63dccb2ca4a555eeadb2e6115fe6bc42a8d5c17093828e4ea779b36c6d1535c70c047c709183fc1c93139153291dd0edb614dd3e17d67038dd400f7635816214254b7fba0bb480e2a0ab149c84854adcb542124e67f4cedbf551690f8048271c3f05bbe50f576dcbaf3607afffa2551480cdc24908df0fd47c60408d724d6cfb9bf99e38dc42974f084d110057d3f23a04f5bbf99f5712dad17ae842416bb3e30fee034a317280565cb772f8a61fd09cb05e76db27c5fc7722819f8b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae00" + expected := "000000009456b8c7f89bdfe012a30a2be9af5218e048ae7372115ce3e39cc847c01e9e7f9cffa26c112eb147a995520e47afbc45a192d9bf1a8e9b8f80497e5d92c4e9f2129e965e010000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd0401408ee2187395071a089e3b9743b1a718fa28a8700676451317f7454aade98cf779b0afb5634a7e104f92e2df8e8b1c1b7b3b0e9fd61f4c0e9ea07ce112cef12b9a40fcb441c89b0c2047ba71a86d759bc2554dda55369798e6ab63e6c7713b06a8178f13586edf6a673f20bf5ed7bdc727f9e0c6f487cf667e505a26236d73887ae940691972a6f4ccef19a03a3d5948dfcf992af2c6a3c5b033a0f9235d2b8967291d9f61495ff1a681f240517c8d892eaa805e667bca40abcf03d441c68a9ec59deb4005890a59d83c7cb0416895e4768123e900603d5b140bf799bc9879fb628c598193db2b7a8e07ab54733c1c67b60c97a1a8048961cc0afd0b048e878866ffd7298b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae00" return &expected }, }, { name: "positive, verbose !=0", - params: `["7c32645dab0d87cfaddd5db053e2430c669f807e9efc2b91d1f50a824893352f", 2]`, + params: `["02b9e6f634578f34c6026f1676e25aa04f58889a320fba8bc632c6fe48c26cf1", 2]`, result: func(e *executor) interface{} { - hash, err := util.Uint256DecodeStringLE("7c32645dab0d87cfaddd5db053e2430c669f807e9efc2b91d1f50a824893352f") + hash, err := util.Uint256DecodeStringLE("02b9e6f634578f34c6026f1676e25aa04f58889a320fba8bc632c6fe48c26cf1") if err != nil { panic("can not decode hash parameter") } @@ -520,7 +520,7 @@ var rpcTestCases = map[string][]rpcTestCase{ params: `["AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU"]`, result: func(*executor) interface{} { // hash of the issueTx - h, _ := util.Uint256DecodeStringBE("6a46738cd6f821d3b2d96e68c3feb5fcfe81d08a711baadbb68cbfb034fa29c5") + h, _ := util.Uint256DecodeStringBE("7b5710faf4ea62e3cd7f526d3dad39e85e1823c62340c88b80e36fd99342457a") amount := util.Fixed8FromInt64(1 * 8) // (endHeight - startHeight) * genAmount[0] return &result.ClaimableInfo{ Spents: []result.Claimable{ @@ -579,7 +579,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "gettransactionheight": { { name: "poositive", - params: `["3fe72668fa667b8bb0a77ac2375402d52fafc18e6d0a4c12a401dc69bdf515c2"]`, + params: `["2f0ed00979cb5feae842946be2afb96deec9c13236605fda63737db223089a00"]`, result: func(e *executor) interface{} { h := 1 return &h @@ -791,7 +791,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "sendrawtransaction": { { name: "positive", - params: `["80001300000000015b090ad71ea0c192adc820401b2edc6a197788ee8e5e42a9c5e5e00d700c5da1010001250815d6e93c89e6d2f7279bd5781317d1bfb1ee30aca4c338524654563b3acd0030d3dec38623002baa76ad534b886cb87c6b3720a34943d9000fa90141409646e3dd0dd87685eadac1f682fa63db83729f780a7b2e739cb372ceeaadb3f19260060b34c83fec46e48a6288b2bc5c641e75d1cb358e9c185425a2e6e3fdab232102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2ac"]`, + params: `["800013000000b004000000010655773cea2a4f8cc66f83989605a58e87e885b6aaf58d450db3b83f81a2c950010001a9bf999e43ccfe9d40c3450fc75ca4b02db9b1691a7e1989b331f621456289050030d3dec38623002baa76ad534b886cb87c6b3720a34943d9000fa9014140faa7f2c3f700838aa48be950aff762c050f1cf04f1185fb3893820f63a98ccbfed05e8c5931f67ade59054c853be1d37ff9e75ed65b0543255ff28a3f8667670232102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2ac"]`, result: func(e *executor) interface{} { v := true return &v @@ -822,7 +822,7 @@ var rpcTestCases = map[string][]rpcTestCase{ { // If you are planning to modify test chain from `testblocks.acc`, please, update param value (first block) name: "empty block", - params: `["00000000565f6b8fab486930d5ece5feb93060f010b556b2d4aa618878326ed93604ed6400000000000000000000000000000000000000000000000000000000000000002385945ed10000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd0401408313b36a61c137d327bec8791dfbb22ae9627fbcd2b023236f65188376f1ff4913c554b276cf7e84c5446fb495df2ed7cd34577ef9a4f9dd0dd27654aa53abe040acf3d5327c50e08bf97d794b6ec021223b8c493f9b71f8844446a01a99e555d517d30b84cbb2a5dcbafb5171373f4d0e6c8aea54f46901455d62545f75bdd2a640c359e2365bfe6f9b7b58a09e7e78f2bee85dbb4f823f9bee31b297cb2eb804eb4a5f1858a729d9676ab2c63b91bee5726c7b38086a04f3fe0ca23155331c476840dfddf4c173a374aacff6d2f37b327256556aa37d7c38c41dfda1f42d25f33d921b41da271aa27f7872f7b2b0b00f90a7ee83f5823ea1cc4f9db90a0100a8b7868b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae00"]`, + params: `["0000000029e2ea0ec5c9aa98fa736b52750916b3b8ab5cdbe7647fb6d0b7f6dac35865640000000000000000000000000000000000000000000000000000000000000000e29e965ed10000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140efdc94ac1e5c7588a1e70aa2ada3450631f30b15676861e7f32159f0e0b97e5fec8dd9870d92755e76b2cf3d6a90f06c2f6a7b782248ac4b765433beb6891a4840551f59a1e88395290ea2273500c60fc55b0d33ab6c3ddd565177f77083e82aaffca3553a0a116b457d5101f8627da39a3a24f19e2d04fab7e65670fda6a50f4140576969f478e6150b128b1149dd3c8b663f27bda53a6815fe177d52abc6ad40311a4fcba14a0d9286d6cda521cd9bc0ade09a66e88059da84363512c6110f4dc94008e8c0e6f3835281690fa0d594a6f5f1914b2f047fe835b134641b5a19935a4f6b10931ad168e47f96f6bf98380c0f060d4b25ae71869c4ef9d2a92a262eceeb8b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae00"]`, fail: true, }, { @@ -848,7 +848,7 @@ var rpcTestCases = map[string][]rpcTestCase{ { name: "positive", // If you are planning to modify test chain from `testblocks.acc`, please, update param value (second block) - params: `["00000000565f6b8fab486930d5ece5feb93060f010b556b2d4aa618878326ed93604ed645c23aae5b26be3d759680239a4276be0d2e76de303ef3fda96da97e8a3f6a0f12385945ed10000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140accd1571b3c25e4a6ec80f3bfc8ca3360f51232ed615b756e88424c1c083bd4c0d37f98156c8b87a36710467a75ff3938acea5bbd6a683d439004e2a30665562405de64537c7a411055504bec46851101a3ee9a3db02a7fb0feff781bee43a71ff7e76e03f273437bb94ad1f58dbe29eff32d9299bae0f48860a89a74ed5a48900400a337ce23f8dd767d043ba2b0886ba25d3905a1493ba70a96b297179914d096dfb8621f40e5efa63205af46b8ae71198846affcf02b9137752fcf3d54a683faa408d54fcd4d5235ff48b8dbe7d6f2e0b75ea3dc1bcd563ae44c8c8df201f5039fd30357d8c6709a0639a4aef07a223ca2ae21a74494808bc8b8f2955e7b26bdd148b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae0100001400000000000000"]`, + params: `["0000000029e2ea0ec5c9aa98fa736b52750916b3b8ab5cdbe7647fb6d0b7f6dac3586564980135e10c52e5444c962659b388a5b226114a45d3912a88700ac6b05aaaf961e29e965ed10000005704000000000000be48d3a3f5d10013ab9ffee489706078714f1ea201fd040140a0ed19af416fc4edb6e32b4687290d4eff1262af338dc8e55021a13f500ce94377c0fca593db15e29a0ee11b229d8bb48bd75203834829aee47096ff375ef8e240bcccad08d1ae7cc47c099eb4321a1fe07cf77a434841fd48a04aaf19204ec5bbf465533a2845a323710ea068316f50be82c384c82e0a5a509b2a9442c6a7909640de0a52dd615efac136971be900700ec39a84198e7d1639e880955022901a8d98ff39f00e858b41686047d68d7c18963b9def50a85907eb3b0bfbba7b2fa64d814060670b0c648757594cdba09aafc158ee6f7e88fbd2aa088a8c57bff2c8e7ddd83fa242632e1b6f82e3af2b3d0428c3936833cefb7ced1cc3c50ec29da906eb498b532102103a7f7dd016558597f7960d27c516a4394fd968b9e65155eb4b013e4040406e2102a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd622102b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc22103d90c07df63e690ce77912e10ab51acc944b66860237b608c4f8f8309e71ee69954ae01000014000000b004000000000000"]`, result: func(e *executor) interface{} { v := true return &v @@ -921,7 +921,7 @@ func TestRPC(t *testing.T) { var res string err := json.Unmarshal(result, &res) require.NoErrorf(t, err, "could not parse response: %s", result) - assert.Equal(t, "40000000000000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b00000000", res) + assert.Equal(t, "4000000000000000000000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b00000000", res) }) t.Run("getrawtransaction 2 arguments", func(t *testing.T) { @@ -933,7 +933,7 @@ func TestRPC(t *testing.T) { var res string err := json.Unmarshal(result, &res) require.NoErrorf(t, err, "could not parse response: %s", result) - assert.Equal(t, "40000000000000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b00000000", res) + assert.Equal(t, "4000000000000000000000455b7b226c616e67223a227a682d434e222c226e616d65223a22e5b08fe89a81e882a1227d2c7b226c616e67223a22656e222c226e616d65223a22416e745368617265227d5d0000c16ff28623000000da1745e9b549bd0bfa1a569971c77eba30cd5a4b00000000", res) }) t.Run("getrawtransaction 2 arguments, verbose", func(t *testing.T) { @@ -973,7 +973,7 @@ func TestRPC(t *testing.T) { err := json.Unmarshal(res, &txOut) require.NoErrorf(t, err, "could not parse response: %s", res) assert.Equal(t, 0, txOut.N) - assert.Equal(t, "0x250815d6e93c89e6d2f7279bd5781317d1bfb1ee30aca4c338524654563b3acd", txOut.Asset) + assert.Equal(t, "0xa9bf999e43ccfe9d40c3450fc75ca4b02db9b1691a7e1989b331f62145628905", txOut.Asset) assert.Equal(t, util.Fixed8FromInt64(100000000), txOut.Value) assert.Equal(t, "AZ81H31DMWzbSnFDLFkzh9vHwaDLayV7fU", txOut.Address) }) diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index a851b16b3f6201bcc91317664b8a89156ba537e9..33aa0230fb0343e4999de6c266068a269629e3c6 100644 GIT binary patch literal 112624 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 literal 111756 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 From 70da3c86f1b86380ad6a779010f51b3b44dd1b95 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Tue, 14 Apr 2020 15:36:29 +0300 Subject: [PATCH 2/2] rpc: fix typo Fixed typo in annotation of CalculateInputs method of RPC Client. --- pkg/rpc/client/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/rpc/client/client.go b/pkg/rpc/client/client.go index cc4513f6d..3a5c2820f 100644 --- a/pkg/rpc/client/client.go +++ b/pkg/rpc/client/client.go @@ -173,7 +173,7 @@ func (c *Client) SetClient(cli *http.Client) { // CalculateInputs creates input transactions 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 suppors that. +// 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