Skip to content

Commit f33a6c4

Browse files
authored
fix: use deposit tx to fetch across deposit (#40)
* fix: use deposit tx to fetch across deposit * Lint
1 parent 9289a38 commit f33a6c4

File tree

4 files changed

+63
-70
lines changed

4 files changed

+63
-70
lines changed

api/handlers/signing.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ func (h *SigningHandler) HandleSigning(w http.ResponseWriter, r *http.Request) {
7777
Source: 0,
7878
Destination: b.ChainId,
7979
ErrChn: errChn,
80+
DepositTxHash: common.HexToHash(b.DepositTxHash),
8081
})
8182
}
8283
case MayanProtocol:

chains/evm/message/across.go

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
)
2525

2626
const (
27-
FILTER_LOGS_TIMEOUT = 30 * time.Second
27+
TRANSACTION_TIMEOUT = 30 * time.Second
2828
)
2929

3030
type EventFilterer interface {
@@ -109,7 +109,7 @@ func (h *AcrossMessageHandler) HandleMessage(m *message.Message) (*proposal.Prop
109109
log.Warn().Msgf("Failed to notify relayers because of %s", err)
110110
}
111111

112-
txHash, d, err := h.deposit(data.DepositId)
112+
d, err := h.deposit(data.DepositTxHash, data.DepositId)
113113
if err != nil {
114114
data.ErrChn <- err
115115
return nil, err
@@ -118,7 +118,7 @@ func (h *AcrossMessageHandler) HandleMessage(m *message.Message) (*proposal.Prop
118118
err = h.confirmationWatcher.WaitForConfirmations(
119119
context.Background(),
120120
h.chainID,
121-
txHash,
121+
data.DepositTxHash,
122122
common.BytesToAddress(d.InputToken[12:]),
123123
d.InputAmount)
124124
if err != nil {
@@ -213,49 +213,36 @@ func (h *AcrossMessageHandler) notify(data *AcrossData) error {
213213
return h.comm.Broadcast(h.host.Peerstore().Peers(), msgBytes, comm.AcrossMsg, fmt.Sprintf("%d-%s", h.chainID, comm.AcrossSessionID))
214214
}
215215

216-
func (h *AcrossMessageHandler) deposit(depositId *big.Int) (common.Hash, *events.AcrossDeposit, error) {
217-
latestBlock, err := h.client.LatestBlock()
216+
func (h *AcrossMessageHandler) deposit(hash common.Hash, depositId *big.Int) (*events.AcrossDeposit, error) {
217+
ctx, cancel := context.WithTimeout(context.TODO(), TRANSACTION_TIMEOUT)
218+
defer cancel()
219+
220+
receipt, err := h.client.TransactionReceipt(ctx, hash)
218221
if err != nil {
219-
return common.Hash{}, nil, err
222+
return nil, err
220223
}
221224

222-
q := ethereum.FilterQuery{
223-
ToBlock: latestBlock,
224-
FromBlock: new(big.Int).Sub(latestBlock, big.NewInt(BLOCK_RANGE)),
225-
Addresses: []common.Address{
226-
h.pools[h.chainID],
227-
},
228-
Topics: [][]common.Hash{
229-
{
230-
events.AcrossDepositSig.GetTopic(),
231-
},
232-
{},
233-
{
234-
common.HexToHash(common.Bytes2Hex(common.LeftPadBytes(depositId.Bytes(), 32))),
235-
},
236-
},
237-
}
225+
for _, l := range receipt.Logs {
226+
if l.Removed {
227+
continue
228+
}
238229

239-
ctx, cancel := context.WithTimeout(context.Background(), FILTER_LOGS_TIMEOUT)
240-
defer cancel()
230+
if l.Topics[0] != events.AcrossDepositSig.GetTopic() {
231+
continue
232+
}
241233

242-
logs, err := h.client.FilterLogs(ctx, q)
243-
if err != nil {
244-
return common.Hash{}, nil, err
245-
}
246-
if len(logs) == 0 {
247-
return common.Hash{}, nil, fmt.Errorf("no deposit found with ID: %s", depositId)
248-
}
249-
if logs[0].Removed {
250-
return common.Hash{}, nil, fmt.Errorf("deposit log removed")
251-
}
234+
if l.Topics[2] != common.HexToHash(common.Bytes2Hex(common.LeftPadBytes(depositId.Bytes(), 32))) {
235+
continue
236+
}
252237

253-
d, err := h.parseDeposit(logs[0])
254-
if err != nil {
255-
return common.Hash{}, nil, err
238+
d, err := h.parseDeposit(*l)
239+
if err != nil {
240+
return nil, err
241+
}
242+
return d, nil
256243
}
257244

258-
return logs[0].TxHash, d, nil
245+
return nil, fmt.Errorf("deposit with id %s not found", depositId)
259246
}
260247

261248
func (h *AcrossMessageHandler) parseDeposit(l types.Log) (*events.AcrossDeposit, error) {

chains/evm/message/across_test.go

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (s *AcrossMessageHandlerTestSuite) SetupTest() {
102102
)
103103
}
104104

105-
func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_FailedLogQuery() {
105+
func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_FailedTransactionQuery() {
106106
s.mockCommunication.EXPECT().Broadcast(
107107
gomock.Any(),
108108
gomock.Any(),
@@ -111,8 +111,7 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_FailedLogQuery() {
111111
).Return(nil)
112112
p, _ := pstoremem.NewPeerstore()
113113
s.mockHost.EXPECT().Peerstore().Return(p)
114-
s.mockEventFilterer.EXPECT().LatestBlock().Return(big.NewInt(100), nil)
115-
s.mockEventFilterer.EXPECT().FilterLogs(gomock.Any(), gomock.Any()).Return([]types.Log{}, fmt.Errorf("error"))
114+
s.mockEventFilterer.EXPECT().TransactionReceipt(gomock.Any(), gomock.Any()).Return(nil, fmt.Errorf("error"))
116115

117116
errChn := make(chan error, 1)
118117
ad := &message.AcrossData{
@@ -146,8 +145,9 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_LogMissing() {
146145
).Return(nil)
147146
p, _ := pstoremem.NewPeerstore()
148147
s.mockHost.EXPECT().Peerstore().Return(p)
149-
s.mockEventFilterer.EXPECT().FilterLogs(gomock.Any(), gomock.Any()).Return([]types.Log{}, nil)
150-
s.mockEventFilterer.EXPECT().LatestBlock().Return(big.NewInt(100), nil)
148+
s.mockEventFilterer.EXPECT().TransactionReceipt(gomock.Any(), gomock.Any()).Return(&types.Receipt{
149+
Logs: []*types.Log{},
150+
}, nil)
151151

152152
errChn := make(chan error, 1)
153153
ad := &message.AcrossData{
@@ -181,11 +181,12 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_IgnoreRemovedLogs() {
181181
).Return(nil)
182182
p, _ := pstoremem.NewPeerstore()
183183
s.mockHost.EXPECT().Peerstore().Return(p)
184-
s.mockEventFilterer.EXPECT().LatestBlock().Return(big.NewInt(100), nil)
185-
s.mockEventFilterer.EXPECT().FilterLogs(gomock.Any(), gomock.Any()).Return([]types.Log{
186-
{
187-
Removed: true,
188-
Data: s.validLog,
184+
s.mockEventFilterer.EXPECT().TransactionReceipt(gomock.Any(), gomock.Any()).Return(&types.Receipt{
185+
Logs: []*types.Log{
186+
{
187+
Removed: true,
188+
Data: s.validLog,
189+
},
189190
},
190191
}, nil)
191192

@@ -222,26 +223,28 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_ValidLog() {
222223
p, _ := pstoremem.NewPeerstore()
223224
s.mockHost.EXPECT().Peerstore().Return(p)
224225

225-
s.mockEventFilterer.EXPECT().LatestBlock().Return(big.NewInt(200), nil).AnyTimes()
226-
s.mockEventFilterer.EXPECT().FilterLogs(gomock.Any(), gomock.Any()).Return([]types.Log{
227-
{
228-
Removed: false,
229-
Data: s.validLog,
230-
Topics: []common.Hash{
231-
{},
232-
{},
233-
{},
234-
{},
226+
s.mockEventFilterer.EXPECT().TransactionReceipt(gomock.Any(), gomock.Any()).Return(&types.Receipt{
227+
Logs: []*types.Log{
228+
{
229+
Removed: false,
230+
Data: s.validLog,
231+
Topics: []common.Hash{
232+
common.HexToHash("0x32ed1a409ef04c7b0227189c3a103dc5ac10e775a15b785dcc510201f7c25ad3"),
233+
{},
234+
common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000279995"),
235+
{},
236+
},
235237
},
236238
},
237239
}, nil)
240+
238241
s.mockWatcher.EXPECT().WaitForConfirmations(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
239242
s.mockCoordinator.EXPECT().Execute(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
240243

241244
errChn := make(chan error, 1)
242245
ad := &message.AcrossData{
243246
ErrChn: errChn,
244-
DepositId: big.NewInt(100),
247+
DepositId: big.NewInt(2595221),
245248
Nonce: big.NewInt(101),
246249
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
247250
Caller: common.HexToAddress("0x5ECF7351930e4A251193aA022Ef06249C6cBfa27"),
@@ -272,16 +275,17 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_ZeroOutputToken() {
272275
s.mockHost.EXPECT().Peerstore().Return(p)
273276

274277
log, _ := hex.DecodeString("0000000000000000000000003355df6d4c9c3035724fd0e3914de96a5a83aaf40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d7cbe22000000000000000000000000000000000000000000000000000000006d789ac90000000000000000000000000000000000000000000000000000000067ce09230000000000000000000000000000000000000000000000000000000067ce5ea7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051d55999c7cd91b17af7276cbecd647dbc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000")
275-
s.mockEventFilterer.EXPECT().LatestBlock().Return(big.NewInt(400), nil).AnyTimes()
276-
s.mockEventFilterer.EXPECT().FilterLogs(gomock.Any(), gomock.Any()).Return([]types.Log{
277-
{
278-
Removed: false,
279-
Data: log,
280-
Topics: []common.Hash{
281-
{},
282-
{},
283-
{},
284-
{},
278+
s.mockEventFilterer.EXPECT().TransactionReceipt(gomock.Any(), gomock.Any()).Return(&types.Receipt{
279+
Logs: []*types.Log{
280+
{
281+
Removed: false,
282+
Data: log,
283+
Topics: []common.Hash{
284+
common.HexToHash("0x32ed1a409ef04c7b0227189c3a103dc5ac10e775a15b785dcc510201f7c25ad3"),
285+
{},
286+
common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000279995"),
287+
{},
288+
},
285289
},
286290
},
287291
}, nil)
@@ -292,7 +296,7 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_ZeroOutputToken() {
292296
errChn := make(chan error, 1)
293297
ad := &message.AcrossData{
294298
ErrChn: errChn,
295-
DepositId: big.NewInt(100),
299+
DepositId: big.NewInt(2595221),
296300
Nonce: big.NewInt(101),
297301
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
298302
Caller: common.HexToAddress("0x5ECF7351930e4A251193aA022Ef06249C6cBfa27"),

chains/evm/message/message.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const (
2727
type AcrossData struct {
2828
ErrChn chan error `json:"-"`
2929

30+
DepositTxHash common.Hash
3031
DepositId *big.Int
3132
Nonce *big.Int
3233
LiquidityPool common.Address

0 commit comments

Comments
 (0)