diff --git a/x/btcbridge/keeper/deposit.go b/x/btcbridge/keeper/deposit.go index ac35917b..d3c8d248 100644 --- a/x/btcbridge/keeper/deposit.go +++ b/x/btcbridge/keeper/deposit.go @@ -51,8 +51,8 @@ func (k Keeper) Mint(ctx sdk.Context, sender string, tx *btcutil.Tx, prevTx *btc isRunes := edict != nil - // check if the sender is authorized to relay runes deposit - if isRunes && !k.IsAuthorizedNonBtcRelayer(ctx, sender) { + // check if the sender is trusted to relay runes deposit + if isRunes && !k.IsTrustedNonBtcRelayer(ctx, sender) { return nil, types.ErrUnauthorizedNonBtcRelayer } diff --git a/x/btcbridge/keeper/msg_server.go b/x/btcbridge/keeper/msg_server.go index 89b7bde9..78052efa 100644 --- a/x/btcbridge/keeper/msg_server.go +++ b/x/btcbridge/keeper/msg_server.go @@ -44,7 +44,7 @@ func (m msgServer) UpdateNonBtcRelayers(goCtx context.Context, msg *types.MsgUpd return nil, err } - if !m.IsAuthorizedNonBtcRelayer(ctx, msg.Sender) { + if !m.IsTrustedNonBtcRelayer(ctx, msg.Sender) { return nil, types.ErrUnauthorizedNonBtcRelayer } diff --git a/x/btcbridge/keeper/params.go b/x/btcbridge/keeper/params.go index f3e811da..a265965c 100644 --- a/x/btcbridge/keeper/params.go +++ b/x/btcbridge/keeper/params.go @@ -24,8 +24,8 @@ func (k Keeper) ProtocolWithdrawFeeEnabled(ctx sdk.Context) bool { return k.GetParams(ctx).ProtocolFees.WithdrawFee > 0 } -// IsAuthorizedNonBtcRelayer returns true if the given address is an authorized non-btc relayer, false otherwise -func (k Keeper) IsAuthorizedNonBtcRelayer(ctx sdk.Context, addr string) bool { +// IsTrustedNonBtcRelayer returns true if the given address is a trusted non-btc relayer, false otherwise +func (k Keeper) IsTrustedNonBtcRelayer(ctx sdk.Context, addr string) bool { for _, relayer := range k.GetParams(ctx).NonBtcRelayers { if relayer == addr { return true diff --git a/x/btcbridge/keeper/withdraw.go b/x/btcbridge/keeper/withdraw.go index fd99d2c5..d6cbe247 100644 --- a/x/btcbridge/keeper/withdraw.go +++ b/x/btcbridge/keeper/withdraw.go @@ -166,11 +166,12 @@ func (k Keeper) GetWithdrawRequest(ctx sdk.Context, sequence uint64) *types.Bitc func (k Keeper) GetWithdrawRequestByTxHash(ctx sdk.Context, hash string) *types.BitcoinWithdrawRequest { store := ctx.KVStore(k.storeKey) - var withdrawRequest types.BitcoinWithdrawRequest bz := store.Get(types.BtcWithdrawRequestByTxHashKey(hash)) - k.cdc.MustUnmarshal(bz, &withdrawRequest) + if bz != nil { + return k.GetWithdrawRequest(ctx, sdk.BigEndianToUint64(bz)) + } - return &withdrawRequest + return nil } // SetWithdrawRequest sets the withdrawal request @@ -180,7 +181,7 @@ func (k Keeper) SetWithdrawRequest(ctx sdk.Context, withdrawRequest *types.Bitco bz := k.cdc.MustMarshal(withdrawRequest) store.Set(types.BtcWithdrawRequestKey(withdrawRequest.Sequence), bz) - store.Set(types.BtcWithdrawRequestByTxHashKey(withdrawRequest.Txid), types.Int64ToBytes(withdrawRequest.Sequence)) + store.Set(types.BtcWithdrawRequestByTxHashKey(withdrawRequest.Txid), sdk.Uint64ToBigEndian(withdrawRequest.Sequence)) } // IterateWithdrawRequests iterates through all withdrawal requests @@ -281,11 +282,15 @@ func (k Keeper) LockAssets(ctx sdk.Context, req *types.BitcoinWithdrawRequest, a return err } - if err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, sdk.MustAccAddressFromBech32(req.Address), types.ModuleName, sdk.NewCoins(amount, btcNetworkFee)); err != nil { + if err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, sdk.MustAccAddressFromBech32(req.Address), types.ModuleName, sdk.NewCoins(amount)); err != nil { + return err + } + + if err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, sdk.MustAccAddressFromBech32(req.Address), types.ModuleName, sdk.NewCoins(btcNetworkFee)); err != nil { return err } - // lock the assets sent to the module account, which will be burned when the withdrawal tx is relayed back + // mark locked assets which will be burned when the withdrawal tx is relayed back k.lockAssets(ctx, req.Txid, amount, btcNetworkFee) return nil diff --git a/x/btcbridge/types/params.go b/x/btcbridge/types/params.go index 690c61e9..b37ae292 100644 --- a/x/btcbridge/types/params.go +++ b/x/btcbridge/types/params.go @@ -74,17 +74,18 @@ func (p Params) Validate() error { return validateTSSParams(&p.TssParams) } -// SelectVaultByAddress returns the vault by the address +// SelectVaultByAddress returns the vault by the given address func SelectVaultByAddress(vaults []*Vault, address string) *Vault { for _, v := range vaults { if v.Address == address { return v } } + return nil } -// SelectVaultByPubKey returns the vault by the public key +// SelectVaultByPubKey returns the vault by the given public key func SelectVaultByPubKey(vaults []*Vault, pubKey string) *Vault { for _, v := range vaults { if v.PubKey == pubKey { @@ -110,7 +111,7 @@ func SelectVaultByAssetType(vaults []*Vault, assetType AssetType) *Vault { return nil } -// SelectVaultByPkScript returns the vault by the pk script +// SelectVaultByPkScript returns the vault by the given pk script for convenience func SelectVaultByPkScript(vaults []*Vault, pkScript []byte) *Vault { chainCfg := sdk.GetConfig().GetBtcChainCfg() @@ -133,6 +134,7 @@ func SelectVaultByPkScript(vaults []*Vault, pkScript []byte) *Vault { return nil } +// validateNonBtcRelayers validates the given relayers func validateNonBtcRelayers(relayers []string) error { if len(relayers) == 0 { return ErrInvalidParams