Skip to content

Commit

Permalink
chore: refine bridge module (#125)
Browse files Browse the repository at this point in the history
* chore: refine bridge module

* fix comments

* check relayer fee

* fix tests

---------

Co-authored-by: yutianwu <wzxingbupt@gmail.com>
  • Loading branch information
owen-reorg and yutianwu authored Mar 23, 2023
1 parent 7117e1d commit 4dfb6c8
Show file tree
Hide file tree
Showing 12 changed files with 175 additions and 179 deletions.
7 changes: 2 additions & 5 deletions e2e/tests/bridge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tests

import (
"context"
"math/big"
"testing"

sdkmath "cosmossdk.io/math"
Expand Down Expand Up @@ -42,9 +41,7 @@ func (s *BridgeTestSuite) TestTransferOut() {
params, err := s.Client.BridgeQueryClient.Params(ctx, &bridgetypes.QueryParamsRequest{})
s.Require().NoError(err)

transferOutRelayerFee, _ := big.NewInt(0).SetString(params.Params.TransferOutRelayerFee, 10)
transferOutRelayerAckFee, _ := big.NewInt(0).SetString(params.Params.TransferOutAckRelayerFee, 10)
totalTransferOutRelayerFee := big.NewInt(0).Add(transferOutRelayerFee, transferOutRelayerAckFee)
totalTransferOutRelayerFee := params.Params.TransferOutRelayerFee.Add(params.Params.TransferOutAckRelayerFee)

moduleAccount := types.MustAccAddressFromHex("0xB73C0Aac4C1E606C6E495d848196355e6CB30381")
// query balance before
Expand All @@ -67,7 +64,7 @@ func (s *BridgeTestSuite) TestTransferOut() {
s.T().Logf("balance after: %s %s", from.GetAddr().String(), moduleBalanceAfter.Balance.String())
s.Require().NoError(err)

s.Require().Equal(moduleBalanceBefore.Balance.Amount.Add(transferAmount).Add(types.NewIntFromBigInt(totalTransferOutRelayerFee)).String(), moduleBalanceAfter.Balance.Amount.String())
s.Require().Equal(moduleBalanceBefore.Balance.Amount.Add(transferAmount).Add(totalTransferOutRelayerFee).String(), moduleBalanceAfter.Balance.Amount.String())
}

func TestBridgeTestSuite(t *testing.T) {
Expand Down
11 changes: 10 additions & 1 deletion proto/greenfield/bridge/event.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,20 @@ syntax = "proto3";
package bnbchain.greenfield.bridge;

import "cosmos/base/v1beta1/coin.proto";
import "gogoproto/gogo.proto";

// this line is used by starport scaffolding # proto/tx/import

option go_package = "github.com/bnb-chain/greenfield/x/bridge/types";

enum RefundReason {
option (gogoproto.goproto_enum_prefix) = false;

REFUND_REASON_UNKNOWN = 0;
REFUND_REASON_INSUFFICIENT_BALANCE = 1;
REFUND_REASON_FAIL_ACK = 2;
}

// EventCrossTransferOut is emitted when a cross chain transfer out tx created
message EventCrossTransferOut {
// From addres of the cross chain transfer tx
Expand All @@ -28,7 +37,7 @@ message EventCrossTransferOutRefund {
// Amount of the failed cross chain transfer tx
cosmos.base.v1beta1.Coin amount = 2;
// Refund reason of the failed cross chain transfer tx
uint32 refund_reason = 3;
RefundReason refund_reason = 3;
// Sequence of the corresponding cross chain package
uint64 sequence = 4;
}
Expand Down
13 changes: 11 additions & 2 deletions proto/greenfield/bridge/params.proto
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
syntax = "proto3";
package bnbchain.greenfield.bridge;

import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/bnb-chain/greenfield/x/bridge/types";

// Params defines the parameters for the module.
message Params {
// Relayer fee for the cross chain transfer out tx
string transfer_out_relayer_fee = 1;
string transfer_out_relayer_fee = 1 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
(gogoproto.nullable) = false
];
// Relayer fee for the ACK or FAIL_ACK package of the cross chain transfer out tx
string transfer_out_ack_relayer_fee = 2;
string transfer_out_ack_relayer_fee = 2 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
(gogoproto.nullable) = false
];
}
8 changes: 5 additions & 3 deletions x/bridge/keeper/cross_app.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,12 @@ func (app *TransferOutApp) ExecuteAckPackage(ctx sdk.Context, appCtx *sdk.CrossC
Denom: denom,
Amount: sdk.NewIntFromBigInt(refundPackage.RefundAmount),
},
RefundReason: uint32(refundPackage.RefundReason),
RefundReason: types.RefundReason(refundPackage.RefundReason),
Sequence: appCtx.Sequence,
})
if err != nil {
app.bridgeKeeper.Logger(ctx).Error("emit event error", "err", err.Error())
panic(err)
}

return sdk.ExecuteResult{}
Expand Down Expand Up @@ -137,7 +138,7 @@ func (app *TransferOutApp) ExecuteFailAckPackage(ctx sdk.Context, appCtx *sdk.Cr
Denom: denom,
Amount: sdk.NewIntFromBigInt(transferOutPackage.Amount),
},
RefundReason: uint32(types.RefundReasonFailAck),
RefundReason: types.REFUND_REASON_FAIL_ACK,
Sequence: appCtx.Sequence,
})
if err != nil {
Expand Down Expand Up @@ -209,7 +210,7 @@ func (app *TransferInApp) ExecuteSynPackage(ctx sdk.Context, appCtx *sdk.CrossCh
err = app.bridgeKeeper.bankKeeper.SendCoinsFromModuleToAccount(ctx, crosschaintypes.ModuleName, transferInPackage.ReceiverAddress, sdk.Coins{amount})
if err != nil {
app.bridgeKeeper.Logger(ctx).Error("send coins error", "err", err.Error())
refundPackage, err := app.bridgeKeeper.GetRefundTransferInPayload(transferInPackage, types.RefundReasonInsufficientBalance)
refundPackage, err := app.bridgeKeeper.GetRefundTransferInPayload(transferInPackage, uint32(types.REFUND_REASON_INSUFFICIENT_BALANCE))
if err != nil {
app.bridgeKeeper.Logger(ctx).Error("get refund transfer in payload error", "err", err.Error())
panic(err)
Expand All @@ -229,6 +230,7 @@ func (app *TransferInApp) ExecuteSynPackage(ctx sdk.Context, appCtx *sdk.CrossCh
})
if err != nil {
app.bridgeKeeper.Logger(ctx).Error("emit event error", "err", err.Error())
panic(err)
}

return sdk.ExecuteResult{}
Expand Down
2 changes: 1 addition & 1 deletion x/bridge/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName))
}

func (k Keeper) GetRefundTransferInPayload(transferInClaim *types.TransferInSynPackage, refundReason types.RefundReason) ([]byte, error) {
func (k Keeper) GetRefundTransferInPayload(transferInClaim *types.TransferInSynPackage, refundReason uint32) ([]byte, error) {
refundPackage := &types.TransferInRefundPackage{
RefundAddress: transferInClaim.RefundAddress,
RefundAmount: transferInClaim.Amount,
Expand Down
16 changes: 6 additions & 10 deletions x/bridge/keeper/msg_server_transfer_out.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package keeper

import (
"context"
"math/big"

"cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/bsc/rlp"
Expand All @@ -21,27 +20,24 @@ func (k msgServer) TransferOut(goCtx context.Context, msg *types.MsgTransferOut)
}

relayerFeeAmount, ackRelayerFeeAmount := k.GetTransferOutRelayerFee(ctx)
totalRelayerFee := relayerFeeAmount.Add(ackRelayerFeeAmount)

totalRelayerFee := big.NewInt(0).Add(relayerFeeAmount, ackRelayerFeeAmount)
relayerFee := sdk.Coin{
Denom: bondDenom,
Amount: sdk.NewIntFromBigInt(totalRelayerFee),
Amount: totalRelayerFee,
}
transferAmount := sdk.Coins{*msg.Amount}.Add(relayerFee)

fromAddress := msg.GetSigners()[0]
fromAddress := sdk.MustAccAddressFromHex(msg.From)
err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, fromAddress, crosschaintypes.ModuleName, transferAmount)
if err != nil {
return nil, err
}

toAddress, err := sdk.AccAddressFromHexUnsafe(msg.To)
if err != nil {
return nil, errors.Wrapf(types.ErrInvalidAddress, "to address is not invalid")
}
toAddress := sdk.MustAccAddressFromHex(msg.To)

transferPackage := types.TransferOutSynPackage{
RefundAddress: fromAddress.Bytes(),
RefundAddress: fromAddress,
Recipient: toAddress,
Amount: msg.Amount.Amount.BigInt(),
}
Expand All @@ -52,7 +48,7 @@ func (k msgServer) TransferOut(goCtx context.Context, msg *types.MsgTransferOut)
}

sendSeq, err := k.crossChainKeeper.CreateRawIBCPackageWithFee(ctx, types.TransferOutChannelID, sdk.SynCrossChainPackageType,
encodedPackage, relayerFeeAmount, ackRelayerFeeAmount)
encodedPackage, relayerFeeAmount.BigInt(), ackRelayerFeeAmount.BigInt())
if err != nil {
return nil, err
}
Expand Down
19 changes: 4 additions & 15 deletions x/bridge/keeper/params.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package keeper

import (
"fmt"
"math/big"

sdkmath "cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"

"github.com/bnb-chain/greenfield/x/bridge/types"
Expand All @@ -21,20 +19,11 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) {
}

// GetTransferOutRelayerFee gets the transfer out relayer fee params
func (k Keeper) GetTransferOutRelayerFee(ctx sdk.Context) (*big.Int, *big.Int) {
var relayerFeeParam, ackRelayerFeeParam string
func (k Keeper) GetTransferOutRelayerFee(ctx sdk.Context) (sdkmath.Int, sdkmath.Int) {
var relayerFeeParam, ackRelayerFeeParam sdkmath.Int

k.paramstore.Get(ctx, types.KeyParamTransferOutRelayerFee, &relayerFeeParam)
relayerFee, valid := big.NewInt(0).SetString(relayerFeeParam, 10)
if !valid {
panic(fmt.Sprintf("invalid relayer fee: %s", relayerFeeParam))
}

k.paramstore.Get(ctx, types.KeyParamTransferOutAckRelayerFee, &ackRelayerFeeParam)
ackRelayerFee, valid := big.NewInt(0).SetString(ackRelayerFeeParam, 10)
if !valid {
panic(fmt.Sprintf("invalid ack relayer fee: %s", ackRelayerFeeParam))
}

return relayerFee, ackRelayerFee
return relayerFeeParam, ackRelayerFeeParam
}
96 changes: 66 additions & 30 deletions x/bridge/types/event.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 4dfb6c8

Please sign in to comment.