Skip to content

Commit b21d327

Browse files
committed
Use borrow amount from api for lighter
1 parent c43a734 commit b21d327

File tree

4 files changed

+59
-7
lines changed

4 files changed

+59
-7
lines changed

api/handlers/signing.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ func (h *SigningHandler) HandleSigning(w http.ResponseWriter, r *http.Request) {
135135
Nonce: b.Nonce.Int,
136136
LiquidityPool: common.HexToAddress(b.LiquidityPool),
137137
Caller: common.HexToAddress(b.Caller),
138+
BorrowAmount: b.BorrowAmount.Int,
138139
ErrChn: errChn,
139140
Source: 0,
140141
Destination: b.ChainId,

chains/lighter/chain.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
)
99

1010
const (
11-
LIGHTER_DOMAIN_ID uint64 = 1513889025
11+
LIGHTER_DOMAIN_ID uint64 = 1701984817 // lower 32bits of sha256 hash of lighter caip ("lighter:1")
1212
)
1313

1414
type MessageHandler interface {

chains/lighter/message/lighter.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,21 @@ func (h *LighterMessageHandler) HandleMessage(m *message.Message) (*proposal.Pro
8787
return nil, err
8888
}
8989

90-
if err = h.verifyWithdrawal(tx); err != nil {
90+
if err = h.verifyWithdrawal(tx, data.BorrowAmount); err != nil {
9191
data.ErrChn <- err
9292
return nil, err
9393
}
9494

9595
data.ErrChn <- nil
9696

97-
calldata, err := h.calldata(tx)
97+
calldata, err := h.calldata(tx, data.BorrowAmount)
9898
if err != nil {
9999
return nil, err
100100
}
101101

102102
unlockHash, err := signature.BorrowUnlockHash(
103103
calldata,
104-
new(big.Int).SetUint64(tx.Transfer.USDCAmount),
104+
data.BorrowAmount,
105105
h.usdcAddress,
106106
ARBITRUM_CHAIN_ID,
107107
h.lighterAddress,
@@ -134,7 +134,7 @@ func (h *LighterMessageHandler) HandleMessage(m *message.Message) (*proposal.Pro
134134
return nil, nil
135135
}
136136

137-
func (h *LighterMessageHandler) verifyWithdrawal(tx *lighter.LighterTx) error {
137+
func (h *LighterMessageHandler) verifyWithdrawal(tx *lighter.LighterTx, borrowAmount *big.Int) error {
138138
if tx.Type != lighter.TxTypeL2Transfer {
139139
return errors.New("invalid transaction type")
140140
}
@@ -143,15 +143,19 @@ func (h *LighterMessageHandler) verifyWithdrawal(tx *lighter.LighterTx) error {
143143
return errors.New("transfer account index invalid")
144144
}
145145

146+
if borrowAmount.Cmp(new(big.Int).SetUint64(tx.Transfer.USDCAmount)) != -1 {
147+
return errors.New("borrow amount exceeds withdrawal value")
148+
}
149+
146150
return nil
147151
}
148152

149-
func (h *LighterMessageHandler) calldata(tx *lighter.LighterTx) ([]byte, error) {
153+
func (h *LighterMessageHandler) calldata(tx *lighter.LighterTx, borrowAmount *big.Int) ([]byte, error) {
150154
return consts.LighterABI.Pack(
151155
"withdraw",
152156
common.HexToHash(tx.Hash),
153157
common.HexToAddress(tx.L1Address),
154-
new(big.Int).SetUint64(tx.Transfer.USDCAmount))
158+
borrowAmount)
155159
}
156160

157161
func (h *LighterMessageHandler) Listen(ctx context.Context) {

chains/lighter/message/lighter_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_ValidMessage() {
8484
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
8585
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
8686
OrderHash: "orderHash",
87+
BorrowAmount: big.NewInt(1900000),
8788
}
89+
8890
s.mockCoordinator.EXPECT().Execute(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
8991
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
9092
Type: lighter.TxTypeL2Transfer,
@@ -125,6 +127,7 @@ func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_InvalidTxType() {
125127
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
126128
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
127129
OrderHash: "orderHash",
130+
BorrowAmount: big.NewInt(1900000),
128131
}
129132
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
130133
Type: lighter.TxTypeL2Withdraw,
@@ -165,6 +168,7 @@ func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_InvalidAccount() {
165168
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
166169
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
167170
OrderHash: "orderHash",
171+
BorrowAmount: big.NewInt(1900000),
168172
}
169173
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
170174
Type: lighter.TxTypeL2Transfer,
@@ -205,6 +209,7 @@ func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_MissingTx() {
205209
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
206210
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
207211
OrderHash: "orderHash",
212+
BorrowAmount: big.NewInt(1900000),
208213
}
209214
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(nil, fmt.Errorf("not found"))
210215

@@ -221,3 +226,45 @@ func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_MissingTx() {
221226
err = <-errChn
222227
s.NotNil(err)
223228
}
229+
230+
func (s *LighterMessageHandlerTestSuite) Test_HandleMessage_BorrowAmountTooHigh() {
231+
s.mockCommunication.EXPECT().Broadcast(
232+
gomock.Any(),
233+
gomock.Any(),
234+
comm.LighterMsg,
235+
"lighter",
236+
).Return(nil)
237+
p, _ := pstoremem.NewPeerstore()
238+
s.mockHost.EXPECT().Peerstore().Return(p)
239+
240+
errChn := make(chan error, 1)
241+
ad := &message.LighterData{
242+
ErrChn: errChn,
243+
Nonce: big.NewInt(101),
244+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
245+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
246+
OrderHash: "orderHash",
247+
BorrowAmount: big.NewInt(2000000),
248+
}
249+
250+
s.mockTxFetcher.EXPECT().GetTx(ad.OrderHash).Return(&lighter.LighterTx{
251+
Type: lighter.TxTypeL2Transfer,
252+
Transfer: &lighter.Transfer{
253+
USDCAmount: 2000000,
254+
ToAccountIndex: 3,
255+
},
256+
}, nil)
257+
258+
m := &coreMessage.Message{
259+
Data: ad,
260+
Source: 0,
261+
Destination: 10,
262+
}
263+
prop, err := s.handler.HandleMessage(m)
264+
265+
s.Nil(prop)
266+
s.NotNil(err)
267+
268+
err = <-errChn
269+
s.NotNil(err)
270+
}

0 commit comments

Comments
 (0)