@@ -113,3 +113,203 @@ func TestESDTTransferTooMuchGasProvided(t *testing.T) {
113
113
114
114
require .JSONEq (t , readExpectedResult ("./testdata/esdtTransfer/esdt-transfer.json" ), string (genericResponse .Docs [0 ].Source ))
115
115
}
116
+
117
+ func TestESDTTransferCrossShardWithRefundOnSourceShard (t * testing.T ) {
118
+ esClient , err := createESClient (esURL )
119
+ require .Nil (t , err )
120
+
121
+ esProc , err := CreateElasticProcessor (esClient )
122
+ require .Nil (t , err )
123
+
124
+ txHash := []byte ("esdtTransferCross" )
125
+ header := & dataBlock.Header {
126
+ Round : 50 ,
127
+ TimeStamp : 10101 ,
128
+ ShardID : 2 ,
129
+ }
130
+
131
+ scrHash1 := []byte ("scrHash1ESDTTransferOnSourceShard" )
132
+ body := & dataBlock.Body {
133
+ MiniBlocks : dataBlock.MiniBlockSlice {
134
+ {
135
+ Type : dataBlock .TxBlock ,
136
+ SenderShardID : 2 ,
137
+ ReceiverShardID : 1 ,
138
+ TxHashes : [][]byte {txHash },
139
+ },
140
+ {
141
+ Type : dataBlock .SmartContractResultBlock ,
142
+ SenderShardID : 2 ,
143
+ ReceiverShardID : 2 ,
144
+ TxHashes : [][]byte {scrHash1 },
145
+ },
146
+ },
147
+ }
148
+
149
+ address1 := "erd1ef6470tjdtlgpa9f6g3ae4nsedmjg0gv6w73v32xtvhkfff993hq750xl9"
150
+ address2 := "erd13u7zyekzvdvzek8768r5gau9p6677ufppsjuklu9e6t7yx7rhg4s68e2ze"
151
+
152
+ txESDT := outport.TxInfo {
153
+ Transaction : & transaction.Transaction {
154
+ Nonce : 1 ,
155
+ SndAddr : decodeAddress (address1 ),
156
+ RcvAddr : decodeAddress (address2 ),
157
+ GasLimit : 500_000 ,
158
+ GasPrice : 1000000000 ,
159
+ Data : []byte ("ESDTTransfer@54474e2d383862383366@0a" ),
160
+ Value : big .NewInt (0 ),
161
+ },
162
+ FeeInfo : & outport.FeeInfo {
163
+ GasUsed : 334_000 ,
164
+ Fee : big .NewInt (136000000000000 ),
165
+ InitialPaidFee : big .NewInt (137660000000000 ),
166
+ },
167
+ }
168
+
169
+ refundValueBig , _ := big .NewInt (0 ).SetString ("1660000000000" , 10 )
170
+ scrRefund := & smartContractResult.SmartContractResult {
171
+ Nonce : 20 ,
172
+ SndAddr : decodeAddress (address2 ),
173
+ RcvAddr : decodeAddress (address1 ),
174
+ PrevTxHash : txHash ,
175
+ OriginalTxHash : txHash ,
176
+ Value : refundValueBig ,
177
+ Data : []byte ("@6f6b" ),
178
+ }
179
+
180
+ pool := & outport.TransactionPool {
181
+ Transactions : map [string ]* outport.TxInfo {
182
+ hex .EncodeToString (txHash ): & txESDT ,
183
+ },
184
+ SmartContractResults : map [string ]* outport.SCRInfo {
185
+ hex .EncodeToString (scrHash1 ): {SmartContractResult : scrRefund , FeeInfo : & outport.FeeInfo {}},
186
+ },
187
+ }
188
+ err = esProc .SaveTransactions (createOutportBlockWithHeader (body , header , pool , nil , testNumOfShards ))
189
+ require .Nil (t , err )
190
+
191
+ ids := []string {hex .EncodeToString (txHash )}
192
+ genericResponse := & GenericResponse {}
193
+ err = esClient .DoMultiGet (context .Background (), ids , indexerdata .OperationsIndex , true , genericResponse )
194
+ require .Nil (t , err )
195
+
196
+ require .JSONEq (t , readExpectedResult ("./testdata/esdtTransfer/esdt-transfer-cross-shard-on-source.json" ), string (genericResponse .Docs [0 ].Source ))
197
+
198
+ header = & dataBlock.Header {
199
+ Round : 55 ,
200
+ TimeStamp : 10102 ,
201
+ ShardID : 1 ,
202
+ }
203
+ txESDT .FeeInfo = & outport.FeeInfo {
204
+ GasUsed : 500_000 ,
205
+ Fee : big .NewInt (137660000000000 ),
206
+ InitialPaidFee : big .NewInt (137660000000000 ),
207
+ }
208
+
209
+ err = esProc .SaveTransactions (createOutportBlockWithHeader (body , header , pool , nil , testNumOfShards ))
210
+ require .Nil (t , err )
211
+
212
+ err = esClient .DoMultiGet (context .Background (), ids , indexerdata .OperationsIndex , true , genericResponse )
213
+ require .Nil (t , err )
214
+
215
+ require .JSONEq (t , readExpectedResult ("./testdata/esdtTransfer/esdt-transfer-cross-shard-on-destination.json" ), string (genericResponse .Docs [0 ].Source ))
216
+ }
217
+
218
+ func TestESDTTransferCrossShardIndexFirstOnDestinationAndAfterSource (t * testing.T ) {
219
+ esClient , err := createESClient (esURL )
220
+ require .Nil (t , err )
221
+
222
+ esProc , err := CreateElasticProcessor (esClient )
223
+ require .Nil (t , err )
224
+
225
+ txHash := []byte ("esdtTransferCross2" )
226
+ header := & dataBlock.Header {
227
+ Round : 55 ,
228
+ TimeStamp : 10102 ,
229
+ ShardID : 1 ,
230
+ }
231
+
232
+ scrHash1 := []byte ("scrHash1ESDTTransferOnSourceShard2" )
233
+ body := & dataBlock.Body {
234
+ MiniBlocks : dataBlock.MiniBlockSlice {
235
+ {
236
+ Type : dataBlock .TxBlock ,
237
+ SenderShardID : 2 ,
238
+ ReceiverShardID : 1 ,
239
+ TxHashes : [][]byte {txHash },
240
+ },
241
+ },
242
+ }
243
+
244
+ address1 := "erd1ef6470tjdtlgpa9f6g3ae4nsedmjg0gv6w73v32xtvhkfff993hq750xl9"
245
+ address2 := "erd13u7zyekzvdvzek8768r5gau9p6677ufppsjuklu9e6t7yx7rhg4s68e2ze"
246
+
247
+ txESDT := outport.TxInfo {
248
+ Transaction : & transaction.Transaction {
249
+ Nonce : 1 ,
250
+ SndAddr : decodeAddress (address1 ),
251
+ RcvAddr : decodeAddress (address2 ),
252
+ GasLimit : 500_000 ,
253
+ GasPrice : 1000000000 ,
254
+ Data : []byte ("ESDTTransfer@54474e2d383862383366@0a" ),
255
+ Value : big .NewInt (0 ),
256
+ },
257
+ FeeInfo : & outport.FeeInfo {
258
+ GasUsed : 500_000 ,
259
+ Fee : big .NewInt (137660000000000 ),
260
+ InitialPaidFee : big .NewInt (137660000000000 ),
261
+ },
262
+ }
263
+
264
+ refundValueBig , _ := big .NewInt (0 ).SetString ("1660000000000" , 10 )
265
+ scrRefund := & smartContractResult.SmartContractResult {
266
+ Nonce : 20 ,
267
+ SndAddr : decodeAddress (address2 ),
268
+ RcvAddr : decodeAddress (address1 ),
269
+ PrevTxHash : txHash ,
270
+ OriginalTxHash : txHash ,
271
+ Value : refundValueBig ,
272
+ Data : []byte ("@6f6b" ),
273
+ }
274
+
275
+ pool := & outport.TransactionPool {
276
+ Transactions : map [string ]* outport.TxInfo {
277
+ hex .EncodeToString (txHash ): & txESDT ,
278
+ },
279
+ SmartContractResults : map [string ]* outport.SCRInfo {
280
+ hex .EncodeToString (scrHash1 ): {SmartContractResult : scrRefund , FeeInfo : & outport.FeeInfo {}},
281
+ },
282
+ }
283
+ err = esProc .SaveTransactions (createOutportBlockWithHeader (body , header , pool , nil , testNumOfShards ))
284
+ require .Nil (t , err )
285
+
286
+ ids := []string {hex .EncodeToString (txHash )}
287
+ genericResponse := & GenericResponse {}
288
+ err = esClient .DoMultiGet (context .Background (), ids , indexerdata .OperationsIndex , true , genericResponse )
289
+ require .Nil (t , err )
290
+ require .JSONEq (t , readExpectedResult ("./testdata/esdtTransfer/esdt-transfer-first-on-destination.json" ), string (genericResponse .Docs [0 ].Source ))
291
+
292
+ txESDT .FeeInfo = & outport.FeeInfo {
293
+ GasUsed : 334_000 ,
294
+ Fee : big .NewInt (136000000000000 ),
295
+ InitialPaidFee : big .NewInt (137660000000000 ),
296
+ }
297
+ header = & dataBlock.Header {
298
+ Round : 50 ,
299
+ TimeStamp : 10101 ,
300
+ ShardID : 2 ,
301
+ }
302
+ body .MiniBlocks = append (body .MiniBlocks , & dataBlock.MiniBlock {
303
+ Type : dataBlock .SmartContractResultBlock ,
304
+ SenderShardID : 2 ,
305
+ ReceiverShardID : 2 ,
306
+ TxHashes : [][]byte {scrHash1 },
307
+ })
308
+
309
+ err = esProc .SaveTransactions (createOutportBlockWithHeader (body , header , pool , nil , testNumOfShards ))
310
+ require .Nil (t , err )
311
+
312
+ err = esClient .DoMultiGet (context .Background (), ids , indexerdata .OperationsIndex , true , genericResponse )
313
+ require .Nil (t , err )
314
+ require .JSONEq (t , readExpectedResult ("./testdata/esdtTransfer/esdt-transfer-second-on-source.json" ), string (genericResponse .Docs [0 ].Source ))
315
+ }
0 commit comments