Skip to content

Commit

Permalink
Merge pull request #261 from multiversx/merge-master-rc-v1.7.0-2024.0…
Browse files Browse the repository at this point in the history
…1.29

Merge master rc v1.7.0 2024.01.29
  • Loading branch information
iulianpascalau authored Jan 30, 2024
2 parents 5b5abfb + a772c48 commit b3017ef
Show file tree
Hide file tree
Showing 7 changed files with 238 additions and 16 deletions.
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ require (
github.com/elastic/go-elasticsearch/v7 v7.12.0
github.com/gin-contrib/cors v1.4.0
github.com/gin-gonic/gin v1.9.1
github.com/multiversx/mx-chain-communication-go v1.0.13-0.20231129114230-d280af707381
github.com/multiversx/mx-chain-core-go v1.2.19-0.20231129100534-356aa234f4ff
github.com/multiversx/mx-chain-logger-go v1.0.14-0.20231129101244-c44fa1c79b03
github.com/multiversx/mx-chain-vm-common-go v1.5.9-0.20231129110322-d07a35163513
github.com/multiversx/mx-chain-communication-go v1.0.13-0.20240126121117-627adccf10ad
github.com/multiversx/mx-chain-core-go v1.2.19-0.20240129082057-a76d0c995cf2
github.com/multiversx/mx-chain-logger-go v1.0.14-0.20240129144507-d00e967c890c
github.com/multiversx/mx-chain-vm-common-go v1.5.12-0.20240129145149-4fe61574f566
github.com/prometheus/client_model v0.4.0
github.com/prometheus/common v0.37.0
github.com/stretchr/testify v1.8.4
Expand Down
16 changes: 8 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -247,15 +247,15 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/multiversx/mx-chain-communication-go v1.0.13-0.20231129114230-d280af707381 h1:M4JNeubA+zq7NaH2LP5YsWUVeKn9hNL+HgSw2kqwWUc=
github.com/multiversx/mx-chain-communication-go v1.0.13-0.20231129114230-d280af707381/go.mod h1:n4E8BWIV0g3AcNGe1gf+vcjUC8A2QCJ4ARQSbiUDGrI=
github.com/multiversx/mx-chain-core-go v1.2.19-0.20231129100534-356aa234f4ff h1:Iss44e+2C4vGtQ5sU3lOqDQ+dxvwlO+Z3mSbC8T1J64=
github.com/multiversx/mx-chain-core-go v1.2.19-0.20231129100534-356aa234f4ff/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE=
github.com/multiversx/mx-chain-communication-go v1.0.13-0.20240126121117-627adccf10ad h1:izxTyKCxvT7z2mhXCWAZibSxwRVgLmq/kDovs4Nx/6Y=
github.com/multiversx/mx-chain-communication-go v1.0.13-0.20240126121117-627adccf10ad/go.mod h1:n4E8BWIV0g3AcNGe1gf+vcjUC8A2QCJ4ARQSbiUDGrI=
github.com/multiversx/mx-chain-core-go v1.2.19-0.20240129082057-a76d0c995cf2 h1:pFh9bwOTRgW173aHqA8Bmax+jYzLnRyXqRvi5alF7V4=
github.com/multiversx/mx-chain-core-go v1.2.19-0.20240129082057-a76d0c995cf2/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE=
github.com/multiversx/mx-chain-crypto-go v1.2.10-0.20231129101537-ef355850e34b h1:TIE6it719ZIW0E1bFgPAgE+U3zPSkPfAloFYEIeOL3U=
github.com/multiversx/mx-chain-logger-go v1.0.14-0.20231129101244-c44fa1c79b03 h1:krjJTyN9jrFTK0goMGFdgvJGy6bYSqe8EtI/HCceUmU=
github.com/multiversx/mx-chain-logger-go v1.0.14-0.20231129101244-c44fa1c79b03/go.mod h1:fH/fR/GEBsDjPkBoZDVJMoYo2HhlA7++DP6QfITJ1N8=
github.com/multiversx/mx-chain-vm-common-go v1.5.9-0.20231129110322-d07a35163513 h1:3Hm3MVIpiu4+j+aHiDOYBJBiQC62nF/rHHRJ8YIFOL4=
github.com/multiversx/mx-chain-vm-common-go v1.5.9-0.20231129110322-d07a35163513/go.mod h1:vgmpc/YegaUMAImR+WZ+kpJgv9qYF31oL12vVx/46i4=
github.com/multiversx/mx-chain-logger-go v1.0.14-0.20240129144507-d00e967c890c h1:QIUOn8FgNRa5cir4BCWHZi/Qcr6Gg0eGNhns4+jy6+k=
github.com/multiversx/mx-chain-logger-go v1.0.14-0.20240129144507-d00e967c890c/go.mod h1:fH/fR/GEBsDjPkBoZDVJMoYo2HhlA7++DP6QfITJ1N8=
github.com/multiversx/mx-chain-vm-common-go v1.5.12-0.20240129145149-4fe61574f566 h1:zImJa/r6B5L2OLWbKTn5io53U11PPGDla12H2OaJ9y0=
github.com/multiversx/mx-chain-vm-common-go v1.5.12-0.20240129145149-4fe61574f566/go.mod h1:OUyhCFqZKqUk1uaPsenyPDwO1830SlHNDU7Q7b6CBVI=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
Expand Down
151 changes: 151 additions & 0 deletions integrationtests/nftTransferCrossShard_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -451,3 +451,154 @@ func TestNFTTransferCrossShardImportDBScenarioFirstIndexDestinationAfterSource(t
string(genericResponse.Docs[0].Source),
)
}

