@@ -37,7 +37,7 @@ use frame_support::traits::Currency;
37
37
pub use pallet:: * ;
38
38
use parity_scale_codec:: { Decode , Encode } ;
39
39
use scale_info:: TypeInfo ;
40
- use sp_domains:: { DomainId , DomainsTransfersTracker , Transfers } ;
40
+ use sp_domains:: { DomainId , DomainsTransfersTracker , SkipBalanceChecks , Transfers } ;
41
41
use sp_messenger:: endpoint:: EndpointResponse ;
42
42
use sp_messenger:: messages:: ChainId ;
43
43
use sp_messenger:: NoteChainTransfer ;
@@ -83,7 +83,7 @@ mod pallet {
83
83
use frame_support:: weights:: Weight ;
84
84
use frame_system:: pallet_prelude:: * ;
85
85
use parity_scale_codec:: { Decode , Encode } ;
86
- use sp_domains:: { DomainId , DomainsTransfersTracker , Transfers } ;
86
+ use sp_domains:: { DomainId , DomainsTransfersTracker , SkipBalanceChecks , Transfers } ;
87
87
use sp_messenger:: endpoint:: {
88
88
Endpoint , EndpointHandler as EndpointHandlerT , EndpointId , EndpointRequest ,
89
89
EndpointResponse , Sender ,
@@ -114,6 +114,9 @@ mod pallet {
114
114
115
115
/// Weight information for extrinsics in this pallet.
116
116
type WeightInfo : WeightInfo ;
117
+
118
+ /// Skip Balance transfer checks
119
+ type SkipBalanceTransferChecks : SkipBalanceChecks ;
117
120
}
118
121
119
122
/// Pallet transporter to move funds between chains.
@@ -348,7 +351,9 @@ mod pallet {
348
351
// if this is consensus chain, then reject the transfer
349
352
// else update the Transfers storage with rejected transfer
350
353
if T :: SelfChainId :: get ( ) . is_consensus_chain ( ) {
351
- Pallet :: < T > :: reject_transfer ( src_chain_id, T :: SelfChainId :: get ( ) , amount) ?;
354
+ if !T :: SkipBalanceTransferChecks :: should_skip_balance_check ( src_chain_id) {
355
+ Pallet :: < T > :: reject_transfer ( src_chain_id, T :: SelfChainId :: get ( ) , amount) ?;
356
+ }
352
357
} else {
353
358
ChainTransfers :: < T > :: try_mutate ( |transfers| {
354
359
Pallet :: < T > :: update_transfer_rejected ( transfers, src_chain_id, amount)
@@ -397,16 +402,17 @@ mod pallet {
397
402
let account_id =
398
403
T :: AccountIdConverter :: try_convert_back ( transfer. sender . account_id )
399
404
. ok_or ( Error :: < T > :: InvalidAccountId ) ?;
400
- let _imbalance = T :: Currency :: deposit_creating ( & account_id, transfer. amount ) ;
401
405
402
406
// if this is consensus chain, then revert the transfer
403
407
// else update the Transfers storage with reverted transfer
404
408
if T :: SelfChainId :: get ( ) . is_consensus_chain ( ) {
405
- Pallet :: < T > :: claim_rejected_transfer (
406
- T :: SelfChainId :: get ( ) ,
407
- dst_chain_id,
408
- transfer. amount ,
409
- ) ?;
409
+ if !T :: SkipBalanceTransferChecks :: should_skip_balance_check ( dst_chain_id) {
410
+ Pallet :: < T > :: claim_rejected_transfer (
411
+ T :: SelfChainId :: get ( ) ,
412
+ dst_chain_id,
413
+ transfer. amount ,
414
+ ) ?;
415
+ }
410
416
} else {
411
417
ChainTransfers :: < T > :: try_mutate ( |transfers| {
412
418
Pallet :: < T > :: update_transfer_revert (
@@ -417,6 +423,7 @@ mod pallet {
417
423
} ) ?;
418
424
}
419
425
426
+ let _imbalance = T :: Currency :: deposit_creating ( & account_id, transfer. amount ) ;
420
427
frame_system:: Pallet :: < T > :: deposit_event (
421
428
Into :: < <T as Config >:: RuntimeEvent > :: into (
422
429
Event :: < T > :: OutgoingTransferFailed {
@@ -606,18 +613,20 @@ impl<T: Config> Pallet<T> {
606
613
let account_id = T :: AccountIdConverter :: try_convert_back ( req. receiver . account_id )
607
614
. ok_or ( Error :: < T > :: InvalidAccountId ) ?;
608
615
609
- let _imbalance = T :: Currency :: deposit_creating ( & account_id, req. amount ) ;
610
-
611
616
// if this is consensus chain, then confirm the transfer
612
617
// else add transfer to storage to send through ER to consensus chain
613
618
if T :: SelfChainId :: get ( ) . is_consensus_chain ( ) {
614
- Pallet :: < T > :: confirm_transfer ( src_chain_id, T :: SelfChainId :: get ( ) , req. amount ) ?
619
+ if !T :: SkipBalanceTransferChecks :: should_skip_balance_check ( src_chain_id) {
620
+ Pallet :: < T > :: confirm_transfer ( src_chain_id, T :: SelfChainId :: get ( ) , req. amount ) ?
621
+ }
615
622
} else {
616
623
ChainTransfers :: < T > :: try_mutate ( |transfers| {
617
624
Pallet :: < T > :: update_transfer_in ( transfers, src_chain_id, req. amount )
618
625
} ) ?;
619
626
}
620
627
628
+ let _imbalance = T :: Currency :: deposit_creating ( & account_id, req. amount ) ;
629
+
621
630
frame_system:: Pallet :: < T > :: deposit_event ( Into :: < <T as Config >:: RuntimeEvent > :: into (
622
631
Event :: < T > :: IncomingTransferSuccessful {
623
632
chain_id : src_chain_id,
0 commit comments