Skip to content

Commit c59645e

Browse files
committed
optimize ibc pegout logic
1 parent 8a7577a commit c59645e

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

x/btcbridge/module/abci.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,14 @@ func handleIBCWithdrawRequests(ctx sdk.Context, k keeper.Keeper) {
186186
address := sdk.MustAccAddressFromBech32(req.Address)
187187
amount, _ := sdk.ParseCoinNormalized(req.Amount)
188188

189+
// check if the balance is sufficient
190+
if k.BankKeeper().SpendableCoin(ctx, address, k.BtcDenom(ctx)).IsLT(amount) {
191+
k.Logger(ctx).Warn("failed to perform withdrawal from IBC", "address", req.Address, "amount", req.Amount, "err", "insufficient balance")
192+
193+
k.RemoveFromIBCWithdrawRequestQueue(ctx, req.ChannelId, req.Sequence)
194+
continue
195+
}
196+
189197
// deduct protocol fee
190198
withdrawAmount, err := amount.SafeSub(protocolFee)
191199
if err != nil || withdrawAmount.Amount.Int64() < k.MinBTCWithdraw(ctx) || withdrawAmount.Amount.Int64() > k.MaxBTCWithdraw(ctx) {
@@ -223,15 +231,15 @@ func handleIBCWithdrawRequests(ctx sdk.Context, k keeper.Keeper) {
223231

224232
// burn asset
225233
if err := k.BurnAsset(ctx, req.Address, withdrawAmount.Add(networkFee)); err != nil {
226-
k.Logger(ctx).Info("failed to burn asset for withdrawal from IBC", "address", req.Address, "amount", req.Amount, "burned amount", withdrawAmount.Add(networkFee), "err", err)
234+
k.Logger(ctx).Warn("failed to burn asset for withdrawal from IBC", "address", req.Address, "amount", req.Amount, "burned amount", withdrawAmount.Add(networkFee), "err", err)
227235

228236
k.RemoveFromIBCWithdrawRequestQueue(ctx, req.ChannelId, req.Sequence)
229237
continue
230238
}
231239

232240
// transfer protocol fee to fee collector
233241
if err := k.BankKeeper().SendCoins(ctx, address, protocoFeeCollector, sdk.NewCoins(protocolFee)); err != nil {
234-
k.Logger(ctx).Info("failed to transfer protocol fee for withdrawal from IBC", "address", req.Address, "amount", req.Amount, "protocol fee", protocolFee, "err", err)
242+
k.Logger(ctx).Warn("failed to transfer protocol fee for withdrawal from IBC", "address", req.Address, "amount", req.Amount, "protocol fee", protocolFee, "err", err)
235243

236244
k.RemoveFromIBCWithdrawRequestQueue(ctx, req.ChannelId, req.Sequence)
237245
continue

x/btcbridge/types/expected_keepers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ type AccountKeeper interface {
2323

2424
// BankKeeper defines the expected interface needed to retrieve account balances.
2525
type BankKeeper interface {
26+
SpendableCoin(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin
2627
SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins
27-
// Methods imported from bank should be defined here
2828

2929
SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
3030

0 commit comments

Comments
 (0)