func TestNFTTransferCrossShardImportDBScenarioFirstIndexDestinationAfterSourceSuccess(t *testing.T) {
setLogLevelDebug()

esClient, err := createESClient(esURL)
require.Nil(t, err)

esProc, err := CreateElasticProcessor(esClient)
require.Nil(t, err)

txHash := []byte("nftTransferCross-success")
scrHash1 := []byte("scrHashCross1")
scrHash2 := []byte("scrHashCross2")
header := &dataBlock.Header{
Round: 50,
TimeStamp: 5040,
}

address1 := "erd1ure7ea247clj6yqjg80unz6xzjhlj2zwm4gtg6sudcmtsd2cw3xs74hasv"
address2 := "erd1qqqqqqqqqqqqqpgq57szwud2quysucrlq2e97ntdysdl7v4ejz3qn3njq4"
scr2 := &smartContractResult.SmartContractResult{
Nonce: 0,
GasPrice: 1000000000,
SndAddr: decodeAddress(address1),
RcvAddr: decodeAddress(address2),
Data: []byte("ESDTNFTTransfer@434f4c4c454354494f4e2d323663313838@01@01@08011202000122e50108011204434f4f4c1a20e0f3ecf555f63f2d101241dfc98b4614aff9284edd50b46a1c6e36b83558744d20c4132a2e516d5a7961565631786a7866446255575a503178655a7676544d3156686f61346f594752444d706d4a727a52435a324368747470733a2f2f697066732e696f2f697066732f516d5a7961565631786a7866446255575a503178655a7676544d3156686f61346f594752444d706d4a727a52435a3a41746167733a436f6f6c3b6d657461646174613a516d5869417850396e535948515954546143357358717a4d32645856334142516145355241725932777a4e686179"),
PrevTxHash: txHash,
OriginalTxHash: txHash,
}

// EXECUTE transfer on the destination shard
bodyDstShard := &dataBlock.Body{
MiniBlocks: dataBlock.MiniBlockSlice{
{
Type: dataBlock.SmartContractResultBlock,
SenderShardID: 0,
ReceiverShardID: 1,
TxHashes: [][]byte{scrHash2},
},
},
}
scr3WithErrHash := []byte("scrWithError")
poolDstShard := &outport.TransactionPool{
SmartContractResults: map[string]*outport.SCRInfo{
hex.EncodeToString(scrHash2): {SmartContractResult: scr2, FeeInfo: &outport.FeeInfo{}},
hex.EncodeToString(scr3WithErrHash): {SmartContractResult: &smartContractResult.SmartContractResult{
SndAddr: decodeAddress(address2),
RcvAddr: decodeAddress(address1),
PrevTxHash: []byte("1546eb9970a6dc1710b6528274e75d5095c1349706f4ff70f52a1f58e1156316"),
OriginalTxHash: txHash,
Data: []byte("ESDTNFTTransfer@434f4c4c454354494f4e2d323663313838@01@01@08011202000122e50108011204434f4f4c1a20e0f3ecf555f63f2d101241dfc98b4614aff9284edd50b46a1c6e36b83558744d20c4132a2e516d5a7961565631786a7866446255575a503178655a7676544d3156686f61346f594752444d706d4a727a52435a324368747470733a2f2f697066732e696f2f697066732f516d5a7961565631786a7866446255575a503178655a7676544d3156686f61346f594752444d706d4a727a52435a3a41746167733a436f6f6c3b6d657461646174613a516d5869417850396e535948515954546143357358717a4d32645856334142516145355241725932777a4e686179@75736572206572726f72"),
}, FeeInfo: &outport.FeeInfo{}},
},
Logs: []*outport.LogData{
{
TxHash: hex.EncodeToString(scr3WithErrHash),
Log: &transaction.Log{
Address: decodeAddress(address1),
Events: []*transaction.Event{
{
Address: decodeAddress(address1),
Identifier: []byte(core.CompletedTxEventIdentifier),
},
},
},
},
},
}

ids := []string{hex.EncodeToString(txHash)}
genericResponse := &GenericResponse{}
err = esProc.SaveTransactions(createOutportBlockWithHeader(bodyDstShard, header, poolDstShard, nil, testNumOfShards))
require.Nil(t, err)

err = esClient.DoMultiGet(context.Background(), ids, indexerdata.TransactionsIndex, true, genericResponse)
require.Nil(t, err)

require.JSONEq(t,
readExpectedResult("./testdata/nftTransferCrossShard/tx-nft-transfer-success-destination-first.json"),
string(genericResponse.Docs[0].Source),
)

// execute on source

body := &dataBlock.Body{
MiniBlocks: dataBlock.MiniBlockSlice{
{
Type: dataBlock.TxBlock,
SenderShardID: 0,
ReceiverShardID: 0,
TxHashes: [][]byte{txHash},
},
{
Type: dataBlock.SmartContractResultBlock,
SenderShardID: 0,
ReceiverShardID: 1,
TxHashes: [][]byte{scrHash2},
},
},
}

tx := &transaction.Transaction{
Nonce: 79,
SndAddr: decodeAddress(address1),
RcvAddr: decodeAddress(address1),
GasLimit: 5000000,
GasPrice: 1000000000,
Data: []byte("ESDTNFTTransfer@434f4c4c454354494f4e2d323663313838@01@01@00000000000000000500a7a02771aa07090e607f02b25f4d6d241bff32b990a2"),
Value: big.NewInt(0),
}

txInfo := &outport.TxInfo{
Transaction: tx,
FeeInfo: &outport.FeeInfo{
GasUsed: 963500,
Fee: big.NewInt(238820000000000),
InitialPaidFee: big.NewInt(595490000000000),
},
ExecutionOrder: 0,
}

refundValueBig, _ := big.NewInt(0).SetString("40365000000000", 10)
pool := &outport.TransactionPool{
Transactions: map[string]*outport.TxInfo{
hex.EncodeToString(txHash): txInfo,
},
SmartContractResults: map[string]*outport.SCRInfo{
hex.EncodeToString(scrHash1): {SmartContractResult: &smartContractResult.SmartContractResult{
Nonce: 80,
Value: refundValueBig,
GasPrice: 1000000000,
SndAddr: decodeAddress(address1),
RcvAddr: decodeAddress(address1),
Data: []byte("@6f6b"),
PrevTxHash: txHash,
OriginalTxHash: txHash,
}, FeeInfo: &outport.FeeInfo{}},
hex.EncodeToString(scrHash2): {SmartContractResult: scr2, FeeInfo: &outport.FeeInfo{}},
},
}
err = esProc.SaveTransactions(createOutportBlockWithHeader(body, header, pool, nil, testNumOfShards))
require.Nil(t, err)

err = esClient.DoMultiGet(context.Background(), ids, indexerdata.TransactionsIndex, true, genericResponse)
require.Nil(t, err)

require.JSONEq(t,
readExpectedResult("./testdata/nftTransferCrossShard/tx-nft-transfer-success-source-second.json"),
string(genericResponse.Docs[0].Source),
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"miniBlockHash": "",
"nonce": 0,
"round": 0,
"value": "",
"valueNum": 0,
"receiver": "",
"sender": "",
"receiverShard": 0,
"senderShard": 0,
"gasPrice": 0,
"gasLimit": 0,
"gasUsed": 0,
"fee": "",
"feeNum": 0,
"data": null,
"signature": "",
"timestamp": 0,
"status": "",
"searchOrder": 0,
"completedEvent": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"receiversShardIDs": [
2
],
"data": "RVNEVE5GVFRyYW5zZmVyQDQzNGY0YzRjNDU0MzU0NDk0ZjRlMmQzMjM2NjMzMTM4MzhAMDFAMDFAMDAwMDAwMDAwMDAwMDAwMDA1MDBhN2EwMjc3MWFhMDcwOTBlNjA3ZjAyYjI1ZjRkNmQyNDFiZmYzMmI5OTBhMg==",
"signature": "",
"fee": "238820000000000",
"completedEvent": true,
"esdtValues": [
"1"
],
"initialPaidFee": "595490000000000",
"gasLimit": 5000000,
"esdtValuesNum": [
1e-18
],
"gasUsed": 963500,
"miniBlockHash": "091d7b3e7cd6ceed57ff5aa17a22bb8ffd6df009fc24d89faa7458452708ec69",
"receivers": [
"erd1qqqqqqqqqqqqqpgq57szwud2quysucrlq2e97ntdysdl7v4ejz3qn3njq4"
],
"senderShard": 0,
"tokens": [
"COLLECTION-26c188-01"
],
"value": "0",
"gasPrice": 1000000000,
"timestamp": 5040,
"receiver": "erd1ure7ea247clj6yqjg80unz6xzjhlj2zwm4gtg6sudcmtsd2cw3xs74hasv",
"valueNum": 0,
"feeNum": 0.00023882,
"nonce": 79,
"round": 50,
"hasScResults": true,
"sender": "erd1ure7ea247clj6yqjg80unz6xzjhlj2zwm4gtg6sudcmtsd2cw3xs74hasv",
"receiverShard": 0,
"operation": "ESDTNFTTransfer",
"status": "success",
"searchOrder": 0
}
4 changes: 2 additions & 2 deletions process/elasticproc/logsevents/informativeLogsProcessor.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,16 @@ func processEventNoTx(args *argsProcessEvent) argOutputProcessEvent {
case core.CompletedTxEventIdentifier:
{
record.CompletedEvent = true
args.txHashStatusInfoProc.addRecord(scr.OriginalTxHash, record)
}
case core.SignalErrorOperation, core.InternalVMErrorsOperation:
{
record.Status = transaction.TxStatusFail.String()
record.ErrorEvent = true
args.txHashStatusInfoProc.addRecord(scr.OriginalTxHash, record)
}
}

args.txHashStatusInfoProc.addRecord(scr.OriginalTxHash, record)

return argOutputProcessEvent{
processed: true,
}
Expand Down
13 changes: 11 additions & 2 deletions process/elasticproc/transactions/serialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,9 +189,18 @@ func prepareNFTESDTTransferOrMultiESDTTransfer(marshaledTx []byte) ([]byte, erro
} else {
def status = ctx._source.status;
def errorEvent = ctx._source.errorEvent;
def completedEvent = ctx._source.completedEvent;
ctx._source = params.tx;
ctx._source.status = status;
ctx._source.errorEvent = errorEvent;
if (!status.isEmpty()) {
ctx._source.status = status;
}
if (errorEvent != null) {
ctx._source.errorEvent = errorEvent;
}
if (completedEvent != null) {
ctx._source.completedEvent = completedEvent;
}
}
`
serializedData := []byte(fmt.Sprintf(`{"scripted_upsert": true, "script":{"source":"%s","lang": "painless","params":{"tx": %s}},"upsert":{}}`,
Expand Down

0 comments on commit b3017ef

Please sign in to comment.