Skip to content

Commit 636d15a

Browse files
authored
feat: use repayer addresses on across (#67)
1 parent 7df24b0 commit 636d15a

File tree

4 files changed

+62
-19
lines changed

4 files changed

+62
-19
lines changed

app/app.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ func Run() error {
230230
acrossMh := evmMessage.NewAcrossMessageHandler(
231231
*c.GeneralChainConfig.Id,
232232
acrossPools,
233+
repayerAddresses,
233234
coordinator,
234235
host,
235236
communication,

chains/evm/message/across.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ type AcrossMessageHandler struct {
5252
chainID uint64
5353

5454
pools map[uint64]common.Address
55+
repayers map[uint64]common.Address
5556
confirmationWatcher ConfirmationWatcher
5657
depositFetcher DepositFetcher
5758

@@ -66,6 +67,7 @@ type AcrossMessageHandler struct {
6667
func NewAcrossMessageHandler(
6768
chainID uint64,
6869
pools map[uint64]common.Address,
70+
repayers map[uint64]common.Address,
6971
coordinator Coordinator,
7072
host host.Host,
7173
comm comm.Communication,
@@ -77,6 +79,7 @@ func NewAcrossMessageHandler(
7779
return &AcrossMessageHandler{
7880
chainID: chainID,
7981
pools: pools,
82+
repayers: repayers,
8083
coordinator: coordinator,
8184
host: host,
8285
comm: comm,
@@ -96,6 +99,13 @@ func (h *AcrossMessageHandler) HandleMessage(m *message.Message) (*proposal.Prop
9699
log.Info().Str("depositId", data.DepositId.String()).Msgf("Handling across message %+v", data)
97100

98101
sourceChainID := h.chainID
102+
repaymentAddress, ok := h.repayers[data.RepaymentChainID]
103+
if !ok {
104+
err := fmt.Errorf("invalid repayment chain %d", data.RepaymentChainID)
105+
data.ErrChn <- err
106+
return nil, err
107+
}
108+
99109
err := h.notify(data)
100110
if err != nil {
101111
log.Warn().Msgf("Failed to notify relayers because of %s", err)
@@ -121,7 +131,7 @@ func (h *AcrossMessageHandler) HandleMessage(m *message.Message) (*proposal.Prop
121131

122132
calldata, err := d.ToV3RelayData(
123133
new(big.Int).SetUint64(sourceChainID),
124-
).Calldata(d.DestinationChainId, data.LiquidityPool)
134+
).Calldata(new(big.Int).SetUint64(data.RepaymentChainID), repaymentAddress)
125135
if err != nil {
126136
return nil, err
127137
}

chains/evm/message/across_test.go

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ func (s *AcrossMessageHandlerTestSuite) SetupTest() {
7171
pools := make(map[uint64]common.Address)
7272
pools[2] = common.HexToAddress("0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5")
7373

74+
repayers := make(map[uint64]common.Address)
75+
repayers[10] = common.HexToAddress("0x5c7BCd6E7De5423a257D81B442095A1a6ced35C6")
76+
7477
s.sigChn = make(chan interface{}, 1)
7578

7679
// Ethereum: 0x93a9d5e32f5c81cbd17ceb842edc65002e3a79da4efbdc9f1e1f7e97fbcd669b
@@ -83,6 +86,7 @@ func (s *AcrossMessageHandlerTestSuite) SetupTest() {
8386
s.handler = message.NewAcrossMessageHandler(
8487
1,
8588
pools,
89+
repayers,
8690
s.mockCoordinator,
8791
s.mockHost,
8892
s.mockCommunication,
@@ -93,6 +97,31 @@ func (s *AcrossMessageHandlerTestSuite) SetupTest() {
9397
)
9498
}
9599

100+
func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_InvalidRepaymentAddress() {
101+
errChn := make(chan error, 1)
102+
ad := &message.AcrossData{
103+
ErrChn: errChn,
104+
DepositId: big.NewInt(100),
105+
Nonce: big.NewInt(101),
106+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
107+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
108+
RepaymentChainID: 11,
109+
}
110+
m := &coreMessage.Message{
111+
Data: ad,
112+
Source: 1,
113+
Destination: 2,
114+
}
115+
116+
prop, err := s.handler.HandleMessage(m)
117+
118+
s.Nil(prop)
119+
s.NotNil(err)
120+
121+
err = <-errChn
122+
s.NotNil(err)
123+
}
124+
96125
func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_FailedDepositQuery() {
97126
s.mockCommunication.EXPECT().Broadcast(
98127
gomock.Any(),
@@ -106,11 +135,12 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_FailedDepositQuery()
106135

107136
errChn := make(chan error, 1)
108137
ad := &message.AcrossData{
109-
ErrChn: errChn,
110-
DepositId: big.NewInt(100),
111-
Nonce: big.NewInt(101),
112-
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
113-
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
138+
ErrChn: errChn,
139+
DepositId: big.NewInt(100),
140+
Nonce: big.NewInt(101),
141+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
142+
Caller: common.HexToAddress("0xde526bA5d1ad94cC59D7A79d99A59F607d31A657"),
143+
RepaymentChainID: 10,
114144
}
115145
m := &coreMessage.Message{
116146
Data: ad,
@@ -162,11 +192,12 @@ func (s *AcrossMessageHandlerTestSuite) Test_HandleMessage_ValidDeposit() {
162192

163193
errChn := make(chan error, 1)
164194
ad := &message.AcrossData{
165-
ErrChn: errChn,
166-
DepositId: big.NewInt(2595221),
167-
Nonce: big.NewInt(101),
168-
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
169-
Caller: common.HexToAddress("0x5ECF7351930e4A251193aA022Ef06249C6cBfa27"),
195+
ErrChn: errChn,
196+
DepositId: big.NewInt(2595221),
197+
Nonce: big.NewInt(101),
198+
LiquidityPool: common.HexToAddress("0xbe526bA5d1ad94cC59D7A79d99A59F607d31A657"),
199+
Caller: common.HexToAddress("0x5ECF7351930e4A251193aA022Ef06249C6cBfa27"),
200+
RepaymentChainID: 10,
170201
}
171202
m := &coreMessage.Message{
172203
Data: ad,

chains/evm/message/message.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ const (
2626
type AcrossData struct {
2727
ErrChn chan error `json:"-"`
2828

29-
DepositTxHash common.Hash
30-
DepositId *big.Int
31-
Nonce *big.Int
32-
LiquidityPool common.Address
33-
Caller common.Address
34-
Coordinator peer.ID
35-
Source uint64
36-
Destination uint64
29+
DepositTxHash common.Hash
30+
DepositId *big.Int
31+
Nonce *big.Int
32+
LiquidityPool common.Address
33+
RepaymentChainID uint64
34+
Caller common.Address
35+
Coordinator peer.ID
36+
Source uint64
37+
Destination uint64
3738
}
3839

3940
func NewAcrossMessage(source, destination uint64, acrossData *AcrossData) *message.Message {

0 commit comments

Comments
 (0)