Skip to content

Commit aa421ba

Browse files
committed
improve loan approval and verify proof
1 parent e2ce548 commit aa421ba

File tree

8 files changed

+353
-239
lines changed

8 files changed

+353
-239
lines changed

Diff for: api/side/lending/tx.pulsar.go

+201-124
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: proto/side/lending/tx.proto

+2-2
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ message MsgApprove {
9999

100100
string relayer = 1;
101101
string deposit_tx_id =2;
102-
uint64 height = 3;
103-
string poof = 4;
102+
string block_hash = 3;
103+
repeated string proof = 4;
104104
}
105105

106106
message MsgApproveResponse {

Diff for: x/lending/keeper/keeper.go

+20-13
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ type (
1414
storeKey storetypes.StoreKey
1515
memKey storetypes.StoreKey
1616

17-
bankKeeper types.BankKeeper
18-
oracleKeeper types.OracleKeeper
19-
auctionKeeper types.AuctionKeeper
20-
dlcKeeper types.DLCKeeper
17+
bankKeeper types.BankKeeper
18+
oracleKeeper types.OracleKeeper
19+
auctionKeeper types.AuctionKeeper
20+
dlcKeeper types.DLCKeeper
21+
btcbridgeKeeper types.BtcBridgeKeeper
2122

2223
authority string
2324
}
@@ -30,18 +31,20 @@ func NewKeeper(
3031
bankKeeper types.BankKeeper,
3132
oracleKeeper types.OracleKeeper,
3233
auctionKeeper types.AuctionKeeper,
33-
dlckeeper types.DLCKeeper,
34+
dlcKeeper types.DLCKeeper,
35+
btcbridgeKeeper types.BtcBridgeKeeper,
3436
authority string,
3537
) Keeper {
3638
return Keeper{
37-
cdc: cdc,
38-
storeKey: storeKey,
39-
memKey: memKey,
40-
bankKeeper: bankKeeper,
41-
oracleKeeper: oracleKeeper,
42-
auctionKeeper: auctionKeeper,
43-
dlcKeeper: dlckeeper,
44-
authority: authority,
39+
cdc: cdc,
40+
storeKey: storeKey,
41+
memKey: memKey,
42+
bankKeeper: bankKeeper,
43+
oracleKeeper: oracleKeeper,
44+
auctionKeeper: auctionKeeper,
45+
dlcKeeper: dlcKeeper,
46+
btcbridgeKeeper: btcbridgeKeeper,
47+
authority: authority,
4548
}
4649
}
4750

@@ -76,6 +79,10 @@ func (k Keeper) DLCKeeper() types.DLCKeeper {
7679
return k.dlcKeeper
7780
}
7881

82+
func (k Keeper) BtcBridgeKeeper() types.BtcBridgeKeeper {
83+
return k.btcbridgeKeeper
84+
}
85+
7986
func (k Keeper) SetPool(ctx sdk.Context, pool types.LendingPool) {
8087
store := ctx.KVStore(k.storeKey)
8188
bz := k.cdc.MustMarshal(&pool)

Diff for: x/lending/keeper/msg_server.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,15 @@ func (m msgServer) Approve(goCtx context.Context, msg *types.MsgApprove) (*types
152152
return nil, types.ErrDepositTxNotExists
153153
}
154154

155-
// verify merkle proof
156-
// verify(msg.Height, msg.DepositTxId, msg.Poof)
157-
158155
log := m.GetDepositLog(ctx, msg.DepositTxId)
159156
if !m.HasLoan(ctx, log.VaultAddress) {
160157
return nil, types.ErrLoanNotExists
161158
}
159+
160+
if _, _, err := m.btcbridgeKeeper.ValidateTransaction(ctx, log.DepositTx, "", msg.BlockHash, msg.Proof); err != nil {
161+
return nil, types.ErrInvalidProof
162+
}
163+
162164
loan := m.GetLoan(ctx, log.VaultAddress)
163165

164166
loan.Status = types.LoanStatus_Approve
@@ -167,8 +169,8 @@ func (m msgServer) Approve(goCtx context.Context, msg *types.MsgApprove) (*types
167169
m.EmitEvent(ctx, msg.Relayer,
168170
sdk.NewAttribute("vault", loan.VaultAddress),
169171
sdk.NewAttribute("deposit_tx", msg.DepositTxId),
170-
sdk.NewAttribute("proof", msg.Poof),
171-
sdk.NewAttribute("height", fmt.Sprint(msg.Height)),
172+
sdk.NewAttribute("proof", fmt.Sprintf("%s", msg.Proof)),
173+
sdk.NewAttribute("block_hash", msg.BlockHash),
172174
)
173175

174176
return &types.MsgApproveResponse{}, nil

Diff for: x/lending/types/errors.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var (
3131
ErrLoanNotExists = errorsmod.Register(ModuleName, 3009, "loan not exists")
3232

3333
ErrEmptyDepositTx = errorsmod.Register(ModuleName, 4001, "invalid deposit tx")
34-
ErrEmptyPoof = errorsmod.Register(ModuleName, 4002, "invalid proof")
34+
ErrInvalidProof = errorsmod.Register(ModuleName, 4002, "invalid proof")
3535
ErrDepositTxNotExists = errorsmod.Register(ModuleName, 4002, "deposit not exists")
3636

3737
ErrEmptyLoanSecret = errorsmod.Register(ModuleName, 5001, "invalid loan secret")

Diff for: x/lending/types/expected_keepers.go

+8
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import (
44
"context"
55

66
sdkmath "cosmossdk.io/math"
7+
"github.com/btcsuite/btcd/btcutil"
78
sdk "github.com/cosmos/cosmos-sdk/types"
89
"github.com/cosmos/cosmos-sdk/x/auth/types"
910
banktype "github.com/cosmos/cosmos-sdk/x/bank/types"
1011

1112
auctiontypes "github.com/sideprotocol/side/x/auction/types"
13+
btcbridgetypes "github.com/sideprotocol/side/x/btcbridge/types"
1214
dlctypes "github.com/sideprotocol/side/x/dlc/types"
1315
)
1416

@@ -51,3 +53,9 @@ type AuctionKeeper interface {
5153
type DLCKeeper interface {
5254
GetEvent(ctx sdk.Context, id uint64) *dlctypes.DLCPriceEvent
5355
}
56+
57+
// BtcBridgeKeeper defines the expected BtcBridge keeper interface
58+
type BtcBridgeKeeper interface {
59+
ValidateTransaction(ctx sdk.Context, tx string, prevTx string, blockHash string, proof []string) (*btcutil.Tx, *btcutil.Tx, error)
60+
GetFeeRate(ctx sdk.Context) *btcbridgetypes.FeeRate
61+
}

Diff for: x/lending/types/msg_deposit.go renamed to x/lending/types/msg_approve.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import (
66

77
var _ sdk.Msg = &MsgApprove{}
88

9-
func NewMsgDeposit(relayer string, DepositTxId string, height uint64, proof string) *MsgApprove {
9+
func NewMsgDeposit(relayer string, depositTxId string, blockHash string, proof []string) *MsgApprove {
1010
return &MsgApprove{
1111
Relayer: relayer,
12-
DepositTxId: DepositTxId,
13-
Height: height,
14-
Poof: proof,
12+
DepositTxId: depositTxId,
13+
BlockHash: blockHash,
14+
Proof: proof,
1515
}
1616
}
1717

@@ -21,8 +21,8 @@ func (m *MsgApprove) ValidateBasic() error {
2121
return ErrEmptyDepositTx
2222
}
2323

24-
if len(m.Poof) == 0 {
25-
return ErrEmptyPoof
24+
if len(m.Proof) == 0 {
25+
return ErrInvalidProof
2626
}
2727

2828
return nil

0 commit comments

Comments
 (0)