Skip to content

Commit

Permalink
improve loan approval and verify proof
Browse files Browse the repository at this point in the history
  • Loading branch information
keithsue committed Jan 14, 2025
1 parent e2ce548 commit aa421ba
Show file tree
Hide file tree
Showing 8 changed files with 353 additions and 239 deletions.
325 changes: 201 additions & 124 deletions api/side/lending/tx.pulsar.go

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions proto/side/lending/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ message MsgApprove {

string relayer = 1;
string deposit_tx_id =2;
uint64 height = 3;
string poof = 4;
string block_hash = 3;
repeated string proof = 4;
}

message MsgApproveResponse {
Expand Down
33 changes: 20 additions & 13 deletions x/lending/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ type (
storeKey storetypes.StoreKey
memKey storetypes.StoreKey

bankKeeper types.BankKeeper
oracleKeeper types.OracleKeeper
auctionKeeper types.AuctionKeeper
dlcKeeper types.DLCKeeper
bankKeeper types.BankKeeper
oracleKeeper types.OracleKeeper
auctionKeeper types.AuctionKeeper
dlcKeeper types.DLCKeeper
btcbridgeKeeper types.BtcBridgeKeeper

authority string
}
Expand All @@ -30,18 +31,20 @@ func NewKeeper(
bankKeeper types.BankKeeper,
oracleKeeper types.OracleKeeper,
auctionKeeper types.AuctionKeeper,
dlckeeper types.DLCKeeper,
dlcKeeper types.DLCKeeper,
btcbridgeKeeper types.BtcBridgeKeeper,
authority string,
) Keeper {
return Keeper{
cdc: cdc,
storeKey: storeKey,
memKey: memKey,
bankKeeper: bankKeeper,
oracleKeeper: oracleKeeper,
auctionKeeper: auctionKeeper,
dlcKeeper: dlckeeper,
authority: authority,
cdc: cdc,
storeKey: storeKey,
memKey: memKey,
bankKeeper: bankKeeper,
oracleKeeper: oracleKeeper,
auctionKeeper: auctionKeeper,
dlcKeeper: dlcKeeper,
btcbridgeKeeper: btcbridgeKeeper,
authority: authority,
}
}

Expand Down Expand Up @@ -76,6 +79,10 @@ func (k Keeper) DLCKeeper() types.DLCKeeper {
return k.dlcKeeper
}

func (k Keeper) BtcBridgeKeeper() types.BtcBridgeKeeper {
return k.btcbridgeKeeper
}

func (k Keeper) SetPool(ctx sdk.Context, pool types.LendingPool) {
store := ctx.KVStore(k.storeKey)
bz := k.cdc.MustMarshal(&pool)
Expand Down
12 changes: 7 additions & 5 deletions x/lending/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,15 @@ func (m msgServer) Approve(goCtx context.Context, msg *types.MsgApprove) (*types
return nil, types.ErrDepositTxNotExists
}

// verify merkle proof
// verify(msg.Height, msg.DepositTxId, msg.Poof)

log := m.GetDepositLog(ctx, msg.DepositTxId)
if !m.HasLoan(ctx, log.VaultAddress) {
return nil, types.ErrLoanNotExists
}

if _, _, err := m.btcbridgeKeeper.ValidateTransaction(ctx, log.DepositTx, "", msg.BlockHash, msg.Proof); err != nil {
return nil, types.ErrInvalidProof
}

loan := m.GetLoan(ctx, log.VaultAddress)

loan.Status = types.LoanStatus_Approve
Expand All @@ -167,8 +169,8 @@ func (m msgServer) Approve(goCtx context.Context, msg *types.MsgApprove) (*types
m.EmitEvent(ctx, msg.Relayer,
sdk.NewAttribute("vault", loan.VaultAddress),
sdk.NewAttribute("deposit_tx", msg.DepositTxId),
sdk.NewAttribute("proof", msg.Poof),
sdk.NewAttribute("height", fmt.Sprint(msg.Height)),
sdk.NewAttribute("proof", fmt.Sprintf("%s", msg.Proof)),
sdk.NewAttribute("block_hash", msg.BlockHash),
)

return &types.MsgApproveResponse{}, nil
Expand Down
2 changes: 1 addition & 1 deletion x/lending/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ var (
ErrLoanNotExists = errorsmod.Register(ModuleName, 3009, "loan not exists")

ErrEmptyDepositTx = errorsmod.Register(ModuleName, 4001, "invalid deposit tx")
ErrEmptyPoof = errorsmod.Register(ModuleName, 4002, "invalid proof")
ErrInvalidProof = errorsmod.Register(ModuleName, 4002, "invalid proof")
ErrDepositTxNotExists = errorsmod.Register(ModuleName, 4002, "deposit not exists")

ErrEmptyLoanSecret = errorsmod.Register(ModuleName, 5001, "invalid loan secret")
Expand Down
8 changes: 8 additions & 0 deletions x/lending/types/expected_keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import (
"context"

sdkmath "cosmossdk.io/math"
"github.com/btcsuite/btcd/btcutil"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/types"
banktype "github.com/cosmos/cosmos-sdk/x/bank/types"

auctiontypes "github.com/sideprotocol/side/x/auction/types"
btcbridgetypes "github.com/sideprotocol/side/x/btcbridge/types"
dlctypes "github.com/sideprotocol/side/x/dlc/types"
)

Expand Down Expand Up @@ -51,3 +53,9 @@ type AuctionKeeper interface {
type DLCKeeper interface {
GetEvent(ctx sdk.Context, id uint64) *dlctypes.DLCPriceEvent
}

// BtcBridgeKeeper defines the expected BtcBridge keeper interface
type BtcBridgeKeeper interface {
ValidateTransaction(ctx sdk.Context, tx string, prevTx string, blockHash string, proof []string) (*btcutil.Tx, *btcutil.Tx, error)
GetFeeRate(ctx sdk.Context) *btcbridgetypes.FeeRate
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ import (

var _ sdk.Msg = &MsgApprove{}

func NewMsgDeposit(relayer string, DepositTxId string, height uint64, proof string) *MsgApprove {
func NewMsgDeposit(relayer string, depositTxId string, blockHash string, proof []string) *MsgApprove {
return &MsgApprove{
Relayer: relayer,
DepositTxId: DepositTxId,
Height: height,
Poof: proof,
DepositTxId: depositTxId,
BlockHash: blockHash,
Proof: proof,
}
}

Expand All @@ -21,8 +21,8 @@ func (m *MsgApprove) ValidateBasic() error {
return ErrEmptyDepositTx
}

if len(m.Poof) == 0 {
return ErrEmptyPoof
if len(m.Proof) == 0 {
return ErrInvalidProof
}

return nil
Expand Down
Loading

0 comments on commit aa421ba

Please sign in to comment.