From 7d198b49c37721db2c340e4d6312fe88395d02ce Mon Sep 17 00:00:00 2001 From: miiu Date: Thu, 27 Nov 2025 13:50:24 +0200 Subject: [PATCH 1/2] fix --- go.mod | 2 +- go.sum | 4 ++-- process/elasticproc/transactions/interface.go | 2 +- .../transactions/smartContractResultsProcessor.go | 2 +- process/elasticproc/transactions/transactionDBBuilder.go | 2 +- process/elasticproc/transactions/transactionsProcessor.go | 5 +++-- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 315531ff..687615fa 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/multiversx/mx-chain-communication-go v1.3.0 github.com/multiversx/mx-chain-core-go v1.4.0 github.com/multiversx/mx-chain-logger-go v1.1.0 - github.com/multiversx/mx-chain-vm-common-go v1.6.0 + github.com/multiversx/mx-chain-vm-common-go v1.6.1-0.20251127112501-0b5f28e33b2e github.com/prometheus/client_model v0.6.1 github.com/prometheus/common v0.62.0 github.com/stretchr/testify v1.10.0 diff --git a/go.sum b/go.sum index 02b1c53c..f43cbce0 100644 --- a/go.sum +++ b/go.sum @@ -136,8 +136,8 @@ github.com/multiversx/mx-chain-crypto-go v1.3.0 h1:0eK2bkDOMi8VbSPrB1/vGJSYT81IB github.com/multiversx/mx-chain-crypto-go v1.3.0/go.mod h1:nPIkxxzyTP8IquWKds+22Q2OJ9W7LtusC7cAosz7ojM= github.com/multiversx/mx-chain-logger-go v1.1.0 h1:97x84A6L4RfCa6YOx1HpAFxZp1cf/WI0Qh112whgZNM= github.com/multiversx/mx-chain-logger-go v1.1.0/go.mod h1:K9XgiohLwOsNACETMNL0LItJMREuEvTH6NsoXWXWg7g= -github.com/multiversx/mx-chain-vm-common-go v1.6.0 h1:M2zmf/ptEINciWxYCPLIkwOMTvvzWjELYYB+0MMQ5Gw= -github.com/multiversx/mx-chain-vm-common-go v1.6.0/go.mod h1:Lc7r4VDPYRDS0CVIaWAoLtf3YQn6PZEYHv4QtaOE2Z0= +github.com/multiversx/mx-chain-vm-common-go v1.6.1-0.20251127112501-0b5f28e33b2e h1:3gboKT4hPEb9ZkAYO2Z/y3sOaUBzxVMN4FhyLFcRSHI= +github.com/multiversx/mx-chain-vm-common-go v1.6.1-0.20251127112501-0b5f28e33b2e/go.mod h1:Lc7r4VDPYRDS0CVIaWAoLtf3YQn6PZEYHv4QtaOE2Z0= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= diff --git a/process/elasticproc/transactions/interface.go b/process/elasticproc/transactions/interface.go index 4a201d14..3bfd5a2d 100644 --- a/process/elasticproc/transactions/interface.go +++ b/process/elasticproc/transactions/interface.go @@ -7,7 +7,7 @@ import ( // DataFieldParser defines what a data field parser should be able to do type DataFieldParser interface { - Parse(dataField []byte, sender, receiver []byte, numOfShards uint32) *datafield.ResponseParseData + Parse(dataField []byte, sender, receiver []byte, numOfShards uint32, epoch uint32) *datafield.ResponseParseData } type feeInfoHandler interface { diff --git a/process/elasticproc/transactions/smartContractResultsProcessor.go b/process/elasticproc/transactions/smartContractResultsProcessor.go index 6ef4a904..300e2f18 100644 --- a/process/elasticproc/transactions/smartContractResultsProcessor.go +++ b/process/elasticproc/transactions/smartContractResultsProcessor.go @@ -136,7 +136,7 @@ func (proc *smartContractResultsProcessor) prepareSmartContractResult( originalSenderAddr = proc.pubKeyConverter.SilentEncode(scr.OriginalSender, log) } - res := proc.dataFieldParser.Parse(scr.Data, scr.SndAddr, scr.RcvAddr, numOfShards) + res := proc.dataFieldParser.Parse(scr.Data, scr.SndAddr, scr.RcvAddr, numOfShards, header.GetEpoch()) senderAddr := proc.pubKeyConverter.SilentEncode(scr.SndAddr, log) receiverAddr := proc.pubKeyConverter.SilentEncode(scr.RcvAddr, log) diff --git a/process/elasticproc/transactions/transactionDBBuilder.go b/process/elasticproc/transactions/transactionDBBuilder.go index 1164eb81..44bf2950 100644 --- a/process/elasticproc/transactions/transactionDBBuilder.go +++ b/process/elasticproc/transactions/transactionDBBuilder.go @@ -49,7 +49,7 @@ func (dtb *dbTransactionBuilder) prepareTransaction( tx := txInfo.Transaction isScCall := core.IsSmartContractAddress(tx.RcvAddr) - res := dtb.dataFieldParser.Parse(tx.Data, tx.SndAddr, tx.RcvAddr, numOfShards) + res := dtb.dataFieldParser.Parse(tx.Data, tx.SndAddr, tx.RcvAddr, numOfShards, header.GetEpoch()) receiverAddr := dtb.addressPubkeyConverter.SilentEncode(tx.RcvAddr, log) senderAddr := dtb.addressPubkeyConverter.SilentEncode(tx.SndAddr, log) diff --git a/process/elasticproc/transactions/transactionsProcessor.go b/process/elasticproc/transactions/transactionsProcessor.go index 890f9332..b4ecda7c 100644 --- a/process/elasticproc/transactions/transactionsProcessor.go +++ b/process/elasticproc/transactions/transactionsProcessor.go @@ -45,8 +45,9 @@ func NewTransactionsProcessor(args *ArgsTransactionProcessor) (*txsDatabaseProce } argsParser := &datafield.ArgsOperationDataFieldParser{ - AddressLength: args.AddressPubkeyConverter.Len(), - Marshalizer: args.Marshalizer, + AddressLength: args.AddressPubkeyConverter.Len(), + Marshalizer: args.Marshalizer, + RelayedTransactionsV1V2DisableEpoch: args.EnableEpochsConfig.RelayedTransactionsV1V2DisableEpoch, } operationsDataParser, err := datafield.NewOperationDataFieldParser(argsParser) if err != nil { From dd767815dd838bb91b6da96bd83cf59c70c8a255 Mon Sep 17 00:00:00 2001 From: miiu Date: Thu, 27 Nov 2025 14:36:35 +0200 Subject: [PATCH 2/2] integration test --- integrationtests/relayedTx_test.go | 60 +++++++++++++++++++ .../relayedTx/relayed-tx-after-disable.json | 25 ++++++++ 2 files changed, 85 insertions(+) create mode 100644 integrationtests/testdata/relayedTx/relayed-tx-after-disable.json diff --git a/integrationtests/relayedTx_test.go b/integrationtests/relayedTx_test.go index 67b758bc..00158bd7 100644 --- a/integrationtests/relayedTx_test.go +++ b/integrationtests/relayedTx_test.go @@ -245,3 +245,63 @@ func TestRelayedTransactionIntraShard(t *testing.T) { string(genericResponse.Docs[0].Source), ) } + +func TestRelayedV2Disabled(t *testing.T) { + esClient, err := createESClient(esURL) + require.Nil(t, err) + + esProc, err := CreateElasticProcessor(esClient) + require.Nil(t, err) + + txHash := []byte("relayedTxIntra") + header := &dataBlock.Header{ + Round: 50, + TimeStamp: 5040, + // Relayed v1 and v2 transactions are disabled starting from epoch 1 + Epoch: 10, + } + + body := &dataBlock.Body{ + MiniBlocks: dataBlock.MiniBlockSlice{ + { + Type: dataBlock.TxBlock, + SenderShardID: 0, + ReceiverShardID: 0, + TxHashes: [][]byte{txHash}, + }, + }, + } + + address1 := "erd1k7j6ewjsla4zsgv8v6f6fe3dvrkgv3d0d9jerczw45hzedhyed8sh2u34u" + address2 := "erd14eyayfrvlrhzfrwg5zwleua25mkzgncggn35nvc6xhv5yxwml2es0f3dht" + tx := &transaction.Transaction{ + Nonce: 1196665, + SndAddr: decodeAddress(address1), + RcvAddr: decodeAddress(address2), + GasLimit: 15406000, + GasPrice: 1000000000, + Data: []byte("relayedTxV2@a56f37f2356753eb2db8b8fe6dbf026261653973fc08785b69d0406162e16f9d@028e@4d756c7469455344544e46545472616e73666572403438386264303665386233643233626239386235303663643566323937363838316465323661306438333030303365336564643231373164366666353935646640323040353835303431343334383439343535363435326433353631333033353331333940306440303140343135333438326436313336333433323634333140403035366636303133626238343166656440353734353437346334343264363236343334363433373339404033363035363862306336616330634034643439346534333535326433333338363533393333363440403035366263373565326436333130303030304035373431353434353532326433393635363433343330333040403032326230656162356237336638396330303030403433353235343464343235343264333936323335333633393339403033403031403439353334353534326433383334363533353335363540403138313034626265403533343634393534326436313635363236333339333040403033633738343165323736666535653035664035383530343134333438343934353536343532643335363133303335333133394030314030314034383539353034353264333633313339333633363331404036633662393335623862626434303030303040356135303431353932643332333433373338333733354040303839633831363734383032653636643364403532343934343435326433373634333133383635333940403038343564366639366664666564613540353535333434343332643633333733363636333136364040303831663139403531353735343264333433363631363333303331404030653530636131334034313435353234663264333433353338363236323636404030373937383734356663383339326532613140343334373533326436363331333833363339363440403135326430326337653134616636383030303030403534346634643264363636313331333633343631404034633462343040343534363436346635323534326436313331333333353331333340403037393738373435666338333932653261314035333438343135323434326433393339363133313337333240406430326162343836636564633030303040346434353538326433343335333536333335333740403031306232356130353531303435313139326266403535353334343534326436363338363333303338363340403135363540353734353534343832643632333436333631333233394040393665656261366166304034393534343834353535346432643634363633363636333233364040326162663662323236656464643835323636403534343134633439346634653264333433393336363236313632404063333530403436346635383533353932643335363433353636333336354040303861323332343837623736613830304034363439353234353264363133393631333333323631404030323261616438363563386136346530303030304035353534346232643332363633383330363533394040303632356561633765303761396666633735403438353434643264363633353331363433353335404030666361633939343734343939394034333532353432643335333236343635363336364040303132613966653935666262666563634034333532353532643631333536363334363136314040306132313361316233653263646240353734323534343332643335333333343339363233334040303440343234383431353432643633333136363634363533334040386332626462353330666632396333386265@cf52df0a6c31738ff283b3dade4e18f1c3029a062eccc22fba5cda8510fc02931d7824abdf1bca7d8c24cc72ddc02af5e060dc99fbde1e531b857b63818ff20a"), + Value: big.NewInt(0), + } + txInfo := &outport.TxInfo{ + Transaction: tx, + } + + pool := &outport.TransactionPool{ + Transactions: map[string]*outport.TxInfo{ + hex.EncodeToString(txHash): txInfo, + }, + } + err = esProc.SaveTransactions(createOutportBlockWithHeader(body, header, pool, nil, testNumOfShards)) + require.Nil(t, err) + + ids := []string{hex.EncodeToString(txHash)} + genericResponse := &GenericResponse{} + err = esClient.DoMultiGet(context.Background(), ids, indexerdata.TransactionsIndex, true, genericResponse) + require.Nil(t, err) + + require.JSONEq(t, + readExpectedResult("./testdata/relayedTx/relayed-tx-after-disable.json"), + string(genericResponse.Docs[0].Source), + ) +} diff --git a/integrationtests/testdata/relayedTx/relayed-tx-after-disable.json b/integrationtests/testdata/relayedTx/relayed-tx-after-disable.json new file mode 100644 index 00000000..20fd5ac4 --- /dev/null +++ b/integrationtests/testdata/relayedTx/relayed-tx-after-disable.json @@ -0,0 +1,25 @@ +{ + "miniBlockHash": "be053e3ccb556eb39be6f388fb0ab5256d394d634887be06a6ed996560cbcae7", + "nonce": 1196665, + "round": 50, + "value": "0", + "valueNum": 0, + "receiver": "erd14eyayfrvlrhzfrwg5zwleua25mkzgncggn35nvc6xhv5yxwml2es0f3dht", + "sender": "erd1k7j6ewjsla4zsgv8v6f6fe3dvrkgv3d0d9jerczw45hzedhyed8sh2u34u", + "receiverShard": 0, + "senderShard": 0, + "gasPrice": 1000000000, + "gasLimit": 15406000, + "gasUsed": 0, + "fee": "0", + "feeNum": 0, + "initialPaidFee": "0", + "data": "cmVsYXllZFR4VjJAYTU2ZjM3ZjIzNTY3NTNlYjJkYjhiOGZlNmRiZjAyNjI2MTY1Mzk3M2ZjMDg3ODViNjlkMDQwNjE2MmUxNmY5ZEAwMjhlQDRkNzU2Yzc0Njk0NTUzNDQ1NDRlNDY1NDU0NzI2MTZlNzM2NjY1NzI0MDM0MzgzODYyNjQzMDM2NjUzODYyMzM2NDMyMzM2MjYyMzkzODYyMzUzMDM2NjM2NDM1NjYzMjM5MzczNjM4MzgzMTY0NjUzMjM2NjEzMDY0MzgzMzMwMzAzMDMzNjUzMzY1NjQ2NDMyMzEzNzMxNjQzNjY2NjYzNTM5MzU2NDY2NDAzMjMwNDAzNTM4MzUzMDM0MzEzNDMzMzQzODM0MzkzNDM1MzUzNjM0MzUzMjY0MzMzNTM2MzEzMzMwMzMzNTMzMzEzMzM5NDAzMDY0NDAzMDMxNDAzNDMxMzUzMzM0MzgzMjY0MzYzMTMzMzYzMzM0MzMzMjM2MzQzMzMxNDA0MDMwMzUzNjY2MzYzMDMxMzM2MjYyMzgzNDMxNjY2NTY0NDAzNTM3MzQzNTM0MzczNDYzMzQzNDMyNjQzNjMyMzYzNDMzMzQzNjM0MzMzNzMzMzk0MDQwMzMzNjMwMzUzNjM4NjIzMDYzMzY2MTYzMzA2MzQwMzQ2NDM0MzkzNDY1MzQzMzM1MzUzMjY0MzMzMzMzMzgzNjM1MzMzOTMzMzMzNjM0NDA0MDMwMzUzNjYyNjMzNzM1NjUzMjY0MzYzMzMxMzAzMDMwMzAzMDQwMzUzNzM0MzEzNTM0MzQzNTM1MzIzMjY0MzMzOTM2MzUzNjM0MzMzNDMzMzAzMzMwNDA0MDMwMzIzMjYyMzA2NTYxNjIzNTYyMzczMzY2MzgzOTYzMzAzMDMwMzA0MDM0MzMzNTMyMzUzNDM0NjQzNDMyMzUzNDMyNjQzMzM5MzYzMjMzMzUzMzM2MzMzOTMzMzk0MDMwMzM0MDMwMzE0MDM0MzkzNTMzMzQzNTM1MzQzMjY0MzMzODMzMzQzNjM1MzMzNTMzMzUzNjM1NDA0MDMxMzgzMTMwMzQ2MjYyNjU0MDM1MzMzNDM2MzQzOTM1MzQzMjY0MzYzMTM2MzUzNjMyMzYzMzMzMzkzMzMwNDA0MDMwMzM2MzM3MzgzNDMxNjUzMjM3MzY2NjY1MzU2NTMwMzU2NjQwMzUzODM1MzAzNDMxMzQzMzM0MzgzNDM5MzQzNTM1MzYzNDM1MzI2NDMzMzUzNjMxMzMzMDMzMzUzMzMxMzMzOTQwMzAzMTQwMzAzMTQwMzQzODM1MzkzNTMwMzQzNTMyNjQzMzM2MzMzMTMzMzkzMzM2MzMzNjMzMzE0MDQwMzY2MzM2NjIzOTMzMzU2MjM4NjI2MjY0MzQzMDMwMzAzMDMwNDAzNTYxMzUzMDM0MzEzNTM5MzI2NDMzMzIzMzM0MzMzNzMzMzgzMzM3MzMzNTQwNDAzMDM4Mzk2MzM4MzEzNjM3MzQzODMwMzI2NTM2MzY2NDMzNjQ0MDM1MzIzNDM5MzQzNDM0MzUzMjY0MzMzNzM2MzQzMzMxMzMzODM2MzUzMzM5NDA0MDMwMzgzNDM1NjQzNjY2MzkzNjY2NjQ2NjY1NjQ2MTM1NDAzNTM1MzUzMzM0MzQzNDMzMzI2NDM2MzMzMzM3MzMzNjM2MzYzMzMxMzYzNjQwNDAzMDM4MzE2NjMxMzk0MDM1MzEzNTM3MzUzNDMyNjQzMzM0MzMzNjM2MzEzNjMzMzMzMDMzMzE0MDQwMzA2NTM1MzA2MzYxMzEzMzQwMzQzMTM0MzUzNTMyMzQ2NjMyNjQzMzM0MzMzNTMzMzgzNjMyMzYzMjM2MzY0MDQwMzAzNzM5MzczODM3MzQzNTY2NjMzODMzMzkzMjY1MzI2MTMxNDAzNDMzMzQzNzM1MzMzMjY0MzYzNjMzMzEzMzM4MzMzNjMzMzkzNjM0NDA0MDMxMzUzMjY0MzAzMjYzMzc2NTMxMzQ2MTY2MzYzODMwMzAzMDMwMzA0MDM1MzQzNDY2MzQ2NDMyNjQzNjM2MzYzMTMzMzEzMzM2MzMzNDM2MzE0MDQwMzQ2MzM0NjIzNDMwNDAzNDM1MzQzNjM0MzYzNDY2MzUzMjM1MzQzMjY0MzYzMTMzMzEzMzMzMzMzNTMzMzEzMzMzNDA0MDMwMzczOTM3MzgzNzM0MzU2NjYzMzgzMzM5MzI2NTMyNjEzMTQwMzUzMzM0MzgzNDMxMzUzMjM0MzQzMjY0MzMzOTMzMzkzNjMxMzMzMTMzMzczMzMyNDA0MDY0MzAzMjYxNjIzNDM4MzY2MzY1NjQ2MzMwMzAzMDMwNDAzNDY0MzQzNTM1MzgzMjY0MzMzNDMzMzUzMzM1MzYzMzMzMzUzMzM3NDA0MDMwMzEzMDYyMzIzNTYxMzAzNTM1MzEzMDM0MzUzMTMxMzkzMjYyNjY0MDM1MzUzNTMzMzQzNDM1MzQzMjY0MzYzNjMzMzgzNjMzMzMzMDMzMzgzNjMzNDA0MDMxMzUzNjM1NDAzNTM3MzQzNTM1MzQzNDM4MzI2NDM2MzIzMzM0MzYzMzM2MzEzMzMyMzMzOTQwNDAzOTM2NjU2NTYyNjEzNjYxNjYzMDQwMzQzOTM1MzQzNDM4MzQzNTM1MzUzNDY0MzI2NDM2MzQzNjM2MzMzNjM2MzYzMzMyMzMzNjQwNDAzMjYxNjI2NjM2NjIzMjMyMzY2NTY0NjQ2NDM4MzUzMjM2MzY0MDM1MzQzNDMxMzQ2MzM0MzkzNDY2MzQ2NTMyNjQzMzM0MzMzOTMzMzYzNjMyMzYzMTM2MzI0MDQwNjMzMzM1MzA0MDM0MzYzNDY2MzUzODM1MzMzNTM5MzI2NDMzMzUzNjM0MzMzNTM2MzYzMzMzMzYzNTQwNDAzMDM4NjEzMjMzMzIzNDM4Mzc2MjM3MzY2MTM4MzAzMDQwMzQzNjM0MzkzNTMyMzQzNTMyNjQzNjMxMzMzOTM2MzEzMzMzMzMzMjM2MzE0MDQwMzAzMjMyNjE2MTY0MzgzNjM1NjMzODYxMzYzNDY1MzAzMDMwMzAzMDQwMzUzNTM1MzQzNDYyMzI2NDMzMzIzNjM2MzMzODMzMzAzNjM1MzMzOTQwNDAzMDM2MzIzNTY1NjE2MzM3NjUzMDM3NjEzOTY2NjY2MzM3MzU0MDM0MzgzNTM0MzQ2NDMyNjQzNjM2MzMzNTMzMzEzNjM0MzMzNTMzMzU0MDQwMzA2NjYzNjE2MzM5MzkzNDM3MzQzNDM5MzkzOTQwMzQzMzM1MzIzNTM0MzI2NDMzMzUzMzMyMzYzNDM2MzUzNjMzMzYzNjQwNDAzMDMxMzI2MTM5NjY2NTM5MzU2NjYyNjI2NjY1NjM2MzQwMzQzMzM1MzIzNTM1MzI2NDM2MzEzMzM1MzYzNjMzMzQzNjMxMzYzMTQwNDAzMDYxMzIzMTMzNjEzMTYyMzM2NTMyNjM2NDYyNDAzNTM3MzQzMjM1MzQzNDMzMzI2NDMzMzUzMzMzMzMzNDMzMzkzNjMyMzMzMzQwNDAzMDM0NDAzNDMyMzQzODM0MzEzNTM0MzI2NDM2MzMzMzMxMzYzNjM2MzQzNjM1MzMzMzQwNDAzODYzMzI2MjY0NjIzNTMzMzA2NjY2MzIzOTYzMzMzODYyNjVAY2Y1MmRmMGE2YzMxNzM4ZmYyODNiM2RhZGU0ZTE4ZjFjMzAyOWEwNjJlY2NjMjJmYmE1Y2RhODUxMGZjMDI5MzFkNzgyNGFiZGYxYmNhN2Q4YzI0Y2M3MmRkYzAyYWY1ZTA2MGRjOTlmYmRlMWU1MzFiODU3YjYzODE4ZmYyMGE=", + "signature": "", + "timestamp": 5040, + "timestampMs": 5040000, + "status": "success", + "searchOrder": 0, + "operation": "transfer", + "epoch": 10 +}