Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge master rc v1.7.0 2024.01.29 #261

Merged
merged 8 commits into from
Jan 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading