@@ -71,6 +71,8 @@ func (suite *ICS20TransferTestSuite) TestHandleMsgTransfer() {
71
71
erc20 bool
72
72
)
73
73
74
+ // originally a basic test case from the IBC testing package, and it has been added as-is to ensure that
75
+ // it still works properly when invoked through the ics20 precompile.
74
76
testCases := []struct {
75
77
name string
76
78
malleate func ()
@@ -110,15 +112,6 @@ func (suite *ICS20TransferTestSuite) TestHandleMsgTransfer() {
110
112
erc20 = true
111
113
},
112
114
},
113
- {
114
- "native erc20 case" ,
115
- func () {
116
- nativeErc20 = SetupNativeErc20 (suite .T (), suite .chainA )
117
- sourceDenomToTransfer = nativeErc20 .Denom
118
- msgAmount = sdkmath .NewIntFromBigInt (nativeErc20 .InitialBal )
119
- erc20 = true
120
- },
121
- },
122
115
}
123
116
124
117
for _ , tc := range testCases {
@@ -248,7 +241,7 @@ func (suite *ICS20TransferTestSuite) TestHandleMsgTransfer() {
248
241
suite .Require ().NoError (err )
249
242
suite .Require ().Equal (chainBDenom , denomsResponse .Denoms [0 ])
250
243
251
- // denom query method
244
+ // denom query method with result
252
245
evmRes , err = evmAppB .EVMKeeper .CallEVM (
253
246
ctxB ,
254
247
suite .chainBPrecompile .ABI ,
@@ -264,6 +257,34 @@ func (suite *ICS20TransferTestSuite) TestHandleMsgTransfer() {
264
257
suite .Require ().NoError (err )
265
258
suite .Require ().Equal (chainBDenom , denomResponse .Denom )
266
259
260
+ // denom query method not exists case
261
+ evmRes , err = evmAppB .EVMKeeper .CallEVM (
262
+ ctxB ,
263
+ suite .chainBPrecompile .ABI ,
264
+ chainBAddr ,
265
+ suite .chainBPrecompile .Address (),
266
+ false ,
267
+ ics20 .DenomMethod ,
268
+ "0000000000000000000000000000000000000000000000000000000000000000" ,
269
+ )
270
+ suite .Require ().NoError (err )
271
+ err = suite .chainBPrecompile .UnpackIntoInterface (& denomResponse , ics20 .DenomMethod , evmRes .Ret )
272
+ suite .Require ().NoError (err )
273
+ // ensure empty denom struct when not exist
274
+ suite .Require ().Equal (denomResponse .Denom , transfertypes.Denom {Base : "" , Trace : []transfertypes.Hop {}})
275
+
276
+ // denom query method invalid error case
277
+ _ , err = evmAppB .EVMKeeper .CallEVM (
278
+ ctxB ,
279
+ suite .chainBPrecompile .ABI ,
280
+ chainBAddr ,
281
+ suite .chainBPrecompile .Address (),
282
+ false ,
283
+ ics20 .DenomMethod ,
284
+ "INVALID-DENOM-HASH" ,
285
+ )
286
+ suite .Require ().ErrorContains (err , "invalid denom trace hash" )
287
+
267
288
// denomHash query method
268
289
evmRes , err = evmAppB .EVMKeeper .CallEVM (
269
290
ctxB ,
@@ -279,6 +300,33 @@ func (suite *ICS20TransferTestSuite) TestHandleMsgTransfer() {
279
300
err = suite .chainBPrecompile .UnpackIntoInterface (& denomHashResponse , ics20 .DenomHashMethod , evmRes .Ret )
280
301
suite .Require ().NoError (err )
281
302
suite .Require ().Equal (chainBDenom .Hash ().String (), denomHashResponse .Hash )
303
+
304
+ // denomHash query method not exists case
305
+ evmRes , err = evmAppB .EVMKeeper .CallEVM (
306
+ ctxB ,
307
+ suite .chainBPrecompile .ABI ,
308
+ chainBAddr ,
309
+ suite .chainBPrecompile .Address (),
310
+ false ,
311
+ ics20 .DenomHashMethod ,
312
+ "transfer/channel-0/erc20:not-exists-case" ,
313
+ )
314
+ suite .Require ().NoError (err )
315
+ err = suite .chainBPrecompile .UnpackIntoInterface (& denomHashResponse , ics20 .DenomHashMethod , evmRes .Ret )
316
+ suite .Require ().NoError (err )
317
+ suite .Require ().Equal (denomHashResponse .Hash , "" )
318
+
319
+ // denomHash query method invalid error case
320
+ _ , err = evmAppB .EVMKeeper .CallEVM (
321
+ ctxB ,
322
+ suite .chainBPrecompile .ABI ,
323
+ chainBAddr ,
324
+ suite .chainBPrecompile .Address (),
325
+ false ,
326
+ ics20 .DenomHashMethod ,
327
+ "" ,
328
+ )
329
+ suite .Require ().ErrorContains (err , "invalid denomination for cross-chain transfer" )
282
330
})
283
331
}
284
332
}
0 commit comments