diff --git a/.changeset/big-dots-report.md b/.changeset/big-dots-report.md
new file mode 100644
index 00000000000..01475010f0d
--- /dev/null
+++ b/.changeset/big-dots-report.md
@@ -0,0 +1,5 @@
+---
+"chainlink": minor
+---
+
+Updated ZK overflow detection to skip transactions with non-broadcasted attempts. Delayed detection for zkEVM using the MinAttempts config. Updated XLayer to use the same detection logic as zkEVM. #internal
diff --git a/.changeset/calm-badgers-jump.md b/.changeset/calm-badgers-jump.md
new file mode 100644
index 00000000000..76f6e5d3121
--- /dev/null
+++ b/.changeset/calm-badgers-jump.md
@@ -0,0 +1,5 @@
+---
+"chainlink": minor
+---
+
+add error handling when arbitrum sequencer is not accessible #added
diff --git a/.changeset/chilly-cars-attend.md b/.changeset/chilly-cars-attend.md
new file mode 100644
index 00000000000..2cb8323ab3c
--- /dev/null
+++ b/.changeset/chilly-cars-attend.md
@@ -0,0 +1,5 @@
+---
+"chainlink": minor
+---
+
+add error handle for gnosis chiado for seen tx #added
diff --git a/.changeset/friendly-impalas-sniff.md b/.changeset/friendly-impalas-sniff.md
new file mode 100644
index 00000000000..8a041a338bc
--- /dev/null
+++ b/.changeset/friendly-impalas-sniff.md
@@ -0,0 +1,5 @@
+---
+"chainlink": minor
+---
+
+Added nonce validation immediately after broadcast for Hedera #internal
diff --git a/.changeset/mean-brooms-agree.md b/.changeset/mean-brooms-agree.md
new file mode 100644
index 00000000000..0dd2ba7bd33
--- /dev/null
+++ b/.changeset/mean-brooms-agree.md
@@ -0,0 +1,5 @@
+---
+"chainlink": patch
+---
+
+Custom (30s) timeout for Hedera RPC requests with large payloads (SendTransaction, CallContext, etc.) #internal
diff --git a/.changeset/warm-houses-build.md b/.changeset/warm-houses-build.md
new file mode 100644
index 00000000000..6ce6215a88c
--- /dev/null
+++ b/.changeset/warm-houses-build.md
@@ -0,0 +1,5 @@
+---
+"chainlink": minor
+---
+
+Added custom finality calculation for Astar #internal
diff --git a/.changeset/wild-seals-look.md b/.changeset/wild-seals-look.md
new file mode 100644
index 00000000000..3cd854f0e61
--- /dev/null
+++ b/.changeset/wild-seals-look.md
@@ -0,0 +1,5 @@
+---
+"chainlink": patch
+---
+
+Added new health check that ensures RPC provides new finalized heads at least every `NoNewFinalizedHeadsThreshold` #added
diff --git a/.tool-versions b/.tool-versions
index 7d237b0a4a1..e7975a9db33 100644
--- a/.tool-versions
+++ b/.tool-versions
@@ -7,3 +7,4 @@ helm 3.10.3
zig 0.11.0
golangci-lint 1.59.1
protoc 25.1
+python 3.10.5
diff --git a/common/client/mock_node_client_test.go b/common/client/mock_node_client_test.go
index 5b7abe82121..5643dcde90e 100644
--- a/common/client/mock_node_client_test.go
+++ b/common/client/mock_node_client_test.go
@@ -400,62 +400,6 @@ func (_c *mockNodeClient_IsSyncing_Call[CHAIN_ID, HEAD]) RunAndReturn(run func(c
return _c
}
-// LatestFinalizedBlock provides a mock function with given fields: ctx
-func (_m *mockNodeClient[CHAIN_ID, HEAD]) LatestFinalizedBlock(ctx context.Context) (HEAD, error) {
- ret := _m.Called(ctx)
-
- if len(ret) == 0 {
- panic("no return value specified for LatestFinalizedBlock")
- }
-
- var r0 HEAD
- var r1 error
- if rf, ok := ret.Get(0).(func(context.Context) (HEAD, error)); ok {
- return rf(ctx)
- }
- if rf, ok := ret.Get(0).(func(context.Context) HEAD); ok {
- r0 = rf(ctx)
- } else {
- r0 = ret.Get(0).(HEAD)
- }
-
- if rf, ok := ret.Get(1).(func(context.Context) error); ok {
- r1 = rf(ctx)
- } else {
- r1 = ret.Error(1)
- }
-
- return r0, r1
-}
-
-// mockNodeClient_LatestFinalizedBlock_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LatestFinalizedBlock'
-type mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID types.ID, HEAD Head] struct {
- *mock.Call
-}
-
-// LatestFinalizedBlock is a helper method to define mock.On call
-// - ctx context.Context
-func (_e *mockNodeClient_Expecter[CHAIN_ID, HEAD]) LatestFinalizedBlock(ctx interface{}) *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD] {
- return &mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD]{Call: _e.mock.On("LatestFinalizedBlock", ctx)}
-}
-
-func (_c *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD]) Run(run func(ctx context.Context)) *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD] {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context))
- })
- return _c
-}
-
-func (_c *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD]) Return(_a0 HEAD, _a1 error) *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD] {
- _c.Call.Return(_a0, _a1)
- return _c
-}
-
-func (_c *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD]) RunAndReturn(run func(context.Context) (HEAD, error)) *mockNodeClient_LatestFinalizedBlock_Call[CHAIN_ID, HEAD] {
- _c.Call.Return(run)
- return _c
-}
-
// SetAliveLoopSub provides a mock function with given fields: _a0
func (_m *mockNodeClient[CHAIN_ID, HEAD]) SetAliveLoopSub(_a0 types.Subscription) {
_m.Called(_a0)
@@ -538,8 +482,8 @@ func (_c *mockNodeClient_SubscribeNewHead_Call[CHAIN_ID, HEAD]) Run(run func(ctx
return _c
}
-func (_c *mockNodeClient_SubscribeNewHead_Call[CHAIN_ID, HEAD]) Return(_a0 types.Subscription, _a1 error) *mockNodeClient_SubscribeNewHead_Call[CHAIN_ID, HEAD] {
- _c.Call.Return(_a0, _a1)
+func (_c *mockNodeClient_SubscribeNewHead_Call[CHAIN_ID, HEAD]) Return(s types.Subscription, err error) *mockNodeClient_SubscribeNewHead_Call[CHAIN_ID, HEAD] {
+ _c.Call.Return(s, err)
return _c
}
@@ -548,6 +492,140 @@ func (_c *mockNodeClient_SubscribeNewHead_Call[CHAIN_ID, HEAD]) RunAndReturn(run
return _c
}
+// SubscribeToFinalizedHeads provides a mock function with given fields: _a0
+func (_m *mockNodeClient[CHAIN_ID, HEAD]) SubscribeToFinalizedHeads(_a0 context.Context) (<-chan HEAD, types.Subscription, error) {
+ ret := _m.Called(_a0)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SubscribeToFinalizedHeads")
+ }
+
+ var r0 <-chan HEAD
+ var r1 types.Subscription
+ var r2 error
+ if rf, ok := ret.Get(0).(func(context.Context) (<-chan HEAD, types.Subscription, error)); ok {
+ return rf(_a0)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) <-chan HEAD); ok {
+ r0 = rf(_a0)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan HEAD)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) types.Subscription); ok {
+ r1 = rf(_a0)
+ } else {
+ if ret.Get(1) != nil {
+ r1 = ret.Get(1).(types.Subscription)
+ }
+ }
+
+ if rf, ok := ret.Get(2).(func(context.Context) error); ok {
+ r2 = rf(_a0)
+ } else {
+ r2 = ret.Error(2)
+ }
+
+ return r0, r1, r2
+}
+
+// mockNodeClient_SubscribeToFinalizedHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeToFinalizedHeads'
+type mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID types.ID, HEAD Head] struct {
+ *mock.Call
+}
+
+// SubscribeToFinalizedHeads is a helper method to define mock.On call
+// - _a0 context.Context
+func (_e *mockNodeClient_Expecter[CHAIN_ID, HEAD]) SubscribeToFinalizedHeads(_a0 interface{}) *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD] {
+ return &mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD]{Call: _e.mock.On("SubscribeToFinalizedHeads", _a0)}
+}
+
+func (_c *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD]) Run(run func(_a0 context.Context)) *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD] {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD]) Return(_a0 <-chan HEAD, _a1 types.Subscription, _a2 error) *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD] {
+ _c.Call.Return(_a0, _a1, _a2)
+ return _c
+}
+
+func (_c *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD]) RunAndReturn(run func(context.Context) (<-chan HEAD, types.Subscription, error)) *mockNodeClient_SubscribeToFinalizedHeads_Call[CHAIN_ID, HEAD] {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SubscribeToHeads provides a mock function with given fields: ctx
+func (_m *mockNodeClient[CHAIN_ID, HEAD]) SubscribeToHeads(ctx context.Context) (<-chan HEAD, types.Subscription, error) {
+ ret := _m.Called(ctx)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SubscribeToHeads")
+ }
+
+ var r0 <-chan HEAD
+ var r1 types.Subscription
+ var r2 error
+ if rf, ok := ret.Get(0).(func(context.Context) (<-chan HEAD, types.Subscription, error)); ok {
+ return rf(ctx)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) <-chan HEAD); ok {
+ r0 = rf(ctx)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan HEAD)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) types.Subscription); ok {
+ r1 = rf(ctx)
+ } else {
+ if ret.Get(1) != nil {
+ r1 = ret.Get(1).(types.Subscription)
+ }
+ }
+
+ if rf, ok := ret.Get(2).(func(context.Context) error); ok {
+ r2 = rf(ctx)
+ } else {
+ r2 = ret.Error(2)
+ }
+
+ return r0, r1, r2
+}
+
+// mockNodeClient_SubscribeToHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeToHeads'
+type mockNodeClient_SubscribeToHeads_Call[CHAIN_ID types.ID, HEAD Head] struct {
+ *mock.Call
+}
+
+// SubscribeToHeads is a helper method to define mock.On call
+// - ctx context.Context
+func (_e *mockNodeClient_Expecter[CHAIN_ID, HEAD]) SubscribeToHeads(ctx interface{}) *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD] {
+ return &mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD]{Call: _e.mock.On("SubscribeToHeads", ctx)}
+}
+
+func (_c *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD]) Run(run func(ctx context.Context)) *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD] {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD]) Return(ch <-chan HEAD, sub types.Subscription, err error) *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD] {
+ _c.Call.Return(ch, sub, err)
+ return _c
+}
+
+func (_c *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD]) RunAndReturn(run func(context.Context) (<-chan HEAD, types.Subscription, error)) *mockNodeClient_SubscribeToHeads_Call[CHAIN_ID, HEAD] {
+ _c.Call.Return(run)
+ return _c
+}
+
// SubscribersCount provides a mock function with given fields:
func (_m *mockNodeClient[CHAIN_ID, HEAD]) SubscribersCount() int32 {
ret := _m.Called()
diff --git a/common/client/mock_rpc_test.go b/common/client/mock_rpc_test.go
index 36beae901c6..00473c66369 100644
--- a/common/client/mock_rpc_test.go
+++ b/common/client/mock_rpc_test.go
@@ -1508,8 +1508,8 @@ func (_c *mockRPC_SubscribeNewHead_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_
return _c
}
-func (_c *mockRPC_SubscribeNewHead_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) Return(_a0 types.Subscription, _a1 error) *mockRPC_SubscribeNewHead_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
- _c.Call.Return(_a0, _a1)
+func (_c *mockRPC_SubscribeNewHead_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) Return(s types.Subscription, err error) *mockRPC_SubscribeNewHead_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Return(s, err)
return _c
}
@@ -1518,6 +1518,140 @@ func (_c *mockRPC_SubscribeNewHead_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_
return _c
}
+// SubscribeToFinalizedHeads provides a mock function with given fields: _a0
+func (_m *mockRPC[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) SubscribeToFinalizedHeads(_a0 context.Context) (<-chan HEAD, types.Subscription, error) {
+ ret := _m.Called(_a0)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SubscribeToFinalizedHeads")
+ }
+
+ var r0 <-chan HEAD
+ var r1 types.Subscription
+ var r2 error
+ if rf, ok := ret.Get(0).(func(context.Context) (<-chan HEAD, types.Subscription, error)); ok {
+ return rf(_a0)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) <-chan HEAD); ok {
+ r0 = rf(_a0)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan HEAD)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) types.Subscription); ok {
+ r1 = rf(_a0)
+ } else {
+ if ret.Get(1) != nil {
+ r1 = ret.Get(1).(types.Subscription)
+ }
+ }
+
+ if rf, ok := ret.Get(2).(func(context.Context) error); ok {
+ r2 = rf(_a0)
+ } else {
+ r2 = ret.Error(2)
+ }
+
+ return r0, r1, r2
+}
+
+// mockRPC_SubscribeToFinalizedHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeToFinalizedHeads'
+type mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID types.ID, SEQ types.Sequence, ADDR types.Hashable, BLOCK_HASH types.Hashable, TX interface{}, TX_HASH types.Hashable, EVENT interface{}, EVENT_OPS interface{}, TX_RECEIPT types.Receipt[TX_HASH, BLOCK_HASH], FEE feetypes.Fee, HEAD types.Head[BLOCK_HASH], BATCH_ELEM interface{}] struct {
+ *mock.Call
+}
+
+// SubscribeToFinalizedHeads is a helper method to define mock.On call
+// - _a0 context.Context
+func (_e *mockRPC_Expecter[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) SubscribeToFinalizedHeads(_a0 interface{}) *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ return &mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]{Call: _e.mock.On("SubscribeToFinalizedHeads", _a0)}
+}
+
+func (_c *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) Run(run func(_a0 context.Context)) *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) Return(_a0 <-chan HEAD, _a1 types.Subscription, _a2 error) *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Return(_a0, _a1, _a2)
+ return _c
+}
+
+func (_c *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) RunAndReturn(run func(context.Context) (<-chan HEAD, types.Subscription, error)) *mockRPC_SubscribeToFinalizedHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SubscribeToHeads provides a mock function with given fields: ctx
+func (_m *mockRPC[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) SubscribeToHeads(ctx context.Context) (<-chan HEAD, types.Subscription, error) {
+ ret := _m.Called(ctx)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SubscribeToHeads")
+ }
+
+ var r0 <-chan HEAD
+ var r1 types.Subscription
+ var r2 error
+ if rf, ok := ret.Get(0).(func(context.Context) (<-chan HEAD, types.Subscription, error)); ok {
+ return rf(ctx)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) <-chan HEAD); ok {
+ r0 = rf(ctx)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan HEAD)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) types.Subscription); ok {
+ r1 = rf(ctx)
+ } else {
+ if ret.Get(1) != nil {
+ r1 = ret.Get(1).(types.Subscription)
+ }
+ }
+
+ if rf, ok := ret.Get(2).(func(context.Context) error); ok {
+ r2 = rf(ctx)
+ } else {
+ r2 = ret.Error(2)
+ }
+
+ return r0, r1, r2
+}
+
+// mockRPC_SubscribeToHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeToHeads'
+type mockRPC_SubscribeToHeads_Call[CHAIN_ID types.ID, SEQ types.Sequence, ADDR types.Hashable, BLOCK_HASH types.Hashable, TX interface{}, TX_HASH types.Hashable, EVENT interface{}, EVENT_OPS interface{}, TX_RECEIPT types.Receipt[TX_HASH, BLOCK_HASH], FEE feetypes.Fee, HEAD types.Head[BLOCK_HASH], BATCH_ELEM interface{}] struct {
+ *mock.Call
+}
+
+// SubscribeToHeads is a helper method to define mock.On call
+// - ctx context.Context
+func (_e *mockRPC_Expecter[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) SubscribeToHeads(ctx interface{}) *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ return &mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]{Call: _e.mock.On("SubscribeToHeads", ctx)}
+}
+
+func (_c *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) Run(run func(ctx context.Context)) *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) Return(ch <-chan HEAD, sub types.Subscription, err error) *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Return(ch, sub, err)
+ return _c
+}
+
+func (_c *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) RunAndReturn(run func(context.Context) (<-chan HEAD, types.Subscription, error)) *mockRPC_SubscribeToHeads_Call[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM] {
+ _c.Call.Return(run)
+ return _c
+}
+
// SubscribersCount provides a mock function with given fields:
func (_m *mockRPC[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, BATCH_ELEM]) SubscribersCount() int32 {
ret := _m.Called()
diff --git a/common/client/mocks/config.go b/common/client/mocks/config.go
index d1007f39f0f..95b57cce0c3 100644
--- a/common/client/mocks/config.go
+++ b/common/client/mocks/config.go
@@ -3,10 +3,11 @@ package mocks
import "time"
type ChainConfig struct {
- IsFinalityTagEnabled bool
- FinalityDepthVal uint32
- NoNewHeadsThresholdVal time.Duration
- FinalizedBlockOffsetVal uint32
+ IsFinalityTagEnabled bool
+ FinalityDepthVal uint32
+ NoNewHeadsThresholdVal time.Duration
+ FinalizedBlockOffsetVal uint32
+ NoNewFinalizedHeadsThresholdVal time.Duration
}
func (t ChainConfig) NodeNoNewHeadsThreshold() time.Duration {
@@ -24,3 +25,7 @@ func (t ChainConfig) FinalityTagEnabled() bool {
func (t ChainConfig) FinalizedBlockOffset() uint32 {
return t.FinalizedBlockOffsetVal
}
+
+func (t ChainConfig) NoNewFinalizedHeadsThreshold() time.Duration {
+ return t.NoNewFinalizedHeadsThresholdVal
+}
diff --git a/common/client/models.go b/common/client/models.go
index 8b616137669..526bb25c887 100644
--- a/common/client/models.go
+++ b/common/client/models.go
@@ -1,6 +1,7 @@
package client
import (
+ "bytes"
"fmt"
)
@@ -74,3 +75,47 @@ func (n NodeTier) String() string {
return fmt.Sprintf("NodeTier(%d)", n)
}
}
+
+// syncStatus - defines problems related to RPC's state synchronization. Can be used as a bitmask to define multiple issues
+type syncStatus int
+
+const (
+ // syncStatusSynced - RPC is fully synced
+ syncStatusSynced = 0
+ // syncStatusNotInSyncWithPool - RPC is lagging behind the highest block observed within the pool of RPCs
+ syncStatusNotInSyncWithPool syncStatus = 1 << iota
+ // syncStatusNoNewHead - RPC failed to produce a new head for too long
+ syncStatusNoNewHead
+ // syncStatusNoNewFinalizedHead - RPC failed to produce a new finalized head for too long
+ syncStatusNoNewFinalizedHead
+ syncStatusLen
+)
+
+func (s syncStatus) String() string {
+ if s == syncStatusSynced {
+ return "Synced"
+ }
+ var result bytes.Buffer
+ for i := syncStatusNotInSyncWithPool; i < syncStatusLen; i = i << 1 {
+ if i&s == 0 {
+ continue
+ }
+ result.WriteString(i.string())
+ result.WriteString(",")
+ }
+ result.Truncate(result.Len() - 1)
+ return result.String()
+}
+
+func (s syncStatus) string() string {
+ switch s {
+ case syncStatusNotInSyncWithPool:
+ return "NotInSyncWithRPCPool"
+ case syncStatusNoNewHead:
+ return "NoNewHead"
+ case syncStatusNoNewFinalizedHead:
+ return "NoNewFinalizedHead"
+ default:
+ return fmt.Sprintf("syncStatus(%d)", s)
+ }
+}
diff --git a/common/client/models_test.go b/common/client/models_test.go
index 2d5dc31b373..a10592c3b68 100644
--- a/common/client/models_test.go
+++ b/common/client/models_test.go
@@ -3,6 +3,8 @@ package client
import (
"strings"
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestSendTxReturnCode_String(t *testing.T) {
@@ -14,3 +16,35 @@ func TestSendTxReturnCode_String(t *testing.T) {
}
}
}
+
+func TestSyncStatus_String(t *testing.T) {
+ t.Run("All of the statuses have proper string representation", func(t *testing.T) {
+ for i := syncStatusNotInSyncWithPool; i < syncStatusLen; i <<= 1 {
+ // ensure that i's string representation is not equal to `syncStatus(%d)`
+ assert.NotContains(t, i.String(), "syncStatus(")
+ }
+ })
+ t.Run("Unwraps mask", func(t *testing.T) {
+ testCases := []struct {
+ Mask syncStatus
+ ExpectedStr string
+ }{
+ {
+ ExpectedStr: "Synced",
+ },
+ {
+ Mask: syncStatusNotInSyncWithPool | syncStatusNoNewHead,
+ ExpectedStr: "NotInSyncWithRPCPool,NoNewHead",
+ },
+ {
+ Mask: syncStatusNotInSyncWithPool | syncStatusNoNewHead | syncStatusNoNewFinalizedHead,
+ ExpectedStr: "NotInSyncWithRPCPool,NoNewHead,NoNewFinalizedHead",
+ },
+ }
+ for _, testCase := range testCases {
+ t.Run(testCase.ExpectedStr, func(t *testing.T) {
+ assert.Equal(t, testCase.ExpectedStr, testCase.Mask.String())
+ })
+ }
+ })
+}
diff --git a/common/client/multi_node.go b/common/client/multi_node.go
index 4d4ea925fe8..c9250a1d620 100644
--- a/common/client/multi_node.go
+++ b/common/client/multi_node.go
@@ -15,6 +15,7 @@ import (
"github.com/smartcontractkit/chainlink-common/pkg/assets"
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/services"
+
feetypes "github.com/smartcontractkit/chainlink/v2/common/fee/types"
"github.com/smartcontractkit/chainlink/v2/common/types"
)
@@ -821,6 +822,14 @@ func (c *multiNode[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OP
return n.RPC().SubscribeNewHead(ctx, channel)
}
+func (c *multiNode[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, RPC_CLIENT, BATCH_ELEM]) SubscribeToHeads(ctx context.Context) (ch <-chan HEAD, sub types.Subscription, err error) {
+ n, err := c.selectNode()
+ if err != nil {
+ return nil, nil, err
+ }
+ return n.RPC().SubscribeToHeads(ctx)
+}
+
func (c *multiNode[CHAIN_ID, SEQ, ADDR, BLOCK_HASH, TX, TX_HASH, EVENT, EVENT_OPS, TX_RECEIPT, FEE, HEAD, RPC_CLIENT, BATCH_ELEM]) TokenBalance(ctx context.Context, account ADDR, tokenAddr ADDR) (b *big.Int, err error) {
n, err := c.selectNode()
if err != nil {
diff --git a/common/client/node.go b/common/client/node.go
index 5ea31d65961..d6543c772a8 100644
--- a/common/client/node.go
+++ b/common/client/node.go
@@ -49,6 +49,7 @@ type NodeConfig interface {
type ChainConfig interface {
NodeNoNewHeadsThreshold() time.Duration
+ NoNewFinalizedHeadsThreshold() time.Duration
FinalityDepth() uint32
FinalityTagEnabled() bool
FinalizedBlockOffset() uint32
diff --git a/common/client/node_fsm.go b/common/client/node_fsm.go
index 5a5e2554431..e58de071fbc 100644
--- a/common/client/node_fsm.go
+++ b/common/client/node_fsm.go
@@ -2,7 +2,6 @@ package client
import (
"fmt"
- "math/big"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
@@ -240,11 +239,11 @@ func (n *node[CHAIN_ID, HEAD, RPC]) transitionToInSync(fn func()) {
// declareOutOfSync puts a node into OutOfSync state, disconnecting all current
// clients and making it unavailable for use until back in-sync.
-func (n *node[CHAIN_ID, HEAD, RPC]) declareOutOfSync(isOutOfSync func(num int64, td *big.Int) bool) {
+func (n *node[CHAIN_ID, HEAD, RPC]) declareOutOfSync(syncIssues syncStatus) {
n.transitionToOutOfSync(func() {
- n.lfcLog.Errorw("RPC Node is out of sync", "nodeState", n.state)
+ n.lfcLog.Errorw("RPC Node is out of sync", "nodeState", n.state, "syncIssues", syncIssues)
n.wg.Add(1)
- go n.outOfSyncLoop(isOutOfSync)
+ go n.outOfSyncLoop(syncIssues)
})
}
diff --git a/common/client/node_lifecycle.go b/common/client/node_lifecycle.go
index 39e17bb4972..40d9a9ef6ef 100644
--- a/common/client/node_lifecycle.go
+++ b/common/client/node_lifecycle.go
@@ -7,6 +7,8 @@ import (
"math/big"
"time"
+ "github.com/smartcontractkit/chainlink/v2/common/types"
+
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
@@ -86,33 +88,37 @@ func (n *node[CHAIN_ID, HEAD, RPC]) aliveLoop() {
}
noNewHeadsTimeoutThreshold := n.chainCfg.NodeNoNewHeadsThreshold()
+ noNewFinalizedBlocksTimeoutThreshold := n.chainCfg.NoNewFinalizedHeadsThreshold()
pollFailureThreshold := n.nodePoolCfg.PollFailureThreshold()
pollInterval := n.nodePoolCfg.PollInterval()
lggr := logger.Sugared(n.lfcLog).Named("Alive").With("noNewHeadsTimeoutThreshold", noNewHeadsTimeoutThreshold, "pollInterval", pollInterval, "pollFailureThreshold", pollFailureThreshold)
lggr.Tracew("Alive loop starting", "nodeState", n.getCachedState())
- headsC := make(chan HEAD)
- sub, err := n.rpc.SubscribeNewHead(ctx, headsC)
+ headsSub, err := n.registerNewSubscription(ctx, lggr.With("subscriptionType", "heads"),
+ n.chainCfg.NodeNoNewHeadsThreshold(), n.rpc.SubscribeToHeads)
if err != nil {
- lggr.Errorw("Initial subscribe for heads failed", "nodeState", n.getCachedState())
+ lggr.Errorw("Initial subscribe for heads failed", "nodeState", n.getCachedState(), "err", err)
n.declareUnreachable()
return
}
- // TODO: nit fix. If multinode switches primary node before we set sub as AliveSub, sub will be closed and we'll
- // falsely transition this node to unreachable state
- n.rpc.SetAliveLoopSub(sub)
- defer sub.Unsubscribe()
-
- var outOfSyncT *time.Ticker
- var outOfSyncTC <-chan time.Time
- if noNewHeadsTimeoutThreshold > 0 {
- lggr.Debugw("Head liveness checking enabled", "nodeState", n.getCachedState())
- outOfSyncT = time.NewTicker(noNewHeadsTimeoutThreshold)
- defer outOfSyncT.Stop()
- outOfSyncTC = outOfSyncT.C
- } else {
- lggr.Debug("Head liveness checking disabled")
+
+ // TODO: will be removed as part of merging effort with BCI-2875
+ n.rpc.SetAliveLoopSub(headsSub.sub)
+
+ defer headsSub.Unsubscribe()
+
+ var finalizedHeadsSub headSubscription[HEAD]
+ if n.chainCfg.FinalityTagEnabled() {
+ finalizedHeadsSub, err = n.registerNewSubscription(ctx, lggr.With("subscriptionType", "finalizedHeads"),
+ n.chainCfg.NoNewFinalizedHeadsThreshold(), n.rpc.SubscribeToFinalizedHeads)
+ if err != nil {
+ lggr.Errorw("Failed to subscribe to finalized heads", "err", err)
+ n.declareUnreachable()
+ return
+ }
+
+ defer finalizedHeadsSub.Unsubscribe()
}
var pollCh <-chan time.Time
@@ -131,14 +137,6 @@ func (n *node[CHAIN_ID, HEAD, RPC]) aliveLoop() {
lggr.Debug("Polling disabled")
}
- var pollFinalizedHeadCh <-chan time.Time
- if n.chainCfg.FinalityTagEnabled() && n.nodePoolCfg.FinalizedBlockPollInterval() > 0 {
- lggr.Debugw("Finalized block polling enabled")
- pollT := time.NewTicker(n.nodePoolCfg.FinalizedBlockPollInterval())
- defer pollT.Stop()
- pollFinalizedHeadCh = pollT.C
- }
-
localHighestChainInfo, _ := n.rpc.GetInterceptedChainInfo()
var pollFailures uint32
@@ -149,7 +147,8 @@ func (n *node[CHAIN_ID, HEAD, RPC]) aliveLoop() {
case <-pollCh:
promPoolRPCNodePolls.WithLabelValues(n.chainID.String(), n.name).Inc()
lggr.Tracew("Polling for version", "nodeState", n.getCachedState(), "pollFailures", pollFailures)
- version, err := func(ctx context.Context) (string, error) {
+ var version string
+ version, err = func(ctx context.Context) (string, error) {
ctx, cancel := context.WithTimeout(ctx, pollInterval)
defer cancel()
return n.RPC().ClientVersion(ctx)
@@ -177,47 +176,33 @@ func (n *node[CHAIN_ID, HEAD, RPC]) aliveLoop() {
n.declareUnreachable()
return
}
- _, ci := n.StateAndLatest()
- if outOfSync, liveNodes := n.syncStatus(ci.BlockNumber, ci.TotalDifficulty); outOfSync {
+ _, latestChainInfo := n.StateAndLatest()
+ if outOfSync, liveNodes := n.isOutOfSyncWithPool(latestChainInfo); outOfSync {
// note: there must be another live node for us to be out of sync
- lggr.Errorw("RPC endpoint has fallen behind", "blockNumber", ci.BlockNumber, "totalDifficulty", ci.TotalDifficulty, "nodeState", n.getCachedState())
+ lggr.Errorw("RPC endpoint has fallen behind", "blockNumber", latestChainInfo.BlockNumber, "totalDifficulty", latestChainInfo.TotalDifficulty, "nodeState", n.getCachedState())
if liveNodes < 2 {
lggr.Criticalf("RPC endpoint has fallen behind; %s %s", msgCannotDisable, msgDegradedState)
continue
}
- n.declareOutOfSync(n.isOutOfSync)
+ n.declareOutOfSync(syncStatusNotInSyncWithPool)
return
}
- case bh, open := <-headsC:
+ case bh, open := <-headsSub.Heads:
if !open {
lggr.Errorw("Subscription channel unexpectedly closed", "nodeState", n.getCachedState())
n.declareUnreachable()
return
}
- promPoolRPCNodeNumSeenBlocks.WithLabelValues(n.chainID.String(), n.name).Inc()
- lggr.Tracew("Got head", "head", bh)
- if bh.BlockNumber() > localHighestChainInfo.BlockNumber {
- promPoolRPCNodeHighestSeenBlock.WithLabelValues(n.chainID.String(), n.name).Set(float64(bh.BlockNumber()))
- lggr.Tracew("Got higher block number, resetting timer", "latestReceivedBlockNumber", localHighestChainInfo.BlockNumber, "blockNumber", bh.BlockNumber(), "nodeState", n.getCachedState())
- localHighestChainInfo.BlockNumber = bh.BlockNumber()
- } else {
- lggr.Tracew("Ignoring previously seen block number", "latestReceivedBlockNumber", localHighestChainInfo.BlockNumber, "blockNumber", bh.BlockNumber(), "nodeState", n.getCachedState())
- }
- if outOfSyncT != nil {
- outOfSyncT.Reset(noNewHeadsTimeoutThreshold)
- }
- if !n.chainCfg.FinalityTagEnabled() {
- latestFinalizedBN := max(bh.BlockNumber()-int64(n.chainCfg.FinalityDepth()), 0)
- if latestFinalizedBN > localHighestChainInfo.FinalizedBlockNumber {
- promPoolRPCNodeHighestFinalizedBlock.WithLabelValues(n.chainID.String(), n.name).Set(float64(latestFinalizedBN))
- localHighestChainInfo.FinalizedBlockNumber = latestFinalizedBN
- }
+
+ receivedNewHead := n.onNewHead(lggr, &localHighestChainInfo, bh)
+ if receivedNewHead && noNewHeadsTimeoutThreshold > 0 {
+ headsSub.ResetTimer(noNewHeadsTimeoutThreshold)
}
- case err := <-sub.Err():
+ case err = <-headsSub.Errors:
lggr.Errorw("Subscription was terminated", "err", err, "nodeState", n.getCachedState())
n.declareUnreachable()
return
- case <-outOfSyncTC:
+ case <-headsSub.NoNewHeads:
// We haven't received a head on the channel for at least the
// threshold amount of time, mark it broken
lggr.Errorw(fmt.Sprintf("RPC endpoint detected out of sync; no new heads received for %s (last head received was %v)", noNewHeadsTimeoutThreshold, localHighestChainInfo.BlockNumber), "nodeState", n.getCachedState(), "latestReceivedBlockNumber", localHighestChainInfo.BlockNumber, "noNewHeadsTimeoutThreshold", noNewHeadsTimeoutThreshold)
@@ -226,47 +211,151 @@ func (n *node[CHAIN_ID, HEAD, RPC]) aliveLoop() {
lggr.Criticalf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState)
// We don't necessarily want to wait the full timeout to check again, we should
// check regularly and log noisily in this state
- outOfSyncT.Reset(zombieNodeCheckInterval(noNewHeadsTimeoutThreshold))
+ headsSub.ResetTimer(zombieNodeCheckInterval(noNewHeadsTimeoutThreshold))
continue
}
}
- n.declareOutOfSync(func(num int64, td *big.Int) bool { return num < localHighestChainInfo.BlockNumber })
+ n.declareOutOfSync(syncStatusNoNewHead)
return
- case <-pollFinalizedHeadCh:
- latestFinalized, err := func(ctx context.Context) (HEAD, error) {
- ctx, cancel := context.WithTimeout(ctx, n.nodePoolCfg.FinalizedBlockPollInterval())
- defer cancel()
- return n.RPC().LatestFinalizedBlock(ctx)
- }(ctx)
- if err != nil {
- lggr.Warnw("Failed to fetch latest finalized block", "err", err)
- continue
+ case latestFinalized, open := <-finalizedHeadsSub.Heads:
+ if !open {
+ lggr.Errorw("Finalized heads subscription channel unexpectedly closed", "nodeState", n.getCachedState())
+ n.declareUnreachable()
+ return
}
- if !latestFinalized.IsValid() {
- lggr.Warn("Latest finalized block is not valid")
- continue
+ receivedNewHead := n.onNewFinalizedHead(lggr, &localHighestChainInfo, latestFinalized)
+ if receivedNewHead && noNewFinalizedBlocksTimeoutThreshold > 0 {
+ finalizedHeadsSub.ResetTimer(noNewFinalizedBlocksTimeoutThreshold)
}
-
- latestFinalizedBN := latestFinalized.BlockNumber()
- if latestFinalizedBN > localHighestChainInfo.FinalizedBlockNumber {
- promPoolRPCNodeHighestFinalizedBlock.WithLabelValues(n.chainID.String(), n.name).Set(float64(latestFinalizedBN))
- localHighestChainInfo.FinalizedBlockNumber = latestFinalizedBN
+ case <-finalizedHeadsSub.NoNewHeads:
+ // We haven't received a finalized head on the channel for at least the
+ // threshold amount of time, mark it broken
+ lggr.Errorw(fmt.Sprintf("RPC's finalized state is out of sync; no new finalized heads received for %s (last finalized head received was %v)", noNewFinalizedBlocksTimeoutThreshold, localHighestChainInfo.FinalizedBlockNumber), "latestReceivedBlockNumber", localHighestChainInfo.BlockNumber)
+ if n.poolInfoProvider != nil {
+ if l, _ := n.poolInfoProvider.LatestChainInfo(); l < 2 {
+ lggr.Criticalf("RPC's finalized state is out of sync; %s %s", msgCannotDisable, msgDegradedState)
+ // We don't necessarily want to wait the full timeout to check again, we should
+ // check regularly and log noisily in this state
+ finalizedHeadsSub.ResetTimer(zombieNodeCheckInterval(noNewFinalizedBlocksTimeoutThreshold))
+ continue
+ }
}
+ n.declareOutOfSync(syncStatusNoNewFinalizedHead)
+ return
+ case <-finalizedHeadsSub.Errors:
+ lggr.Errorw("Finalized heads subscription was terminated", "err", err)
+ n.declareUnreachable()
+ return
}
}
}
-func (n *node[CHAIN_ID, HEAD, RPC]) isOutOfSync(num int64, td *big.Int) (outOfSync bool) {
- outOfSync, _ = n.syncStatus(num, td)
- return
+type headSubscription[HEAD any] struct {
+ Heads <-chan HEAD
+ Errors <-chan error
+ NoNewHeads <-chan time.Time
+
+ noNewHeadsTicker *time.Ticker
+ sub types.Subscription
+ cleanUpTasks []func()
+}
+
+func (sub *headSubscription[HEAD]) ResetTimer(duration time.Duration) {
+ sub.noNewHeadsTicker.Reset(duration)
+}
+
+func (sub *headSubscription[HEAD]) Unsubscribe() {
+ for _, doCleanUp := range sub.cleanUpTasks {
+ doCleanUp()
+ }
+}
+
+func (n *node[CHAIN_ID, HEAD, PRC]) registerNewSubscription(ctx context.Context, lggr logger.SugaredLogger,
+ noNewDataThreshold time.Duration, newSub func(ctx context.Context) (<-chan HEAD, types.Subscription, error)) (headSubscription[HEAD], error) {
+ result := headSubscription[HEAD]{}
+ var err error
+ var sub types.Subscription
+ result.Heads, sub, err = newSub(ctx)
+ if err != nil {
+ return result, err
+ }
+
+ result.Errors = sub.Err()
+ lggr.Debug("Successfully subscribed")
+
+ // TODO: will be removed as part of merging effort with BCI-2875
+ result.sub = sub
+ //n.stateMu.Lock()
+ //n.healthCheckSubs = append(n.healthCheckSubs, sub)
+ //n.stateMu.Unlock()
+
+ result.cleanUpTasks = append(result.cleanUpTasks, sub.Unsubscribe)
+
+ if noNewDataThreshold > 0 {
+ lggr.Debugw("Subscription liveness checking enabled")
+ result.noNewHeadsTicker = time.NewTicker(noNewDataThreshold)
+ result.NoNewHeads = result.noNewHeadsTicker.C
+ result.cleanUpTasks = append(result.cleanUpTasks, result.noNewHeadsTicker.Stop)
+ } else {
+ lggr.Debug("Subscription liveness checking disabled")
+ }
+
+ return result, nil
}
-// syncStatus returns outOfSync true if num or td is more than SyncThresold behind the best node.
+func (n *node[CHAIN_ID, HEAD, RPC]) onNewFinalizedHead(lggr logger.SugaredLogger, chainInfo *ChainInfo, latestFinalized HEAD) bool {
+ if !latestFinalized.IsValid() {
+ lggr.Warn("Latest finalized block is not valid")
+ return false
+ }
+
+ latestFinalizedBN := latestFinalized.BlockNumber()
+ lggr.Tracew("Got latest finalized head", "latestFinalized", latestFinalized)
+ if latestFinalizedBN <= chainInfo.FinalizedBlockNumber {
+ lggr.Tracew("Ignoring previously seen finalized block number")
+ return false
+ }
+
+ promPoolRPCNodeHighestFinalizedBlock.WithLabelValues(n.chainID.String(), n.name).Set(float64(latestFinalizedBN))
+ chainInfo.FinalizedBlockNumber = latestFinalizedBN
+ return true
+}
+
+func (n *node[CHAIN_ID, HEAD, RPC]) onNewHead(lggr logger.SugaredLogger, chainInfo *ChainInfo, head HEAD) bool {
+ if !head.IsValid() {
+ lggr.Warn("Latest head is not valid")
+ return false
+ }
+
+ promPoolRPCNodeNumSeenBlocks.WithLabelValues(n.chainID.String(), n.name).Inc()
+ lggr.Tracew("Got head", "head", head)
+ lggr = lggr.With("latestReceivedBlockNumber", chainInfo.BlockNumber, "blockNumber", head.BlockNumber(), "nodeState", n.getCachedState())
+ if head.BlockNumber() <= chainInfo.BlockNumber {
+ lggr.Tracew("Ignoring previously seen block number")
+ return false
+ }
+
+ promPoolRPCNodeHighestSeenBlock.WithLabelValues(n.chainID.String(), n.name).Set(float64(head.BlockNumber()))
+ chainInfo.BlockNumber = head.BlockNumber()
+
+ if !n.chainCfg.FinalityTagEnabled() {
+ latestFinalizedBN := max(head.BlockNumber()-int64(n.chainCfg.FinalityDepth()), 0)
+ if latestFinalizedBN > chainInfo.FinalizedBlockNumber {
+ promPoolRPCNodeHighestFinalizedBlock.WithLabelValues(n.chainID.String(), n.name).Set(float64(latestFinalizedBN))
+ chainInfo.FinalizedBlockNumber = latestFinalizedBN
+ }
+ }
+
+ return true
+}
+
+// isOutOfSyncWithPool returns outOfSync true if num or td is more than SyncThresold behind the best node.
// Always returns outOfSync false for SyncThreshold 0.
// liveNodes is only included when outOfSync is true.
-func (n *node[CHAIN_ID, HEAD, RPC]) syncStatus(num int64, td *big.Int) (outOfSync bool, liveNodes int) {
+func (n *node[CHAIN_ID, HEAD, RPC]) isOutOfSyncWithPool(localState ChainInfo) (outOfSync bool, liveNodes int) {
if n.poolInfoProvider == nil {
+ n.lfcLog.Warn("skipping sync state against the pool - should only occur in tests")
return // skip for tests
}
threshold := n.nodePoolCfg.SyncThreshold()
@@ -278,22 +367,23 @@ func (n *node[CHAIN_ID, HEAD, RPC]) syncStatus(num int64, td *big.Int) (outOfSyn
mode := n.nodePoolCfg.SelectionMode()
switch mode {
case NodeSelectionModeHighestHead, NodeSelectionModeRoundRobin, NodeSelectionModePriorityLevel:
- return num < ci.BlockNumber-int64(threshold), ln
+ return localState.BlockNumber < ci.BlockNumber-int64(threshold), ln
case NodeSelectionModeTotalDifficulty:
bigThreshold := big.NewInt(int64(threshold))
- return td.Cmp(bigmath.Sub(ci.TotalDifficulty, bigThreshold)) < 0, ln
+ return localState.TotalDifficulty.Cmp(bigmath.Sub(ci.TotalDifficulty, bigThreshold)) < 0, ln
default:
panic("unrecognized NodeSelectionMode: " + mode)
}
}
const (
- msgReceivedBlock = "Received block for RPC node, waiting until back in-sync to mark as live again"
- msgInSync = "RPC node back in sync"
+ msgReceivedBlock = "Received block for RPC node, waiting until back in-sync to mark as live again"
+ msgReceivedFinalizedBlock = "Received new finalized block for RPC node, waiting until back in-sync to mark as live again"
+ msgInSync = "RPC node back in sync"
)
// outOfSyncLoop takes an OutOfSync node and waits until isOutOfSync returns false to go back to live status
-func (n *node[CHAIN_ID, HEAD, RPC]) outOfSyncLoop(isOutOfSync func(num int64, td *big.Int) bool) {
+func (n *node[CHAIN_ID, HEAD, RPC]) outOfSyncLoop(syncIssues syncStatus) {
defer n.wg.Done()
ctx, cancel := n.newCtx()
defer cancel()
@@ -312,8 +402,9 @@ func (n *node[CHAIN_ID, HEAD, RPC]) outOfSyncLoop(isOutOfSync func(num int64, td
outOfSyncAt := time.Now()
- lggr := logger.Sugared(logger.Named(n.lfcLog, "OutOfSync"))
- lggr.Debugw("Trying to revive out-of-sync RPC node", "nodeState", n.getCachedState())
+ // set logger name to OutOfSync or FinalizedBlockOutOfSync
+ lggr := logger.Sugared(logger.Named(n.lfcLog, n.getCachedState().String())).With("nodeState", n.getCachedState())
+ lggr.Debugw("Trying to revive out-of-sync RPC node")
// Need to redial since out-of-sync nodes are automatically disconnected
state := n.createVerifiedConn(ctx, lggr)
@@ -322,46 +413,118 @@ func (n *node[CHAIN_ID, HEAD, RPC]) outOfSyncLoop(isOutOfSync func(num int64, td
return
}
- lggr.Tracew("Successfully subscribed to heads feed on out-of-sync RPC node", "nodeState", n.getCachedState())
-
- ch := make(chan HEAD)
- sub, err := n.rpc.SubscribeNewHead(ctx, ch)
+ noNewHeadsTimeoutThreshold := n.chainCfg.NodeNoNewHeadsThreshold()
+ headsSub, err := n.registerNewSubscription(ctx, lggr.With("subscriptionType", "heads"),
+ noNewHeadsTimeoutThreshold, n.rpc.SubscribeToHeads)
if err != nil {
- lggr.Errorw("Failed to subscribe heads on out-of-sync RPC node", "nodeState", n.getCachedState(), "err", err)
+ lggr.Errorw("Failed to subscribe heads on out-of-sync RPC node", "err", err)
n.declareUnreachable()
return
}
- defer sub.Unsubscribe()
+ lggr.Tracew("Successfully subscribed to heads feed on out-of-sync RPC node")
+ defer headsSub.Unsubscribe()
+
+ noNewFinalizedBlocksTimeoutThreshold := n.chainCfg.NoNewFinalizedHeadsThreshold()
+ var finalizedHeadsSub headSubscription[HEAD]
+ if n.chainCfg.FinalityTagEnabled() {
+ finalizedHeadsSub, err = n.registerNewSubscription(ctx, lggr.With("subscriptionType", "finalizedHeads"),
+ noNewFinalizedBlocksTimeoutThreshold, n.rpc.SubscribeToFinalizedHeads)
+ if err != nil {
+ lggr.Errorw("Subscribe to finalized heads failed on out-of-sync RPC node", "err", err)
+ n.declareUnreachable()
+ return
+ }
+
+ lggr.Tracew("Successfully subscribed to finalized heads feed on out-of-sync RPC node")
+ defer finalizedHeadsSub.Unsubscribe()
+ }
+
+ _, localHighestChainInfo := n.rpc.GetInterceptedChainInfo()
for {
+ if syncIssues == syncStatusSynced {
+ // back in-sync! flip back into alive loop
+ lggr.Infow(fmt.Sprintf("%s: %s. Node was out-of-sync for %s", msgInSync, n.String(), time.Since(outOfSyncAt)))
+ n.declareInSync()
+ return
+ }
+
select {
case <-ctx.Done():
return
- case head, open := <-ch:
+ case head, open := <-headsSub.Heads:
if !open {
- lggr.Error("Subscription channel unexpectedly closed", "nodeState", n.getCachedState())
+ lggr.Errorw("Subscription channel unexpectedly closed", "nodeState", n.getCachedState())
n.declareUnreachable()
return
}
- if !isOutOfSync(head.BlockNumber(), head.BlockDifficulty()) {
- // back in-sync! flip back into alive loop
- lggr.Infow(fmt.Sprintf("%s: %s. Node was out-of-sync for %s", msgInSync, n.String(), time.Since(outOfSyncAt)), "blockNumber", head.BlockNumber(), "blockDifficulty", head.BlockDifficulty(), "nodeState", n.getCachedState())
- n.declareInSync()
- return
+
+ if !n.onNewHead(lggr, &localHighestChainInfo, head) {
+ continue
+ }
+
+ // received a new head - clear NoNewHead flag
+ syncIssues &= ^syncStatusNoNewHead
+ if outOfSync, _ := n.isOutOfSyncWithPool(localHighestChainInfo); !outOfSync {
+ // we caught up with the pool - clear NotInSyncWithPool flag
+ syncIssues &= ^syncStatusNotInSyncWithPool
+ } else {
+ // we've received new head, but lagging behind the pool, add NotInSyncWithPool flag to prevent false transition to alive
+ syncIssues |= syncStatusNotInSyncWithPool
+ }
+
+ if noNewHeadsTimeoutThreshold > 0 {
+ headsSub.ResetTimer(noNewHeadsTimeoutThreshold)
}
- lggr.Debugw(msgReceivedBlock, "blockNumber", head.BlockNumber(), "blockDifficulty", head.BlockDifficulty(), "nodeState", n.getCachedState())
- case <-time.After(zombieNodeCheckInterval(n.chainCfg.NodeNoNewHeadsThreshold())):
+
+ lggr.Debugw(msgReceivedBlock, "blockNumber", head.BlockNumber(), "blockDifficulty", head.BlockDifficulty(), "syncIssues", syncIssues)
+ case <-time.After(zombieNodeCheckInterval(noNewHeadsTimeoutThreshold)):
if n.poolInfoProvider != nil {
if l, _ := n.poolInfoProvider.LatestChainInfo(); l < 1 {
- lggr.Critical("RPC endpoint is still out of sync, but there are no other available nodes. This RPC node will be forcibly moved back into the live pool in a degraded state")
+ lggr.Criticalw("RPC endpoint is still out of sync, but there are no other available nodes. This RPC node will be forcibly moved back into the live pool in a degraded state", "syncIssues", syncIssues)
n.declareInSync()
return
}
}
- case err := <-sub.Err():
- lggr.Errorw("Subscription was terminated", "nodeState", n.getCachedState(), "err", err)
+ case err := <-headsSub.Errors:
+ lggr.Errorw("Subscription was terminated", "err", err)
+ n.declareUnreachable()
+ return
+ case <-headsSub.NoNewHeads:
+ // we are not resetting the timer, as there is no need to add syncStatusNoNewHead until it's removed on new head.
+ syncIssues |= syncStatusNoNewHead
+ lggr.Debugw(fmt.Sprintf("No new heads received for %s. Node stays out-of-sync due to sync issues: %s", noNewHeadsTimeoutThreshold, syncIssues))
+ case latestFinalized, open := <-finalizedHeadsSub.Heads:
+ if !open {
+ lggr.Errorw("Finalized heads subscription channel unexpectedly closed")
+ n.declareUnreachable()
+ return
+ }
+ if !latestFinalized.IsValid() {
+ lggr.Warn("Latest finalized block is not valid")
+ continue
+ }
+
+ receivedNewHead := n.onNewFinalizedHead(lggr, &localHighestChainInfo, latestFinalized)
+ if !receivedNewHead {
+ continue
+ }
+
+ // on new finalized head remove NoNewFinalizedHead flag from the mask
+ syncIssues &= ^syncStatusNoNewFinalizedHead
+ if noNewFinalizedBlocksTimeoutThreshold > 0 {
+ finalizedHeadsSub.ResetTimer(noNewFinalizedBlocksTimeoutThreshold)
+ }
+
+ lggr.Debugw(msgReceivedFinalizedBlock, "blockNumber", latestFinalized.BlockNumber(), "syncIssues", syncIssues)
+ case err := <-finalizedHeadsSub.Errors:
+ lggr.Errorw("Finalized head subscription was terminated", "err", err)
n.declareUnreachable()
return
+ case <-finalizedHeadsSub.NoNewHeads:
+ // we are not resetting the timer, as there is no need to add syncStatusNoNewFinalizedHead until it's removed on new finalized head.
+ syncIssues |= syncStatusNoNewFinalizedHead
+ lggr.Debugw(fmt.Sprintf("No new finalized heads received for %s. Node stays out-of-sync due to sync issues: %s", noNewFinalizedBlocksTimeoutThreshold, syncIssues))
}
}
}
diff --git a/common/client/node_lifecycle_test.go b/common/client/node_lifecycle_test.go
index 863a15a1fad..833bccf7f29 100644
--- a/common/client/node_lifecycle_test.go
+++ b/common/client/node_lifecycle_test.go
@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"math/big"
+ "sync"
"sync/atomic"
"testing"
@@ -49,7 +50,7 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
expectedError := errors.New("failed to subscribe to rpc")
rpc.On("DisconnectAll").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, expectedError).Once()
+ rpc.On("SubscribeToHeads", mock.Anything).Return(nil, nil, expectedError).Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
@@ -74,7 +75,7 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
close(errChan)
sub.On("Err").Return((<-chan error)(errChan)).Once()
sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(sub, nil).Once()
+ rpc.On("SubscribeToHeads", mock.Anything).Return(nil, sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll").Once()
@@ -89,7 +90,7 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
- opts.rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(sub, nil).Once()
+ opts.rpc.On("SubscribeToHeads", mock.Anything).Return(make(<-chan Head), sub, nil)
opts.rpc.On("SetAliveLoopSub", sub).Once()
return newDialedNode(t, opts)
}
@@ -105,7 +106,7 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
- tests.AssertLogEventually(t, observedLogs, "Head liveness checking disabled")
+ tests.AssertLogEventually(t, observedLogs, "Subscription liveness checking disabled")
tests.AssertLogEventually(t, observedLogs, "Polling disabled")
assert.Equal(t, nodeStateAlive, node.State())
})
@@ -340,18 +341,21 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState))
assert.Equal(t, nodeStateAlive, node.State())
})
- t.Run("rpc closed head channel", func(t *testing.T) {
- t.Parallel()
- rpc := newMockNodeClient[types.ID, Head](t)
- rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ newSub := func(t *testing.T) *mocks.Subscription {
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
- ch := args.Get(1).(chan<- Head)
+ return sub
+ }
+ t.Run("rpc closed head channel", func(t *testing.T) {
+ t.Parallel()
+ rpc := newMockNodeClient[types.ID, Head](t)
+ ch := make(chan Head)
+ rpc.On("SubscribeToHeads", mock.Anything).Run(func(args mock.Arguments) {
close(ch)
- }).Return(sub, nil).Once()
- rpc.On("SetAliveLoopSub", sub).Once()
+ }).Return((<-chan Head)(ch), newSub(t), nil).Once()
+ rpc.On("SetAliveLoopSub", mock.Anything).Once()
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newDialedNode(t, testNodeOpts{
lggr: lggr,
@@ -380,10 +384,10 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
const finalityDepth = 10
const expectedBlock = 990
rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
- ch := args.Get(1).(chan<- Head)
+ ch := make(chan Head)
+ rpc.On("SubscribeToHeads", mock.Anything).Run(func(args mock.Arguments) {
go writeHeads(t, ch, head{BlockNumber: blockNumber - 1}, head{BlockNumber: blockNumber}, head{BlockNumber: blockNumber - 1})
- }).Return(sub, nil).Once()
+ }).Return((<-chan Head)(ch), sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
name := "node-" + rand.Str(5)
node := newDialedNode(t, testNodeOpts{
@@ -403,18 +407,13 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
return float64(expectedBlock) == m.Gauge.GetValue()
})
})
- t.Run("Logs warning if failed to get finalized block", func(t *testing.T) {
+ t.Run("If fails to subscribe to latest finalized blocks, transitions to unreachable ", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
- rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
- rpc.On("LatestFinalizedBlock", mock.Anything).Return(newMockHead(t), errors.New("failed to get finalized block"))
- sub := mocks.NewSubscription(t)
- sub.On("Err").Return((<-chan error)(nil))
- sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(sub, nil).Once()
- rpc.On("SetAliveLoopSub", sub).Once()
+ expectedError := errors.New("failed to subscribe to finalized heads")
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return(nil, mocks.NewSubscription(t), expectedError).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
- node := newDialedNode(t, testNodeOpts{
+ node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
finalizedBlockPollInterval: tests.TestInterval,
},
@@ -425,26 +424,31 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
+ // disconnects all on transfer to unreachable or outOfSync
+ rpc.On("DisconnectAll").Once()
+ // might be called in unreachable loop
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
- tests.AssertLogEventually(t, observedLogs, "Failed to fetch latest finalized block")
+ tests.AssertLogEventually(t, observedLogs, "Failed to subscribe to finalized heads")
+ tests.AssertEventually(t, func() bool {
+ return nodeStateUnreachable == node.State()
+ })
})
t.Run("Logs warning if latest finalized block is not valid", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
+ ch := make(chan Head, 1)
head := newMockHead(t)
head.On("IsValid").Return(false)
- rpc.On("LatestFinalizedBlock", mock.Anything).Return(head, nil)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Run(func(args mock.Arguments) {
+ ch <- head
+ }).Return((<-chan Head)(ch), newSub(t), nil).Once()
rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
- sub := mocks.NewSubscription(t)
- sub.On("Err").Return((<-chan error)(nil))
- sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(sub, nil).Once()
- rpc.On("SetAliveLoopSub", sub).Once()
+ rpc.On("SubscribeToHeads", mock.Anything).Return(make(<-chan Head), newSub(t), nil).Once()
+ rpc.On("SetAliveLoopSub", mock.Anything).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
- config: testNodeConfig{
- finalizedBlockPollInterval: tests.TestInterval,
- },
+ config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{
IsFinalityTagEnabled: true,
},
@@ -455,29 +459,17 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Latest finalized block is not valid")
})
- t.Run("If finality tag and finalized block polling are enabled updates latest finalized block metric", func(t *testing.T) {
+ t.Run("On new finalized block updates corresponding metric", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
const expectedBlock = 1101
const finalityDepth = 10
- rpc.On("LatestFinalizedBlock", mock.Anything).Return(head{BlockNumber: expectedBlock - 1}.ToMockHead(t), nil).Once()
- rpc.On("LatestFinalizedBlock", mock.Anything).Return(head{BlockNumber: expectedBlock}.ToMockHead(t), nil)
- sub := mocks.NewSubscription(t)
- sub.On("Err").Return((<-chan error)(nil))
- sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
- ch := args.Get(1).(chan<- Head)
- // ensure that "calculated" finalized head is larger than actual, to ensure we are correctly setting
- // the metric
- go writeHeads(t, ch, head{BlockNumber: expectedBlock*2 + finalityDepth})
- }).Return(sub, nil).Once()
+ ch := make(chan Head)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(ch), newSub(t), nil).Once()
rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
- rpc.On("SetAliveLoopSub", sub).Once()
name := "node-" + rand.Str(5)
- node := newDialedNode(t, testNodeOpts{
- config: testNodeConfig{
- finalizedBlockPollInterval: tests.TestInterval,
- },
+ node := newSubscribedNode(t, testNodeOpts{
+ config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{
FinalityDepthVal: finalityDepth,
IsFinalityTagEnabled: true,
@@ -488,6 +480,12 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ writeHeads(t, ch, head{BlockNumber: expectedBlock - 1}, head{BlockNumber: expectedBlock}, head{BlockNumber: expectedBlock - 1})
+ }()
tests.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
@@ -496,6 +494,123 @@ func TestUnit_NodeLifecycle_aliveLoop(t *testing.T) {
return float64(expectedBlock) == m.Gauge.GetValue()
})
})
+ t.Run("If finalized heads channel is closed, transitions to unreachable", func(t *testing.T) {
+ t.Parallel()
+ rpc := newMockNodeClient[types.ID, Head](t)
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ ch := make(chan Head)
+ close(ch)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(ch), newSub(t), nil).Once()
+ lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
+ node := newSubscribedNode(t, testNodeOpts{
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ },
+ rpc: rpc,
+ lggr: lggr,
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+ // disconnects all on transfer to unreachable or outOfSync
+ rpc.On("DisconnectAll").Once()
+ // might be called in unreachable loop
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
+ node.declareAlive()
+ tests.AssertLogEventually(t, observedLogs, "Finalized heads subscription channel unexpectedly closed")
+ tests.AssertEventually(t, func() bool {
+ return nodeStateUnreachable == node.State()
+ })
+ })
+ t.Run("when no new finalized heads received for threshold, transitions to out of sync", func(t *testing.T) {
+ t.Parallel()
+ rpc := newMockNodeClient[types.ID, Head](t)
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ ch := make(chan Head, 1)
+ ch <- head{BlockNumber: 10}.ToMockHead(t)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(ch), newSub(t), nil).Once()
+ lggr, observed := logger.TestObserved(t, zap.DebugLevel)
+ noNewFinalizedHeadsThreshold := tests.TestInterval
+ node := newSubscribedNode(t, testNodeOpts{
+ config: testNodeConfig{},
+ chainConfig: clientMocks.ChainConfig{
+ NoNewFinalizedHeadsThresholdVal: noNewFinalizedHeadsThreshold,
+ IsFinalityTagEnabled: true,
+ },
+ rpc: rpc,
+ lggr: lggr,
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+ // tries to redial in outOfSync
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
+ assert.Equal(t, nodeStateOutOfSync, node.State())
+ }).Once()
+ // disconnects all on transfer to unreachable or outOfSync
+ rpc.On("DisconnectAll").Maybe()
+ // might be called in unreachable loop
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
+ node.declareAlive()
+ tests.AssertLogEventually(t, observed, fmt.Sprintf("RPC's finalized state is out of sync; no new finalized heads received for %s (last finalized head received was 10)", noNewFinalizedHeadsThreshold))
+ tests.AssertEventually(t, func() bool {
+ // right after outOfSync we'll transfer to unreachable due to returned error on Dial
+ // we check that we were in out of sync state on first Dial call
+ return node.State() == nodeStateUnreachable
+ })
+ })
+ t.Run("when no new finalized heads received for threshold but we are the last live node, forcibly stays alive", func(t *testing.T) {
+ t.Parallel()
+ rpc := newMockNodeClient[types.ID, Head](t)
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return(make(<-chan Head), newSub(t), nil).Once()
+ lggr, observed := logger.TestObserved(t, zap.DebugLevel)
+ noNewFinalizedHeadsThreshold := tests.TestInterval
+ node := newSubscribedNode(t, testNodeOpts{
+ config: testNodeConfig{},
+ chainConfig: clientMocks.ChainConfig{
+ NoNewFinalizedHeadsThresholdVal: noNewFinalizedHeadsThreshold,
+ IsFinalityTagEnabled: true,
+ },
+ rpc: rpc,
+ lggr: lggr,
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+ poolInfo := newMockPoolChainInfoProvider(t)
+ poolInfo.On("LatestChainInfo").Return(1, ChainInfo{
+ BlockNumber: 20,
+ TotalDifficulty: big.NewInt(10),
+ }).Once()
+ node.SetPoolChainInfoProvider(poolInfo)
+ node.declareAlive()
+ tests.AssertLogEventually(t, observed, fmt.Sprintf("RPC's finalized state is out of sync; %s %s", msgCannotDisable, msgDegradedState))
+ assert.Equal(t, nodeStateAlive, node.State())
+ })
+ t.Run("If finalized subscription returns an error, transitions to unreachable", func(t *testing.T) {
+ t.Parallel()
+ rpc := newMockNodeClient[types.ID, Head](t)
+ rpc.On("DisconnectAll").Once()
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ sub := mocks.NewSubscription(t)
+ errCh := make(chan error, 1)
+ errCh <- errors.New("subscription failed")
+ sub.On("Err").Return((<-chan error)(errCh))
+ sub.On("Unsubscribe").Once()
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(nil), sub, nil).Once()
+ lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
+ node := newSubscribedNode(t, testNodeOpts{
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ },
+ rpc: rpc,
+ lggr: lggr,
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+ // disconnects all on transfer to unreachable or outOfSync
+ // might be called in unreachable loop
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
+ node.declareAlive()
+ tests.AssertLogEventually(t, observedLogs, "Finalized heads subscription was terminated")
+ tests.AssertEventually(t, func() bool {
+ return nodeStateUnreachable == node.State()
+ })
+ })
}
type head struct {
@@ -525,9 +640,10 @@ func writeHeads(t *testing.T, ch chan<- Head, heads ...head) {
func setupRPCForAliveLoop(t *testing.T, rpc *mockNodeClient[types.ID, Head]) {
rpc.On("Dial", mock.Anything).Return(nil).Maybe()
aliveSubscription := mocks.NewSubscription(t)
- aliveSubscription.On("Err").Return((<-chan error)(nil)).Maybe()
+ aliveSubscription.On("Err").Return(nil).Maybe()
aliveSubscription.On("Unsubscribe").Maybe()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(aliveSubscription, nil).Maybe()
+ rpc.On("SubscribeToHeads", mock.Anything).Return(make(<-chan Head), aliveSubscription, nil).Maybe()
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return(make(<-chan Head), aliveSubscription, nil).Maybe()
rpc.On("SetAliveLoopSub", mock.Anything).Maybe()
rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Maybe()
}
@@ -544,22 +660,18 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
return node
}
- stubIsOutOfSync := func(num int64, td *big.Int) bool {
- return false
- }
-
t.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
- node.outOfSyncLoop(stubIsOutOfSync)
+ node.outOfSyncLoop(syncStatusNotInSyncWithPool)
})
t.Run("on old blocks stays outOfSync and returns on close", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
- lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
+ lggr := logger.Test(t)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
@@ -569,21 +681,27 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{BlockNumber: 0}, ChainInfo{BlockNumber: 13}).Once()
outOfSyncSubscription := mocks.NewSubscription(t)
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
heads := []head{{BlockNumber: 7}, {BlockNumber: 11}, {BlockNumber: 13}}
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
- ch := args.Get(1).(chan<- Head)
- go writeHeads(t, ch, heads...)
- }).Return(outOfSyncSubscription, nil).Once()
+ ch := make(chan Head)
+ var wg sync.WaitGroup
+ wg.Add(1)
+ rpc.On("SubscribeToHeads", mock.Anything).Run(func(args mock.Arguments) {
+ go func() {
+ defer wg.Done()
+ writeHeads(t, ch, heads...)
+ }()
+ }).Return((<-chan Head)(ch), outOfSyncSubscription, nil).Once()
+
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
- node.declareOutOfSync(func(num int64, td *big.Int) bool {
- return true
- })
- tests.AssertLogCountEventually(t, observedLogs, msgReceivedBlock, len(heads))
+ node.declareOutOfSync(syncStatusNoNewHead)
+ // wait until all heads are consumed
+ wg.Wait()
assert.Equal(t, nodeStateOutOfSync, node.State())
})
t.Run("if initial dial fails, transitions to unreachable", func(t *testing.T) {
@@ -597,7 +715,7 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
expectedError := errors.New("failed to dial rpc")
// might be called again in unreachable loop, so no need to set once
rpc.On("Dial", mock.Anything).Return(expectedError)
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
@@ -617,7 +735,7 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
expectedError := errors.New("failed to get chain ID")
// might be called multiple times
rpc.On("ChainID", mock.Anything).Return(types.NewIDFromInt(0), expectedError)
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
@@ -637,7 +755,7 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("Dial", mock.Anything).Return(nil).Twice()
// might be called multiple times
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
@@ -657,7 +775,7 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
// might be called multiple times
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
@@ -680,7 +798,7 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
// might be called multiple times
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing"))
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
@@ -698,9 +816,9 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
expectedError := errors.New("failed to subscribe")
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, expectedError)
+ rpc.On("SubscribeToHeads", mock.Anything).Return(nil, nil, expectedError).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
@@ -719,15 +837,15 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
-
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
sub := mocks.NewSubscription(t)
errChan := make(chan error, 1)
errChan <- errors.New("subscription was terminate")
sub.On("Err").Return((<-chan error)(errChan))
sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(sub, nil).Once()
+ rpc.On("SubscribeToHeads", mock.Anything).Return(make(<-chan Head), sub, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
@@ -747,22 +865,22 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
- ch := args.Get(1).(chan<- Head)
+ ch := make(chan Head)
+ rpc.On("SubscribeToHeads", mock.Anything).Run(func(args mock.Arguments) {
close(ch)
- }).Return(sub, nil).Once()
+ }).Return((<-chan Head)(ch), sub, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})
-
t.Run("becomes alive if it receives a newer head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
@@ -782,17 +900,14 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
const highestBlock = 1000
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
- ch := args.Get(1).(chan<- Head)
- go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock})
- }).Return(outOfSyncSubscription, nil).Once()
+ ch := make(chan Head)
+ rpc.On("SubscribeToHeads", mock.Anything).Run(func(args mock.Arguments) {
+ go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock}, head{BlockNumber: highestBlock + 1})
+ }).Return((<-chan Head)(ch), outOfSyncSubscription, nil).Once()
rpc.On("GetInterceptedChainInfo").Return(ChainInfo{BlockNumber: highestBlock}, ChainInfo{BlockNumber: highestBlock})
-
setupRPCForAliveLoop(t, rpc)
- node.declareOutOfSync(func(num int64, td *big.Int) bool {
- return num < highestBlock
- })
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertLogEventually(t, observedLogs, msgReceivedBlock)
tests.AssertLogEventually(t, observedLogs, msgInSync)
tests.AssertEventually(t, func() bool {
@@ -819,7 +934,7 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
TotalDifficulty: big.NewInt(200),
})
node.SetPoolChainInfoProvider(poolInfo)
- rpc.On("GetInterceptedChainInfo").Return(ChainInfo{BlockNumber: 0}, ChainInfo{BlockNumber: 0})
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{})
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
@@ -827,16 +942,225 @@ func TestUnit_NodeLifecycle_outOfSyncLoop(t *testing.T) {
outOfSyncSubscription := mocks.NewSubscription(t)
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
- rpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(outOfSyncSubscription, nil).Once()
-
+ rpc.On("SubscribeToHeads", mock.Anything).Return(make(<-chan Head), outOfSyncSubscription, nil).Once()
setupRPCForAliveLoop(t, rpc)
- node.declareOutOfSync(stubIsOutOfSync)
+ node.declareOutOfSync(syncStatusNoNewHead)
tests.AssertLogEventually(t, observedLogs, "RPC endpoint is still out of sync, but there are no other available nodes. This RPC node will be forcibly moved back into the live pool in a degraded state")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})
+ t.Run("Stays out-of-sync if received new head, but lags behind pool", func(t *testing.T) {
+ t.Parallel()
+ rpc := newMockNodeClient[types.ID, Head](t)
+ nodeChainID := types.RandomID()
+ lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
+ node := newAliveNode(t, testNodeOpts{
+ chainConfig: clientMocks.ChainConfig{
+ NoNewHeadsThresholdVal: tests.TestInterval,
+ },
+ config: testNodeConfig{
+ syncThreshold: 1,
+ selectionMode: NodeSelectionModeHighestHead,
+ },
+ rpc: rpc,
+ chainID: nodeChainID,
+ lggr: lggr,
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+ poolInfo := newMockPoolChainInfoProvider(t)
+ const highestBlock = 20
+ poolInfo.On("LatestChainInfo").Return(1, ChainInfo{
+ BlockNumber: highestBlock * 2,
+ TotalDifficulty: big.NewInt(200),
+ })
+ node.SetPoolChainInfoProvider(poolInfo)
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{BlockNumber: highestBlock})
+
+ rpc.On("Dial", mock.Anything).Return(nil).Once()
+ rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
+
+ outOfSyncSubscription := mocks.NewSubscription(t)
+ outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
+ outOfSyncSubscription.On("Unsubscribe").Once()
+ ch := make(chan Head)
+ rpc.On("SubscribeToHeads", mock.Anything).Run(func(args mock.Arguments) {
+ go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock}, head{BlockNumber: highestBlock + 1})
+ }).Return((<-chan Head)(ch), outOfSyncSubscription, nil).Once()
+
+ node.declareOutOfSync(syncStatusNoNewHead)
+ tests.AssertLogEventually(t, observedLogs, msgReceivedBlock)
+ tests.AssertLogEventually(t, observedLogs, "No new heads received for")
+ tests.AssertEventually(t, func() bool {
+ return node.State() == nodeStateOutOfSync
+ })
+ })
+
+ // creates RPC mock with all calls necessary to create heads subscription that won't produce any events
+ newRPCWithNoOpHeads := func(t *testing.T, chainID types.ID) *mockNodeClient[types.ID, Head] {
+ rpc := newMockNodeClient[types.ID, Head](t)
+ rpc.On("Dial", mock.Anything).Return(nil).Once()
+ rpc.On("ChainID", mock.Anything).Return(chainID, nil).Once()
+ sub := mocks.NewSubscription(t)
+ sub.On("Err").Return((<-chan error)(nil))
+ sub.On("Unsubscribe").Once()
+ rpc.On("SubscribeToHeads", mock.Anything).Return(make(<-chan Head), sub, nil).Once()
+ return rpc
+ }
+
+ t.Run("if fails to subscribe to finalized, becomes unreachable", func(t *testing.T) {
+ t.Parallel()
+ nodeChainID := types.RandomID()
+ rpc := newRPCWithNoOpHeads(t, nodeChainID)
+ node := newAliveNode(t, testNodeOpts{
+ rpc: rpc,
+ chainID: nodeChainID,
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ },
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(nil), nil, errors.New("failed to subscribe")).Once()
+ // unreachable
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
+
+ node.declareOutOfSync(syncStatusNoNewHead)
+ tests.AssertEventually(t, func() bool {
+ return node.State() == nodeStateUnreachable
+ })
+ })
+ t.Run("on subscription termination becomes unreachable", func(t *testing.T) {
+ t.Parallel()
+ nodeChainID := types.RandomID()
+ rpc := newRPCWithNoOpHeads(t, nodeChainID)
+ lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
+ node := newAliveNode(t, testNodeOpts{
+ rpc: rpc,
+ chainID: nodeChainID,
+ lggr: lggr,
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ },
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+
+ sub := mocks.NewSubscription(t)
+ errChan := make(chan error, 1)
+ errChan <- errors.New("subscription was terminate")
+ sub.On("Err").Return((<-chan error)(errChan))
+ sub.On("Unsubscribe").Once()
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return(make(<-chan Head), sub, nil).Once()
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ // unreachable
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
+ node.declareOutOfSync(syncStatusNoNewHead)
+ tests.AssertLogEventually(t, observedLogs, "Finalized head subscription was terminated")
+ tests.AssertEventually(t, func() bool {
+ return node.State() == nodeStateUnreachable
+ })
+ })
+ t.Run("becomes unreachable if head channel is closed", func(t *testing.T) {
+ t.Parallel()
+ nodeChainID := types.RandomID()
+ rpc := newRPCWithNoOpHeads(t, nodeChainID)
+ lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
+ node := newAliveNode(t, testNodeOpts{
+ rpc: rpc,
+ chainID: nodeChainID,
+ lggr: lggr,
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ },
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+
+ sub := mocks.NewSubscription(t)
+ sub.On("Err").Return((<-chan error)(nil))
+ sub.On("Unsubscribe").Once()
+ ch := make(chan Head)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Run(func(args mock.Arguments) {
+ close(ch)
+ }).Return((<-chan Head)(ch), sub, nil).Once()
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{}).Once()
+ // unreachable
+ rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
+ node.declareOutOfSync(syncStatusNoNewHead)
+ tests.AssertLogEventually(t, observedLogs, "Finalized heads subscription channel unexpectedly closed")
+ tests.AssertEventually(t, func() bool {
+ return node.State() == nodeStateUnreachable
+ })
+ })
+ t.Run("becomes alive on new finalized block", func(t *testing.T) {
+ t.Parallel()
+ nodeChainID := types.RandomID()
+ rpc := newRPCWithNoOpHeads(t, nodeChainID)
+ lggr := logger.Test(t)
+ node := newAliveNode(t, testNodeOpts{
+ rpc: rpc,
+ chainID: nodeChainID,
+ lggr: lggr,
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ NoNewFinalizedHeadsThresholdVal: tests.TestInterval,
+ },
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+
+ const highestBlock = 13
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{FinalizedBlockNumber: highestBlock}).Once()
+
+ outOfSyncSubscription := mocks.NewSubscription(t)
+ outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
+ outOfSyncSubscription.On("Unsubscribe").Once()
+ ch := make(chan Head)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(ch), outOfSyncSubscription, nil).Once()
+
+ setupRPCForAliveLoop(t, rpc)
+
+ node.declareOutOfSync(syncStatusNoNewFinalizedHead)
+ heads := []head{{BlockNumber: highestBlock - 1}, {BlockNumber: highestBlock}}
+ writeHeads(t, ch, heads...)
+ assert.Equal(t, nodeStateOutOfSync, node.State())
+ writeHeads(t, ch, head{BlockNumber: highestBlock + 1})
+ tests.AssertEventually(t, func() bool {
+ return node.State() == nodeStateAlive
+ })
+ })
+ t.Run("adds finalized block is not increasing flag, if there is no new finalized heads for too long", func(t *testing.T) {
+ t.Parallel()
+ nodeChainID := types.RandomID()
+ rpc := newRPCWithNoOpHeads(t, nodeChainID)
+ lggr, observed := logger.TestObserved(t, zap.DebugLevel)
+ const noNewFinalizedHeads = tests.TestInterval
+ node := newAliveNode(t, testNodeOpts{
+ rpc: rpc,
+ chainID: nodeChainID,
+ lggr: lggr,
+ chainConfig: clientMocks.ChainConfig{
+ IsFinalityTagEnabled: true,
+ NoNewFinalizedHeadsThresholdVal: noNewFinalizedHeads,
+ },
+ })
+ defer func() { assert.NoError(t, node.close()) }()
+
+ const highestBlock = 13
+ rpc.On("GetInterceptedChainInfo").Return(ChainInfo{}, ChainInfo{FinalizedBlockNumber: highestBlock}).Once()
+
+ outOfSyncSubscription := mocks.NewSubscription(t)
+ outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
+ outOfSyncSubscription.On("Unsubscribe").Once()
+ ch := make(chan Head)
+ rpc.On("SubscribeToFinalizedHeads", mock.Anything).Return((<-chan Head)(ch), outOfSyncSubscription, nil).Once()
+
+ node.declareOutOfSync(syncStatusNotInSyncWithPool)
+ heads := []head{{BlockNumber: highestBlock - 1}, {BlockNumber: highestBlock}}
+ writeHeads(t, ch, heads...)
+ assert.Equal(t, nodeStateOutOfSync, node.State())
+ tests.AssertLogEventually(t, observed, fmt.Sprintf("No new finalized heads received for %s. Node stays "+
+ "out-of-sync due to sync issues: NotInSyncWithRPCPool,NoNewFinalizedHead", noNewFinalizedHeads))
+ })
}
func TestUnit_NodeLifecycle_unreachableLoop(t *testing.T) {
@@ -1296,11 +1620,11 @@ func TestUnit_NodeLifecycle_start(t *testing.T) {
})
}
-func TestUnit_NodeLifecycle_syncStatus(t *testing.T) {
+func TestUnit_NodeLifecycle_outOfSyncWithPool(t *testing.T) {
t.Parallel()
t.Run("skip if nLiveNodes is not configured", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
- outOfSync, liveNodes := node.syncStatus(0, nil)
+ outOfSync, liveNodes := node.isOutOfSyncWithPool(ChainInfo{})
assert.Equal(t, false, outOfSync)
assert.Equal(t, 0, liveNodes)
})
@@ -1308,7 +1632,7 @@ func TestUnit_NodeLifecycle_syncStatus(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
poolInfo := newMockPoolChainInfoProvider(t)
node.SetPoolChainInfoProvider(poolInfo)
- outOfSync, liveNodes := node.syncStatus(0, nil)
+ outOfSync, liveNodes := node.isOutOfSyncWithPool(ChainInfo{})
assert.Equal(t, false, outOfSync)
assert.Equal(t, 0, liveNodes)
})
@@ -1320,7 +1644,7 @@ func TestUnit_NodeLifecycle_syncStatus(t *testing.T) {
poolInfo.On("LatestChainInfo").Return(1, ChainInfo{}).Once()
node.SetPoolChainInfoProvider(poolInfo)
assert.Panics(t, func() {
- _, _ = node.syncStatus(0, nil)
+ _, _ = node.isOutOfSyncWithPool(ChainInfo{})
})
})
t.Run("block height selection mode", func(t *testing.T) {
@@ -1371,7 +1695,7 @@ func TestUnit_NodeLifecycle_syncStatus(t *testing.T) {
for _, td := range []int64{totalDifficulty - syncThreshold - 1, totalDifficulty - syncThreshold, totalDifficulty, totalDifficulty + 1} {
for _, testCase := range testCases {
t.Run(fmt.Sprintf("%s: SelectionModeVal: %s: total difficulty: %d", testCase.name, selectionMode, td), func(t *testing.T) {
- outOfSync, liveNodes := node.syncStatus(testCase.blockNumber, big.NewInt(td))
+ outOfSync, liveNodes := node.isOutOfSyncWithPool(ChainInfo{BlockNumber: testCase.blockNumber, TotalDifficulty: big.NewInt(td)})
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})
@@ -1427,7 +1751,7 @@ func TestUnit_NodeLifecycle_syncStatus(t *testing.T) {
for _, hb := range []int64{highestBlock - syncThreshold - 1, highestBlock - syncThreshold, highestBlock, highestBlock + 1} {
for _, testCase := range testCases {
t.Run(fmt.Sprintf("%s: SelectionModeVal: %s: highest block: %d", testCase.name, NodeSelectionModeTotalDifficulty, hb), func(t *testing.T) {
- outOfSync, liveNodes := node.syncStatus(hb, big.NewInt(testCase.totalDifficulty))
+ outOfSync, liveNodes := node.isOutOfSyncWithPool(ChainInfo{BlockNumber: hb, TotalDifficulty: big.NewInt(testCase.totalDifficulty)})
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})
diff --git a/common/client/types.go b/common/client/types.go
index b07f57eb8fb..c9b6a3580eb 100644
--- a/common/client/types.go
+++ b/common/client/types.go
@@ -68,7 +68,7 @@ type NodeClient[
SetAliveLoopSub(types.Subscription)
UnsubscribeAllExceptAliveLoop()
IsSyncing(ctx context.Context) (bool, error)
- LatestFinalizedBlock(ctx context.Context) (HEAD, error)
+ SubscribeToFinalizedHeads(_ context.Context) (<-chan HEAD, types.Subscription, error)
// GetInterceptedChainInfo - returns latest and highest observed by application layer ChainInfo.
// latest ChainInfo is the most recent value received within a NodeClient's current lifecycle between Dial and DisconnectAll.
// highestUserObservations ChainInfo is the highest ChainInfo observed excluding health checks calls.
@@ -151,7 +151,9 @@ type connection[
] interface {
ChainID(ctx context.Context) (CHAIN_ID, error)
Dial(ctx context.Context) error
- SubscribeNewHead(ctx context.Context, channel chan<- HEAD) (types.Subscription, error)
+ SubscribeToHeads(ctx context.Context) (ch <-chan HEAD, sub types.Subscription, err error)
+ // TODO: remove as part of merge with BCI-2875
+ SubscribeNewHead(ctx context.Context, channel chan<- HEAD) (s types.Subscription, err error)
}
// PoolChainInfoProvider - provides aggregation of nodes pool ChainInfo
diff --git a/common/txmgr/broadcaster.go b/common/txmgr/broadcaster.go
index 25b028447f6..be3d3ca2f61 100644
--- a/common/txmgr/broadcaster.go
+++ b/common/txmgr/broadcaster.go
@@ -34,6 +34,13 @@ const (
// TransmitCheckTimeout controls the maximum amount of time that will be
// spent on the transmit check.
TransmitCheckTimeout = 2 * time.Second
+
+ // maxBroadcastRetries is the number of times a transaction broadcast is retried when the sequence fails to increment on Hedera
+ maxHederaBroadcastRetries = 3
+
+ // hederaChainType is the string representation of the Hedera chain type
+ // Temporary solution until the Broadcaster is moved to the EVM code base
+ hederaChainType = "hedera"
)
var (
@@ -114,6 +121,7 @@ type Broadcaster[
sequenceTracker txmgrtypes.SequenceTracker[ADDR, SEQ]
resumeCallback ResumeCallback
chainID CHAIN_ID
+ chainType string
config txmgrtypes.BroadcasterChainConfig
feeConfig txmgrtypes.BroadcasterFeeConfig
txConfig txmgrtypes.BroadcasterTransactionsConfig
@@ -163,6 +171,7 @@ func NewBroadcaster[
lggr logger.Logger,
checkerFactory TransmitCheckerFactory[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE],
autoSyncSequence bool,
+ chainType string,
) *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE] {
lggr = logger.Named(lggr, "Broadcaster")
b := &Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]{
@@ -171,6 +180,7 @@ func NewBroadcaster[
client: client,
TxAttemptBuilder: txAttemptBuilder,
chainID: client.ConfiguredChainID(),
+ chainType: chainType,
config: config,
feeConfig: feeConfig,
txConfig: txConfig,
@@ -411,7 +421,7 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) hand
return fmt.Errorf("handleAnyInProgressTx failed: %w", err), true
}
if etx != nil {
- if err, retryable := eb.handleInProgressTx(ctx, *etx, etx.TxAttempts[0], etx.CreatedAt); err != nil {
+ if err, retryable := eb.handleInProgressTx(ctx, *etx, etx.TxAttempts[0], etx.CreatedAt, 0); err != nil {
return fmt.Errorf("handleAnyInProgressTx failed: %w", err), retryable
}
}
@@ -464,12 +474,12 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) hand
return fmt.Errorf("processUnstartedTxs failed on UpdateTxUnstartedToInProgress: %w", err), true
}
- return eb.handleInProgressTx(ctx, *etx, attempt, time.Now())
+ return eb.handleInProgressTx(ctx, *etx, attempt, time.Now(), 0)
}
// There can be at most one in_progress transaction per address.
// Here we complete the job that we didn't finish last time.
-func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) handleInProgressTx(ctx context.Context, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time) (error, bool) {
+func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) handleInProgressTx(ctx context.Context, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time, retryCount int) (error, bool) {
if etx.State != TxInProgress {
return fmt.Errorf("invariant violation: expected transaction %v to be in_progress, it was %s", etx.ID, etx.State), false
}
@@ -478,6 +488,11 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) hand
lgr.Infow("Sending transaction", "txAttemptID", attempt.ID, "txHash", attempt.Hash, "meta", etx.Meta, "feeLimit", attempt.ChainSpecificFeeLimit, "callerProvidedFeeLimit", etx.FeeLimit, "attempt", attempt, "etx", etx)
errType, err := eb.client.SendTransactionReturnCode(ctx, etx, attempt, lgr)
+ // The validation below is only applicable to Hedera because it has instant finality and a unique sequence behavior
+ if eb.chainType == hederaChainType {
+ errType, err = eb.validateOnChainSequence(ctx, lgr, errType, err, etx, retryCount)
+ }
+
if errType == client.Fatal || errType == client.TerminallyStuck {
eb.SvcErrBuffer.Append(err)
etx.Error = null.StringFrom(err.Error())
@@ -538,7 +553,7 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) hand
eb.sequenceTracker.GenerateNextSequence(etx.FromAddress, *etx.Sequence)
return err, true
case client.Underpriced:
- return eb.tryAgainBumpingGas(ctx, lgr, err, etx, attempt, initialBroadcastAt)
+ return eb.tryAgainBumpingGas(ctx, lgr, err, etx, attempt, initialBroadcastAt, retryCount+1)
case client.InsufficientFunds:
// NOTE: This bails out of the entire cycle and essentially "blocks" on
// any transaction that gets insufficient_funds. This is OK if a
@@ -600,6 +615,44 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) hand
}
}
+func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) validateOnChainSequence(ctx context.Context, lgr logger.SugaredLogger, errType client.SendTxReturnCode, err error, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], retryCount int) (client.SendTxReturnCode, error) {
+ // Only check if sequence was incremented if broadcast was successful, otherwise return the existing err type
+ if errType != client.Successful {
+ return errType, err
+ }
+ // Transaction sequence cannot be nil here since a sequence is required to broadcast
+ txSeq := *etx.Sequence
+ // Retrieve the latest mined sequence from on-chain
+ nextSeqOnChain, err := eb.client.SequenceAt(ctx, etx.FromAddress, nil)
+ if err != nil {
+ return errType, err
+ }
+
+ // Check that the transaction count has incremented on-chain to include the broadcasted transaction
+ // Insufficient transaction fee is a common scenario in which the sequence is not incremented by the chain even though we got a successful response
+ // If the sequence failed to increment and hasn't reached the max retries, return the Underpriced error to try again with a bumped attempt
+ if nextSeqOnChain.Int64() == txSeq.Int64() && retryCount < maxHederaBroadcastRetries {
+ return client.Underpriced, nil
+ }
+
+ // If the transaction reaches the retry limit and fails to get included, mark it as fatally errored
+ // Some unknown error other than insufficient tx fee could be the cause
+ if nextSeqOnChain.Int64() == txSeq.Int64() && retryCount >= maxHederaBroadcastRetries {
+ err := fmt.Errorf("failed to broadcast transaction on %s after %d retries", hederaChainType, retryCount)
+ lgr.Error(err.Error())
+ return client.Fatal, err
+ }
+
+ // Belts and braces approach to detect and handle sqeuence gaps if the broadcast is considered successful
+ if nextSeqOnChain.Int64() < txSeq.Int64() {
+ err := fmt.Errorf("next expected sequence on-chain (%s) is less than the broadcasted transaction's sequence (%s)", nextSeqOnChain.String(), txSeq.String())
+ lgr.Criticalw("Sequence gap has been detected and needs to be filled", "error", err)
+ return client.Fatal, err
+ }
+
+ return client.Successful, nil
+}
+
// Finds next transaction in the queue, assigns a sequence, and moves it to "in_progress" state ready for broadcast.
// Returns nil if no transactions are in queue
func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) nextUnstartedTransactionWithSequence(fromAddress ADDR) (*txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], error) {
@@ -622,23 +675,26 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) next
return etx, nil
}
-func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) tryAgainBumpingGas(ctx context.Context, lgr logger.Logger, txError error, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time) (err error, retryable bool) {
- logger.With(lgr,
- "sendError", txError,
- "attemptFee", attempt.TxFee,
- "maxGasPriceConfig", eb.feeConfig.MaxFeePrice(),
- ).Errorf("attempt fee %v was rejected by the node for being too low. "+
- "Node returned: '%s'. "+
- "Will bump and retry. ACTION REQUIRED: This is a configuration error. "+
- "Consider increasing FeeEstimator.PriceDefault (current value: %s)",
- attempt.TxFee, txError.Error(), eb.feeConfig.FeePriceDefault())
+func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) tryAgainBumpingGas(ctx context.Context, lgr logger.Logger, txError error, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time, retry int) (err error, retryable bool) {
+ // This log error is not applicable to Hedera since the action required would not be needed for its gas estimator
+ if eb.chainType != hederaChainType {
+ logger.With(lgr,
+ "sendError", txError,
+ "attemptFee", attempt.TxFee,
+ "maxGasPriceConfig", eb.feeConfig.MaxFeePrice(),
+ ).Errorf("attempt fee %v was rejected by the node for being too low. "+
+ "Node returned: '%s'. "+
+ "Will bump and retry. ACTION REQUIRED: This is a configuration error. "+
+ "Consider increasing FeeEstimator.PriceDefault (current value: %s)",
+ attempt.TxFee, txError.Error(), eb.feeConfig.FeePriceDefault())
+ }
replacementAttempt, bumpedFee, bumpedFeeLimit, retryable, err := eb.NewBumpTxAttempt(ctx, etx, attempt, nil, lgr)
if err != nil {
return fmt.Errorf("tryAgainBumpFee failed: %w", err), retryable
}
- return eb.saveTryAgainAttempt(ctx, lgr, etx, attempt, replacementAttempt, initialBroadcastAt, bumpedFee, bumpedFeeLimit)
+ return eb.saveTryAgainAttempt(ctx, lgr, etx, attempt, replacementAttempt, initialBroadcastAt, bumpedFee, bumpedFeeLimit, retry)
}
func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) tryAgainWithNewEstimation(ctx context.Context, lgr logger.Logger, txError error, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time) (err error, retryable bool) {
@@ -655,15 +711,15 @@ func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) tryA
lgr.Warnw("L2 rejected transaction due to incorrect fee, re-estimated and will try again",
"etxID", etx.ID, "err", err, "newGasPrice", fee, "newGasLimit", feeLimit)
- return eb.saveTryAgainAttempt(ctx, lgr, etx, attempt, replacementAttempt, initialBroadcastAt, fee, feeLimit)
+ return eb.saveTryAgainAttempt(ctx, lgr, etx, attempt, replacementAttempt, initialBroadcastAt, fee, feeLimit, 0)
}
-func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) saveTryAgainAttempt(ctx context.Context, lgr logger.Logger, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], replacementAttempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time, newFee FEE, newFeeLimit uint64) (err error, retyrable bool) {
+func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) saveTryAgainAttempt(ctx context.Context, lgr logger.Logger, etx txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], attempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], replacementAttempt txmgrtypes.TxAttempt[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE], initialBroadcastAt time.Time, newFee FEE, newFeeLimit uint64, retry int) (err error, retyrable bool) {
if err = eb.txStore.SaveReplacementInProgressAttempt(ctx, attempt, &replacementAttempt); err != nil {
return fmt.Errorf("tryAgainWithNewFee failed: %w", err), true
}
lgr.Debugw("Bumped fee on initial send", "oldFee", attempt.TxFee.String(), "newFee", newFee.String(), "newFeeLimit", newFeeLimit)
- return eb.handleInProgressTx(ctx, etx, replacementAttempt, initialBroadcastAt)
+ return eb.handleInProgressTx(ctx, etx, replacementAttempt, initialBroadcastAt, retry)
}
func (eb *Broadcaster[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) saveFatallyErroredTransaction(lgr logger.Logger, etx *txmgrtypes.Tx[CHAIN_ID, ADDR, TX_HASH, BLOCK_HASH, SEQ, FEE]) error {
diff --git a/common/txmgr/confirmer.go b/common/txmgr/confirmer.go
index 0806eeda26e..0099f4a2ee0 100644
--- a/common/txmgr/confirmer.go
+++ b/common/txmgr/confirmer.go
@@ -664,11 +664,15 @@ func (ec *Confirmer[CHAIN_ID, HEAD, ADDR, TX_HASH, BLOCK_HASH, R, SEQ, FEE]) bat
}
if receipt.GetStatus() == 0 {
- rpcError, errExtract := ec.client.CallContract(ctx, attempt, receipt.GetBlockNumber())
- if errExtract == nil {
- l.Warnw("transaction reverted on-chain", "hash", receipt.GetTxHash(), "rpcError", rpcError.String())
+ if receipt.GetRevertReason() != nil {
+ l.Warnw("transaction reverted on-chain", "hash", receipt.GetTxHash(), "revertReason", *receipt.GetRevertReason())
} else {
- l.Warnw("transaction reverted on-chain unable to extract revert reason", "hash", receipt.GetTxHash(), "err", err)
+ rpcError, errExtract := ec.client.CallContract(ctx, attempt, receipt.GetBlockNumber())
+ if errExtract == nil {
+ l.Warnw("transaction reverted on-chain", "hash", receipt.GetTxHash(), "rpcError", rpcError.String())
+ } else {
+ l.Warnw("transaction reverted on-chain unable to extract revert reason", "hash", receipt.GetTxHash(), "err", err)
+ }
}
// This might increment more than once e.g. in case of re-orgs going back and forth we might re-fetch the same receipt
promRevertedTxCount.WithLabelValues(ec.chainID.String()).Add(1)
diff --git a/common/txmgr/types/tx_store.go b/common/txmgr/types/tx_store.go
index 25040ea3bdb..875339cfbac 100644
--- a/common/txmgr/types/tx_store.go
+++ b/common/txmgr/types/tx_store.go
@@ -132,4 +132,5 @@ type ChainReceipt[TX_HASH, BLOCK_HASH types.Hashable] interface {
GetFeeUsed() uint64
GetTransactionIndex() uint
GetBlockHash() BLOCK_HASH
+ GetRevertReason() *string
}
diff --git a/contracts/GNUmakefile b/contracts/GNUmakefile
index 0ebad8446e5..3da2d5f2052 100644
--- a/contracts/GNUmakefile
+++ b/contracts/GNUmakefile
@@ -88,6 +88,16 @@ wrappers-all: pnpmdep mockery abigen ## Recompiles solidity contracts and their
# go_generate contains a call to compile all contracts before generating wrappers
go generate ../core/gethwrappers/go_generate.go
+# Use this to generate compiled JSON artifacts for gauntlet-plus-plus.
+# This is currently only used for CCIP.
+# example: make artifact-generate contract=LockReleaseTokenPoolAndProxy solcversion=0.8.24 artifactpath=../../gauntlet-plus-plus/packages-ethereum/operations-ccip/src/artifacts/1.5.0/lock-release-token-pool-and-proxy.json
+artifact-generate: export FOUNDRY_PROFILE=ccip
+.PHONY: artifact-generate
+artifact-generate:
+ chmod +x ./scripts/generate_compiled_json_ccip.sh
+ ./scripts/generate_compiled_json_ccip.sh $(contract) $(solcversion) $(artifactpath)
+
+
help:
@echo ""
@echo " .__ .__ .__ .__ __"
diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot
index c1d6eff19bc..7e79a922d35 100644
--- a/contracts/gas-snapshots/ccip.gas-snapshot
+++ b/contracts/gas-snapshots/ccip.gas-snapshot
@@ -37,12 +37,12 @@ BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 23951)
CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2132726)
CCIPConfigSetup:test_getCapabilityConfiguration_Success() (gas: 9517)
CCIPConfig_ConfigStateMachine:test__computeConfigDigest_Success() (gas: 70831)
-CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_InitToRunning_Success() (gas: 363708)
-CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_RunningToStaging_Success() (gas: 488870)
-CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_StagingToRunning_Success() (gas: 453483)
-CCIPConfig_ConfigStateMachine:test__groupByPluginType_TooManyOCR3Configs_Reverts() (gas: 37027)
-CCIPConfig_ConfigStateMachine:test__groupByPluginType_threeCommitConfigs_Reverts() (gas: 61043)
-CCIPConfig_ConfigStateMachine:test__groupByPluginType_threeExecutionConfigs_Reverts() (gas: 60963)
+CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_InitToRunning_Success() (gas: 363664)
+CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_RunningToStaging_Success() (gas: 488826)
+CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_StagingToRunning_Success() (gas: 453439)
+CCIPConfig_ConfigStateMachine:test__groupByPluginType_TooManyOCR3Configs_Reverts() (gas: 37049)
+CCIPConfig_ConfigStateMachine:test__groupByPluginType_threeCommitConfigs_Reverts() (gas: 61065)
+CCIPConfig_ConfigStateMachine:test__groupByPluginType_threeExecutionConfigs_Reverts() (gas: 60985)
CCIPConfig_ConfigStateMachine:test__stateFromConfigLength_Success() (gas: 11635)
CCIPConfig_ConfigStateMachine:test__validateConfigStateTransition_Success() (gas: 8831)
CCIPConfig_ConfigStateMachine:test__validateConfigTransition_InitToRunning_Success() (gas: 312055)
@@ -61,18 +61,19 @@ CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabili
CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_ZeroLengthConfig_Success() (gas: 16070)
CCIPConfig_beforeCapabilityConfigSet:test_getCapabilityConfiguration_Success() (gas: 9605)
CCIPConfig_chainConfig:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 184703)
-CCIPConfig_chainConfig:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 344332)
+CCIPConfig_chainConfig:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 344881)
CCIPConfig_chainConfig:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 20258)
CCIPConfig_chainConfig:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 267558)
CCIPConfig_chainConfig:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14829)
-CCIPConfig_chainConfig:test_getCapabilityConfiguration_Success() (gas: 9648)
-CCIPConfig_constructor:test_constructor_Success() (gas: 3567986)
-CCIPConfig_constructor:test_constructor_ZeroAddressNotAllowed_Revert() (gas: 61720)
-CCIPConfig_updatePluginConfig:test__updatePluginConfig_InitToRunning_Success() (gas: 1057346)
-CCIPConfig_updatePluginConfig:test__updatePluginConfig_InvalidConfigLength_Reverts() (gas: 27539)
-CCIPConfig_updatePluginConfig:test__updatePluginConfig_InvalidConfigStateTransition_Reverts() (gas: 23105)
-CCIPConfig_updatePluginConfig:test__updatePluginConfig_RunningToStaging_Success() (gas: 2009250)
-CCIPConfig_updatePluginConfig:test__updatePluginConfig_StagingToRunning_Success() (gas: 2616080)
+CCIPConfig_chainConfig:test_getCapabilityConfiguration_Success() (gas: 9626)
+CCIPConfig_chainConfig:test_getPaginatedCCIPConfigs_Success() (gas: 370235)
+CCIPConfig_constructor:test_constructor_Success() (gas: 3612901)
+CCIPConfig_constructor:test_constructor_ZeroAddressNotAllowed_Revert() (gas: 61777)
+CCIPConfig_updatePluginConfig:test__updatePluginConfig_InitToRunning_Success() (gas: 1057368)
+CCIPConfig_updatePluginConfig:test__updatePluginConfig_InvalidConfigLength_Reverts() (gas: 27561)
+CCIPConfig_updatePluginConfig:test__updatePluginConfig_InvalidConfigStateTransition_Reverts() (gas: 23127)
+CCIPConfig_updatePluginConfig:test__updatePluginConfig_RunningToStaging_Success() (gas: 2009285)
+CCIPConfig_updatePluginConfig:test__updatePluginConfig_StagingToRunning_Success() (gas: 2616133)
CCIPConfig_updatePluginConfig:test_getCapabilityConfiguration_Success() (gas: 9605)
CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsHasDuplicates_Reverts() (gas: 294893)
CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsNotASubsetOfP2PIds_Reverts() (gas: 298325)
@@ -122,181 +123,7 @@ CommitStore_verify:test_Paused_Revert() (gas: 18496)
CommitStore_verify:test_TooManyLeaves_Revert() (gas: 36785)
DefensiveExampleTest:test_HappyPath_Success() (gas: 200018)
DefensiveExampleTest:test_Recovery() (gas: 424256)
-E2E:test_E2E_3MessagesSuccess_gas() (gas: 1104304)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 38416)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 106228)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 87399)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 38936)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 96493)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 41942)
-EVM2EVMMultiOffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 88684)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 468131)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99235)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12399)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Revert() (gas: 93193)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 109906)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13267)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 17992)
-EVM2EVMMultiOffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15347)
-EVM2EVMMultiOffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 296045)
-EVM2EVMMultiOffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 237435)
-EVM2EVMMultiOffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 156797)
-EVM2EVMMultiOffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 186971)
-EVM2EVMMultiOffRamp_batchExecute:test_SingleReport_Success() (gas: 145389)
-EVM2EVMMultiOffRamp_batchExecute:test_Unhealthy_Revert() (gas: 518163)
-EVM2EVMMultiOffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10439)
-EVM2EVMMultiOffRamp_ccipReceive:test_Reverts() (gas: 15662)
-EVM2EVMMultiOffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67354)
-EVM2EVMMultiOffRamp_commit:test_InvalidInterval_Revert() (gas: 59644)
-EVM2EVMMultiOffRamp_commit:test_InvalidRootRevert() (gas: 58724)
-EVM2EVMMultiOffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6524844)
-EVM2EVMMultiOffRamp_commit:test_NoConfig_Revert() (gas: 6107982)
-EVM2EVMMultiOffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 106189)
-EVM2EVMMultiOffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 116101)
-EVM2EVMMultiOffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 106210)
-EVM2EVMMultiOffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 351423)
-EVM2EVMMultiOffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 159331)
-EVM2EVMMultiOffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 136449)
-EVM2EVMMultiOffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 136723)
-EVM2EVMMultiOffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 58992)
-EVM2EVMMultiOffRamp_commit:test_StaleReportWithRoot_Success() (gas: 225643)
-EVM2EVMMultiOffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 117476)
-EVM2EVMMultiOffRamp_commit:test_Unhealthy_Revert() (gas: 77540)
-EVM2EVMMultiOffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 204935)
-EVM2EVMMultiOffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6519167)
-EVM2EVMMultiOffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 47720)
-EVM2EVMMultiOffRamp_constructor:test_Constructor_Success() (gas: 6112038)
-EVM2EVMMultiOffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137047)
-EVM2EVMMultiOffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103764)
-EVM2EVMMultiOffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101635)
-EVM2EVMMultiOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 139621)
-EVM2EVMMultiOffRamp_constructor:test_ZeroRMNProxy_Revert() (gas: 101534)
-EVM2EVMMultiOffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101579)
-EVM2EVMMultiOffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17302)
-EVM2EVMMultiOffRamp_execute:test_LargeBatch_Success() (gas: 1552289)
-EVM2EVMMultiOffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 339279)
-EVM2EVMMultiOffRamp_execute:test_MultipleReports_Success() (gas: 257679)
-EVM2EVMMultiOffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6575240)
-EVM2EVMMultiOffRamp_execute:test_NoConfig_Revert() (gas: 6158119)
-EVM2EVMMultiOffRamp_execute:test_NonArray_Revert() (gas: 27703)
-EVM2EVMMultiOffRamp_execute:test_SingleReport_Success() (gas: 163020)
-EVM2EVMMultiOffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 146998)
-EVM2EVMMultiOffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6937292)
-EVM2EVMMultiOffRamp_execute:test_ZeroReports_Revert() (gas: 17155)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18208)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 246578)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20468)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205217)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48730)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48253)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 229582)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 86220)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 277454)
-EVM2EVMMultiOffRamp_executeSingleMessage:test_executeSingleMessage_WithValidation_Success() (gas: 92454)
-EVM2EVMMultiOffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 35122)
-EVM2EVMMultiOffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 23922)
-EVM2EVMMultiOffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 454064)
-EVM2EVMMultiOffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 54442)
-EVM2EVMMultiOffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 35911)
-EVM2EVMMultiOffRamp_executeSingleReport:test_MismatchingOnRampRoot_Revert() (gas: 154354)
-EVM2EVMMultiOffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 35333)
-EVM2EVMMultiOffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 179190)
-EVM2EVMMultiOffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 190474)
-EVM2EVMMultiOffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 48069)
-EVM2EVMMultiOffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 440867)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249448)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 171640)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 191313)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 259405)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 127402)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 388971)
-EVM2EVMMultiOffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 65866)
-EVM2EVMMultiOffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 80906)
-EVM2EVMMultiOffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 532020)
-EVM2EVMMultiOffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 476978)
-EVM2EVMMultiOffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 35738)
-EVM2EVMMultiOffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 516997)
-EVM2EVMMultiOffRamp_executeSingleReport:test_Unhealthy_Revert() (gas: 514365)
-EVM2EVMMultiOffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 484483)
-EVM2EVMMultiOffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 125831)
-EVM2EVMMultiOffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 155054)
-EVM2EVMMultiOffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3655340)
-EVM2EVMMultiOffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 118202)
-EVM2EVMMultiOffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 87461)
-EVM2EVMMultiOffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 75627)
-EVM2EVMMultiOffRamp_manuallyExecute:test_ManualExecInvalidGasLimit_Revert() (gas: 26467)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 162919)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 205055)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 26010)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 152936)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 505158)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2282792)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 207311)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 207888)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 656902)
-EVM2EVMMultiOffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 298803)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 164054)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 23740)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 64488)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() (gas: 39546)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 81512)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 176140)
-EVM2EVMMultiOffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 189342)
-EVM2EVMMultiOffRamp_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11379)
-EVM2EVMMultiOffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 215352)
-EVM2EVMMultiOffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14162)
-EVM2EVMMultiOffRamp_setDynamicConfig:test_PriceRegistryZeroAddress_Revert() (gas: 11660)
-EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfigWithValidator_Success() (gas: 49203)
-EVM2EVMMultiOffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 27169)
-EVM2EVMMultiOffRamp_trialExecute:test_RateLimitError_Success() (gas: 221696)
-EVM2EVMMultiOffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 230297)
-EVM2EVMMultiOffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 297256)
-EVM2EVMMultiOffRamp_trialExecute:test_trialExecute_Success() (gas: 279894)
-EVM2EVMMultiOffRamp_verify:test_Blessed_Success() (gas: 176552)
-EVM2EVMMultiOffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178620)
-EVM2EVMMultiOffRamp_verify:test_NotBlessed_Success() (gas: 141481)
-EVM2EVMMultiOffRamp_verify:test_TooManyLeaves_Revert() (gas: 51510)
-EVM2EVMMultiOnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 63649)
-EVM2EVMMultiOnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInalidChainSelector_Revert() (gas: 13308)
-EVM2EVMMultiOnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 94175)
-EVM2EVMMultiOnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 92092)
-EVM2EVMMultiOnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 97113)
-EVM2EVMMultiOnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 92150)
-EVM2EVMMultiOnRamp_constructor:test_Constructor_Success() (gas: 2384439)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_CannotSendZeroTokens_Revert() (gas: 71918)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 111914)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 142684)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 142260)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 140437)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 142490)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 141859)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 134347)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 26294)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_MessageValidationError_Revert() (gas: 133253)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 24360)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 12872)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_Paused_Revert() (gas: 32033)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 15762)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 179401)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 205670)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 121815)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 143193)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3872608)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 108546)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 73975)
-EVM2EVMMultiOnRamp_forwardFromRouter:test_forwardFromRouter_WithValidation_Success() (gas: 262685)
-EVM2EVMMultiOnRamp_getFee:test_EmptyMessage_Success() (gas: 104467)
-EVM2EVMMultiOnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 74075)
-EVM2EVMMultiOnRamp_getFee:test_SingleTokenMessage_Success() (gas: 119799)
-EVM2EVMMultiOnRamp_getFee:test_Unhealthy_Revert() (gas: 43679)
-EVM2EVMMultiOnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10438)
-EVM2EVMMultiOnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35270)
-EVM2EVMMultiOnRamp_setDynamicConfig:test_SetConfigInvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11155)
-EVM2EVMMultiOnRamp_setDynamicConfig:test_SetConfigInvalidConfigPriceRegistryEqAddressZero_Revert() (gas: 12740)
-EVM2EVMMultiOnRamp_setDynamicConfig:test_SetConfigInvalidConfig_Revert() (gas: 11112)
-EVM2EVMMultiOnRamp_setDynamicConfig:test_SetConfigOnlyOwner_Revert() (gas: 15939)
-EVM2EVMMultiOnRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 51996)
-EVM2EVMMultiOnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97214)
+E2E:test_E2E_3MessagesSuccess_gas() (gas: 1104303)
EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_NotACompatiblePool_Revert() (gas: 37797)
EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_Success() (gas: 103733)
EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_TokenHandlingError_transfer_Revert() (gas: 85258)
@@ -500,10 +327,10 @@ EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrit
EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17895)
EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25287)
EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26292)
-LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Revert() (gas: 10992)
-LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Success() (gas: 18058)
-LockReleaseTokenPoolPoolAndProxy_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3359294)
-LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3355693)
+LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Revert() (gas: 10970)
+LockReleaseTokenPoolAndProxy_setRebalancer:test_SetRebalancer_Success() (gas: 17992)
+LockReleaseTokenPoolPoolAndProxy_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 3368110)
+LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 3364509)
LockReleaseTokenPoolPoolAndProxy_provideLiquidity:test_Unauthorized_Revert() (gas: 11380)
LockReleaseTokenPoolPoolAndProxy_supportsInterface:test_SupportsInterface_Success() (gas: 9977)
LockReleaseTokenPoolPoolAndProxy_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60043)
@@ -612,18 +439,18 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61409)
MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39890)
MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 32973)
MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 393335)
-MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1384852)
+MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1448084)
NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37907)
NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23694)
NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38763)
NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71847)
-NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 249533)
-NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 251724)
-NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 304493)
-NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 287566)
-NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 244824)
-NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 233144)
-NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 142547)
+NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 257252)
+NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 259369)
+NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 319959)
+NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 295278)
+NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 244940)
+NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 233260)
+NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 150148)
NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 167625)
NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 218724)
NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 125070)
@@ -660,10 +487,186 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51686)
OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23484)
OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39665)
OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20557)
+OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 38408)
+OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 106250)
+OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 87409)
+OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 38954)
+OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 96511)
+OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 41956)
+OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 88684)
+OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 468115)
+OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99227)
+OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12395)
+OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Revert() (gas: 93181)
+OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 109890)
+OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13263)
+OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 17988)
+OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15343)
+OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 313594)
+OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 254984)
+OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 166123)
+OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 187729)
+OffRamp_batchExecute:test_SingleReport_Success() (gas: 153140)
+OffRamp_batchExecute:test_Unhealthy_Revert() (gas: 518887)
+OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10439)
+OffRamp_ccipReceive:test_Reverts() (gas: 15684)
+OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67458)
+OffRamp_commit:test_InvalidInterval_Revert() (gas: 59734)
+OffRamp_commit:test_InvalidRootRevert() (gas: 58814)
+OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6538150)
+OffRamp_commit:test_NoConfig_Revert() (gas: 6121222)
+OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 106251)
+OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 116259)
+OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 106272)
+OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 351586)
+OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 159364)
+OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 136569)
+OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 136859)
+OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59082)
+OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 225772)
+OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 117566)
+OffRamp_commit:test_Unhealthy_Revert() (gas: 77608)
+OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 205117)
+OffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6532473)
+OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 47788)
+OffRamp_constructor:test_Constructor_Success() (gas: 6125436)
+OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137067)
+OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103784)
+OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101677)
+OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 139641)
+OffRamp_constructor:test_ZeroRMNProxy_Revert() (gas: 101554)
+OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101599)
+OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17261)
+OffRamp_execute:test_LargeBatch_Success() (gas: 1726826)
+OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 349476)
+OffRamp_execute:test_MultipleReports_Success() (gas: 276933)
+OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6588848)
+OffRamp_execute:test_NoConfig_Revert() (gas: 6171682)
+OffRamp_execute:test_NonArray_Revert() (gas: 27733)
+OffRamp_execute:test_SingleReport_Success() (gas: 172458)
+OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147390)
+OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6950922)
+OffRamp_execute:test_ZeroReports_Revert() (gas: 17159)
+OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18190)
+OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 246556)
+OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20472)
+OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205195)
+OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48734)
+OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48257)
+OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 229631)
+OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 86202)
+OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 277436)
+OffRamp_executeSingleMessage:test_executeSingleMessage_WithValidation_Success() (gas: 92436)
+OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 35126)
+OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 23922)
+OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 475599)
+OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 54456)
+OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 35904)
+OffRamp_executeSingleReport:test_MismatchingOnRampRoot_Revert() (gas: 154426)
+OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 35337)
+OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 184865)
+OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 196122)
+OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 48073)
+OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 444686)
+OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 250335)
+OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 187191)
+OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 206771)
+OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 263519)
+OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 138408)
+OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 409328)
+OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 65876)
+OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 80909)
+OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 566299)
+OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 517689)
+OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 35742)
+OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 517721)
+OffRamp_executeSingleReport:test_Unhealthy_Revert() (gas: 515089)
+OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 485207)
+OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 133513)
+OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 162713)
+OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3674540)
+OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 118375)
+OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 87586)
+OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 75635)
+OffRamp_manuallyExecute:test_ManualExecInvalidGasLimit_Revert() (gas: 26471)
+OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 168604)
+OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 205435)
+OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 26014)
+OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 152948)
+OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 518487)
+OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2295740)
+OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 208322)
+OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 208944)
+OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 662979)
+OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 301931)
+OffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 164042)
+OffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 23736)
+OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 64484)
+OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() (gas: 39516)
+OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 81512)
+OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 176140)
+OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 189342)
+OffRamp_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11379)
+OffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 215398)
+OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14140)
+OffRamp_setDynamicConfig:test_PriceRegistryZeroAddress_Revert() (gas: 11660)
+OffRamp_setDynamicConfig:test_SetDynamicConfigWithValidator_Success() (gas: 49203)
+OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 27147)
+OffRamp_trialExecute:test_RateLimitError_Success() (gas: 221780)
+OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 230403)
+OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 297574)
+OffRamp_trialExecute:test_trialExecute_Success() (gas: 279978)
+OffRamp_verify:test_Blessed_Success() (gas: 176620)
+OffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178688)
+OffRamp_verify:test_NotBlessed_Success() (gas: 141549)
+OffRamp_verify:test_TooManyLeaves_Revert() (gas: 51510)
OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390410)
-PingPong_ccipReceive:test_CcipReceive_Success() (gas: 148405)
-PingPong_plumbing:test_Pausing_Success() (gas: 17803)
-PingPong_startPingPong:test_StartPingPong_Success() (gas: 178365)
+OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 63649)
+OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInalidChainSelector_Revert() (gas: 13308)
+OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 94175)
+OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 92092)
+OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 97113)
+OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 92150)
+OnRamp_constructor:test_Constructor_Success() (gas: 2384439)
+OnRamp_forwardFromRouter:test_CannotSendZeroTokens_Revert() (gas: 71918)
+OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 111914)
+OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 142684)
+OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 142260)
+OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 140437)
+OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 142490)
+OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 141859)
+OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 134347)
+OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 26294)
+OnRamp_forwardFromRouter:test_MessageValidationError_Revert() (gas: 133253)
+OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 24360)
+OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 12872)
+OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 32033)
+OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 15762)
+OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 179401)
+OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 205670)
+OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 121815)
+OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 143193)
+OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3872608)
+OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 108546)
+OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 73975)
+OnRamp_forwardFromRouter:test_forwardFromRouter_WithValidation_Success() (gas: 262685)
+OnRamp_getFee:test_EmptyMessage_Success() (gas: 104467)
+OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 74075)
+OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 119799)
+OnRamp_getFee:test_Unhealthy_Revert() (gas: 43679)
+OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10438)
+OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35270)
+OnRamp_setDynamicConfig:test_SetConfigInvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11155)
+OnRamp_setDynamicConfig:test_SetConfigInvalidConfigPriceRegistryEqAddressZero_Revert() (gas: 12740)
+OnRamp_setDynamicConfig:test_SetConfigInvalidConfig_Revert() (gas: 11112)
+OnRamp_setDynamicConfig:test_SetConfigOnlyOwner_Revert() (gas: 15939)
+OnRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 51996)
+OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97214)
+PingPong_ccipReceive:test_CcipReceive_Success() (gas: 150175)
+PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20277)
+PingPong_plumbing:test_Pausing_Success() (gas: 17777)
+PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 163199)
+PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 182611)
PriceRegistry_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16725)
PriceRegistry_applyDestChainConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 16816)
PriceRegistry_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16617)
@@ -858,7 +861,7 @@ Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 242732)
Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 24749)
Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 44724)
Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 174440)
-Router_ccipSend:test_ZeroFeeAndGasPrice_Success() (gas: 245146)
+Router_ccipSend:test_ZeroFeeAndGasPrice_Success() (gas: 244856)
Router_constructor:test_Constructor_Success() (gas: 13074)
Router_getArmProxy:test_getArmProxy() (gas: 10561)
Router_getFee:test_GetFeeSupportedChain_Success() (gas: 46464)
@@ -875,9 +878,9 @@ Router_routeMessage:test_ManualExec_Success() (gas: 35381)
Router_routeMessage:test_OnlyOffRamp_Revert() (gas: 25116)
Router_routeMessage:test_WhenNotHealthy_Revert() (gas: 44724)
Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 10985)
-SelfFundedPingPong_ccipReceive:test_FundingIfNotANop_Revert() (gas: 53540)
-SelfFundedPingPong_ccipReceive:test_Funding_Success() (gas: 417080)
-SelfFundedPingPong_setCountIncrBeforeFunding:test_setCountIncrBeforeFunding() (gas: 20157)
+SelfFundedPingPong_ccipReceive:test_FundingIfNotANop_Revert() (gas: 53531)
+SelfFundedPingPong_ccipReceive:test_Funding_Success() (gas: 417002)
+SelfFundedPingPong_setCountIncrBeforeFunding:test_setCountIncrBeforeFunding() (gas: 20151)
TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 51085)
TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 43947)
TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 12629)
@@ -900,11 +903,12 @@ TokenAdminRegistry_setPool:test_setPool_Success() (gas: 35943)
TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30617)
TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18043)
TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49390)
-TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 6064586)
-TokenPoolAndProxy:test_lockOrBurn_burnWithFromMint_Success() (gas: 6096059)
-TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 6310909)
-TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6908121)
-TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 7092212)
+TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 6070353)
+TokenPoolAndProxy:test_lockOrBurn_burnWithFromMint_Success() (gas: 6101826)
+TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 6319594)
+TokenPoolAndProxy:test_setPreviousPool_Success() (gas: 3387124)
+TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6913796)
+TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 7097821)
TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 2209837)
TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12089)
TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23324)
diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts
index 71419719d4c..65934d3866f 100644
--- a/contracts/hardhat.config.ts
+++ b/contracts/hardhat.config.ts
@@ -21,7 +21,10 @@ subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS).setAction(
async (_, __, runSuper) => {
const paths = await runSuper()
const noTests = paths.filter((p: string) => !p.endsWith('.t.sol'))
- return noTests.filter(
+ const noCCIPTests = noTests.filter(
+ (p: string) => !p.includes('/v0.8/ccip/test'),
+ )
+ return noCCIPTests.filter(
(p: string) => !p.includes('src/v0.8/vendor/forge-std'),
)
},
diff --git a/contracts/package.json b/contracts/package.json
index 14292e16a5a..334b75701c1 100644
--- a/contracts/package.json
+++ b/contracts/package.json
@@ -18,34 +18,47 @@
"prepare": "chmod +x .husky/prepare.sh && ./.husky/prepare.sh",
"prepublishOnly": "pnpm compile && ./scripts/prepublish_generate_abi_folder",
"publish-beta": "pnpm publish --tag beta",
- "publish-prod": "npm dist-tag add @chainlink/contracts-ccip@1.2.1 latest",
+ "publish-prod": "npm dist-tag add @chainlink/contracts-ccip@1.5.0 latest",
"solhint:ccip": "solhint --max-warnings 0 \"./src/v0.8/ccip/**/*.sol\"",
"solhint": "solhint --max-warnings 0 \"./src/v0.8/**/*.sol\""
},
"files": [
"src/v0.8/ccip/**/*.sol",
- "!src/v0.8/ccip/test/**/*",
- "src/v0.8/ccip/test/mocks/**/*",
"src/v0.8/shared/access/ConfirmedOwner.sol",
"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol",
"src/v0.8/shared/access/OwnerIsCreator.sol",
+ "src/v0.8/shared/access/AuthorizedCallers.sol",
"src/v0.8/shared/call/CallWithExactGas.sol",
+ "src/v0.8/shared/enumerable/EnumerableMapBytes32.sol",
"src/v0.8/shared/enumerable/EnumerableMapAddresses.sol",
"src/v0.8/shared/interfaces/IOwnable.sol",
"src/v0.8/shared/interfaces/ITypeAndVersion.sol",
"src/v0.8/shared/interfaces/IERC677Receiver.sol",
+ "src/v0.8/shared/interfaces/AggregatorV3Interface.sol",
"src/v0.8/shared/token/ERC20/IBurnMintERC20.sol",
"src/v0.8/shared/token/ERC677/IERC677.sol",
"src/v0.8/shared/token/ERC677/IERC677Receiver.sol",
"src/v0.8/shared/token/ERC677/ERC677.sol",
"src/v0.8/shared/token/ERC677/BurnMintERC677.sol",
+ "src/v0.8/shared/util/SortedSetValidationUtil.sol",
+ "src/v0.8/liquiditymanager/interfaces/ILiquidityContainer.sol",
+ "src/v0.8/keystone/interfaces/ICapabilityConfiguration.sol",
"src/v0.8/vendor/openzeppelin-solidity",
"src/v0.8/vendor/Context.sol",
"src/v0.8/vendor/Pausable.sol",
"abi/v0.8/",
"src/v0.8/ccip/LICENSE.md",
"src/v0.8/ccip/LICENSE-MIT.md",
- "src/v0.8/ccip/v1.4-CCIP-License-grants.md"
+ "src/v0.8/ccip/v1.5-CCIP-License-grants.md",
+ "!src/v0.8/ccip/test/**/*",
+ "src/v0.8/ccip/test/mocks/**/*",
+ "!src/v0.8/ccip/test/mocks/test/*",
+ "!src/v0.8/ccip/onRamp/OnRamp.sol",
+ "!src/v0.8/ccip/offRamp/OffRamp.sol",
+ "!src/v0.8/ccip/ocr/MultiOCR3Base.sol",
+ "!src/v0.8/ccip/NonceManager.sol",
+ "!src/v0.8/ccip/MultiAggregateRateLimiter.sol",
+ "!src/v0.8/ccip/capability"
],
"pnpm": {
"_comment": "See https://github.com/ethers-io/ethers.js/discussions/2849#discussioncomment-2696454",
diff --git a/contracts/scripts/generate_compiled_json_ccip.sh b/contracts/scripts/generate_compiled_json_ccip.sh
new file mode 100755
index 00000000000..a4e93d7e905
--- /dev/null
+++ b/contracts/scripts/generate_compiled_json_ccip.sh
@@ -0,0 +1,73 @@
+#!/usr/bin/env bash
+
+set -e
+
+ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; cd ../../ && pwd -P )"
+
+contractName="$1"
+SOLC_VERSION="$2"
+destPath="$3"
+path="$ROOT"/contracts/solc/v$SOLC_VERSION/"$contractName"
+
+if [ -z "$contractName" ]; then
+ echo "Error: contractName is not set."
+ exit 1
+fi
+
+if [ -z "$contractName" ]; then
+ echo "Error: solc version is not set."
+ exit 1
+fi
+
+if [ -z "$destPath" ]; then
+ echo "Error: destination path is not set."
+ exit 1
+fi
+
+if [ ! -e "$destPath" ]; then
+ echo "Error: $destPath does not exist."
+ exit 1
+fi
+
+
+metadata=$(cat "$path/${contractName}_meta.json")
+fileName=$(echo "$metadata" | jq -r '.settings.compilationTarget | keys[0]')
+combined=$(cat "$path/combined.json")
+
+abi=$(cat "$path/${contractName}.abi")
+bytecode_object="0x$(cat "$path/${contractName}.bin" | tr -d '\n')"
+bytecode_sourceMap=$(echo "$combined" | jq -r ".contracts[\"$fileName:$contractName\"].srcmap")
+
+deployedBytecode_object="0x$(cat "$path/${contractName}.bin-runtime" | tr -d '\n')"
+deployedBytecode_sourceMap=$(echo "$combined" | jq -r ".contracts[\"$fileName:$contractName\"].\"srcmap-runtime\"")
+
+methodIdentifiers=$(echo "$combined" | jq -r ".contracts[\"$fileName:$contractName\"].hashes")
+rawMetadata=$(echo "$metadata" | jq -c '.')
+
+result=$(jq -n \
+ --argjson abi "$abi" \
+ --arg object "$bytecode_object" \
+ --arg sourceMap "$bytecode_sourceMap" \
+ --arg deployedObject "$deployedBytecode_object" \
+ --arg deployedSourceMap "$deployedBytecode_sourceMap" \
+ --argjson methodIdentifiers "$methodIdentifiers" \
+ --arg rawMetadata "$rawMetadata" \
+ --argjson metadata "$metadata" \
+ '{
+ abi: $abi,
+ bytecode: {
+ object: $object,
+ sourceMap: $sourceMap
+ },
+ deployedBytecode: {
+ object: $deployedObject,
+ sourceMap: $deployedSourceMap
+ },
+ methodIdentifiers: $methodIdentifiers,
+ rawMetadata: $rawMetadata,
+ metadata: $metadata
+ }'
+)
+
+echo "$result" > "$destPath"
+echo "Generated artifacts at $(realpath $destPath)"
diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip
index 7ac4de241db..a384ea6786d 100755
--- a/contracts/scripts/native_solc_compile_all_ccip
+++ b/contracts/scripts/native_solc_compile_all_ccip
@@ -32,7 +32,7 @@ compileContract () {
echo "OffRamp uses $OPTIMIZE_RUNS_OFFRAMP optimizer runs."
optimize_runs=$OPTIMIZE_RUNS_OFFRAMP
;;
- "ccip/offRamp/EVM2EVMMultiOffRamp.sol")
+ "ccip/offRamp/OffRamp.sol")
echo "MultiOffRamp uses $OPTIMIZE_RUNS_MULTI_OFFRAMP optimizer runs."
optimize_runs=$OPTIMIZE_RUNS_MULTI_OFFRAMP
;;
@@ -49,6 +49,7 @@ compileContract () {
solc --overwrite --optimize --optimize-runs $optimize_runs --metadata-hash none \
-o "$ROOT"/contracts/solc/v$SOLC_VERSION/"$contract" \
--abi --bin --allow-paths "$ROOT"/contracts/src/v0.8 \
+ --bin-runtime --hashes --metadata --metadata-literal --combined-json abi,hashes,metadata,srcmap,srcmap-runtime \
--evm-version paris \
"$ROOT"/contracts/src/v0.8/"$1"
}
@@ -57,11 +58,11 @@ compileContract () {
# Solc produces and overwrites intermediary contracts.
# Contracts should be ordered in reverse-import-complexity-order to minimize overwrite risks.
compileContract ccip/offRamp/EVM2EVMOffRamp.sol
-compileContract ccip/offRamp/EVM2EVMMultiOffRamp.sol
+compileContract ccip/offRamp/OffRamp.sol
compileContract ccip/applications/PingPongDemo.sol
compileContract ccip/applications/SelfFundedPingPong.sol
compileContract ccip/applications/EtherSenderReceiver.sol
-compileContract ccip/onRamp/EVM2EVMMultiOnRamp.sol
+compileContract ccip/onRamp/OnRamp.sol
compileContract ccip/onRamp/EVM2EVMOnRamp.sol
compileContract ccip/CommitStore.sol
compileContract ccip/MultiAggregateRateLimiter.sol
diff --git a/contracts/src/v0.8/ccip/LICENSE.md b/contracts/src/v0.8/ccip/LICENSE.md
index 5f2783f7a34..b2e82483e93 100644
--- a/contracts/src/v0.8/ccip/LICENSE.md
+++ b/contracts/src/v0.8/ccip/LICENSE.md
@@ -9,13 +9,13 @@ Parameters
Licensor: SmartContract Chainlink Limited SEZC
-Licensed Work: Cross-Chain Interoperability Protocol v1.4
+Licensed Work: Cross-Chain Interoperability Protocol v1.5
The Licensed Work is (c) 2023 SmartContract Chainlink Limited SEZC
-Additional Use Grant: Any uses listed and defined at [v1.4-CCIP-License-grants](
-./v1.4-CCIP-License-grants)
+Additional Use Grant: Any uses listed and defined at [v1.5-CCIP-License-grants](
+./v1.5-CCIP-License-grants.md)
-Change Date: May 23, 2027
+Change Date: Aug 16, 2028
Change License: MIT
diff --git a/contracts/src/v0.8/ccip/applications/PingPongDemo.sol b/contracts/src/v0.8/ccip/applications/PingPongDemo.sol
index 423fdc45467..5144b3ed4c1 100644
--- a/contracts/src/v0.8/ccip/applications/PingPongDemo.sol
+++ b/contracts/src/v0.8/ccip/applications/PingPongDemo.sol
@@ -14,6 +14,10 @@ import {IERC20} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/
contract PingPongDemo is CCIPReceiver, OwnerIsCreator, ITypeAndVersion {
event Ping(uint256 pingPongCount);
event Pong(uint256 pingPongCount);
+ event OutOfOrderExecutionChange(bool isOutOfOrder);
+
+ // Default gas limit used for EVMExtraArgsV2 construction
+ uint64 private constant DEFAULT_GAS_LIMIT = 200_000;
// The chain ID of the counterpart ping pong contract
uint64 internal s_counterpartChainSelector;
@@ -23,6 +27,8 @@ contract PingPongDemo is CCIPReceiver, OwnerIsCreator, ITypeAndVersion {
bool private s_isPaused;
// The fee token used to pay for CCIP transactions
IERC20 internal s_feeToken;
+ // Allowing out of order execution
+ bool private s_outOfOrderExecution;
constructor(address router, IERC20 feeToken) CCIPReceiver(router) {
s_isPaused = false;
@@ -50,12 +56,13 @@ contract PingPongDemo is CCIPReceiver, OwnerIsCreator, ITypeAndVersion {
} else {
emit Pong(pingPongCount);
}
- bytes memory data = abi.encode(pingPongCount);
Client.EVM2AnyMessage memory message = Client.EVM2AnyMessage({
receiver: abi.encode(s_counterpartAddress),
- data: data,
+ data: abi.encode(pingPongCount),
tokenAmounts: new Client.EVMTokenAmount[](0),
- extraArgs: "",
+ extraArgs: Client._argsToBytes(
+ Client.EVMExtraArgsV2({gasLimit: uint256(DEFAULT_GAS_LIMIT), allowOutOfOrderExecution: s_outOfOrderExecution})
+ ),
feeToken: address(s_feeToken)
});
IRouterClient(getRouter()).ccipSend(s_counterpartChainSelector, message);
@@ -99,4 +106,13 @@ contract PingPongDemo is CCIPReceiver, OwnerIsCreator, ITypeAndVersion {
function setPaused(bool pause) external onlyOwner {
s_isPaused = pause;
}
+
+ function getOutOfOrderExecution() external view returns (bool) {
+ return s_outOfOrderExecution;
+ }
+
+ function setOutOfOrderExecution(bool outOfOrderExecution) external onlyOwner {
+ s_outOfOrderExecution = outOfOrderExecution;
+ emit OutOfOrderExecutionChange(outOfOrderExecution);
+ }
}
diff --git a/contracts/src/v0.8/ccip/capability/CCIPConfig.sol b/contracts/src/v0.8/ccip/capability/CCIPConfig.sol
index 245a9ef7378..6d310f989b9 100644
--- a/contracts/src/v0.8/ccip/capability/CCIPConfig.sol
+++ b/contracts/src/v0.8/ccip/capability/CCIPConfig.sol
@@ -105,20 +105,36 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator
}
/// @notice Returns all the chain configurations.
- /// @return The chain configurations.
- // TODO: will this eventually hit the RPC max response size limit?
- function getAllChainConfigs() external view returns (CCIPConfigTypes.ChainConfigInfo[] memory) {
+ /// @return paginatedChainConfigs chain configurations.
+ function getAllChainConfigs(
+ uint256 pageIndex,
+ uint256 pageSize
+ ) external view returns (CCIPConfigTypes.ChainConfigInfo[] memory) {
+ uint256 totalItems = s_remoteChainSelectors.length(); // Total number of chain selectors
+ uint256 startIndex = pageIndex * pageSize;
+
+ if (pageSize == 0 || startIndex >= totalItems) {
+ return new CCIPConfigTypes.ChainConfigInfo[](0); // Return an empty array if pageSize is 0 or pageIndex is out of bounds
+ }
+
+ uint256 endIndex = startIndex + pageSize;
+ if (endIndex > totalItems) {
+ endIndex = totalItems;
+ }
+
+ CCIPConfigTypes.ChainConfigInfo[] memory paginatedChainConfigs =
+ new CCIPConfigTypes.ChainConfigInfo[](endIndex - startIndex);
+
uint256[] memory chainSelectors = s_remoteChainSelectors.values();
- CCIPConfigTypes.ChainConfigInfo[] memory chainConfigs =
- new CCIPConfigTypes.ChainConfigInfo[](s_remoteChainSelectors.length());
- for (uint256 i = 0; i < chainSelectors.length; ++i) {
+ for (uint256 i = startIndex; i < endIndex; ++i) {
uint64 chainSelector = uint64(chainSelectors[i]);
- chainConfigs[i] = CCIPConfigTypes.ChainConfigInfo({
+ paginatedChainConfigs[i - startIndex] = CCIPConfigTypes.ChainConfigInfo({
chainSelector: chainSelector,
chainConfig: s_chainConfigurations[chainSelector]
});
}
- return chainConfigs;
+
+ return paginatedChainConfigs;
}
/// @notice Returns the OCR configuration for the given don ID and plugin type.
diff --git a/contracts/src/v0.8/ccip/libraries/Internal.sol b/contracts/src/v0.8/ccip/libraries/Internal.sol
index e13492acc95..bd1ee48d9ab 100644
--- a/contracts/src/v0.8/ccip/libraries/Internal.sol
+++ b/contracts/src/v0.8/ccip/libraries/Internal.sol
@@ -67,7 +67,7 @@ library Internal {
// CCIP_LOCK_OR_BURN_V1_RET_BYTES bytes. If more data is required, the TokenTransferFeeConfig.destBytesOverhead
// has to be set for the specific token.
bytes extraData;
- uint32 destGasAmount; // The amount of gas available for the releaseOrMint and transfer calls on the offRamp
+ uint32 destGasAmount; // The amount of gas available for the releaseOrMint and balanceOf calls on the offRamp
}
/// @notice Report that is submitted by the execution DON at the execution phase. (including chain selector data)
diff --git a/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol
similarity index 98%
rename from contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol
rename to contracts/src/v0.8/ccip/offRamp/OffRamp.sol
index 8a5cb1fdc21..de03e5fac7e 100644
--- a/contracts/src/v0.8/ccip/offRamp/EVM2EVMMultiOffRamp.sol
+++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol
@@ -22,14 +22,14 @@ import {MultiOCR3Base} from "../ocr/MultiOCR3Base.sol";
import {IERC20} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/token/ERC20/IERC20.sol";
import {ERC165Checker} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/ERC165Checker.sol";
-/// @notice EVM2EVMOffRamp enables OCR networks to execute multiple messages
+/// @notice OffRamp enables OCR networks to execute multiple messages
/// in an OffRamp in a single transaction.
-/// @dev The EVM2EVMMultiOnRamp and EVM2EVMMultiOffRamp form an xchain upgradeable unit. Any change to one of them
+/// @dev The OnRamp and OffRamp form an xchain upgradeable unit. Any change to one of them
/// results an onchain upgrade of both contracts.
/// @dev MultiOCR3Base is used to store multiple OCR configs for both the OffRamp and the CommitStore.
/// The execution plugin type has to be configured without signature verification, and the commit
/// plugin type with verification.
-contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base {
+contract OffRamp is ITypeAndVersion, MultiOCR3Base {
using ERC165Checker for address;
using EnumerableMapAddresses for EnumerableMapAddresses.AddressToAddressMap;
@@ -68,7 +68,8 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base {
uint64 indexed sequenceNumber,
bytes32 indexed messageId,
Internal.MessageExecutionState state,
- bytes returnData
+ bytes returnData,
+ uint256 gasUsed
);
event SourceChainSelectorAdded(uint64 sourceChainSelector);
event SourceChainConfigSet(uint64 indexed sourceChainSelector, SourceChainConfig sourceConfig);
@@ -141,7 +142,7 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base {
}
// STATIC CONFIG
- string public constant override typeAndVersion = "EVM2EVMMultiOffRamp 1.6.0-dev";
+ string public constant override typeAndVersion = "OffRamp 1.6.0-dev";
/// @dev ChainSelector of this chain
uint64 internal immutable i_chainSelector;
/// @dev The address of the RMN proxy
@@ -372,6 +373,7 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base {
// Execute messages
bool manualExecution = manualExecGasLimits.length != 0;
for (uint256 i = 0; i < numMsgs; ++i) {
+ uint256 gasStart = gasleft();
Internal.Any2EVMRampMessage memory message = report.messages[i];
Internal.MessageExecutionState originalState =
@@ -465,7 +467,12 @@ contract EVM2EVMMultiOffRamp is ITypeAndVersion, MultiOCR3Base {
}
emit ExecutionStateChanged(
- sourceChainSelector, message.header.sequenceNumber, message.header.messageId, newState, returnData
+ sourceChainSelector,
+ message.header.sequenceNumber,
+ message.header.messageId,
+ newState,
+ returnData,
+ gasStart - gasleft()
);
}
}
diff --git a/contracts/src/v0.8/ccip/onRamp/EVM2EVMMultiOnRamp.sol b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol
similarity index 97%
rename from contracts/src/v0.8/ccip/onRamp/EVM2EVMMultiOnRamp.sol
rename to contracts/src/v0.8/ccip/onRamp/OnRamp.sol
index 10a5c5876ea..60d41894fa5 100644
--- a/contracts/src/v0.8/ccip/onRamp/EVM2EVMMultiOnRamp.sol
+++ b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol
@@ -20,10 +20,10 @@ import {USDPriceWith18Decimals} from "../libraries/USDPriceWith18Decimals.sol";
import {IERC20} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/utils/SafeERC20.sol";
-/// @notice The EVM2EVMMultiOnRamp is a contract that handles lane-specific fee logic
-/// @dev The EVM2EVMMultiOnRamp, MultiCommitStore and EVM2EVMMultiOffRamp form an xchain upgradeable unit. Any change to one of them
+/// @notice The OnRamp is a contract that handles lane-specific fee logic
+/// @dev The OnRamp, MultiCommitStore and OffRamp form an xchain upgradeable unit. Any change to one of them
/// results an onchain upgrade of all 3.
-contract EVM2EVMMultiOnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator {
+contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator {
using SafeERC20 for IERC20;
using USDPriceWith18Decimals for uint224;
@@ -80,7 +80,7 @@ contract EVM2EVMMultiOnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCre
}
// STATIC CONFIG
- string public constant override typeAndVersion = "EVM2EVMMultiOnRamp 1.6.0-dev";
+ string public constant override typeAndVersion = "OnRamp 1.6.0-dev";
/// @dev The chain ID of the source chain that this contract is deployed to
uint64 internal immutable i_chainSelector;
/// @dev The address of the rmn proxy
diff --git a/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol b/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol
index 58eac2a57d9..bc5adb0b2dd 100644
--- a/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol
+++ b/contracts/src/v0.8/ccip/pools/LegacyPoolWrapper.sol
@@ -55,6 +55,11 @@ abstract contract LegacyPoolWrapper is TokenPool {
emit LegacyPoolChanged(oldPrevPool, prevPool);
}
+ /// @notice Returns the address of the previous pool.
+ function getPreviousPool() external view returns (address) {
+ return address(s_previousPool);
+ }
+
function _hasLegacyPool() internal view returns (bool) {
return address(s_previousPool) != address(0);
}
diff --git a/contracts/src/v0.8/ccip/test/BaseTest.t.sol b/contracts/src/v0.8/ccip/test/BaseTest.t.sol
index dba9e286eff..2eb44ec485a 100644
--- a/contracts/src/v0.8/ccip/test/BaseTest.t.sol
+++ b/contracts/src/v0.8/ccip/test/BaseTest.t.sol
@@ -34,11 +34,11 @@ contract BaseTest is Test {
// Onramp
uint96 internal constant MAX_NOP_FEES_JUELS = 1e27;
uint96 internal constant MAX_MSG_FEES_JUELS = 1e18;
- uint32 internal constant DEST_GAS_OVERHEAD = 350_000;
+ uint32 internal constant DEST_GAS_OVERHEAD = 300_000;
uint16 internal constant DEST_GAS_PER_PAYLOAD_BYTE = 16;
uint16 internal constant DEFAULT_TOKEN_FEE_USD_CENTS = 50;
- uint32 internal constant DEFAULT_TOKEN_DEST_GAS_OVERHEAD = 85_000;
+ uint32 internal constant DEFAULT_TOKEN_DEST_GAS_OVERHEAD = 90_000;
uint32 internal constant DEFAULT_TOKEN_BYTES_OVERHEAD = 32;
bool private s_baseTestInitialized;
@@ -61,8 +61,6 @@ contract BaseTest is Test {
// OffRamp
uint32 internal constant MAX_DATA_SIZE = 30_000;
uint16 internal constant MAX_TOKENS_LENGTH = 5;
- uint32 internal constant MAX_TOKEN_POOL_RELEASE_OR_MINT_GAS = 200_000;
- uint32 internal constant MAX_TOKEN_POOL_TRANSFER_GAS = 50_000;
uint16 internal constant GAS_FOR_CALL_EXACT_CHECK = 5000;
uint32 internal constant PERMISSION_LESS_EXECUTION_THRESHOLD_SECONDS = 500;
uint32 internal constant MAX_GAS_LIMIT = 4_000_000;
@@ -89,15 +87,15 @@ contract BaseTest is Test {
s_mockRMN = new MockRMN();
}
- function getOutboundRateLimiterConfig() internal pure returns (RateLimiter.Config memory) {
+ function _getOutboundRateLimiterConfig() internal pure returns (RateLimiter.Config memory) {
return RateLimiter.Config({isEnabled: true, capacity: 100e28, rate: 1e15});
}
- function getInboundRateLimiterConfig() internal pure returns (RateLimiter.Config memory) {
+ function _getInboundRateLimiterConfig() internal pure returns (RateLimiter.Config memory) {
return RateLimiter.Config({isEnabled: true, capacity: 222e30, rate: 1e18});
}
- function getSingleTokenPriceUpdateStruct(
+ function _getSingleTokenPriceUpdateStruct(
address token,
uint224 price
) internal pure returns (Internal.PriceUpdates memory) {
@@ -109,17 +107,4 @@ contract BaseTest is Test {
return priceUpdates;
}
-
- function getSingleGasPriceUpdateStruct(
- uint64 chainSelector,
- uint224 usdPerUnitGas
- ) internal pure returns (Internal.PriceUpdates memory) {
- Internal.GasPriceUpdate[] memory gasPriceUpdates = new Internal.GasPriceUpdate[](1);
- gasPriceUpdates[0] = Internal.GasPriceUpdate({destChainSelector: chainSelector, usdPerUnitGas: usdPerUnitGas});
-
- Internal.PriceUpdates memory priceUpdates =
- Internal.PriceUpdates({tokenPriceUpdates: new Internal.TokenPriceUpdate[](0), gasPriceUpdates: gasPriceUpdates});
-
- return priceUpdates;
- }
}
diff --git a/contracts/src/v0.8/ccip/test/NonceManager.t.sol b/contracts/src/v0.8/ccip/test/NonceManager.t.sol
index 012a3168c26..3811f0d3c64 100644
--- a/contracts/src/v0.8/ccip/test/NonceManager.t.sol
+++ b/contracts/src/v0.8/ccip/test/NonceManager.t.sol
@@ -7,17 +7,15 @@ import {Client} from "../libraries/Client.sol";
import {Internal} from "../libraries/Internal.sol";
import {Pool} from "../libraries/Pool.sol";
import {RateLimiter} from "../libraries/RateLimiter.sol";
-import {EVM2EVMMultiOffRamp} from "../offRamp/EVM2EVMMultiOffRamp.sol";
-import {EVM2EVMMultiOnRamp} from "../onRamp/EVM2EVMMultiOnRamp.sol";
+import {OffRamp} from "../offRamp/OffRamp.sol";
import {EVM2EVMOnRamp} from "../onRamp/EVM2EVMOnRamp.sol";
-
+import {OnRamp} from "../onRamp/OnRamp.sol";
import {BaseTest} from "./BaseTest.t.sol";
-import {EVM2EVMMultiOnRampHelper} from "./helpers/EVM2EVMMultiOnRampHelper.sol";
import {EVM2EVMOffRampHelper} from "./helpers/EVM2EVMOffRampHelper.sol";
import {EVM2EVMOnRampHelper} from "./helpers/EVM2EVMOnRampHelper.sol";
import {MockCommitStore} from "./mocks/MockCommitStore.sol";
-import {EVM2EVMMultiOffRampSetup} from "./offRamp/EVM2EVMMultiOffRampSetup.t.sol";
-import {EVM2EVMMultiOnRampSetup} from "./onRamp/EVM2EVMMultiOnRampSetup.t.sol";
+import {OffRampSetup} from "./offRamp/OffRampSetup.t.sol";
+import {OnRampSetup} from "./onRamp/OnRampSetup.t.sol";
import {Test} from "forge-std/Test.sol";
contract NonceManager_typeAndVersion is Test {
@@ -88,7 +86,7 @@ contract NonceManager_NonceIncrementation is BaseTest {
}
}
-contract NonceManager_applyPreviousRampsUpdates is EVM2EVMMultiOnRampSetup {
+contract NonceManager_applyPreviousRampsUpdates is OnRampSetup {
function test_SingleRampUpdate() public {
address prevOnRamp = makeAddr("prevOnRamp");
address prevOffRamp = makeAddr("prevOffRamp");
@@ -190,7 +188,7 @@ contract NonceManager_applyPreviousRampsUpdates is EVM2EVMMultiOnRampSetup {
}
}
-contract NonceManager_OnRampUpgrade is EVM2EVMMultiOnRampSetup {
+contract NonceManager_OnRampUpgrade is OnRampSetup {
uint256 internal constant FEE_AMOUNT = 1234567890;
EVM2EVMOnRampHelper internal s_prevOnRamp;
@@ -214,7 +212,7 @@ contract NonceManager_OnRampUpgrade is EVM2EVMMultiOnRampSetup {
minFeeUSDCents: 1_00, // 1 USD
maxFeeUSDCents: 1000_00, // 1,000 USD
deciBps: 2_5, // 2.5 bps, or 0.025%
- destGasOverhead: 40_000,
+ destGasOverhead: 140_000,
destBytesOverhead: uint32(Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES),
aggregateRateLimitEnabled: true
});
@@ -267,7 +265,7 @@ contract NonceManager_OnRampUpgrade is EVM2EVMMultiOnRampSetup {
Client.EVM2AnyMessage memory message = _generateEmptyMessage();
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, OWNER);
}
@@ -294,18 +292,14 @@ contract NonceManager_OnRampUpgrade is EVM2EVMMultiOnRampSetup {
// new onramp nonce should start from 2, while sequence number start from 1
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(
- DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, startNonce + 2, FEE_AMOUNT, OWNER)
- );
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, startNonce + 2, FEE_AMOUNT, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, OWNER);
assertEq(startNonce + 2, s_outboundNonceManager.getOutboundNonce(DEST_CHAIN_SELECTOR, OWNER));
// after another send, nonce should be 3, and sequence number be 2
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(
- DEST_CHAIN_SELECTOR, _messageToEvent(message, 2, startNonce + 3, FEE_AMOUNT, OWNER)
- );
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 2, startNonce + 3, FEE_AMOUNT, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, OWNER);
assertEq(startNonce + 3, s_outboundNonceManager.getOutboundNonce(DEST_CHAIN_SELECTOR, OWNER));
@@ -320,14 +314,12 @@ contract NonceManager_OnRampUpgrade is EVM2EVMMultiOnRampSetup {
address newSender = address(1234567);
// new onramp nonce should start from 1 for new sender
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(
- DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, newSender)
- );
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, newSender));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, newSender);
}
}
-contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
+contract NonceManager_OffRampUpgrade is OffRampSetup {
EVM2EVMOffRampHelper internal s_prevOffRamp;
EVM2EVMOffRampHelper[] internal s_nestedPrevOffRamps;
@@ -367,21 +359,20 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
);
s_inboundNonceManager.applyPreviousRampsUpdates(previousRamps);
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](3);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](3);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
isEnabled: true,
onRamp: ON_RAMP_ADDRESS_1
});
- sourceChainConfigs[1] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[1] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_2,
isEnabled: true,
onRamp: ON_RAMP_ADDRESS_2
});
- sourceChainConfigs[2] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[2] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_3,
isEnabled: true,
@@ -397,16 +388,16 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
function test_Upgraded_Success() public {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
function test_NoPrevOffRampForChain_Success() public {
@@ -425,8 +416,13 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
Internal.Any2EVMRampMessage[] memory messagesChain3 =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_3, ON_RAMP_ADDRESS_3);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+
+ vm.recordLogs();
+
+ s_offRamp.executeSingleReport(
+ _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_3, messagesChain3), new uint256[](0)
+ );
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_3,
messagesChain3[0].header.sequenceNumber,
messagesChain3[0].header.messageId,
@@ -434,9 +430,6 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
""
);
- s_offRamp.executeSingleReport(
- _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_3, messagesChain3), new uint256[](0)
- );
assertEq(
startNonceChain3 + 1, s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_3, messagesChain3[0].sender)
);
@@ -504,8 +497,13 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
messagesMultiRamp[0].header.nonce++;
messagesMultiRamp[0].header.messageId = Internal._hash(messagesMultiRamp[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+
+ s_offRamp.executeSingleReport(
+ _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp), new uint256[](0)
+ );
+
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messagesMultiRamp[0].header.sequenceNumber,
messagesMultiRamp[0].header.messageId,
@@ -513,9 +511,6 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
""
);
- s_offRamp.executeSingleReport(
- _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp), new uint256[](0)
- );
assertEq(
startNonce + 2, s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp[0].sender)
);
@@ -524,8 +519,11 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
messagesMultiRamp[0].header.sequenceNumber++;
messagesMultiRamp[0].header.messageId = Internal._hash(messagesMultiRamp[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(
+ _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp), new uint256[](0)
+ );
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messagesMultiRamp[0].header.sequenceNumber,
messagesMultiRamp[0].header.messageId,
@@ -533,9 +531,6 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
""
);
- s_offRamp.executeSingleReport(
- _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp), new uint256[](0)
- );
assertEq(
startNonce + 3, s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp[0].sender)
);
@@ -556,20 +551,19 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
messagesMultiRamp[0].sender = newSender;
messagesMultiRamp[0].header.messageId = Internal._hash(messagesMultiRamp[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ // new sender nonce in new offramp should go from 0 -> 1
+ assertEq(s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, newSender), 0);
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(
+ _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp), new uint256[](0)
+ );
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messagesMultiRamp[0].header.sequenceNumber,
messagesMultiRamp[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- // new sender nonce in new offramp should go from 0 -> 1
- assertEq(s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, newSender), 0);
- s_offRamp.executeSingleReport(
- _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messagesMultiRamp), new uint256[](0)
- );
assertEq(s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, newSender), 1);
}
@@ -611,16 +605,15 @@ contract NonceManager_OffRampUpgrade is EVM2EVMMultiOffRampSetup {
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
// new offramp is able to execute
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
assertEq(startNonce + 2, s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender));
}
diff --git a/contracts/src/v0.8/ccip/test/TokenSetup.t.sol b/contracts/src/v0.8/ccip/test/TokenSetup.t.sol
index 182d92c5c94..203145881e3 100644
--- a/contracts/src/v0.8/ccip/test/TokenSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/TokenSetup.t.sol
@@ -1,8 +1,6 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {IPoolV1} from "../interfaces/IPool.sol";
-
import {BurnMintERC677} from "../../shared/token/ERC677/BurnMintERC677.sol";
import {Client} from "../libraries/Client.sol";
import {BurnMintTokenPool} from "../pools/BurnMintTokenPool.sol";
@@ -138,7 +136,7 @@ contract TokenSetup is RouterSetup {
}
}
- function getCastedSourceEVMTokenAmountsWithZeroAmounts()
+ function _getCastedSourceEVMTokenAmountsWithZeroAmounts()
internal
view
returns (Client.EVMTokenAmount[] memory tokenAmounts)
@@ -147,6 +145,7 @@ contract TokenSetup is RouterSetup {
for (uint256 i = 0; i < tokenAmounts.length; ++i) {
tokenAmounts[i].token = s_sourceTokens[i];
}
+ return tokenAmounts;
}
function _setPool(
@@ -170,8 +169,8 @@ contract TokenSetup is RouterSetup {
remotePoolAddress: abi.encode(remotePoolAddress),
remoteTokenAddress: abi.encode(remoteToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
TokenPool(pool).applyChainUpdates(chainUpdates);
diff --git a/contracts/src/v0.8/ccip/test/applications/PingPongDemo.t.sol b/contracts/src/v0.8/ccip/test/applications/PingPongDemo.t.sol
index 3297e1f4fbc..f253a72fcb3 100644
--- a/contracts/src/v0.8/ccip/test/applications/PingPongDemo.t.sol
+++ b/contracts/src/v0.8/ccip/test/applications/PingPongDemo.t.sol
@@ -27,16 +27,15 @@ contract PingPongDappSetup is EVM2EVMOnRampSetup {
}
contract PingPong_startPingPong is PingPongDappSetup {
- function test_StartPingPong_Success() public {
- uint256 pingPongNumber = 1;
- bytes memory data = abi.encode(pingPongNumber);
+ uint256 internal pingPongNumber = 1;
+ function test_StartPingPong_With_Sequenced_Ordered_Success() public {
Client.EVM2AnyMessage memory sentMessage = Client.EVM2AnyMessage({
receiver: abi.encode(i_pongContract),
- data: data,
+ data: abi.encode(pingPongNumber),
tokenAmounts: new Client.EVMTokenAmount[](0),
feeToken: s_sourceFeeToken,
- extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: 2e5}))
+ extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: 200_000}))
});
uint256 expectedFee = s_sourceRouter.getFee(DEST_CHAIN_SELECTOR, sentMessage);
@@ -48,14 +47,51 @@ contract PingPong_startPingPong is PingPongDappSetup {
sender: address(s_pingPong),
receiver: i_pongContract,
nonce: 1,
- data: data,
+ data: abi.encode(pingPongNumber),
tokenAmounts: sentMessage.tokenAmounts,
sourceTokenData: new bytes[](sentMessage.tokenAmounts.length),
- gasLimit: 2e5,
+ gasLimit: 200_000,
feeToken: sentMessage.feeToken,
strict: false,
messageId: ""
});
+
+ _assertPingPongSuccess(message);
+ }
+
+ function test_StartPingPong_With_OOO_Success() public {
+ s_pingPong.setOutOfOrderExecution(true);
+
+ Client.EVM2AnyMessage memory sentMessage = Client.EVM2AnyMessage({
+ receiver: abi.encode(i_pongContract),
+ data: abi.encode(pingPongNumber),
+ tokenAmounts: new Client.EVMTokenAmount[](0),
+ feeToken: s_sourceFeeToken,
+ extraArgs: Client._argsToBytes(Client.EVMExtraArgsV2({gasLimit: 200_000, allowOutOfOrderExecution: true}))
+ });
+
+ uint256 expectedFee = s_sourceRouter.getFee(DEST_CHAIN_SELECTOR, sentMessage);
+
+ Internal.EVM2EVMMessage memory message = Internal.EVM2EVMMessage({
+ sequenceNumber: 1,
+ feeTokenAmount: expectedFee,
+ sourceChainSelector: SOURCE_CHAIN_SELECTOR,
+ sender: address(s_pingPong),
+ receiver: i_pongContract,
+ nonce: 0,
+ data: abi.encode(pingPongNumber),
+ tokenAmounts: sentMessage.tokenAmounts,
+ sourceTokenData: new bytes[](sentMessage.tokenAmounts.length),
+ gasLimit: 200_000,
+ feeToken: sentMessage.feeToken,
+ strict: false,
+ messageId: ""
+ });
+
+ _assertPingPongSuccess(message);
+ }
+
+ function _assertPingPongSuccess(Internal.EVM2EVMMessage memory message) internal {
message.messageId = Internal._hash(message, s_metadataHash);
vm.expectEmit();
@@ -105,6 +141,8 @@ contract PingPong_plumbing is PingPongDappSetup {
}
function test_Fuzz_CounterPartAddress_Success(uint64 chainSelector, address counterpartAddress) public {
+ s_pingPong.setCounterpartChainSelector(chainSelector);
+
s_pingPong.setCounterpart(chainSelector, counterpartAddress);
assertEq(s_pingPong.getCounterpartAddress(), counterpartAddress);
@@ -118,4 +156,15 @@ contract PingPong_plumbing is PingPongDappSetup {
assertTrue(s_pingPong.isPaused());
}
+
+ function test_OutOfOrderExecution_Success() public {
+ assertFalse(s_pingPong.getOutOfOrderExecution());
+
+ vm.expectEmit();
+ emit PingPongDemo.OutOfOrderExecutionChange(true);
+
+ s_pingPong.setOutOfOrderExecution(true);
+
+ assertTrue(s_pingPong.getOutOfOrderExecution());
+ }
}
diff --git a/contracts/src/v0.8/ccip/test/arm/ARMProxy.t.sol b/contracts/src/v0.8/ccip/test/arm/ARMProxy.t.sol
index 24b617c82a0..f1889fae755 100644
--- a/contracts/src/v0.8/ccip/test/arm/ARMProxy.t.sol
+++ b/contracts/src/v0.8/ccip/test/arm/ARMProxy.t.sol
@@ -4,9 +4,8 @@ pragma solidity 0.8.24;
import {IRMN} from "../../interfaces/IRMN.sol";
import {ARMProxy} from "../../ARMProxy.sol";
-import {RMN} from "../../RMN.sol";
import {MockRMN} from "../mocks/MockRMN.sol";
-import {RMNSetup, makeSubjects} from "./RMNSetup.t.sol";
+import {RMNSetup} from "./RMNSetup.t.sol";
contract ARMProxyTest is RMNSetup {
MockRMN internal s_mockRMN;
diff --git a/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol b/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol
index 5deeda64063..0eea71eacc5 100644
--- a/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol
+++ b/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol
@@ -3,19 +3,17 @@ pragma solidity 0.8.24;
import {Client} from "../../../libraries/Client.sol";
import {Internal} from "../../../libraries/Internal.sol";
-import {EVM2EVMMultiOnRamp} from "../../../onRamp/EVM2EVMMultiOnRamp.sol";
+import {OnRamp} from "../../../onRamp/OnRamp.sol";
import {TokenPool} from "../../../pools/TokenPool.sol";
-import {EVM2EVMMultiOnRampSetup} from "../../onRamp/EVM2EVMMultiOnRampSetup.t.sol";
+import {OnRampSetup} from "../../onRamp/OnRampSetup.t.sol";
import {FacadeClient} from "./FacadeClient.sol";
import {ReentrantMaliciousTokenPool} from "./ReentrantMaliciousTokenPool.sol";
import {IERC20} from "../../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
-import {console} from "forge-std/console.sol";
-
/// @title MultiOnRampTokenPoolReentrancy
/// Attempts to perform a reentrancy exploit on Onramp with a malicious TokenPool
-contract MultiOnRampTokenPoolReentrancy is EVM2EVMMultiOnRampSetup {
+contract MultiOnRampTokenPoolReentrancy is OnRampSetup {
FacadeClient internal s_facadeClient;
ReentrantMaliciousTokenPool internal s_maliciousTokenPool;
IERC20 internal s_sourceToken;
@@ -23,7 +21,7 @@ contract MultiOnRampTokenPoolReentrancy is EVM2EVMMultiOnRampSetup {
address internal immutable i_receiver = makeAddr("receiver");
function setUp() public virtual override {
- EVM2EVMMultiOnRampSetup.setUp();
+ OnRampSetup.setUp();
s_sourceToken = IERC20(s_sourceTokens[0]);
s_feeToken = IERC20(s_sourceTokens[0]);
@@ -41,8 +39,8 @@ contract MultiOnRampTokenPoolReentrancy is EVM2EVMMultiOnRampSetup {
remotePoolAddress: abi.encode(s_destPoolBySourceToken[s_sourceTokens[0]]),
remoteTokenAddress: abi.encode(s_destTokens[0]),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_maliciousTokenPool.applyChainUpdates(chainUpdates);
s_sourcePoolByToken[address(s_sourceToken)] = address(s_maliciousTokenPool);
@@ -109,9 +107,9 @@ contract MultiOnRampTokenPoolReentrancy is EVM2EVMMultiOnRampSetup {
Internal.EVM2AnyRampMessage memory msgEvent2 = _messageToEvent(message2, 2, 2, expectedFee, address(s_facadeClient));
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent2);
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent2);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent1);
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent1);
s_facadeClient.send(amount);
}
diff --git a/contracts/src/v0.8/ccip/test/attacks/onRamp/OnRampTokenPoolReentrancy.t.sol b/contracts/src/v0.8/ccip/test/attacks/onRamp/OnRampTokenPoolReentrancy.t.sol
index 8fc71be8573..03db40a2931 100644
--- a/contracts/src/v0.8/ccip/test/attacks/onRamp/OnRampTokenPoolReentrancy.t.sol
+++ b/contracts/src/v0.8/ccip/test/attacks/onRamp/OnRampTokenPoolReentrancy.t.sol
@@ -39,8 +39,8 @@ contract OnRampTokenPoolReentrancy is EVM2EVMOnRampSetup {
remotePoolAddress: abi.encode(s_destPoolBySourceToken[s_sourceTokens[0]]),
remoteTokenAddress: abi.encode(s_destTokens[0]),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_maliciousTokenPool.applyChainUpdates(chainUpdates);
s_sourcePoolByToken[address(s_sourceToken)] = address(s_maliciousTokenPool);
diff --git a/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol b/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol
index fe2bf758540..2ac30b355a1 100644
--- a/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol
+++ b/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol
@@ -128,7 +128,6 @@ contract CCIPConfig_constructor is Test {
contract CCIPConfig_chainConfig is CCIPConfigSetup {
// Successes.
-
function test_applyChainConfigUpdates_addChainConfigs_Success() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));
@@ -141,7 +140,6 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup {
chainSelector: 2,
chainConfig: CCIPConfigTypes.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")})
});
-
vm.mockCall(
CAPABILITIES_REGISTRY,
abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]),
@@ -157,19 +155,69 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup {
})
)
);
-
vm.expectEmit();
emit CCIPConfig.ChainConfigSet(1, adds[0].chainConfig);
vm.expectEmit();
emit CCIPConfig.ChainConfigSet(2, adds[1].chainConfig);
s_ccipCC.applyChainConfigUpdates(new uint64[](0), adds);
- CCIPConfigTypes.ChainConfigInfo[] memory configs = s_ccipCC.getAllChainConfigs();
+ CCIPConfigTypes.ChainConfigInfo[] memory configs = s_ccipCC.getAllChainConfigs(0, 2);
assertEq(configs.length, 2, "chain configs length must be 2");
assertEq(configs[0].chainSelector, 1, "chain selector must match");
assertEq(configs[1].chainSelector, 2, "chain selector must match");
}
+ function test_getPaginatedCCIPConfigs_Success() public {
+ bytes32[] memory chainReaders = new bytes32[](1);
+ chainReaders[0] = keccak256(abi.encode(1));
+ CCIPConfigTypes.ChainConfigInfo[] memory adds = new CCIPConfigTypes.ChainConfigInfo[](2);
+ adds[0] = CCIPConfigTypes.ChainConfigInfo({
+ chainSelector: 1,
+ chainConfig: CCIPConfigTypes.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config1")})
+ });
+ adds[1] = CCIPConfigTypes.ChainConfigInfo({
+ chainSelector: 2,
+ chainConfig: CCIPConfigTypes.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")})
+ });
+ vm.mockCall(
+ CAPABILITIES_REGISTRY,
+ abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]),
+ abi.encode(
+ ICapabilitiesRegistry.NodeInfo({
+ nodeOperatorId: 1,
+ signer: bytes32(uint256(1)),
+ p2pId: chainReaders[0],
+ hashedCapabilityIds: new bytes32[](0),
+ configCount: uint32(1),
+ workflowDONId: uint32(1),
+ capabilitiesDONIds: new uint256[](0)
+ })
+ )
+ );
+
+ s_ccipCC.applyChainConfigUpdates(new uint64[](0), adds);
+
+ CCIPConfigTypes.ChainConfigInfo[] memory configs = s_ccipCC.getAllChainConfigs(0, 2);
+ assertEq(configs.length, 2, "chain configs length must be 2");
+ assertEq(configs[0].chainSelector, 1, "chain selector must match");
+ assertEq(configs[1].chainSelector, 2, "chain selector must match");
+
+ configs = s_ccipCC.getAllChainConfigs(0, 1);
+ assertEq(configs.length, 1, "chain configs length must be 1");
+ assertEq(configs[0].chainSelector, 1, "chain selector must match");
+
+ configs = s_ccipCC.getAllChainConfigs(0, 10);
+ assertEq(configs.length, 2, "chain configs length must be 2");
+ assertEq(configs[0].chainSelector, 1, "chain selector must match");
+ assertEq(configs[1].chainSelector, 2, "chain selector must match");
+
+ configs = s_ccipCC.getAllChainConfigs(1, 1);
+ assertEq(configs.length, 1, "chain configs length must be 1");
+
+ configs = s_ccipCC.getAllChainConfigs(1, 2);
+ assertEq(configs.length, 0, "chain configs length must be 0");
+ }
+
function test_applyChainConfigUpdates_removeChainConfigs_Success() public {
bytes32[] memory chainReaders = new bytes32[](1);
chainReaders[0] = keccak256(abi.encode(1));
diff --git a/contracts/src/v0.8/ccip/test/commitStore/CommitStore.t.sol b/contracts/src/v0.8/ccip/test/commitStore/CommitStore.t.sol
index 8c5e745f43c..7ea64c9f89b 100644
--- a/contracts/src/v0.8/ccip/test/commitStore/CommitStore.t.sol
+++ b/contracts/src/v0.8/ccip/test/commitStore/CommitStore.t.sol
@@ -12,7 +12,7 @@ import {MerkleMultiProof} from "../../libraries/MerkleMultiProof.sol";
import {OCR2Abstract} from "../../ocr/OCR2Abstract.sol";
import {CommitStoreHelper} from "../helpers/CommitStoreHelper.sol";
import {OCR2BaseSetup} from "../ocr/OCR2Base.t.sol";
-import {PriceRegistrySetup} from "../priceRegistry/PriceRegistry.t.sol";
+import {PriceRegistrySetup} from "../priceRegistry/PriceRegistrySetup.t.sol";
contract CommitStoreSetup is PriceRegistrySetup, OCR2BaseSetup {
CommitStoreHelper internal s_commitStore;
@@ -214,7 +214,7 @@ contract CommitStore_resetUnblessedRoots is CommitStoreRealRMNSetup {
rootsToReset[2] = "3";
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(1, 2),
merkleRoot: rootsToReset[0]
});
@@ -222,7 +222,7 @@ contract CommitStore_resetUnblessedRoots is CommitStoreRealRMNSetup {
s_commitStore.report(abi.encode(report), ++s_latestEpochAndRound);
report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(3, 4),
merkleRoot: rootsToReset[1]
});
@@ -230,7 +230,7 @@ contract CommitStore_resetUnblessedRoots is CommitStoreRealRMNSetup {
s_commitStore.report(abi.encode(report), ++s_latestEpochAndRound);
report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(5, 5),
merkleRoot: rootsToReset[2]
});
@@ -273,7 +273,7 @@ contract CommitStore_report is CommitStoreSetup {
uint64 max1 = 931;
bytes32 root = "Only a single root";
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(1, max1),
merkleRoot: root
});
@@ -296,7 +296,7 @@ contract CommitStore_report is CommitStoreSetup {
uint64 max1 = 12;
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
interval: CommitStore.Interval(1, max1),
merkleRoot: "test #2"
});
@@ -316,7 +316,7 @@ contract CommitStore_report is CommitStoreSetup {
IPriceRegistry(s_commitStore.getDynamicConfig().priceRegistry).getTokenPrice(s_sourceFeeToken).value;
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
interval: CommitStore.Interval(1, maxSeq),
merkleRoot: "stale report 1"
});
@@ -329,7 +329,7 @@ contract CommitStore_report is CommitStoreSetup {
assertEq(s_latestEpochAndRound, s_commitStore.getLatestPriceEpochAndRound());
report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(maxSeq + 1, maxSeq * 2),
merkleRoot: "stale report 2"
});
@@ -348,7 +348,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_OnlyTokenPriceUpdates_Success() public {
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
interval: CommitStore.Interval(0, 0),
merkleRoot: ""
});
@@ -362,7 +362,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_OnlyGasPriceUpdates_Success() public {
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
interval: CommitStore.Interval(0, 0),
merkleRoot: ""
});
@@ -380,7 +380,7 @@ contract CommitStore_report is CommitStoreSetup {
uint224 tokenPrice2 = 5e18;
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice1),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice1),
interval: CommitStore.Interval(0, 0),
merkleRoot: ""
});
@@ -392,7 +392,7 @@ contract CommitStore_report is CommitStoreSetup {
assertEq(s_latestEpochAndRound, s_commitStore.getLatestPriceEpochAndRound());
report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice2),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice2),
interval: CommitStore.Interval(1, maxSeq),
merkleRoot: "stale report"
});
@@ -427,7 +427,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_InvalidRootRevert() public {
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(1, 4),
merkleRoot: bytes32(0)
});
@@ -439,7 +439,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_InvalidInterval_Revert() public {
CommitStore.Interval memory interval = CommitStore.Interval(2, 2);
CommitStore.CommitReport memory report =
- CommitStore.CommitReport({priceUpdates: getEmptyPriceUpdates(), interval: interval, merkleRoot: bytes32(0)});
+ CommitStore.CommitReport({priceUpdates: _getEmptyPriceUpdates(), interval: interval, merkleRoot: bytes32(0)});
vm.expectRevert(abi.encodeWithSelector(CommitStore.InvalidInterval.selector, interval));
@@ -449,7 +449,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_InvalidIntervalMinLargerThanMax_Revert() public {
CommitStore.Interval memory interval = CommitStore.Interval(1, 0);
CommitStore.CommitReport memory report =
- CommitStore.CommitReport({priceUpdates: getEmptyPriceUpdates(), interval: interval, merkleRoot: bytes32(0)});
+ CommitStore.CommitReport({priceUpdates: _getEmptyPriceUpdates(), interval: interval, merkleRoot: bytes32(0)});
vm.expectRevert(abi.encodeWithSelector(CommitStore.InvalidInterval.selector, interval));
@@ -458,7 +458,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_ZeroEpochAndRound_Revert() public {
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
interval: CommitStore.Interval(0, 0),
merkleRoot: bytes32(0)
});
@@ -470,7 +470,7 @@ contract CommitStore_report is CommitStoreSetup {
function test_OnlyPriceUpdateStaleReport_Revert() public {
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
interval: CommitStore.Interval(0, 0),
merkleRoot: bytes32(0)
});
@@ -485,14 +485,14 @@ contract CommitStore_report is CommitStoreSetup {
function test_RootAlreadyCommitted_Revert() public {
CommitStore.CommitReport memory report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(1, 2),
merkleRoot: "Only a single root"
});
s_commitStore.report(abi.encode(report), ++s_latestEpochAndRound);
report = CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(3, 3),
merkleRoot: "Only a single root"
});
@@ -510,7 +510,7 @@ contract CommitStore_verify is CommitStoreRealRMNSetup {
s_commitStore.report(
abi.encode(
CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(1, 2),
merkleRoot: leaves[0]
})
@@ -529,7 +529,7 @@ contract CommitStore_verify is CommitStoreRealRMNSetup {
s_commitStore.report(
abi.encode(
CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(1, 2),
merkleRoot: leaves[0]
})
diff --git a/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol b/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol
index 90df3773134..114265a2481 100644
--- a/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol
+++ b/contracts/src/v0.8/ccip/test/e2e/End2End.t.sol
@@ -52,7 +52,7 @@ contract E2E is EVM2EVMOnRampSetup, CommitStoreSetup, EVM2EVMOffRampSetup {
bytes memory commitReport = abi.encode(
CommitStore.CommitReport({
- priceUpdates: getEmptyPriceUpdates(),
+ priceUpdates: _getEmptyPriceUpdates(),
interval: CommitStore.Interval(messages[0].sequenceNumber, messages[2].sequenceNumber),
merkleRoot: merkleRoots[0]
})
diff --git a/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol b/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol
index 68c6f9d5fff..5ad00917349 100644
--- a/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol
+++ b/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol
@@ -3,21 +3,22 @@ pragma solidity 0.8.24;
import {AuthorizedCallers} from "../../../shared/access/AuthorizedCallers.sol";
import {NonceManager} from "../../NonceManager.sol";
+import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
import {TokenAdminRegistry} from "../../tokenAdminRegistry/TokenAdminRegistry.sol";
import "../helpers/MerkleHelper.sol";
-import "../offRamp/EVM2EVMMultiOffRampSetup.t.sol";
-import "../onRamp/EVM2EVMMultiOnRampSetup.t.sol";
+import "../offRamp/OffRampSetup.t.sol";
+import "../onRamp/OnRampSetup.t.sol";
/// @notice This E2E test implements the following scenario:
/// 1. Send multiple messages from multiple source chains to a single destination chain (2 messages from source chain 1 and 1 from
/// source chain 2).
/// 2. Commit multiple merkle roots (1 for each source chain).
/// 3. Batch execute all the committed messages.
-contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
+contract MultiRampsE2E is OnRampSetup, OffRampSetup {
using Internal for Internal.Any2EVMRampMessage;
Router internal s_sourceRouter2;
- EVM2EVMMultiOnRampHelper internal s_onRamp2;
+ OnRampHelper internal s_onRamp2;
TokenAdminRegistry internal s_tokenAdminRegistry2;
NonceManager internal s_nonceManager2;
@@ -25,9 +26,9 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
mapping(address destPool => address sourcePool) internal s_sourcePoolByDestPool;
- function setUp() public virtual override(EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup) {
- EVM2EVMMultiOnRampSetup.setUp();
- EVM2EVMMultiOffRampSetup.setUp();
+ function setUp() public virtual override(OnRampSetup, OffRampSetup) {
+ OnRampSetup.setUp();
+ OffRampSetup.setUp();
// Deploy new source router for the new source chain
s_sourceRouter2 = new Router(s_sourceRouter.getWrappedNative(), address(s_mockRMN));
@@ -62,7 +63,7 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
(
// Deploy the new source chain onramp
- // Outsource to shared helper function with EVM2EVMMultiOnRampSetup
+ // Outsource to shared helper function with OnRampSetup
s_onRamp2,
s_metadataHash2
) = _deployOnRamp(
@@ -84,16 +85,15 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
_deployOffRamp(s_mockRMN, s_inboundNonceManager);
// Enable source chains on offramp
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](2);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](2);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
isEnabled: true,
// Must match OnRamp address
onRamp: abi.encode(address(s_onRamp))
});
- sourceChainConfigs[1] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[1] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR + 1,
isEnabled: true,
@@ -136,20 +136,20 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
merkleRoots[0] = MerkleHelper.getMerkleRoot(hashedMessages1);
merkleRoots[1] = MerkleHelper.getMerkleRoot(hashedMessages2);
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](2);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](2);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(messages1[0].header.sequenceNumber, messages1[1].header.sequenceNumber),
+ interval: OffRamp.Interval(messages1[0].header.sequenceNumber, messages1[1].header.sequenceNumber),
merkleRoot: merkleRoots[0]
});
- roots[1] = EVM2EVMMultiOffRamp.MerkleRoot({
+ roots[1] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR + 1,
- interval: EVM2EVMMultiOffRamp.Interval(messages2[0].header.sequenceNumber, messages2[0].header.sequenceNumber),
+ interval: OffRamp.Interval(messages2[0].header.sequenceNumber, messages2[0].header.sequenceNumber),
merkleRoot: merkleRoots[1]
});
- EVM2EVMMultiOffRamp.CommitReport memory report =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory report =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
vm.resumeGasMetering();
_commit(report, ++s_latestSequenceNumber);
@@ -173,8 +173,15 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
vm.warp(BLOCK_TIME + 2000);
// Execute
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ Internal.ExecutionReportSingleChain[] memory reports = new Internal.ExecutionReportSingleChain[](2);
+ reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR, messages1);
+ reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR + 1, messages2);
+
+ vm.resumeGasMetering();
+ vm.recordLogs();
+ _execute(reports);
+
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR,
messages1[0].header.sequenceNumber,
messages1[0].header.messageId,
@@ -182,8 +189,7 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR,
messages1[1].header.sequenceNumber,
messages1[1].header.messageId,
@@ -191,21 +197,13 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR + 1,
messages2[0].header.sequenceNumber,
messages2[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- Internal.ExecutionReportSingleChain[] memory reports = new Internal.ExecutionReportSingleChain[](2);
- reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR, messages1);
- reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR + 1, messages2);
-
- vm.resumeGasMetering();
- _execute(reports);
}
function _sendRequest(
@@ -236,7 +234,7 @@ contract MultiRampsE2E is EVM2EVMMultiOnRampSetup, EVM2EVMMultiOffRampSetup {
);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent);
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent);
vm.resumeGasMetering();
router.ccipSend(DEST_CHAIN_SELECTOR, message);
diff --git a/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol b/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol
index 86abc09e2a5..707d38ddf22 100644
--- a/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol
+++ b/contracts/src/v0.8/ccip/test/helpers/CCIPReaderTester.sol
@@ -2,25 +2,20 @@
pragma solidity 0.8.24;
import {Internal} from "../../libraries/Internal.sol";
-import {EVM2EVMMultiOffRamp} from "../../offRamp/EVM2EVMMultiOffRamp.sol";
+import {OffRamp} from "../../offRamp/OffRamp.sol";
contract CCIPReaderTester {
event CCIPSendRequested(uint64 indexed destChainSelector, Internal.EVM2AnyRampMessage message);
- mapping(uint64 sourceChainSelector => EVM2EVMMultiOffRamp.SourceChainConfig sourceChainConfig) internal
- s_sourceChainConfigs;
+ mapping(uint64 sourceChainSelector => OffRamp.SourceChainConfig sourceChainConfig) internal s_sourceChainConfigs;
- function getSourceChainConfig(uint64 sourceChainSelector)
- external
- view
- returns (EVM2EVMMultiOffRamp.SourceChainConfig memory)
- {
+ function getSourceChainConfig(uint64 sourceChainSelector) external view returns (OffRamp.SourceChainConfig memory) {
return s_sourceChainConfigs[sourceChainSelector];
}
function setSourceChainConfig(
uint64 sourceChainSelector,
- EVM2EVMMultiOffRamp.SourceChainConfig memory sourceChainConfig
+ OffRamp.SourceChainConfig memory sourceChainConfig
) external {
s_sourceChainConfigs[sourceChainSelector] = sourceChainConfig;
}
@@ -47,9 +42,9 @@ contract CCIPReaderTester {
emit ExecutionStateChanged(sourceChainSelector, sequenceNumber, messageId, state, returnData);
}
- event CommitReportAccepted(EVM2EVMMultiOffRamp.CommitReport report);
+ event CommitReportAccepted(OffRamp.CommitReport report);
- function emitCommitReportAccepted(EVM2EVMMultiOffRamp.CommitReport memory report) external {
+ function emitCommitReportAccepted(OffRamp.CommitReport memory report) external {
emit CommitReportAccepted(report);
}
}
diff --git a/contracts/src/v0.8/ccip/test/helpers/MultiAggregateRateLimiterHelper.sol b/contracts/src/v0.8/ccip/test/helpers/MultiAggregateRateLimiterHelper.sol
index d9386ca7db0..2bcaabda331 100644
--- a/contracts/src/v0.8/ccip/test/helpers/MultiAggregateRateLimiterHelper.sol
+++ b/contracts/src/v0.8/ccip/test/helpers/MultiAggregateRateLimiterHelper.sol
@@ -2,7 +2,6 @@
pragma solidity 0.8.24;
import {MultiAggregateRateLimiter} from "../../MultiAggregateRateLimiter.sol";
-import {IPriceRegistry} from "../../interfaces/IPriceRegistry.sol";
import {Client} from "../../libraries/Client.sol";
contract MultiAggregateRateLimiterHelper is MultiAggregateRateLimiter {
diff --git a/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol
similarity index 93%
rename from contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol
rename to contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol
index f966e04462d..e5cf6332d9d 100644
--- a/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOffRampHelper.sol
+++ b/contracts/src/v0.8/ccip/test/helpers/OffRampHelper.sol
@@ -3,17 +3,17 @@ pragma solidity 0.8.24;
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
-import {EVM2EVMMultiOffRamp} from "../../offRamp/EVM2EVMMultiOffRamp.sol";
+import {OffRamp} from "../../offRamp/OffRamp.sol";
import {IgnoreContractSize} from "./IgnoreContractSize.sol";
-contract EVM2EVMMultiOffRampHelper is EVM2EVMMultiOffRamp, IgnoreContractSize {
+contract OffRampHelper is OffRamp, IgnoreContractSize {
mapping(uint64 sourceChainSelector => uint256 overrideTimestamp) private s_sourceChainVerificationOverride;
constructor(
StaticConfig memory staticConfig,
DynamicConfig memory dynamicConfig,
SourceChainConfigArgs[] memory sourceChainConfigs
- ) EVM2EVMMultiOffRamp(staticConfig, dynamicConfig, sourceChainConfigs) {}
+ ) OffRamp(staticConfig, dynamicConfig, sourceChainConfigs) {}
function setExecutionStateHelper(
uint64 sourceChainSelector,
diff --git a/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOnRampHelper.sol b/contracts/src/v0.8/ccip/test/helpers/OnRampHelper.sol
similarity index 57%
rename from contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOnRampHelper.sol
rename to contracts/src/v0.8/ccip/test/helpers/OnRampHelper.sol
index 88992a87499..57397f040a5 100644
--- a/contracts/src/v0.8/ccip/test/helpers/EVM2EVMMultiOnRampHelper.sol
+++ b/contracts/src/v0.8/ccip/test/helpers/OnRampHelper.sol
@@ -1,13 +1,13 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import "../../onRamp/EVM2EVMMultiOnRamp.sol";
+import "../../onRamp/OnRamp.sol";
import {IgnoreContractSize} from "./IgnoreContractSize.sol";
-contract EVM2EVMMultiOnRampHelper is EVM2EVMMultiOnRamp, IgnoreContractSize {
+contract OnRampHelper is OnRamp, IgnoreContractSize {
constructor(
StaticConfig memory staticConfig,
DynamicConfig memory dynamicConfig,
DestChainConfigArgs[] memory destChainConfigArgs
- ) EVM2EVMMultiOnRamp(staticConfig, dynamicConfig, destChainConfigArgs) {}
+ ) OnRamp(staticConfig, dynamicConfig, destChainConfigArgs) {}
}
diff --git a/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol b/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol
index ca53d512c0d..73962fb91f0 100644
--- a/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol
+++ b/contracts/src/v0.8/ccip/test/helpers/ReportCodec.sol
@@ -2,17 +2,17 @@
pragma solidity ^0.8.0;
import {Internal} from "../../libraries/Internal.sol";
-import {EVM2EVMMultiOffRamp} from "../../offRamp/EVM2EVMMultiOffRamp.sol";
+import {OffRamp} from "../../offRamp/OffRamp.sol";
contract ReportCodec {
event ExecuteReportDecoded(Internal.ExecutionReportSingleChain[] report);
- event CommitReportDecoded(EVM2EVMMultiOffRamp.CommitReport report);
+ event CommitReportDecoded(OffRamp.CommitReport report);
function decodeExecuteReport(bytes memory report) public pure returns (Internal.ExecutionReportSingleChain[] memory) {
return abi.decode(report, (Internal.ExecutionReportSingleChain[]));
}
- function decodeCommitReport(bytes memory report) public pure returns (EVM2EVMMultiOffRamp.CommitReport memory) {
- return abi.decode(report, (EVM2EVMMultiOffRamp.CommitReport));
+ function decodeCommitReport(bytes memory report) public pure returns (OffRamp.CommitReport memory) {
+ return abi.decode(report, (OffRamp.CommitReport));
}
}
diff --git a/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol b/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol
index c9e7d7e8ad6..667fbc13e51 100644
--- a/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol
+++ b/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol
@@ -4,16 +4,16 @@ pragma solidity ^0.8.19;
import {CCIPReceiver} from "../../../applications/CCIPReceiver.sol";
import {Client} from "../../../libraries/Client.sol";
import {Internal} from "../../../libraries/Internal.sol";
-import {EVM2EVMMultiOffRamp} from "../../../offRamp/EVM2EVMMultiOffRamp.sol";
+import {OffRamp} from "../../../offRamp/OffRamp.sol";
contract ReentrancyAbuserMultiRamp is CCIPReceiver {
event ReentrancySucceeded();
bool internal s_ReentrancyDone = false;
Internal.ExecutionReportSingleChain internal s_payload;
- EVM2EVMMultiOffRamp internal s_offRamp;
+ OffRamp internal s_offRamp;
- constructor(address router, EVM2EVMMultiOffRamp offRamp) CCIPReceiver(router) {
+ constructor(address router, OffRamp offRamp) CCIPReceiver(router) {
s_offRamp = offRamp;
}
diff --git a/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol b/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol
index d743b4c9e16..9645d70b7a6 100644
--- a/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol
+++ b/contracts/src/v0.8/ccip/test/legacy/TokenPoolAndProxy.t.sol
@@ -5,7 +5,6 @@ import {IPoolV1} from "../../interfaces/IPool.sol";
import {IPoolPriorTo1_5} from "../../interfaces/IPoolPriorTo1_5.sol";
import {BurnMintERC677} from "../../../shared/token/ERC677/BurnMintERC677.sol";
-import {PriceRegistry} from "../../PriceRegistry.sol";
import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Pool} from "../../libraries/Pool.sol";
@@ -14,8 +13,6 @@ import {BurnMintTokenPoolAndProxy} from "../../pools/BurnMintTokenPoolAndProxy.s
import {BurnWithFromMintTokenPoolAndProxy} from "../../pools/BurnWithFromMintTokenPoolAndProxy.sol";
import {LockReleaseTokenPoolAndProxy} from "../../pools/LockReleaseTokenPoolAndProxy.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {TokenSetup} from "../TokenSetup.t.sol";
-import {EVM2EVMOnRampHelper} from "../helpers/EVM2EVMOnRampHelper.sol";
import {EVM2EVMOnRampSetup} from "../onRamp/EVM2EVMOnRampSetup.t.sol";
import {RouterSetup} from "../router/RouterSetup.t.sol";
import {BurnMintTokenPool1_2, TokenPool1_2} from "./BurnMintTokenPool1_2.sol";
@@ -260,13 +257,13 @@ contract TokenPoolAndProxyMigration is EVM2EVMOnRampSetup {
onRampUpdates[0] = TokenPool1_2.RampUpdate({
ramp: address(s_onRamp),
allowed: true,
- rateLimiterConfig: getInboundRateLimiterConfig()
+ rateLimiterConfig: _getInboundRateLimiterConfig()
});
TokenPool1_2.RampUpdate[] memory offRampUpdates = new TokenPool1_2.RampUpdate[](1);
offRampUpdates[0] = TokenPool1_2.RampUpdate({
ramp: address(s_offRamp),
allowed: true,
- rateLimiterConfig: getInboundRateLimiterConfig()
+ rateLimiterConfig: _getInboundRateLimiterConfig()
});
BurnMintTokenPool1_2(address(s_legacyPool)).applyRampUpdates(onRampUpdates, offRampUpdates);
}
@@ -280,14 +277,14 @@ contract TokenPoolAndProxyMigration is EVM2EVMOnRampSetup {
legacyChainUpdates[0] = TokenPool1_4.ChainUpdate({
remoteChainSelector: DEST_CHAIN_SELECTOR,
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
legacyChainUpdates[1] = TokenPool1_4.ChainUpdate({
remoteChainSelector: SOURCE_CHAIN_SELECTOR,
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
BurnMintTokenPool1_4(address(s_legacyPool)).applyChainUpdates(legacyChainUpdates);
}
@@ -306,16 +303,16 @@ contract TokenPoolAndProxyMigration is EVM2EVMOnRampSetup {
remotePoolAddress: abi.encode(s_destTokenPool),
remoteTokenAddress: abi.encode(s_destToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
chainUpdates[1] = TokenPool.ChainUpdate({
remoteChainSelector: SOURCE_CHAIN_SELECTOR,
remotePoolAddress: abi.encode(s_sourcePool),
remoteTokenAddress: abi.encode(s_sourceToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_newPool.applyChainUpdates(chainUpdates);
@@ -395,10 +392,10 @@ contract TokenPoolAndProxy is EVM2EVMOnRampSetup {
TokenPool1_2.RampUpdate[] memory onRampUpdates = new TokenPool1_2.RampUpdate[](1);
onRampUpdates[0] =
- TokenPool1_2.RampUpdate({ramp: address(s_pool), allowed: true, rateLimiterConfig: getInboundRateLimiterConfig()});
+ TokenPool1_2.RampUpdate({ramp: address(s_pool), allowed: true, rateLimiterConfig: _getInboundRateLimiterConfig()});
TokenPool1_2.RampUpdate[] memory offRampUpdates = new TokenPool1_2.RampUpdate[](1);
offRampUpdates[0] =
- TokenPool1_2.RampUpdate({ramp: address(s_pool), allowed: true, rateLimiterConfig: getInboundRateLimiterConfig()});
+ TokenPool1_2.RampUpdate({ramp: address(s_pool), allowed: true, rateLimiterConfig: _getInboundRateLimiterConfig()});
BurnMintTokenPool1_2(address(s_legacyPool)).applyRampUpdates(onRampUpdates, offRampUpdates);
}
@@ -409,8 +406,8 @@ contract TokenPoolAndProxy is EVM2EVMOnRampSetup {
remotePoolAddress: abi.encode(s_destPool),
remoteTokenAddress: abi.encode(s_destToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
BurnMintTokenPoolAndProxy(address(s_pool)).applyChainUpdates(chains);
@@ -507,6 +504,19 @@ contract TokenPoolAndProxy is EVM2EVMOnRampSetup {
})
);
}
+
+ function test_setPreviousPool_Success() public {
+ LockReleaseTokenPoolAndProxy pool =
+ new LockReleaseTokenPoolAndProxy(s_token, new address[](0), address(s_mockRMN), true, address(s_sourceRouter));
+
+ assertEq(pool.getPreviousPool(), address(0));
+
+ address newLegacyPool = makeAddr("new_legacy_pool");
+
+ vm.startPrank(OWNER);
+ pool.setPreviousPool(IPoolPriorTo1_5(newLegacyPool));
+ assertEq(pool.getPreviousPool(), address(newLegacyPool));
+ }
}
////
@@ -543,8 +553,8 @@ contract LockReleaseTokenPoolAndProxySetup is RouterSetup {
remotePoolAddress: abi.encode(s_destPoolAddress),
remoteTokenAddress: abi.encode(address(s_token)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_lockReleaseTokenPoolAndProxy.applyChainUpdates(chainUpdate);
diff --git a/contracts/src/v0.8/ccip/test/mocks/MockRMN.sol b/contracts/src/v0.8/ccip/test/mocks/MockRMN.sol
index 3f7b0200e6f..343078cc37c 100644
--- a/contracts/src/v0.8/ccip/test/mocks/MockRMN.sol
+++ b/contracts/src/v0.8/ccip/test/mocks/MockRMN.sol
@@ -1,9 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {RMN} from "../../RMN.sol";
import {IRMN} from "../../interfaces/IRMN.sol";
-import {OwnerIsCreator} from "./../../../shared/access/OwnerIsCreator.sol";
/// @notice WARNING: This contract is to be only used for testing, all methods are unprotected.
contract MockRMN is IRMN {
diff --git a/contracts/src/v0.8/ccip/test/mocks/test/MockRouterTest.t.sol b/contracts/src/v0.8/ccip/test/mocks/test/MockRouterTest.t.sol
index 91798b494df..6cbe7bf58f4 100644
--- a/contracts/src/v0.8/ccip/test/mocks/test/MockRouterTest.t.sol
+++ b/contracts/src/v0.8/ccip/test/mocks/test/MockRouterTest.t.sol
@@ -3,7 +3,7 @@ pragma solidity ^0.8.0;
import {Client} from "../../../libraries/Client.sol";
import {TokenSetup} from "../../TokenSetup.t.sol";
-import {IRouter, IRouterClient, MockCCIPRouter} from "../MockRouter.sol";
+import {IRouterClient, MockCCIPRouter} from "../MockRouter.sol";
import {IERC20} from "../../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "../../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/utils/SafeERC20.sol";
diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol
index 167ac83330d..61624193673 100644
--- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol
+++ b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRamp.t.sol
@@ -2,14 +2,12 @@
pragma solidity 0.8.24;
import {ICommitStore} from "../../interfaces/ICommitStore.sol";
-import {IPoolV1} from "../../interfaces/IPool.sol";
import {ITokenAdminRegistry} from "../../interfaces/ITokenAdminRegistry.sol";
import {CallWithExactGas} from "../../../shared/call/CallWithExactGas.sol";
import {GenericReceiver} from "../../../shared/test/testhelpers/GenericReceiver.sol";
import {AggregateRateLimiter} from "../../AggregateRateLimiter.sol";
-import {RMN} from "../../RMN.sol";
import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
@@ -25,8 +23,6 @@ import {ConformingReceiver} from "../helpers/receivers/ConformingReceiver.sol";
import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol";
import {MaybeRevertMessageReceiverNo165} from "../helpers/receivers/MaybeRevertMessageReceiverNo165.sol";
import {ReentrancyAbuser} from "../helpers/receivers/ReentrancyAbuser.sol";
-import {MockCommitStore} from "../mocks/MockCommitStore.sol";
-import {OCR2Base} from "../ocr/OCR2Base.t.sol";
import {OCR2BaseNoChecks} from "../ocr/OCR2BaseNoChecks.t.sol";
import {EVM2EVMOffRampSetup} from "./EVM2EVMOffRampSetup.t.sol";
import {stdError} from "forge-std/Test.sol";
@@ -47,7 +43,7 @@ contract EVM2EVMOffRamp_constructor is EVM2EVMOffRampSetup {
EVM2EVMOffRamp.DynamicConfig memory dynamicConfig =
generateDynamicOffRampConfig(address(s_destRouter), address(s_priceRegistry));
- s_offRamp = new EVM2EVMOffRampHelper(staticConfig, getInboundRateLimiterConfig());
+ s_offRamp = new EVM2EVMOffRampHelper(staticConfig, _getInboundRateLimiterConfig());
s_offRamp.setOCR2Config(
s_valid_signers, s_valid_transmitters, s_f, abi.encode(dynamicConfig), s_offchainConfigVersion, abi.encode("")
@@ -108,7 +104,7 @@ contract EVM2EVMOffRamp_constructor is EVM2EVMOffRampSetup {
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
- getInboundRateLimiterConfig()
+ _getInboundRateLimiterConfig()
);
}
}
@@ -1796,7 +1792,7 @@ contract EVM2EVMOffRamp__releaseOrMintToken is EVM2EVMOffRampSetup {
contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
function test_releaseOrMintTokens_Success() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
IERC20 dstToken1 = IERC20(s_destFeeToken);
uint256 startingBalance = dstToken1.balanceOf(OWNER);
uint256 amount1 = 100;
@@ -1835,7 +1831,7 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
}
function test_releaseOrMintTokens_destDenominatedDecimals_Success() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
uint256 amount = 100;
uint256 destinationDenominationMultiplier = 1000;
srcTokenAmounts[1].amount = amount;
@@ -1859,10 +1855,10 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
function test_OverValueWithARLOff_Success() public {
// Set a high price to trip the ARL
uint224 tokenPrice = 3 ** 128;
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(s_destFeeToken, tokenPrice);
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(s_destFeeToken, tokenPrice);
s_priceRegistry.updatePrices(priceUpdates);
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
uint256 amount1 = 100;
srcTokenAmounts[0].amount = amount1;
@@ -1876,7 +1872,7 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
vm.expectRevert(
abi.encodeWithSelector(
RateLimiter.AggregateValueMaxCapacityExceeded.selector,
- getInboundRateLimiterConfig().capacity,
+ _getInboundRateLimiterConfig().capacity,
(amount1 * tokenPrice) / 1e18
)
);
@@ -1900,7 +1896,7 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
// Revert
function test_TokenHandlingError_Reverts() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
bytes memory unknownError = bytes("unknown error");
s_maybeRevertingPool.setShouldRevert(unknownError);
@@ -1919,7 +1915,7 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
function test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() public {
uint256 amount = 100;
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
srcTokenAmounts[0].amount = amount;
bytes memory originalSender = abi.encode(OWNER);
@@ -1956,7 +1952,7 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
}
function test_releaseOrMintTokens_InvalidEVMAddress_Revert() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
bytes memory originalSender = abi.encode(OWNER);
bytes[] memory offchainTokenData = new bytes[](srcTokenAmounts.length);
@@ -1980,7 +1976,7 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
}
function test_RateLimitErrors_Reverts() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
bytes[] memory rateLimitErrors = new bytes[](5);
rateLimitErrors[0] = abi.encodeWithSelector(RateLimiter.BucketOverfilled.selector);
@@ -2036,9 +2032,9 @@ contract EVM2EVMOffRamp__releaseOrMintTokens is EVM2EVMOffRampSetup {
function test_PriceNotFoundForToken_Reverts() public {
// Set token price to 0
- s_priceRegistry.updatePrices(getSingleTokenPriceUpdateStruct(s_destFeeToken, 0));
+ s_priceRegistry.updatePrices(_getSingleTokenPriceUpdateStruct(s_destFeeToken, 0));
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
uint256 amount1 = 100;
srcTokenAmounts[0].amount = amount1;
diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRampSetup.t.sol b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRampSetup.t.sol
index ccb91a7e723..a0fa6a4a8ee 100644
--- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRampSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMOffRampSetup.t.sol
@@ -3,13 +3,11 @@ pragma solidity 0.8.24;
import {IAny2EVMMessageReceiver} from "../../interfaces/IAny2EVMMessageReceiver.sol";
import {ICommitStore} from "../../interfaces/ICommitStore.sol";
-import {IPoolV1} from "../../interfaces/IPool.sol";
import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
import {EVM2EVMOffRamp} from "../../offRamp/EVM2EVMOffRamp.sol";
-import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
import {TokenSetup} from "../TokenSetup.t.sol";
import {EVM2EVMOffRampHelper} from "../helpers/EVM2EVMOffRampHelper.sol";
@@ -17,9 +15,7 @@ import {MaybeRevertingBurnMintTokenPool} from "../helpers/MaybeRevertingBurnMint
import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol";
import {MockCommitStore} from "../mocks/MockCommitStore.sol";
import {OCR2BaseSetup} from "../ocr/OCR2Base.t.sol";
-import {PriceRegistrySetup} from "../priceRegistry/PriceRegistry.t.sol";
-
-import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
+import {PriceRegistrySetup} from "../priceRegistry/PriceRegistrySetup.t.sol";
contract EVM2EVMOffRampSetup is TokenSetup, PriceRegistrySetup, OCR2BaseSetup {
MockCommitStore internal s_mockCommitStore;
@@ -58,7 +54,7 @@ contract EVM2EVMOffRampSetup is TokenSetup, PriceRegistrySetup, OCR2BaseSetup {
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
- getInboundRateLimiterConfig()
+ _getInboundRateLimiterConfig()
);
s_offRamp.setOCR2Config(
s_valid_signers,
@@ -133,7 +129,7 @@ contract EVM2EVMOffRampSetup is TokenSetup, PriceRegistrySetup, OCR2BaseSetup {
uint64 sequenceNumber,
uint256[] memory amounts
) internal view returns (Internal.EVM2EVMMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
for (uint256 i = 0; i < tokenAmounts.length; ++i) {
tokenAmounts[i].amount = amounts[i];
}
@@ -192,7 +188,7 @@ contract EVM2EVMOffRampSetup is TokenSetup, PriceRegistrySetup, OCR2BaseSetup {
function _generateSingleBasicMessageWithTokens() internal view returns (Internal.EVM2EVMMessage[] memory) {
Internal.EVM2EVMMessage[] memory messages = new Internal.EVM2EVMMessage[](1);
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
tokenAmounts[0].amount = 1e18;
messages[0] = _generateAny2EVMMessage(1, tokenAmounts, false);
return messages;
@@ -200,7 +196,7 @@ contract EVM2EVMOffRampSetup is TokenSetup, PriceRegistrySetup, OCR2BaseSetup {
function _generateMessagesWithTokens() internal view returns (Internal.EVM2EVMMessage[] memory) {
Internal.EVM2EVMMessage[] memory messages = new Internal.EVM2EVMMessage[](2);
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
tokenAmounts[0].amount = 1e18;
tokenAmounts[1].amount = 5e18;
messages[0] = _generateAny2EVMMessage(1, tokenAmounts, false);
diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol
similarity index 79%
rename from contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol
rename to contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol
index 0cd46c1e5f6..0df9859269f 100644
--- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRamp.t.sol
+++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {ICommitStore} from "../../interfaces/ICommitStore.sol";
import {IMessageInterceptor} from "../../interfaces/IMessageInterceptor.sol";
import {IPriceRegistry} from "../../interfaces/IPriceRegistry.sol";
import {IRMN} from "../../interfaces/IRMN.sol";
@@ -11,63 +10,58 @@ import {ITokenAdminRegistry} from "../../interfaces/ITokenAdminRegistry.sol";
import {CallWithExactGas} from "../../../shared/call/CallWithExactGas.sol";
import {NonceManager} from "../../NonceManager.sol";
import {PriceRegistry} from "../../PriceRegistry.sol";
-import {RMN} from "../../RMN.sol";
-import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
import {MerkleMultiProof} from "../../libraries/MerkleMultiProof.sol";
import {Pool} from "../../libraries/Pool.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {MultiOCR3Base} from "../../ocr/MultiOCR3Base.sol";
-import {EVM2EVMMultiOffRamp} from "../../offRamp/EVM2EVMMultiOffRamp.sol";
+import {OffRamp} from "../../offRamp/OffRamp.sol";
import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {EVM2EVMMultiOffRampHelper} from "../helpers/EVM2EVMMultiOffRampHelper.sol";
import {MaybeRevertingBurnMintTokenPool} from "../helpers/MaybeRevertingBurnMintTokenPool.sol";
-import {MessageInterceptorHelper} from "../helpers/MessageInterceptorHelper.sol";
+import {OffRampHelper} from "../helpers/OffRampHelper.sol";
import {ConformingReceiver} from "../helpers/receivers/ConformingReceiver.sol";
import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol";
import {MaybeRevertMessageReceiverNo165} from "../helpers/receivers/MaybeRevertMessageReceiverNo165.sol";
import {ReentrancyAbuserMultiRamp} from "../helpers/receivers/ReentrancyAbuserMultiRamp.sol";
-import {EVM2EVMMultiOffRampSetup} from "./EVM2EVMMultiOffRampSetup.t.sol";
+import {OffRampSetup} from "./OffRampSetup.t.sol";
import {Vm} from "forge-std/Vm.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
-contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
+contract OffRamp_constructor is OffRampSetup {
function test_Constructor_Success() public {
- EVM2EVMMultiOffRamp.StaticConfig memory staticConfig = EVM2EVMMultiOffRamp.StaticConfig({
+ OffRamp.StaticConfig memory staticConfig = OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
});
- EVM2EVMMultiOffRamp.DynamicConfig memory dynamicConfig =
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry));
+ OffRamp.DynamicConfig memory dynamicConfig = _generateDynamicOffRampConfig(address(s_priceRegistry));
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](2);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](2);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
isEnabled: true
});
- sourceChainConfigs[1] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[1] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1 + 1,
onRamp: ON_RAMP_ADDRESS_2,
isEnabled: true
});
- EVM2EVMMultiOffRamp.SourceChainConfig memory expectedSourceChainConfig1 = EVM2EVMMultiOffRamp.SourceChainConfig({
+ OffRamp.SourceChainConfig memory expectedSourceChainConfig1 = OffRamp.SourceChainConfig({
router: s_destRouter,
isEnabled: true,
minSeqNr: 1,
onRamp: sourceChainConfigs[0].onRamp
});
- EVM2EVMMultiOffRamp.SourceChainConfig memory expectedSourceChainConfig2 = EVM2EVMMultiOffRamp.SourceChainConfig({
+ OffRamp.SourceChainConfig memory expectedSourceChainConfig2 = OffRamp.SourceChainConfig({
router: s_destRouter,
isEnabled: true,
minSeqNr: 1,
@@ -75,24 +69,24 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
});
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.StaticConfigSet(staticConfig);
+ emit OffRamp.StaticConfigSet(staticConfig);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.DynamicConfigSet(dynamicConfig);
+ emit OffRamp.DynamicConfigSet(dynamicConfig);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1);
+ emit OffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1, expectedSourceChainConfig1);
+ emit OffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1, expectedSourceChainConfig1);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1 + 1);
+ emit OffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1 + 1);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1 + 1, expectedSourceChainConfig2);
+ emit OffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1 + 1, expectedSourceChainConfig2);
- s_offRamp = new EVM2EVMMultiOffRampHelper(staticConfig, dynamicConfig, sourceChainConfigs);
+ s_offRamp = new OffRampHelper(staticConfig, dynamicConfig, sourceChainConfigs);
MultiOCR3Base.OCRConfigArgs[] memory ocrConfigs = new MultiOCR3Base.OCRConfigArgs[](1);
ocrConfigs[0] = MultiOCR3Base.OCRConfigArgs({
@@ -107,13 +101,13 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
s_offRamp.setOCR3Configs(ocrConfigs);
// Static config
- EVM2EVMMultiOffRamp.StaticConfig memory gotStaticConfig = s_offRamp.getStaticConfig();
+ OffRamp.StaticConfig memory gotStaticConfig = s_offRamp.getStaticConfig();
assertEq(staticConfig.chainSelector, gotStaticConfig.chainSelector);
assertEq(staticConfig.rmnProxy, gotStaticConfig.rmnProxy);
assertEq(staticConfig.tokenAdminRegistry, gotStaticConfig.tokenAdminRegistry);
// Dynamic config
- EVM2EVMMultiOffRamp.DynamicConfig memory gotDynamicConfig = s_offRamp.getDynamicConfig();
+ OffRamp.DynamicConfig memory gotDynamicConfig = s_offRamp.getDynamicConfig();
_assertSameConfig(dynamicConfig, gotDynamicConfig);
// OCR Config
@@ -138,7 +132,7 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
);
// OffRamp initial values
- assertEq("EVM2EVMMultiOffRamp 1.6.0-dev", s_offRamp.typeAndVersion());
+ assertEq("OffRamp 1.6.0-dev", s_offRamp.typeAndVersion());
assertEq(OWNER, s_offRamp.owner());
assertEq(0, s_offRamp.getLatestPriceSequenceNumber());
}
@@ -148,25 +142,24 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
uint64[] memory sourceChainSelectors = new uint64[](1);
sourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1;
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: new bytes(0),
isEnabled: true
});
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
}
@@ -175,25 +168,24 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
uint64[] memory sourceChainSelectors = new uint64[](1);
sourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1;
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: 0,
onRamp: ON_RAMP_ADDRESS_1,
isEnabled: true
});
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroChainSelectorNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroChainSelectorNotAllowed.selector);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
}
@@ -202,19 +194,18 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
uint64[] memory sourceChainSelectors = new uint64[](1);
sourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1;
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0);
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](0);
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: ZERO_ADDRESS,
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
}
@@ -223,19 +214,18 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
uint64[] memory sourceChainSelectors = new uint64[](1);
sourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1;
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0);
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](0);
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroChainSelectorNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroChainSelectorNotAllowed.selector);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: 0,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
}
@@ -244,19 +234,18 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
uint64[] memory sourceChainSelectors = new uint64[](1);
sourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1;
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0);
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](0);
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: ZERO_ADDRESS,
nonceManager: address(s_inboundNonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
}
@@ -265,49 +254,46 @@ contract EVM2EVMMultiOffRamp_constructor is EVM2EVMMultiOffRampSetup {
uint64[] memory sourceChainSelectors = new uint64[](1);
sourceChainSelectors[0] = SOURCE_CHAIN_SELECTOR_1;
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0);
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](0);
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: ZERO_ADDRESS
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
}
}
-contract EVM2EVMMultiOffRamp_setDynamicConfig is EVM2EVMMultiOffRampSetup {
+contract OffRamp_setDynamicConfig is OffRampSetup {
function test_SetDynamicConfig_Success() public {
- EVM2EVMMultiOffRamp.DynamicConfig memory dynamicConfig =
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry));
+ OffRamp.DynamicConfig memory dynamicConfig = _generateDynamicOffRampConfig(address(s_priceRegistry));
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.DynamicConfigSet(dynamicConfig);
+ emit OffRamp.DynamicConfigSet(dynamicConfig);
s_offRamp.setDynamicConfig(dynamicConfig);
- EVM2EVMMultiOffRamp.DynamicConfig memory newConfig = s_offRamp.getDynamicConfig();
+ OffRamp.DynamicConfig memory newConfig = s_offRamp.getDynamicConfig();
_assertSameConfig(dynamicConfig, newConfig);
}
function test_SetDynamicConfigWithValidator_Success() public {
- EVM2EVMMultiOffRamp.DynamicConfig memory dynamicConfig =
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry));
+ OffRamp.DynamicConfig memory dynamicConfig = _generateDynamicOffRampConfig(address(s_priceRegistry));
dynamicConfig.messageValidator = address(s_inboundMessageValidator);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.DynamicConfigSet(dynamicConfig);
+ emit OffRamp.DynamicConfigSet(dynamicConfig);
s_offRamp.setDynamicConfig(dynamicConfig);
- EVM2EVMMultiOffRamp.DynamicConfig memory newConfig = s_offRamp.getDynamicConfig();
+ OffRamp.DynamicConfig memory newConfig = s_offRamp.getDynamicConfig();
_assertSameConfig(dynamicConfig, newConfig);
}
@@ -315,8 +301,7 @@ contract EVM2EVMMultiOffRamp_setDynamicConfig is EVM2EVMMultiOffRampSetup {
function test_NonOwner_Revert() public {
vm.startPrank(STRANGER);
- EVM2EVMMultiOffRamp.DynamicConfig memory dynamicConfig =
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry));
+ OffRamp.DynamicConfig memory dynamicConfig = _generateDynamicOffRampConfig(address(s_priceRegistry));
vm.expectRevert("Only callable by owner");
@@ -324,15 +309,15 @@ contract EVM2EVMMultiOffRamp_setDynamicConfig is EVM2EVMMultiOffRampSetup {
}
function test_PriceRegistryZeroAddress_Revert() public {
- EVM2EVMMultiOffRamp.DynamicConfig memory dynamicConfig = _generateDynamicMultiOffRampConfig(ZERO_ADDRESS);
+ OffRamp.DynamicConfig memory dynamicConfig = _generateDynamicOffRampConfig(ZERO_ADDRESS);
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
s_offRamp.setDynamicConfig(dynamicConfig);
}
}
-contract EVM2EVMMultiOffRamp_ccipReceive is EVM2EVMMultiOffRampSetup {
+contract OffRamp_ccipReceive is OffRampSetup {
// Reverts
function test_Reverts() public {
@@ -343,7 +328,7 @@ contract EVM2EVMMultiOffRamp_ccipReceive is EVM2EVMMultiOffRampSetup {
}
}
-contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
+contract OffRamp_executeSingleReport is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -354,8 +339,10 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
function test_SingleMessageNoTokens_Success() public {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
@@ -363,23 +350,20 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
""
);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
-
messages[0].header.nonce++;
messages[0].header.sequenceNumber++;
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
assertGt(s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender), nonceBefore);
}
@@ -389,8 +373,11 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].header.nonce = 0;
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ // Nonce never increments on unordered messages.
+ uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
@@ -398,9 +385,6 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
""
);
- // Nonce never increments on unordered messages.
- uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
assertEq(
s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender),
nonceBefore,
@@ -410,18 +394,17 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].header.sequenceNumber++;
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ // Nonce never increments on unordered messages.
+ nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- // Nonce never increments on unordered messages.
- nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
assertEq(
s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender),
nonceBefore,
@@ -464,20 +447,20 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].receiver = address(s_reverting_receiver);
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ // Nonce should increment on non-strict
+ assertEq(uint64(0), s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, abi.encode(OWNER)));
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.FAILURE,
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ReceiverError.selector,
+ OffRamp.ReceiverError.selector,
abi.encodeWithSelector(MaybeRevertMessageReceiver.CustomError.selector, realError1)
)
);
- // Nonce should increment on non-strict
- assertEq(uint64(0), s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, abi.encode(OWNER)));
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
assertEq(uint64(1), s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, abi.encode(OWNER)));
}
@@ -504,37 +487,35 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[1].header.messageId = Internal._hash(messages[1], ON_RAMP_ADDRESS_1);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
- SOURCE_CHAIN_SELECTOR_1,
+ emit NonceManager.SkippedIncorrectNonce(SOURCE_CHAIN_SELECTOR_1, messages[1].header.nonce, messages[1].sender);
+
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
+ messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- vm.expectEmit();
- emit NonceManager.SkippedIncorrectNonce(SOURCE_CHAIN_SELECTOR_1, messages[1].header.nonce, messages[1].sender);
-
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
function test__execute_SkippedAlreadyExecutedMessage_Success() public {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
- messages[0].header.sourceChainSelector,
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
+ SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
-
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SkippedAlreadyExecutedMessage(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
+ emit OffRamp.SkippedAlreadyExecutedMessage(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
@@ -545,19 +526,18 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].header.nonce = 0;
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
- messages[0].header.sourceChainSelector,
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
+ SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
-
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SkippedAlreadyExecutedMessage(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
+ emit OffRamp.SkippedAlreadyExecutedMessage(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
@@ -571,16 +551,15 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].receiver = address(newReceiver);
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
function test_SingleMessagesNoTokensSuccess_gas() public {
@@ -588,19 +567,18 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ Internal.ExecutionReportSingleChain memory report = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
+
+ vm.resumeGasMetering();
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(report, new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- Internal.ExecutionReportSingleChain memory report = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
-
- vm.resumeGasMetering();
- s_offRamp.executeSingleReport(report, new uint256[](0));
}
function test_TwoMessagesWithTokensSuccess_gas() public {
@@ -611,8 +589,12 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[1].receiver = address(s_secondary_receiver);
messages[1].header.messageId = Internal._hash(messages[1], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ Internal.ExecutionReportSingleChain memory report = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
+
+ vm.resumeGasMetering();
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(report, new uint256[](0));
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
@@ -620,19 +602,13 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[1].header.sequenceNumber,
messages[1].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- Internal.ExecutionReportSingleChain memory report = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
-
- vm.resumeGasMetering();
- s_offRamp.executeSingleReport(report, new uint256[](0));
}
function test_TwoMessagesWithTokensAndGE_Success() public {
@@ -642,28 +618,26 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[1].receiver = address(s_secondary_receiver);
messages[1].header.messageId = Internal._hash(messages[1], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertEq(uint64(0), s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, abi.encode(OWNER)));
+
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(
+ _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), _getGasLimitsFromMessages(messages)
+ );
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[1].header.sequenceNumber,
messages[1].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- assertEq(uint64(0), s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, abi.encode(OWNER)));
- s_offRamp.executeSingleReport(
- _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), _getGasLimitsFromMessages(messages)
- );
assertEq(uint64(2), s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, abi.encode(OWNER)));
}
@@ -676,6 +650,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
tokenAmounts[i].amount = 1e18;
}
uint64 expectedNonce = 0;
+
for (uint256 i = 0; i < orderings.length; ++i) {
messages[i] =
_generateAny2EVMMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, uint64(i + 1), tokenAmounts, !orderings[i]);
@@ -684,13 +659,14 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
}
messages[i].header.messageId = Internal._hash(messages[i], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, false);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages[i].header.sequenceNumber,
messages[i].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ 0
);
}
@@ -721,19 +697,19 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
messages[1].header.messageId = Internal._hash(messages[1], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.FAILURE,
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.TokenHandlingError.selector,
+ OffRamp.TokenHandlingError.selector,
abi.encodeWithSelector(TokenPool.InvalidSourcePoolAddress.selector, abi.encode(fakePoolAddress))
)
);
-
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
function test_WithCurseOnAnotherSourceChain_Success() public {
@@ -757,9 +733,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
vm.expectRevert(
- abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.InvalidMessageDestChainSelector.selector, messages[0].header.destChainSelector
- )
+ abi.encodeWithSelector(OffRamp.InvalidMessageDestChainSelector.selector, messages[0].header.destChainSelector)
);
s_offRamp.executeSingleReport(executionReport, new uint256[](0));
}
@@ -770,7 +744,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = _constructCommitReport(
+ OffRamp.CommitReport memory commitReport = _constructCommitReport(
// Root against mismatching on ramp
Internal._hash(messages[0], ON_RAMP_ADDRESS_3)
);
@@ -778,13 +752,13 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
Internal.ExecutionReportSingleChain memory executionReport =
_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.RootNotCommitted.selector, SOURCE_CHAIN_SELECTOR_1));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.RootNotCommitted.selector, SOURCE_CHAIN_SELECTOR_1));
s_offRamp.executeSingleReport(executionReport, new uint256[](0));
}
function test_Unhealthy_Revert() public {
s_mockRMN.setGlobalCursed(true);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1));
s_offRamp.executeSingleReport(
_generateReportFromMessages(
SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1)
@@ -803,7 +777,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
function test_UnhealthySingleChainCurse_Revert() public {
s_mockRMN.setChainCursed(SOURCE_CHAIN_SELECTOR_1, true);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1));
s_offRamp.executeSingleReport(
_generateReportFromMessages(
SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1)
@@ -826,13 +800,13 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
);
report.offchainTokenData = new bytes[][](report.messages.length + 1);
- vm.expectRevert(EVM2EVMMultiOffRamp.UnexpectedTokenData.selector);
+ vm.expectRevert(OffRamp.UnexpectedTokenData.selector);
s_offRamp.executeSingleReport(report, new uint256[](0));
}
function test_EmptyReport_Revert() public {
- vm.expectRevert(EVM2EVMMultiOffRamp.EmptyReport.selector);
+ vm.expectRevert(OffRamp.EmptyReport.selector);
s_offRamp.executeSingleReport(
Internal.ExecutionReportSingleChain({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
@@ -847,7 +821,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
function test_RootNotCommitted_Revert() public {
s_offRamp.setVerifyOverrideResult(SOURCE_CHAIN_SELECTOR_1, 0);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.RootNotCommitted.selector, SOURCE_CHAIN_SELECTOR_1));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.RootNotCommitted.selector, SOURCE_CHAIN_SELECTOR_1));
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
@@ -859,9 +833,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
function test_ManualExecutionNotYetEnabled_Revert() public {
s_offRamp.setVerifyOverrideResult(SOURCE_CHAIN_SELECTOR_1, BLOCK_TIME);
- vm.expectRevert(
- abi.encodeWithSelector(EVM2EVMMultiOffRamp.ManualExecutionNotYetEnabled.selector, SOURCE_CHAIN_SELECTOR_1)
- );
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.ManualExecutionNotYetEnabled.selector, SOURCE_CHAIN_SELECTOR_1));
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
@@ -876,7 +848,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
Internal.Any2EVMRampMessage[] memory messages = _generateSingleBasicMessage(newSourceChainSelector, newOnRamp);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.SourceChainNotEnabled.selector, newSourceChainSelector));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.SourceChainNotEnabled.selector, newSourceChainSelector));
s_offRamp.executeSingleReport(_generateReportFromMessages(newSourceChainSelector, messages), new uint256[](0));
}
@@ -884,7 +856,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_2, ON_RAMP_ADDRESS_2);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.SourceChainNotEnabled.selector, SOURCE_CHAIN_SELECTOR_2));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.SourceChainNotEnabled.selector, SOURCE_CHAIN_SELECTOR_2));
s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_2, messages), new uint256[](0));
}
@@ -897,7 +869,7 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
vm.expectRevert(
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.TokenDataMismatch.selector, SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber
+ OffRamp.TokenDataMismatch.selector, SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber
)
);
s_offRamp.executeSingleReport(report, new uint256[](0));
@@ -915,15 +887,15 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
Internal.ExecutionReportSingleChain memory executionReport =
_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(executionReport, new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.FAILURE,
abi.encodeWithSelector(CallWithExactGas.NotEnoughGasForCall.selector)
);
- s_offRamp.executeSingleReport(executionReport, new uint256[](0));
}
function test_RetryFailedMessageWithoutManualExecution_Revert() public {
@@ -938,42 +910,40 @@ contract EVM2EVMMultiOffRamp_executeSingleReport is EVM2EVMMultiOffRampSetup {
messages[0].receiver = address(s_reverting_receiver);
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.FAILURE,
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ReceiverError.selector,
+ OffRamp.ReceiverError.selector,
abi.encodeWithSelector(MaybeRevertMessageReceiver.CustomError.selector, realError1)
)
);
- s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
// The second time should skip the msg
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.AlreadyAttempted(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
+ emit OffRamp.AlreadyAttempted(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
s_offRamp.executeSingleReport(_generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[](0));
}
- function _constructCommitReport(bytes32 merkleRoot) internal view returns (EVM2EVMMultiOffRamp.CommitReport memory) {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ function _constructCommitReport(bytes32 merkleRoot) internal view returns (OffRamp.CommitReport memory) {
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: merkleRoot
});
- return EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ return
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
}
}
-contract EVM2EVMMultiOffRamp_executeSingleMessage is EVM2EVMMultiOffRampSetup {
+contract OffRamp_executeSingleMessage is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -1055,7 +1025,7 @@ contract EVM2EVMMultiOffRamp_executeSingleMessage is EVM2EVMMultiOffRampSetup {
_generateAny2EVMMessageWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1, amounts);
s_maybeRevertingPool.setShouldRevert(errorMessage);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, errorMessage));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, errorMessage));
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length));
}
@@ -1065,7 +1035,7 @@ contract EVM2EVMMultiOffRamp_executeSingleMessage is EVM2EVMMultiOffRampSetup {
_generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1);
message.gasLimit = 0;
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.ReceiverError.selector, ""));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.ReceiverError.selector, ""));
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length));
}
@@ -1074,7 +1044,7 @@ contract EVM2EVMMultiOffRamp_executeSingleMessage is EVM2EVMMultiOffRampSetup {
vm.stopPrank();
Internal.Any2EVMRampMessage memory message =
_generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1);
- vm.expectRevert(EVM2EVMMultiOffRamp.CanOnlySelfCall.selector);
+ vm.expectRevert(OffRamp.CanOnlySelfCall.selector);
s_offRamp.executeSingleMessage(message, new bytes[](message.tokenAmounts.length));
}
@@ -1120,7 +1090,7 @@ contract EVM2EVMMultiOffRamp_executeSingleMessage is EVM2EVMMultiOffRampSetup {
}
}
-contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
+contract OffRamp_batchExecute is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -1131,8 +1101,12 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
function test_SingleReport_Success() public {
Internal.Any2EVMRampMessage[] memory messages =
_generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+
+ uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
+
+ vm.recordLogs();
+ s_offRamp.batchExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[][](1));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
@@ -1140,9 +1114,6 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender);
- s_offRamp.batchExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[][](1));
-
assertGt(s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender), nonceBefore);
}
@@ -1158,8 +1129,10 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages1);
reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages2);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages1[0].sender);
+ vm.recordLogs();
+ s_offRamp.batchExecute(reports, new uint256[][](2));
+ assertExecutionStateChangedEventLogs(
messages1[0].header.sourceChainSelector,
messages1[0].header.sequenceNumber,
messages1[0].header.messageId,
@@ -1167,8 +1140,7 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages1[1].header.sourceChainSelector,
messages1[1].header.sequenceNumber,
messages1[1].header.messageId,
@@ -1176,8 +1148,7 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages2[0].header.sourceChainSelector,
messages2[0].header.sequenceNumber,
messages2[0].header.messageId,
@@ -1185,8 +1156,6 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages1[0].sender);
- s_offRamp.batchExecute(reports, new uint256[][](2));
assertGt(s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages1[0].sender), nonceBefore);
}
@@ -1202,8 +1171,11 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages1);
reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_3, messages2);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+
+ s_offRamp.batchExecute(reports, new uint256[][](2));
+
+ assertExecutionStateChangedEventLogs(
messages1[0].header.sourceChainSelector,
messages1[0].header.sequenceNumber,
messages1[0].header.messageId,
@@ -1211,8 +1183,7 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages1[1].header.sourceChainSelector,
messages1[1].header.sequenceNumber,
messages1[1].header.messageId,
@@ -1220,8 +1191,7 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages2[0].header.sourceChainSelector,
messages2[0].header.sequenceNumber,
messages2[0].header.messageId,
@@ -1229,8 +1199,6 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
""
);
- s_offRamp.batchExecute(reports, new uint256[][](2));
-
uint64 nonceChain1 = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages1[0].sender);
uint64 nonceChain3 = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_3, messages2[0].sender);
@@ -1248,29 +1216,28 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ emit OffRamp.SkippedAlreadyExecutedMessage(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
+
+ vm.recordLogs();
+ s_offRamp.batchExecute(reports, new uint256[][](2));
+ assertExecutionStateChangedEventLogs(
messages[0].header.sourceChainSelector,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SkippedAlreadyExecutedMessage(SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber);
-
- s_offRamp.batchExecute(reports, new uint256[][](2));
}
// Reverts
function test_ZeroReports_Revert() public {
- vm.expectRevert(EVM2EVMMultiOffRamp.EmptyReport.selector);
+ vm.expectRevert(OffRamp.EmptyReport.selector);
s_offRamp.batchExecute(new Internal.ExecutionReportSingleChain[](0), new uint256[][](1));
}
function test_Unhealthy_Revert() public {
s_mockRMN.setGlobalCursed(true);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1));
s_offRamp.batchExecute(
_generateBatchReportFromMessages(
SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1)
@@ -1304,7 +1271,7 @@ contract EVM2EVMMultiOffRamp_batchExecute is EVM2EVMMultiOffRampSetup {
}
}
-contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
+contract OffRamp_manuallyExecute is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -1323,12 +1290,13 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
s_reverting_receiver.setRevert(false);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ 30937
);
uint256[][] memory gasLimitOverrides = new uint256[][](1);
@@ -1345,13 +1313,14 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
s_reverting_receiver.setRevert(false);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, true);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ 31011
);
uint256[][] memory gasLimitOverrides = new uint256[][](1);
@@ -1373,23 +1342,21 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
s_reverting_receiver.setRevert(true);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ uint256[][] memory gasLimitOverrides = new uint256[][](1);
+ gasLimitOverrides[0] = _getGasLimitsFromMessages(messages);
+
+ vm.recordLogs();
+ s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.FAILURE,
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ReceiverError.selector,
- abi.encodeWithSelector(MaybeRevertMessageReceiver.CustomError.selector, "")
+ OffRamp.ReceiverError.selector, abi.encodeWithSelector(MaybeRevertMessageReceiver.CustomError.selector, "")
)
);
- uint256[][] memory gasLimitOverrides = new uint256[][](1);
- gasLimitOverrides[0] = _getGasLimitsFromMessages(messages);
-
- s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
-
assertEq(
messages[0].header.nonce, s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages[0].sender)
);
@@ -1423,27 +1390,38 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
gasLimitOverrides[0] = _getGasLimitsFromMessages(messages1);
gasLimitOverrides[1] = _getGasLimitsFromMessages(messages2);
+ uint256[] memory expectedGasUsed = new uint256[](3);
+ expectedGasUsed[0] = 31022;
+ expectedGasUsed[1] = 22453;
+ expectedGasUsed[2] = 22453;
+
for (uint256 i = 0; i < 3; ++i) {
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, true);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages1[i].header.sequenceNumber,
messages1[i].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ expectedGasUsed[i]
);
gasLimitOverrides[0][i] += 1;
}
+ expectedGasUsed = new uint256[](2);
+ expectedGasUsed[0] = 24527;
+ expectedGasUsed[1] = 22454;
+
for (uint256 i = 0; i < 2; ++i) {
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, false);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_3,
messages2[i].header.sequenceNumber,
messages2[i].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ expectedGasUsed[i]
);
gasLimitOverrides[1][i] += 1;
@@ -1461,34 +1439,37 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
messages[1].receiver = address(s_reverting_receiver);
messages[1].header.messageId = Internal._hash(messages[1], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, false);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ 86456
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, false);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages[1].header.sequenceNumber,
messages[1].header.messageId,
Internal.MessageExecutionState.FAILURE,
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ReceiverError.selector,
+ OffRamp.ReceiverError.selector,
abi.encodeWithSelector(MaybeRevertMessageReceiver.CustomError.selector, bytes(""))
- )
+ ),
+ 32095
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, false);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
messages[2].header.sequenceNumber,
messages[2].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ 24894
);
s_offRamp.batchExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[][](1));
@@ -1503,15 +1484,17 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
gasLimitOverrides[0] = _getGasLimitsFromMessages(newMessages);
gasLimitOverrides[0][0] += 1;
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.expectEmit(true, true, true, false);
+ emit OffRamp.ExecutionStateChanged(
SOURCE_CHAIN_SELECTOR_1,
newMessages[0].header.sequenceNumber,
newMessages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
- ""
+ "",
+ 24511
);
+ vm.recordLogs();
s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, newMessages), gasLimitOverrides);
}
@@ -1522,15 +1505,15 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
messages[0].receiver = address(new ConformingReceiver(address(s_destRouter), s_destFeeToken));
messages[0].header.messageId = Internal._hash(messages[0], ON_RAMP_ADDRESS_1);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.batchExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[][](1));
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.FAILURE,
- abi.encodeWithSelector(EVM2EVMMultiOffRamp.ReceiverError.selector, "")
+ abi.encodeWithSelector(OffRamp.ReceiverError.selector, "")
);
- s_offRamp.batchExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[][](1));
uint256[][] memory gasLimitOverrides = new uint256[][](1);
gasLimitOverrides[0] = new uint256[](1);
@@ -1539,15 +1522,15 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
vm.expectEmit();
emit ConformingReceiver.MessageReceived();
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ vm.recordLogs();
+ s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
- s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
}
// Reverts
@@ -1578,25 +1561,25 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
// No overrides for report
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, new uint256[][](0));
// No messages
uint256[][] memory gasLimitOverrides = new uint256[][](1);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
// 1 message missing
gasLimitOverrides[0] = new uint256[](1);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
// 1 message in excess
gasLimitOverrides[0] = new uint256[](3);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
}
@@ -1612,34 +1595,34 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages1);
reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_3, messages2);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, new uint256[][](0));
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, new uint256[][](1));
uint256[][] memory gasLimitOverrides = new uint256[][](2);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
// 2nd report empty
gasLimitOverrides[0] = new uint256[](2);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
// 1st report empty
gasLimitOverrides[0] = new uint256[](0);
gasLimitOverrides[1] = new uint256[](1);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
// 1st report oversized
gasLimitOverrides[0] = new uint256[](3);
- vm.expectRevert(EVM2EVMMultiOffRamp.ManualExecutionGasLimitMismatch.selector);
+ vm.expectRevert(OffRamp.ManualExecutionGasLimitMismatch.selector);
s_offRamp.manuallyExecute(reports, gasLimitOverrides);
}
@@ -1653,7 +1636,7 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
vm.expectRevert(
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.InvalidManualExecutionGasLimit.selector, SOURCE_CHAIN_SELECTOR_1, 0, gasLimitOverrides[0][0]
+ OffRamp.InvalidManualExecutionGasLimit.selector, SOURCE_CHAIN_SELECTOR_1, 0, gasLimitOverrides[0][0]
)
);
s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
@@ -1675,10 +1658,10 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
vm.expectRevert(
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ExecutionError.selector,
+ OffRamp.ExecutionError.selector,
messages[0].header.messageId,
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ReceiverError.selector,
+ OffRamp.ReceiverError.selector,
abi.encodeWithSelector(MaybeRevertMessageReceiver.CustomError.selector, bytes(""))
)
)
@@ -1723,27 +1706,26 @@ contract EVM2EVMMultiOffRamp_manuallyExecute is EVM2EVMMultiOffRampSetup {
// The first entry should be fine and triggers the second entry which is skipped. Due to the reentrancy
// the second completes first, so we expect the skip event before the success event.
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SkippedAlreadyExecutedMessage(
+ emit OffRamp.SkippedAlreadyExecutedMessage(
messages[0].header.sourceChainSelector, messages[0].header.sequenceNumber
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
- messages[0].header.sourceChainSelector,
+ vm.recordLogs();
+ s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
+ assertExecutionStateChangedEventLogs(
+ SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
- s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides);
-
// Since the tx failed we don't release the tokens
assertEq(tokenToAbuse.balanceOf(address(receiver)), balancePre + tokenAmount);
}
}
-contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
+contract OffRamp_execute is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -1758,20 +1740,21 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ emit MultiOCR3Base.Transmitted(
+ uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
+ );
+
+ vm.recordLogs();
+
+ _execute(reports);
+
+ assertExecutionStateChangedEventLogs(
SOURCE_CHAIN_SELECTOR_1,
messages[0].header.sequenceNumber,
messages[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- vm.expectEmit();
- emit MultiOCR3Base.Transmitted(
- uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
- );
-
- _execute(reports);
}
function test_MultipleReports_Success() public {
@@ -1787,7 +1770,13 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages2);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ emit MultiOCR3Base.Transmitted(
+ uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
+ );
+
+ vm.recordLogs();
+ _execute(reports);
+ assertExecutionStateChangedEventLogs(
messages1[0].header.sourceChainSelector,
messages1[0].header.sequenceNumber,
messages1[0].header.messageId,
@@ -1795,8 +1784,7 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages1[1].header.sourceChainSelector,
messages1[1].header.sequenceNumber,
messages1[1].header.messageId,
@@ -1804,21 +1792,13 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages2[0].header.sourceChainSelector,
messages2[0].header.sequenceNumber,
messages2[0].header.messageId,
Internal.MessageExecutionState.SUCCESS,
""
);
-
- vm.expectEmit();
- emit MultiOCR3Base.Transmitted(
- uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
- );
-
- _execute(reports);
}
function test_LargeBatch_Success() public {
@@ -1832,10 +1812,17 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
reports[i] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages);
}
+ vm.expectEmit();
+ emit MultiOCR3Base.Transmitted(
+ uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
+ );
+
+ vm.recordLogs();
+ _execute(reports);
+
for (uint64 i = 0; i < reports.length; ++i) {
for (uint64 j = 0; j < reports[i].messages.length; ++j) {
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
reports[i].messages[j].header.sourceChainSelector,
reports[i].messages[j].header.sequenceNumber,
reports[i].messages[j].header.messageId,
@@ -1844,13 +1831,6 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
);
}
}
-
- vm.expectEmit();
- emit MultiOCR3Base.Transmitted(
- uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
- );
-
- _execute(reports);
}
function test_MultipleReportsWithPartialValidationFailures_Success() public {
@@ -1871,7 +1851,13 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
s_inboundMessageValidator.setMessageIdValidationState(messages2[0].header.messageId, true);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ emit MultiOCR3Base.Transmitted(
+ uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
+ );
+
+ vm.recordLogs();
+ _execute(reports);
+ assertExecutionStateChangedEventLogs(
messages1[0].header.sourceChainSelector,
messages1[0].header.sequenceNumber,
messages1[0].header.messageId,
@@ -1882,8 +1868,7 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
)
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages1[1].header.sourceChainSelector,
messages1[1].header.sequenceNumber,
messages1[1].header.messageId,
@@ -1891,8 +1876,7 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
""
);
- vm.expectEmit();
- emit EVM2EVMMultiOffRamp.ExecutionStateChanged(
+ assertExecutionStateChangedEventLogs(
messages2[0].header.sourceChainSelector,
messages2[0].header.sequenceNumber,
messages2[0].header.messageId,
@@ -1902,13 +1886,6 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
abi.encodeWithSelector(IMessageInterceptor.MessageValidationError.selector, bytes("Invalid message"))
)
);
-
- vm.expectEmit();
- emit MultiOCR3Base.Transmitted(
- uint8(Internal.OCRPluginType.Execution), s_configDigestExec, uint64(uint256(s_configDigestExec))
- );
-
- _execute(reports);
}
// Reverts
@@ -1997,7 +1974,7 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
function test_ZeroReports_Revert() public {
Internal.ExecutionReportSingleChain[] memory reports = new Internal.ExecutionReportSingleChain[](0);
- vm.expectRevert(EVM2EVMMultiOffRamp.EmptyReport.selector);
+ vm.expectRevert(OffRamp.EmptyReport.selector);
_execute(reports);
}
@@ -2025,7 +2002,7 @@ contract EVM2EVMMultiOffRamp_execute is EVM2EVMMultiOffRampSetup {
}
}
-contract EVM2EVMMultiOffRamp_getExecutionState is EVM2EVMMultiOffRampSetup {
+contract OffRamp_getExecutionState is OffRampSetup {
mapping(uint64 sourceChainSelector => mapping(uint64 seqNum => Internal.MessageExecutionState state)) internal
s_differentialExecutionState;
@@ -2177,7 +2154,7 @@ contract EVM2EVMMultiOffRamp_getExecutionState is EVM2EVMMultiOffRampSetup {
}
}
-contract EVM2EVMMultiOffRamp_trialExecute is EVM2EVMMultiOffRampSetup {
+contract OffRamp_trialExecute is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -2219,7 +2196,7 @@ contract EVM2EVMMultiOffRamp_trialExecute is EVM2EVMMultiOffRampSetup {
(Internal.MessageExecutionState newState, bytes memory err) =
s_offRamp.trialExecute(message, new bytes[](message.tokenAmounts.length));
assertEq(uint256(Internal.MessageExecutionState.FAILURE), uint256(newState));
- assertEq(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, errorMessage), err);
+ assertEq(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, errorMessage), err);
// Expect the balance to remain the same
assertEq(startingBalance, dstToken0.balanceOf(OWNER));
@@ -2239,7 +2216,7 @@ contract EVM2EVMMultiOffRamp_trialExecute is EVM2EVMMultiOffRampSetup {
(Internal.MessageExecutionState newState, bytes memory err) =
s_offRamp.trialExecute(message, new bytes[](message.tokenAmounts.length));
assertEq(uint256(Internal.MessageExecutionState.FAILURE), uint256(newState));
- assertEq(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, errorMessage), err);
+ assertEq(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, errorMessage), err);
}
// TODO test actual pool exists but isn't compatible instead of just no pool
@@ -2288,11 +2265,11 @@ contract EVM2EVMMultiOffRamp_trialExecute is EVM2EVMMultiOffRampSetup {
(newState, err) = s_offRamp.trialExecute(message, new bytes[](message.tokenAmounts.length));
assertEq(uint256(Internal.MessageExecutionState.FAILURE), uint256(newState));
- assertEq(abi.encodeWithSelector(EVM2EVMMultiOffRamp.NotACompatiblePool.selector, address(0)), err);
+ assertEq(abi.encodeWithSelector(OffRamp.NotACompatiblePool.selector, address(0)), err);
}
}
-contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSetup {
+contract OffRamp__releaseOrMintSingleToken is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
@@ -2352,9 +2329,7 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet
s_destTokenBySourceToken[token], abi.encodeWithSelector(IERC20.balanceOf.selector, OWNER), abi.encode(0, 0)
);
- vm.expectRevert(
- abi.encodeWithSelector(EVM2EVMMultiOffRamp.InvalidDataLength.selector, Internal.MAX_BALANCE_OF_RET_BYTES, 64)
- );
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.InvalidDataLength.selector, Internal.MAX_BALANCE_OF_RET_BYTES, 64));
s_offRamp.releaseOrMintSingleToken(tokenAmount, abi.encode(OWNER), OWNER, SOURCE_CHAIN_SELECTOR, "");
}
@@ -2377,7 +2352,7 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet
s_destTokenBySourceToken[token], abi.encodeWithSelector(IERC20.balanceOf.selector, OWNER), revertData
);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, revertData));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, revertData));
s_offRamp.releaseOrMintSingleToken(tokenAmount, abi.encode(OWNER), OWNER, SOURCE_CHAIN_SELECTOR, "");
}
@@ -2402,7 +2377,7 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet
vm.expectRevert(
abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.ReleaseOrMintBalanceMismatch.selector, amount, mockedStaticBalance, mockedStaticBalance
+ OffRamp.ReleaseOrMintBalanceMismatch.selector, amount, mockedStaticBalance, mockedStaticBalance
)
);
@@ -2457,7 +2432,7 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet
abi.encode(returnedPool)
);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.NotACompatiblePool.selector, returnedPool));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.NotACompatiblePool.selector, returnedPool));
s_offRamp.releaseOrMintSingleToken(tokenAmount, originalSender, OWNER, SOURCE_CHAIN_SELECTOR_1, offchainTokenData);
@@ -2470,7 +2445,7 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet
abi.encode(returnedPool)
);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.NotACompatiblePool.selector, returnedPool));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.NotACompatiblePool.selector, returnedPool));
s_offRamp.releaseOrMintSingleToken(tokenAmount, originalSender, OWNER, SOURCE_CHAIN_SELECTOR_1, offchainTokenData);
}
@@ -2494,21 +2469,21 @@ contract EVM2EVMMultiOffRamp__releaseOrMintSingleToken is EVM2EVMMultiOffRampSet
vm.mockCallRevert(destToken, abi.encodeWithSelector(IERC20.transfer.selector, receiver, amount), revertData);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, revertData));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, revertData));
s_offRamp.releaseOrMintSingleToken(
tokenAmount, originalSender, receiver, SOURCE_CHAIN_SELECTOR_1, offchainTokenData
);
}
}
-contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
+contract OffRamp_releaseOrMintTokens is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupMultipleOffRamps();
}
function test_releaseOrMintTokens_Success() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
IERC20 dstToken1 = IERC20(s_destFeeToken);
uint256 startingBalance = dstToken1.balanceOf(OWNER);
uint256 amount1 = 100;
@@ -2544,7 +2519,7 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
}
function test_releaseOrMintTokens_destDenominatedDecimals_Success() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
uint256 amount = 100;
uint256 destinationDenominationMultiplier = 1000;
srcTokenAmounts[1].amount = amount;
@@ -2568,12 +2543,12 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
// Revert
function test_TokenHandlingError_Reverts() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
bytes memory unknownError = bytes("unknown error");
s_maybeRevertingPool.setShouldRevert(unknownError);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.TokenHandlingError.selector, unknownError));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.TokenHandlingError.selector, unknownError));
s_offRamp.releaseOrMintTokens(
_getDefaultSourceTokenData(srcTokenAmounts),
@@ -2586,7 +2561,7 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
function test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() public {
uint256 amount = 100;
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
srcTokenAmounts[0].amount = amount;
bytes[] memory offchainTokenData = new bytes[](srcTokenAmounts.length);
@@ -2611,9 +2586,7 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
abi.encode(amount, amount)
);
- vm.expectRevert(
- abi.encodeWithSelector(EVM2EVMMultiOffRamp.InvalidDataLength.selector, Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES, 64)
- );
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.InvalidDataLength.selector, Pool.CCIP_LOCK_OR_BURN_V1_RET_BYTES, 64));
s_offRamp.releaseOrMintTokens(
sourceTokenAmounts, abi.encode(OWNER), OWNER, SOURCE_CHAIN_SELECTOR_1, offchainTokenData
@@ -2621,7 +2594,7 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
}
function test_releaseOrMintTokens_InvalidEVMAddress_Revert() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
bytes[] memory offchainTokenData = new bytes[](srcTokenAmounts.length);
Internal.RampTokenAmount[] memory sourceTokenAmounts = _getDefaultSourceTokenData(srcTokenAmounts);
@@ -2648,12 +2621,12 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
amount: 1
});
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.NotACompatiblePool.selector, address(0)));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.NotACompatiblePool.selector, address(0)));
s_offRamp.releaseOrMintTokens(sourceTokenAmounts, abi.encode(OWNER), OWNER, SOURCE_CHAIN_SELECTOR_1, new bytes[](1));
}
function test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() public {
- Client.EVMTokenAmount[] memory srcTokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory srcTokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
uint256 amount1 = 100;
srcTokenAmounts[0].amount = amount1;
@@ -2705,11 +2678,10 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
) {} catch (bytes memory reason) {
// Any revert should be a TokenHandlingError, InvalidEVMAddress, InvalidDataLength or NoContract as those are caught by the offramp
assertTrue(
- bytes4(reason) == EVM2EVMMultiOffRamp.TokenHandlingError.selector
- || bytes4(reason) == Internal.InvalidEVMAddress.selector
- || bytes4(reason) == EVM2EVMMultiOffRamp.InvalidDataLength.selector
+ bytes4(reason) == OffRamp.TokenHandlingError.selector || bytes4(reason) == Internal.InvalidEVMAddress.selector
+ || bytes4(reason) == OffRamp.InvalidDataLength.selector
|| bytes4(reason) == CallWithExactGas.NoContract.selector
- || bytes4(reason) == EVM2EVMMultiOffRamp.NotACompatiblePool.selector,
+ || bytes4(reason) == OffRamp.NotACompatiblePool.selector,
"Expected TokenHandlingError or InvalidEVMAddress"
);
@@ -2720,10 +2692,9 @@ contract EVM2EVMMultiOffRamp_releaseOrMintTokens is EVM2EVMMultiOffRampSetup {
}
}
-contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRampSetup {
+contract OffRamp_applySourceChainConfigUpdates is OffRampSetup {
function test_ApplyZeroUpdates_Success() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0);
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](0);
vm.recordLogs();
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
@@ -2736,27 +2707,22 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
}
function test_AddNewChain_Success() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
isEnabled: true
});
- EVM2EVMMultiOffRamp.SourceChainConfig memory expectedSourceChainConfig = EVM2EVMMultiOffRamp.SourceChainConfig({
- router: s_destRouter,
- isEnabled: true,
- minSeqNr: 1,
- onRamp: ON_RAMP_ADDRESS_1
- });
+ OffRamp.SourceChainConfig memory expectedSourceChainConfig =
+ OffRamp.SourceChainConfig({router: s_destRouter, isEnabled: true, minSeqNr: 1, onRamp: ON_RAMP_ADDRESS_1});
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1);
+ emit OffRamp.SourceChainSelectorAdded(SOURCE_CHAIN_SELECTOR_1);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1, expectedSourceChainConfig);
+ emit OffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1, expectedSourceChainConfig);
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
@@ -2764,9 +2730,8 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
}
function test_ReplaceExistingChain_Success() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
@@ -2776,15 +2741,11 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
sourceChainConfigs[0].isEnabled = false;
- EVM2EVMMultiOffRamp.SourceChainConfig memory expectedSourceChainConfig = EVM2EVMMultiOffRamp.SourceChainConfig({
- router: s_destRouter,
- isEnabled: false,
- minSeqNr: 1,
- onRamp: ON_RAMP_ADDRESS_1
- });
+ OffRamp.SourceChainConfig memory expectedSourceChainConfig =
+ OffRamp.SourceChainConfig({router: s_destRouter, isEnabled: false, minSeqNr: 1, onRamp: ON_RAMP_ADDRESS_1});
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1, expectedSourceChainConfig);
+ emit OffRamp.SourceChainConfigSet(SOURCE_CHAIN_SELECTOR_1, expectedSourceChainConfig);
vm.recordLogs();
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
@@ -2801,31 +2762,29 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
}
function test_AddMultipleChains_Success() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](3);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](3);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: abi.encode(ON_RAMP_ADDRESS_1, 0),
isEnabled: true
});
- sourceChainConfigs[1] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[1] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1 + 1,
onRamp: abi.encode(ON_RAMP_ADDRESS_1, 1),
isEnabled: false
});
- sourceChainConfigs[2] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[2] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1 + 2,
onRamp: abi.encode(ON_RAMP_ADDRESS_1, 2),
isEnabled: true
});
- EVM2EVMMultiOffRamp.SourceChainConfig[] memory expectedSourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfig[](3);
+ OffRamp.SourceChainConfig[] memory expectedSourceChainConfigs = new OffRamp.SourceChainConfig[](3);
for (uint256 i = 0; i < 3; ++i) {
- expectedSourceChainConfigs[i] = EVM2EVMMultiOffRamp.SourceChainConfig({
+ expectedSourceChainConfigs[i] = OffRamp.SourceChainConfig({
router: s_destRouter,
isEnabled: sourceChainConfigs[i].isEnabled,
minSeqNr: 1,
@@ -2833,12 +2792,10 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
});
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainSelectorAdded(sourceChainConfigs[i].sourceChainSelector);
+ emit OffRamp.SourceChainSelectorAdded(sourceChainConfigs[i].sourceChainSelector);
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainConfigSet(
- sourceChainConfigs[i].sourceChainSelector, expectedSourceChainConfigs[i]
- );
+ emit OffRamp.SourceChainConfigSet(sourceChainConfigs[i].sourceChainSelector, expectedSourceChainConfigs[i]);
}
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
@@ -2850,17 +2807,16 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
}
}
- function test_Fuzz_applySourceChainConfigUpdate_Success(
- EVM2EVMMultiOffRamp.SourceChainConfigArgs memory sourceChainConfigArgs
- ) public {
+ function test_Fuzz_applySourceChainConfigUpdate_Success(OffRamp.SourceChainConfigArgs memory sourceChainConfigArgs)
+ public
+ {
// Skip invalid inputs
vm.assume(sourceChainConfigArgs.sourceChainSelector != 0);
vm.assume(sourceChainConfigArgs.onRamp.length != 0);
vm.assume(address(sourceChainConfigArgs.router) != address(0));
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](2);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](2);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
@@ -2874,7 +2830,7 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
sourceChainConfigs[1].onRamp = sourceChainConfigs[0].onRamp;
}
- EVM2EVMMultiOffRamp.SourceChainConfig memory expectedSourceChainConfig = EVM2EVMMultiOffRamp.SourceChainConfig({
+ OffRamp.SourceChainConfig memory expectedSourceChainConfig = OffRamp.SourceChainConfig({
router: sourceChainConfigArgs.router,
isEnabled: sourceChainConfigArgs.isEnabled,
minSeqNr: 1,
@@ -2883,11 +2839,11 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
if (isNewChain) {
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainSelectorAdded(sourceChainConfigArgs.sourceChainSelector);
+ emit OffRamp.SourceChainSelectorAdded(sourceChainConfigArgs.sourceChainSelector);
}
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.SourceChainConfigSet(sourceChainConfigArgs.sourceChainSelector, expectedSourceChainConfig);
+ emit OffRamp.SourceChainConfigSet(sourceChainConfigArgs.sourceChainSelector, expectedSourceChainConfig);
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
@@ -2899,51 +2855,47 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
// Reverts
function test_ZeroOnRampAddress_Revert() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: new bytes(0),
isEnabled: true
});
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
}
function test_RouterAddress_Revert() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: IRouter(address(0)),
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
isEnabled: true
});
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroAddressNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroAddressNotAllowed.selector);
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
}
function test_ZeroSourceChainSelector_Revert() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: 0,
onRamp: ON_RAMP_ADDRESS_1,
isEnabled: true
});
- vm.expectRevert(EVM2EVMMultiOffRamp.ZeroChainSelectorNotAllowed.selector);
+ vm.expectRevert(OffRamp.ZeroChainSelectorNotAllowed.selector);
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
}
function test_ReplaceExistingChainOnRamp_Revert() public {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](1);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](1);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
@@ -2954,12 +2906,12 @@ contract EVM2EVMMultiOffRamp_applySourceChainConfigUpdates is EVM2EVMMultiOffRam
sourceChainConfigs[0].onRamp = ON_RAMP_ADDRESS_2;
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.InvalidStaticConfig.selector, SOURCE_CHAIN_SELECTOR_1));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.InvalidStaticConfig.selector, SOURCE_CHAIN_SELECTOR_1));
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
}
}
-contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
+contract OffRamp_commit is OffRampSetup {
uint64 internal s_maxInterval = 12;
function setUp() public virtual override {
@@ -2970,10 +2922,10 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
}
function test_ReportAndPriceUpdate_Success() public {
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = _constructCommitReport();
+ OffRamp.CommitReport memory commitReport = _constructCommitReport();
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.CommitReportAccepted(commitReport);
+ emit OffRamp.CommitReportAccepted(commitReport);
vm.expectEmit();
emit MultiOCR3Base.Transmitted(uint8(Internal.OCRPluginType.Commit), s_configDigestCommit, s_latestSequenceNumber);
@@ -2988,18 +2940,18 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
uint64 max1 = 931;
bytes32 root = "Only a single root";
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, max1),
+ interval: OffRamp.Interval(1, max1),
merkleRoot: root
});
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.CommitReportAccepted(commitReport);
+ emit OffRamp.CommitReportAccepted(commitReport);
vm.expectEmit();
emit MultiOCR3Base.Transmitted(uint8(Internal.OCRPluginType.Commit), s_configDigestCommit, s_latestSequenceNumber);
@@ -3016,17 +2968,17 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
uint224 tokenStartPrice =
IPriceRegistry(s_offRamp.getDynamicConfig().priceRegistry).getTokenPrice(s_sourceFeeToken).value;
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, maxSeq),
+ interval: OffRamp.Interval(1, maxSeq),
merkleRoot: "stale report 1"
});
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.CommitReportAccepted(commitReport);
+ emit OffRamp.CommitReportAccepted(commitReport);
vm.expectEmit();
emit MultiOCR3Base.Transmitted(uint8(Internal.OCRPluginType.Commit), s_configDigestCommit, s_latestSequenceNumber);
@@ -3036,11 +2988,11 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
assertEq(maxSeq + 1, s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR).minSeqNr);
assertEq(0, s_offRamp.getLatestPriceSequenceNumber());
- commitReport.merkleRoots[0].interval = EVM2EVMMultiOffRamp.Interval(maxSeq + 1, maxSeq * 2);
+ commitReport.merkleRoots[0].interval = OffRamp.Interval(maxSeq + 1, maxSeq * 2);
commitReport.merkleRoots[0].merkleRoot = "stale report 2";
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.CommitReportAccepted(commitReport);
+ emit OffRamp.CommitReportAccepted(commitReport);
vm.expectEmit();
emit MultiOCR3Base.Transmitted(uint8(Internal.OCRPluginType.Commit), s_configDigestCommit, s_latestSequenceNumber);
@@ -3055,11 +3007,9 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
}
function test_OnlyTokenPriceUpdates_Success() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](0);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](0);
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
vm.expectEmit();
emit PriceRegistry.UsdPerTokenUpdated(s_sourceFeeToken, 4e18, block.timestamp);
@@ -3073,11 +3023,9 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
}
function test_OnlyGasPriceUpdates_Success() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](0);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](0);
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
vm.expectEmit();
emit PriceRegistry.UsdPerTokenUpdated(s_sourceFeeToken, 4e18, block.timestamp);
@@ -3090,11 +3038,9 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
}
function test_PriceSequenceNumberCleared_Success() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](0);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](0);
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
vm.expectEmit();
emit PriceRegistry.UsdPerTokenUpdated(s_sourceFeeToken, 4e18, block.timestamp);
@@ -3141,9 +3087,9 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
uint64 maxSeq = 12;
uint224 tokenPrice1 = 4e18;
uint224 tokenPrice2 = 5e18;
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](0);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice1),
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](0);
+ OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({
+ priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice1),
merkleRoots: roots
});
@@ -3156,17 +3102,17 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
_commit(commitReport, s_latestSequenceNumber);
assertEq(s_latestSequenceNumber, s_offRamp.getLatestPriceSequenceNumber());
- roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, maxSeq),
+ interval: OffRamp.Interval(1, maxSeq),
merkleRoot: "stale report"
});
- commitReport.priceUpdates = getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice2);
+ commitReport.priceUpdates = _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, tokenPrice2);
commitReport.merkleRoots = roots;
vm.expectEmit();
- emit EVM2EVMMultiOffRamp.CommitReportAccepted(commitReport);
+ emit OffRamp.CommitReportAccepted(commitReport);
vm.expectEmit();
emit MultiOCR3Base.Transmitted(uint8(Internal.OCRPluginType.Commit), s_configDigestCommit, s_latestSequenceNumber);
@@ -3183,7 +3129,7 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
// Reverts
function test_UnauthorizedTransmitter_Revert() public {
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = _constructCommitReport();
+ OffRamp.CommitReport memory commitReport = _constructCommitReport();
bytes32[3] memory reportContext =
[s_configDigestCommit, bytes32(uint256(s_latestSequenceNumber)), s_configDigestCommit];
@@ -3198,7 +3144,7 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
function test_NoConfig_Revert() public {
_redeployOffRampWithNoOCRConfigs();
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = _constructCommitReport();
+ OffRamp.CommitReport memory commitReport = _constructCommitReport();
bytes32[3] memory reportContext = [bytes32(""), s_configDigestCommit, s_configDigestCommit];
(bytes32[] memory rs, bytes32[] memory ss,, bytes32 rawVs) =
@@ -3223,7 +3169,7 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
});
s_offRamp.setOCR3Configs(ocrConfigs);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = _constructCommitReport();
+ OffRamp.CommitReport memory commitReport = _constructCommitReport();
bytes32[3] memory reportContext = [bytes32(""), s_configDigestCommit, s_configDigestCommit];
(bytes32[] memory rs, bytes32[] memory ss,, bytes32 rawVs) =
@@ -3237,7 +3183,7 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
function test_WrongConfigWithoutSigners_Revert() public {
_redeployOffRampWithNoOCRConfigs();
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = _constructCommitReport();
+ OffRamp.CommitReport memory commitReport = _constructCommitReport();
MultiOCR3Base.OCRConfigArgs[] memory ocrConfigs = new MultiOCR3Base.OCRConfigArgs[](1);
ocrConfigs[0] = MultiOCR3Base.OCRConfigArgs({
@@ -3256,147 +3202,126 @@ contract EVM2EVMMultiOffRamp_commit is EVM2EVMMultiOffRampSetup {
function test_Unhealthy_Revert() public {
s_mockRMN.setGlobalCursed(true);
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: "Only a single root"
});
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.CursedByRMN.selector, roots[0].sourceChainSelector));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, roots[0].sourceChainSelector));
_commit(commitReport, s_latestSequenceNumber);
}
function test_InvalidRootRevert() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, 4),
+ interval: OffRamp.Interval(1, 4),
merkleRoot: bytes32(0)
});
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
- vm.expectRevert(EVM2EVMMultiOffRamp.InvalidRoot.selector);
+ vm.expectRevert(OffRamp.InvalidRoot.selector);
_commit(commitReport, s_latestSequenceNumber);
}
function test_InvalidInterval_Revert() public {
- EVM2EVMMultiOffRamp.Interval memory interval = EVM2EVMMultiOffRamp.Interval(2, 2);
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
- sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: interval,
- merkleRoot: bytes32(0)
- });
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
-
- vm.expectRevert(
- abi.encodeWithSelector(EVM2EVMMultiOffRamp.InvalidInterval.selector, roots[0].sourceChainSelector, interval)
- );
+ OffRamp.Interval memory interval = OffRamp.Interval(2, 2);
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] =
+ OffRamp.MerkleRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR_1, interval: interval, merkleRoot: bytes32(0)});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
+
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.InvalidInterval.selector, roots[0].sourceChainSelector, interval));
_commit(commitReport, s_latestSequenceNumber);
}
function test_InvalidIntervalMinLargerThanMax_Revert() public {
s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR);
- EVM2EVMMultiOffRamp.Interval memory interval = EVM2EVMMultiOffRamp.Interval(1, 0);
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
- sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: interval,
- merkleRoot: bytes32(0)
- });
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
-
- vm.expectRevert(
- abi.encodeWithSelector(EVM2EVMMultiOffRamp.InvalidInterval.selector, roots[0].sourceChainSelector, interval)
- );
+ OffRamp.Interval memory interval = OffRamp.Interval(1, 0);
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] =
+ OffRamp.MerkleRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR_1, interval: interval, merkleRoot: bytes32(0)});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
+
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.InvalidInterval.selector, roots[0].sourceChainSelector, interval));
_commit(commitReport, s_latestSequenceNumber);
}
function test_ZeroEpochAndRound_Revert() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](0);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](0);
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
- vm.expectRevert(EVM2EVMMultiOffRamp.StaleCommitReport.selector);
+ vm.expectRevert(OffRamp.StaleCommitReport.selector);
_commit(commitReport, 0);
}
function test_OnlyPriceUpdateStaleReport_Revert() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](0);
- EVM2EVMMultiOffRamp.CommitReport memory commitReport = EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](0);
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
vm.expectEmit();
emit PriceRegistry.UsdPerTokenUpdated(s_sourceFeeToken, 4e18, block.timestamp);
_commit(commitReport, s_latestSequenceNumber);
- vm.expectRevert(EVM2EVMMultiOffRamp.StaleCommitReport.selector);
+ vm.expectRevert(OffRamp.StaleCommitReport.selector);
_commit(commitReport, s_latestSequenceNumber);
}
function test_SourceChainNotEnabled_Revert() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
- sourceChainSelector: 0,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
- merkleRoot: "Only a single root"
- });
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] =
+ OffRamp.MerkleRoot({sourceChainSelector: 0, interval: OffRamp.Interval(1, 2), merkleRoot: "Only a single root"});
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOffRamp.SourceChainNotEnabled.selector, 0));
+ vm.expectRevert(abi.encodeWithSelector(OffRamp.SourceChainNotEnabled.selector, 0));
_commit(commitReport, s_latestSequenceNumber);
}
function test_RootAlreadyCommitted_Revert() public {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: "Only a single root"
});
- EVM2EVMMultiOffRamp.CommitReport memory commitReport =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory commitReport =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
_commit(commitReport, s_latestSequenceNumber);
- commitReport.merkleRoots[0].interval = EVM2EVMMultiOffRamp.Interval(3, 3);
+ commitReport.merkleRoots[0].interval = OffRamp.Interval(3, 3);
vm.expectRevert(
- abi.encodeWithSelector(
- EVM2EVMMultiOffRamp.RootAlreadyCommitted.selector, roots[0].sourceChainSelector, roots[0].merkleRoot
- )
+ abi.encodeWithSelector(OffRamp.RootAlreadyCommitted.selector, roots[0].sourceChainSelector, roots[0].merkleRoot)
);
_commit(commitReport, ++s_latestSequenceNumber);
}
- function _constructCommitReport() internal view returns (EVM2EVMMultiOffRamp.CommitReport memory) {
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ function _constructCommitReport() internal view returns (OffRamp.CommitReport memory) {
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
- interval: EVM2EVMMultiOffRamp.Interval(1, s_maxInterval),
+ interval: OffRamp.Interval(1, s_maxInterval),
merkleRoot: "test #2"
});
- return EVM2EVMMultiOffRamp.CommitReport({
- priceUpdates: getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18),
- merkleRoots: roots
- });
+ return
+ OffRamp.CommitReport({priceUpdates: _getSingleTokenPriceUpdateStruct(s_sourceFeeToken, 4e18), merkleRoots: roots});
}
}
-contract EVM2EVMMultiOffRamp_resetUnblessedRoots is EVM2EVMMultiOffRampSetup {
+contract OffRamp_resetUnblessedRoots is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupRealRMN();
@@ -3405,30 +3330,30 @@ contract EVM2EVMMultiOffRamp_resetUnblessedRoots is EVM2EVMMultiOffRampSetup {
}
function test_ResetUnblessedRoots_Success() public {
- EVM2EVMMultiOffRamp.UnblessedRoot[] memory rootsToReset = new EVM2EVMMultiOffRamp.UnblessedRoot[](3);
- rootsToReset[0] = EVM2EVMMultiOffRamp.UnblessedRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR, merkleRoot: "1"});
- rootsToReset[1] = EVM2EVMMultiOffRamp.UnblessedRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR, merkleRoot: "2"});
- rootsToReset[2] = EVM2EVMMultiOffRamp.UnblessedRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR, merkleRoot: "3"});
+ OffRamp.UnblessedRoot[] memory rootsToReset = new OffRamp.UnblessedRoot[](3);
+ rootsToReset[0] = OffRamp.UnblessedRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR, merkleRoot: "1"});
+ rootsToReset[1] = OffRamp.UnblessedRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR, merkleRoot: "2"});
+ rootsToReset[2] = OffRamp.UnblessedRoot({sourceChainSelector: SOURCE_CHAIN_SELECTOR, merkleRoot: "3"});
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](3);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](3);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: rootsToReset[0].merkleRoot
});
- roots[1] = EVM2EVMMultiOffRamp.MerkleRoot({
+ roots[1] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(3, 4),
+ interval: OffRamp.Interval(3, 4),
merkleRoot: rootsToReset[1].merkleRoot
});
- roots[2] = EVM2EVMMultiOffRamp.MerkleRoot({
+ roots[2] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(5, 5),
+ interval: OffRamp.Interval(5, 5),
merkleRoot: rootsToReset[2].merkleRoot
});
- EVM2EVMMultiOffRamp.CommitReport memory report =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory report =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
_commit(report, ++s_latestSequenceNumber);
@@ -3439,10 +3364,10 @@ contract EVM2EVMMultiOffRamp_resetUnblessedRoots is EVM2EVMMultiOffRampSetup {
s_realRMN.voteToBless(blessedTaggedRoots);
vm.expectEmit(false, false, false, true);
- emit EVM2EVMMultiOffRamp.RootRemoved(rootsToReset[0].merkleRoot);
+ emit OffRamp.RootRemoved(rootsToReset[0].merkleRoot);
vm.expectEmit(false, false, false, true);
- emit EVM2EVMMultiOffRamp.RootRemoved(rootsToReset[2].merkleRoot);
+ emit OffRamp.RootRemoved(rootsToReset[2].merkleRoot);
vm.startPrank(OWNER);
s_offRamp.resetUnblessedRoots(rootsToReset);
@@ -3457,12 +3382,12 @@ contract EVM2EVMMultiOffRamp_resetUnblessedRoots is EVM2EVMMultiOffRampSetup {
function test_OnlyOwner_Revert() public {
vm.stopPrank();
vm.expectRevert("Only callable by owner");
- EVM2EVMMultiOffRamp.UnblessedRoot[] memory rootsToReset = new EVM2EVMMultiOffRamp.UnblessedRoot[](0);
+ OffRamp.UnblessedRoot[] memory rootsToReset = new OffRamp.UnblessedRoot[](0);
s_offRamp.resetUnblessedRoots(rootsToReset);
}
}
-contract EVM2EVMMultiOffRamp_verify is EVM2EVMMultiOffRampSetup {
+contract OffRamp_verify is OffRampSetup {
function setUp() public virtual override {
super.setUp();
_setupRealRMN();
@@ -3474,14 +3399,14 @@ contract EVM2EVMMultiOffRamp_verify is EVM2EVMMultiOffRampSetup {
bytes32[] memory leaves = new bytes32[](1);
leaves[0] = "root";
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: leaves[0]
});
- EVM2EVMMultiOffRamp.CommitReport memory report =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory report =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
_commit(report, ++s_latestSequenceNumber);
bytes32[] memory proofs = new bytes32[](0);
// We have not blessed this root, should return 0.
@@ -3492,14 +3417,14 @@ contract EVM2EVMMultiOffRamp_verify is EVM2EVMMultiOffRampSetup {
function test_Blessed_Success() public {
bytes32[] memory leaves = new bytes32[](1);
leaves[0] = "root";
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: leaves[0]
});
- EVM2EVMMultiOffRamp.CommitReport memory report =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory report =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
_commit(report, ++s_latestSequenceNumber);
// Bless that root.
IRMN.TaggedRoot[] memory taggedRoots = new IRMN.TaggedRoot[](1);
@@ -3514,15 +3439,15 @@ contract EVM2EVMMultiOffRamp_verify is EVM2EVMMultiOffRampSetup {
function test_NotBlessedWrongChainSelector_Success() public {
bytes32[] memory leaves = new bytes32[](1);
leaves[0] = "root";
- EVM2EVMMultiOffRamp.MerkleRoot[] memory roots = new EVM2EVMMultiOffRamp.MerkleRoot[](1);
- roots[0] = EVM2EVMMultiOffRamp.MerkleRoot({
+ OffRamp.MerkleRoot[] memory roots = new OffRamp.MerkleRoot[](1);
+ roots[0] = OffRamp.MerkleRoot({
sourceChainSelector: SOURCE_CHAIN_SELECTOR,
- interval: EVM2EVMMultiOffRamp.Interval(1, 2),
+ interval: OffRamp.Interval(1, 2),
merkleRoot: leaves[0]
});
- EVM2EVMMultiOffRamp.CommitReport memory report =
- EVM2EVMMultiOffRamp.CommitReport({priceUpdates: getEmptyPriceUpdates(), merkleRoots: roots});
+ OffRamp.CommitReport memory report =
+ OffRamp.CommitReport({priceUpdates: _getEmptyPriceUpdates(), merkleRoots: roots});
_commit(report, ++s_latestSequenceNumber);
// Bless that root.
diff --git a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol
similarity index 84%
rename from contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol
rename to contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol
index 4aef61f0520..8156c8c14a0 100644
--- a/contracts/src/v0.8/ccip/test/offRamp/EVM2EVMMultiOffRampSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol
@@ -2,8 +2,6 @@
pragma solidity 0.8.24;
import {IAny2EVMMessageReceiver} from "../../interfaces/IAny2EVMMessageReceiver.sol";
-
-import {IAny2EVMOffRamp} from "../../interfaces/IAny2EVMOffRamp.sol";
import {ICommitStore} from "../../interfaces/ICommitStore.sol";
import {IRMN} from "../../interfaces/IRMN.sol";
@@ -14,26 +12,24 @@ import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
import {MultiOCR3Base} from "../../ocr/MultiOCR3Base.sol";
-import {EVM2EVMMultiOffRamp} from "../../offRamp/EVM2EVMMultiOffRamp.sol";
import {EVM2EVMOffRamp} from "../../offRamp/EVM2EVMOffRamp.sol";
-import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
+import {OffRamp} from "../../offRamp/OffRamp.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {TokenSetup} from "../TokenSetup.t.sol";
-import {EVM2EVMMultiOffRampHelper} from "../helpers/EVM2EVMMultiOffRampHelper.sol";
import {EVM2EVMOffRampHelper} from "../helpers/EVM2EVMOffRampHelper.sol";
import {MaybeRevertingBurnMintTokenPool} from "../helpers/MaybeRevertingBurnMintTokenPool.sol";
import {MessageInterceptorHelper} from "../helpers/MessageInterceptorHelper.sol";
+import {OffRampHelper} from "../helpers/OffRampHelper.sol";
import {MaybeRevertMessageReceiver} from "../helpers/receivers/MaybeRevertMessageReceiver.sol";
-import {MockCommitStore} from "../mocks/MockCommitStore.sol";
import {MultiOCR3BaseSetup} from "../ocr/MultiOCR3BaseSetup.t.sol";
-import {PriceRegistrySetup} from "../priceRegistry/PriceRegistry.t.sol";
-
-import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
+import {PriceRegistrySetup} from "../priceRegistry/PriceRegistrySetup.t.sol";
+import {Vm} from "forge-std/Test.sol";
-contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3BaseSetup {
+contract OffRampSetup is PriceRegistrySetup, MultiOCR3BaseSetup {
uint64 internal constant SOURCE_CHAIN_SELECTOR_1 = SOURCE_CHAIN_SELECTOR;
uint64 internal constant SOURCE_CHAIN_SELECTOR_2 = 6433500567565415381;
uint64 internal constant SOURCE_CHAIN_SELECTOR_3 = 4051577828743386545;
+ bytes32 internal constant EXECUTION_STATE_CHANGE_TOPIC_HASH =
+ keccak256("ExecutionStateChanged(uint64,uint64,bytes32,uint8,bytes,uint256)");
bytes internal constant ON_RAMP_ADDRESS_1 = abi.encode(ON_RAMP_ADDRESS);
bytes internal constant ON_RAMP_ADDRESS_2 = abi.encode(0xaA3f843Cf8E33B1F02dd28303b6bD87B1aBF8AE4);
@@ -47,7 +43,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
MaybeRevertingBurnMintTokenPool internal s_maybeRevertingPool;
- EVM2EVMMultiOffRampHelper internal s_offRamp;
+ OffRampHelper internal s_offRamp;
MessageInterceptorHelper internal s_inboundMessageValidator;
NonceManager internal s_inboundNonceManager;
RMN internal s_realRMN;
@@ -60,8 +56,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
uint64 internal s_latestSequenceNumber;
- function setUp() public virtual override(TokenSetup, PriceRegistrySetup, MultiOCR3BaseSetup) {
- TokenSetup.setUp();
+ function setUp() public virtual override(PriceRegistrySetup, MultiOCR3BaseSetup) {
PriceRegistrySetup.setUp();
MultiOCR3BaseSetup.setUp();
@@ -77,17 +72,16 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
}
function _deployOffRamp(IRMN rmnProxy, NonceManager nonceManager) internal {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0);
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](0);
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(rmnProxy),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(nonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
sourceChainConfigs
);
@@ -112,7 +106,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
transmitters: s_validTransmitters
});
- s_offRamp.setDynamicConfig(_generateDynamicMultiOffRampConfig(address(s_priceRegistry)));
+ s_offRamp.setDynamicConfig(_generateDynamicOffRampConfig(address(s_priceRegistry)));
s_offRamp.setOCR3Configs(ocrConfigs);
address[] memory authorizedCallers = new address[](1);
@@ -146,7 +140,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
- getInboundRateLimiterConfig()
+ _getInboundRateLimiterConfig()
);
offRamp.setOCR2Config(
s_validSigners,
@@ -172,21 +166,20 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
}
function _setupMultipleOffRamps() internal {
- EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs =
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](3);
- sourceChainConfigs[0] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs = new OffRamp.SourceChainConfigArgs[](3);
+ sourceChainConfigs[0] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_1,
onRamp: ON_RAMP_ADDRESS_1,
isEnabled: true
});
- sourceChainConfigs[1] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[1] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_2,
onRamp: ON_RAMP_ADDRESS_2,
isEnabled: false
});
- sourceChainConfigs[2] = EVM2EVMMultiOffRamp.SourceChainConfigArgs({
+ sourceChainConfigs[2] = OffRamp.SourceChainConfigArgs({
router: s_destRouter,
sourceChainSelector: SOURCE_CHAIN_SELECTOR_3,
onRamp: ON_RAMP_ADDRESS_3,
@@ -195,9 +188,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
_setupMultipleOffRampsFromConfigs(sourceChainConfigs);
}
- function _setupMultipleOffRampsFromConfigs(EVM2EVMMultiOffRamp.SourceChainConfigArgs[] memory sourceChainConfigs)
- internal
- {
+ function _setupMultipleOffRampsFromConfigs(OffRamp.SourceChainConfigArgs[] memory sourceChainConfigs) internal {
s_offRamp.applySourceChainConfigUpdates(sourceChainConfigs);
Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](0);
@@ -229,12 +220,11 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
});
}
- function _generateDynamicMultiOffRampConfig(address priceRegistry)
- internal
- pure
- returns (EVM2EVMMultiOffRamp.DynamicConfig memory)
- {
- return EVM2EVMMultiOffRamp.DynamicConfig({
+ uint32 internal constant MAX_TOKEN_POOL_RELEASE_OR_MINT_GAS = 200_000;
+ uint32 internal constant MAX_TOKEN_POOL_TRANSFER_GAS = 50_000;
+
+ function _generateDynamicOffRampConfig(address priceRegistry) internal pure returns (OffRamp.DynamicConfig memory) {
+ return OffRamp.DynamicConfig({
permissionLessExecutionThresholdSeconds: PERMISSION_LESS_EXECUTION_THRESHOLD_SECONDS,
priceRegistry: priceRegistry,
messageValidator: address(0),
@@ -283,7 +273,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
uint64 sequenceNumber,
uint256[] memory amounts
) internal view returns (Internal.Any2EVMRampMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
for (uint256 i = 0; i < tokenAmounts.length; ++i) {
tokenAmounts[i].amount = amounts[i];
}
@@ -345,7 +335,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
bytes memory onRamp
) internal view returns (Internal.Any2EVMRampMessage[] memory) {
Internal.Any2EVMRampMessage[] memory messages = new Internal.Any2EVMRampMessage[](2);
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
tokenAmounts[0].amount = 1e18;
tokenAmounts[1].amount = 5e18;
messages[0] = _generateAny2EVMMessage(sourceChainSelector, onRamp, 1, tokenAmounts, false);
@@ -395,10 +385,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
return gasLimits;
}
- function _assertSameConfig(
- EVM2EVMMultiOffRamp.DynamicConfig memory a,
- EVM2EVMMultiOffRamp.DynamicConfig memory b
- ) public pure {
+ function _assertSameConfig(OffRamp.DynamicConfig memory a, OffRamp.DynamicConfig memory b) public pure {
assertEq(a.permissionLessExecutionThresholdSeconds, b.permissionLessExecutionThresholdSeconds);
assertEq(a.maxPoolReleaseOrMintGas, b.maxPoolReleaseOrMintGas);
assertEq(a.maxTokenTransferGas, b.maxTokenTransferGas);
@@ -407,8 +394,8 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
}
function _assertSourceChainConfigEquality(
- EVM2EVMMultiOffRamp.SourceChainConfig memory config1,
- EVM2EVMMultiOffRamp.SourceChainConfig memory config2
+ OffRamp.SourceChainConfig memory config1,
+ OffRamp.SourceChainConfig memory config2
) internal pure {
assertEq(config1.isEnabled, config2.isEnabled);
assertEq(config1.minSeqNr, config2.minSeqNr);
@@ -434,21 +421,21 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
}
function _enableInboundMessageValidator() internal {
- EVM2EVMMultiOffRamp.DynamicConfig memory dynamicConfig = s_offRamp.getDynamicConfig();
+ OffRamp.DynamicConfig memory dynamicConfig = s_offRamp.getDynamicConfig();
dynamicConfig.messageValidator = address(s_inboundMessageValidator);
s_offRamp.setDynamicConfig(dynamicConfig);
}
function _redeployOffRampWithNoOCRConfigs() internal {
- s_offRamp = new EVM2EVMMultiOffRampHelper(
- EVM2EVMMultiOffRamp.StaticConfig({
+ s_offRamp = new OffRampHelper(
+ OffRamp.StaticConfig({
chainSelector: DEST_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
tokenAdminRegistry: address(s_tokenAdminRegistry),
nonceManager: address(s_inboundNonceManager)
}),
- _generateDynamicMultiOffRampConfig(address(s_priceRegistry)),
- new EVM2EVMMultiOffRamp.SourceChainConfigArgs[](0)
+ _generateDynamicOffRampConfig(address(s_priceRegistry)),
+ new OffRamp.SourceChainConfigArgs[](0)
);
address[] memory authorizedCallers = new address[](1);
@@ -473,7 +460,7 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
s_realRMN = new RMN(RMN.Config({voters: voters, blessWeightThreshold: 1, curseWeightThreshold: 1}));
}
- function _commit(EVM2EVMMultiOffRamp.CommitReport memory commitReport, uint64 sequenceNumber) internal {
+ function _commit(OffRamp.CommitReport memory commitReport, uint64 sequenceNumber) internal {
bytes32[3] memory reportContext = [s_configDigestCommit, bytes32(uint256(sequenceNumber)), s_configDigestCommit];
(bytes32[] memory rs, bytes32[] memory ss,, bytes32 rawVs) =
@@ -489,4 +476,29 @@ contract EVM2EVMMultiOffRampSetup is TokenSetup, PriceRegistrySetup, MultiOCR3Ba
vm.startPrank(s_validTransmitters[0]);
s_offRamp.execute(reportContext, abi.encode(reports));
}
+
+ function assertExecutionStateChangedEventLogs(
+ uint64 sourceChainSelector,
+ uint64 sequenceNumber,
+ bytes32 messageId,
+ Internal.MessageExecutionState state,
+ bytes memory returnData
+ ) public {
+ Vm.Log[] memory logs = vm.getRecordedLogs();
+ for (uint256 i = 0; i < logs.length; ++i) {
+ if (logs[i].topics[0] == EXECUTION_STATE_CHANGE_TOPIC_HASH) {
+ uint64 logSourceChainSelector = uint64(uint256(logs[i].topics[1]));
+ uint64 logSequenceNumber = uint64(uint256(logs[i].topics[2]));
+ bytes32 logMessageId = bytes32(logs[i].topics[3]);
+ (uint8 logState, bytes memory logReturnData,) = abi.decode(logs[i].data, (uint8, bytes, uint256));
+ if (logMessageId == messageId) {
+ assertEq(logSourceChainSelector, sourceChainSelector);
+ assertEq(logSequenceNumber, sequenceNumber);
+ assertEq(logMessageId, messageId);
+ assertEq(logState, uint8(state));
+ assertEq(logReturnData, returnData);
+ }
+ }
+ }
+ }
}
diff --git a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRamp.t.sol b/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRamp.t.sol
index 8559122be7d..54054716e6b 100644
--- a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRamp.t.sol
+++ b/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRamp.t.sol
@@ -9,7 +9,8 @@ import {Pool} from "../../libraries/Pool.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {USDPriceWith18Decimals} from "../../libraries/USDPriceWith18Decimals.sol";
import {EVM2EVMOnRamp} from "../../onRamp/EVM2EVMOnRamp.sol";
-import {TokenAdminRegistry} from "../../tokenAdminRegistry/TokenAdminRegistry.sol";
+import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
+import {TokenPool} from "../../pools/TokenPool.sol";
import {MaybeRevertingBurnMintTokenPool} from "../helpers/MaybeRevertingBurnMintTokenPool.sol";
import "./EVM2EVMOnRampSetup.t.sol";
@@ -34,7 +35,7 @@ contract EVM2EVMOnRamp_constructor is EVM2EVMOnRampSetup {
s_onRamp = new EVM2EVMOnRampHelper(
staticConfig,
dynamicConfig,
- getOutboundRateLimiterConfig(),
+ _getOutboundRateLimiterConfig(),
s_feeTokenConfigArgs,
s_tokenTransferFeeConfigArgs,
getNopsAndWeights()
@@ -485,14 +486,14 @@ contract EVM2EVMOnRamp_forwardFromRouter is EVM2EVMOnRampSetup {
vm.startPrank(OWNER);
// Set a high price to trip the ARL
uint224 tokenPrice = 3 ** 128;
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(s_sourceTokens[0], tokenPrice);
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(s_sourceTokens[0], tokenPrice);
s_priceRegistry.updatePrices(priceUpdates);
vm.startPrank(address(s_sourceRouter));
vm.expectRevert(
abi.encodeWithSelector(
RateLimiter.AggregateValueMaxCapacityExceeded.selector,
- getOutboundRateLimiterConfig().capacity,
+ _getOutboundRateLimiterConfig().capacity,
(message.tokenAmounts[0].amount * tokenPrice) / 1e18
)
);
@@ -660,7 +661,7 @@ contract EVM2EVMOnRamp_forwardFromRouter is EVM2EVMOnRampSetup {
vm.stopPrank();
vm.startPrank(OWNER);
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(wrongToken, 1);
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(wrongToken, 1);
s_priceRegistry.updatePrices(priceUpdates);
// Change back to the router
@@ -681,7 +682,7 @@ contract EVM2EVMOnRamp_forwardFromRouter is EVM2EVMOnRampSetup {
vm.expectRevert(
abi.encodeWithSelector(
RateLimiter.AggregateValueMaxCapacityExceeded.selector,
- getOutboundRateLimiterConfig().capacity,
+ _getOutboundRateLimiterConfig().capacity,
(message.tokenAmounts[0].amount * s_sourceTokenPrices[0]) / 1e18
)
);
@@ -693,7 +694,7 @@ contract EVM2EVMOnRamp_forwardFromRouter is EVM2EVMOnRampSetup {
// Set token price to 0
vm.stopPrank();
vm.startPrank(OWNER);
- s_priceRegistry.updatePrices(getSingleTokenPriceUpdateStruct(CUSTOM_TOKEN, 0));
+ s_priceRegistry.updatePrices(_getSingleTokenPriceUpdateStruct(CUSTOM_TOKEN, 0));
vm.startPrank(address(s_sourceRouter));
@@ -784,8 +785,8 @@ contract EVM2EVMOnRamp_forwardFromRouter is EVM2EVMOnRampSetup {
remotePoolAddress: abi.encode(s_destTokenPool),
remoteTokenAddress: abi.encode(s_destToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
newPool.applyChainUpdates(chainUpdates);
@@ -905,7 +906,7 @@ contract EVM2EVMOnRamp_forwardFromRouter_upgrade is EVM2EVMOnRampSetup {
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
generateDynamicOnRampConfig(address(s_sourceRouter), address(s_priceRegistry)),
- getOutboundRateLimiterConfig(),
+ _getOutboundRateLimiterConfig(),
s_feeTokenConfigArgs,
s_tokenTransferFeeConfigArgs,
getNopsAndWeights()
@@ -1003,8 +1004,8 @@ contract EVM2EVMOnRamp_getFeeSetup is EVM2EVMOnRampSetup {
remotePoolAddress: abi.encode(address(111111)),
remoteTokenAddress: abi.encode(s_destToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
wrappedNativePool.applyChainUpdates(wrappedNativeChainUpdate);
s_tokenAdminRegistry.setPool(s_sourceRouter.getWrappedNative(), address(wrappedNativePool));
@@ -1018,8 +1019,8 @@ contract EVM2EVMOnRamp_getFeeSetup is EVM2EVMOnRampSetup {
remotePoolAddress: abi.encode(makeAddr("random")),
remoteTokenAddress: abi.encode(s_destToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
customPool.applyChainUpdates(customChainUpdate);
s_tokenAdminRegistry.setPool(CUSTOM_TOKEN, address(customPool));
diff --git a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol b/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol
index 46a695701f4..f827bf983c2 100644
--- a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMOnRampSetup.t.sol
@@ -1,19 +1,14 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {IPoolV1} from "../../interfaces/IPool.sol";
-
-import {PriceRegistry} from "../../PriceRegistry.sol";
import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
import {Pool} from "../../libraries/Pool.sol";
import {EVM2EVMOnRamp} from "../../onRamp/EVM2EVMOnRamp.sol";
-import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
-import {TokenPool} from "../../pools/TokenPool.sol";
import {TokenSetup} from "../TokenSetup.t.sol";
import {EVM2EVMOnRampHelper} from "../helpers/EVM2EVMOnRampHelper.sol";
-import {PriceRegistrySetup} from "../priceRegistry/PriceRegistry.t.sol";
+import {PriceRegistrySetup} from "../priceRegistry/PriceRegistrySetup.t.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
@@ -36,7 +31,7 @@ contract EVM2EVMOnRampSetup is TokenSetup, PriceRegistrySetup {
TokenSetup.setUp();
PriceRegistrySetup.setUp();
- s_priceRegistry.updatePrices(getSingleTokenPriceUpdateStruct(CUSTOM_TOKEN, CUSTOM_TOKEN_PRICE));
+ s_priceRegistry.updatePrices(_getSingleTokenPriceUpdateStruct(CUSTOM_TOKEN, CUSTOM_TOKEN_PRICE));
address WETH = s_sourceRouter.getWrappedNative();
@@ -94,7 +89,7 @@ contract EVM2EVMOnRampSetup is TokenSetup, PriceRegistrySetup {
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
generateDynamicOnRampConfig(address(s_sourceRouter), address(s_priceRegistry)),
- getOutboundRateLimiterConfig(),
+ _getOutboundRateLimiterConfig(),
s_feeTokenConfigArgs,
s_tokenTransferFeeConfigArgs,
getNopsAndWeights()
@@ -151,7 +146,7 @@ contract EVM2EVMOnRampSetup is TokenSetup, PriceRegistrySetup {
}
function _generateTokenMessage() public view returns (Client.EVM2AnyMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
tokenAmounts[0].amount = i_tokenAmount0;
tokenAmounts[1].amount = i_tokenAmount1;
return Client.EVM2AnyMessage({
diff --git a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMMultiOnRamp.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol
similarity index 77%
rename from contracts/src/v0.8/ccip/test/onRamp/EVM2EVMMultiOnRamp.t.sol
rename to contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol
index f1481770944..10c0a9f0dbe 100644
--- a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMMultiOnRamp.t.sol
+++ b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol
@@ -2,111 +2,109 @@
pragma solidity 0.8.24;
import {IMessageInterceptor} from "../../interfaces/IMessageInterceptor.sol";
-import {ITokenAdminRegistry} from "../../interfaces/ITokenAdminRegistry.sol";
+import {IRouter} from "../../interfaces/IRouter.sol";
import {BurnMintERC677} from "../../../shared/token/ERC677/BurnMintERC677.sol";
-import {MultiAggregateRateLimiter} from "../../MultiAggregateRateLimiter.sol";
+import {PriceRegistry} from "../../PriceRegistry.sol";
+import {Client} from "../../libraries/Client.sol";
+import {Internal} from "../../libraries/Internal.sol";
import {Pool} from "../../libraries/Pool.sol";
-import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {USDPriceWith18Decimals} from "../../libraries/USDPriceWith18Decimals.sol";
-import {EVM2EVMMultiOnRamp} from "../../onRamp/EVM2EVMMultiOnRamp.sol";
-import {EVM2EVMOnRamp} from "../../onRamp/EVM2EVMOnRamp.sol";
-import {TokenAdminRegistry} from "../../tokenAdminRegistry/TokenAdminRegistry.sol";
-import {EVM2EVMOnRampHelper} from "../helpers/EVM2EVMOnRampHelper.sol";
+import {OnRamp} from "../../onRamp/OnRamp.sol";
+import {TokenPool} from "../../pools/TokenPool.sol";
import {MaybeRevertingBurnMintTokenPool} from "../helpers/MaybeRevertingBurnMintTokenPool.sol";
-import {MessageInterceptorHelper} from "../helpers/MessageInterceptorHelper.sol";
-import "./EVM2EVMMultiOnRampSetup.t.sol";
+import "./OnRampSetup.t.sol";
-contract EVM2EVMMultiOnRamp_constructor is EVM2EVMMultiOnRampSetup {
+import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
+
+contract OnRamp_constructor is OnRampSetup {
function test_Constructor_Success() public {
- EVM2EVMMultiOnRamp.StaticConfig memory staticConfig = EVM2EVMMultiOnRamp.StaticConfig({
+ OnRamp.StaticConfig memory staticConfig = OnRamp.StaticConfig({
chainSelector: SOURCE_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
nonceManager: address(s_outboundNonceManager),
tokenAdminRegistry: address(s_tokenAdminRegistry)
});
- EVM2EVMMultiOnRamp.DynamicConfig memory dynamicConfig = _generateDynamicMultiOnRampConfig(address(s_priceRegistry));
+ OnRamp.DynamicConfig memory dynamicConfig = _generateDynamicOnRampConfig(address(s_priceRegistry));
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.ConfigSet(staticConfig, dynamicConfig);
+ emit OnRamp.ConfigSet(staticConfig, dynamicConfig);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.DestChainConfigSet(
- DEST_CHAIN_SELECTOR, EVM2EVMMultiOnRamp.DestChainConfig(0, s_sourceRouter)
- );
+ emit OnRamp.DestChainConfigSet(DEST_CHAIN_SELECTOR, OnRamp.DestChainConfig(0, s_sourceRouter));
_deployOnRamp(SOURCE_CHAIN_SELECTOR, s_sourceRouter, address(s_outboundNonceManager), address(s_tokenAdminRegistry));
- EVM2EVMMultiOnRamp.StaticConfig memory gotStaticConfig = s_onRamp.getStaticConfig();
+ OnRamp.StaticConfig memory gotStaticConfig = s_onRamp.getStaticConfig();
_assertStaticConfigsEqual(staticConfig, gotStaticConfig);
- EVM2EVMMultiOnRamp.DynamicConfig memory gotDynamicConfig = s_onRamp.getDynamicConfig();
+ OnRamp.DynamicConfig memory gotDynamicConfig = s_onRamp.getDynamicConfig();
_assertDynamicConfigsEqual(dynamicConfig, gotDynamicConfig);
// Initial values
- assertEq("EVM2EVMMultiOnRamp 1.6.0-dev", s_onRamp.typeAndVersion());
+ assertEq("OnRamp 1.6.0-dev", s_onRamp.typeAndVersion());
assertEq(OWNER, s_onRamp.owner());
assertEq(1, s_onRamp.getExpectedNextSequenceNumber(DEST_CHAIN_SELECTOR));
assertEq(address(s_sourceRouter), address(s_onRamp.getRouter(DEST_CHAIN_SELECTOR)));
}
function test_Constructor_InvalidConfigChainSelectorEqZero_Revert() public {
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
- new EVM2EVMMultiOnRampHelper(
- EVM2EVMMultiOnRamp.StaticConfig({
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
+ new OnRampHelper(
+ OnRamp.StaticConfig({
chainSelector: 0,
rmnProxy: address(s_mockRMN),
nonceManager: address(s_outboundNonceManager),
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
- _generateDynamicMultiOnRampConfig(address(s_priceRegistry)),
+ _generateDynamicOnRampConfig(address(s_priceRegistry)),
_generateDestChainConfigArgs(IRouter(address(0)))
);
}
function test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() public {
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
- s_onRamp = new EVM2EVMMultiOnRampHelper(
- EVM2EVMMultiOnRamp.StaticConfig({
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
+ s_onRamp = new OnRampHelper(
+ OnRamp.StaticConfig({
chainSelector: SOURCE_CHAIN_SELECTOR,
rmnProxy: address(0),
nonceManager: address(s_outboundNonceManager),
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
- _generateDynamicMultiOnRampConfig(address(s_priceRegistry)),
+ _generateDynamicOnRampConfig(address(s_priceRegistry)),
_generateDestChainConfigArgs(IRouter(address(0)))
);
}
function test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() public {
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
- new EVM2EVMMultiOnRampHelper(
- EVM2EVMMultiOnRamp.StaticConfig({
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
+ new OnRampHelper(
+ OnRamp.StaticConfig({
chainSelector: SOURCE_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
nonceManager: address(0),
tokenAdminRegistry: address(s_tokenAdminRegistry)
}),
- _generateDynamicMultiOnRampConfig(address(s_priceRegistry)),
+ _generateDynamicOnRampConfig(address(s_priceRegistry)),
_generateDestChainConfigArgs(IRouter(address(0)))
);
}
function test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() public {
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
- new EVM2EVMMultiOnRampHelper(
- EVM2EVMMultiOnRamp.StaticConfig({
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
+ new OnRampHelper(
+ OnRamp.StaticConfig({
chainSelector: SOURCE_CHAIN_SELECTOR,
rmnProxy: address(s_mockRMN),
nonceManager: address(s_outboundNonceManager),
tokenAdminRegistry: address(0)
}),
- _generateDynamicMultiOnRampConfig(address(s_priceRegistry)),
+ _generateDynamicOnRampConfig(address(s_priceRegistry)),
_generateDestChainConfigArgs(IRouter(address(0)))
);
}
}
-contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
+contract OnRamp_forwardFromRouter is OnRampSetup {
struct LegacyExtraArgs {
uint256 gasLimit;
bool strict;
@@ -132,7 +130,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -151,7 +149,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
// forward fails from wrong router
vm.prank(address(s_sourceRouter));
- vm.expectRevert(EVM2EVMMultiOnRamp.MustBeCalledByRouter.selector);
+ vm.expectRevert(OnRamp.MustBeCalledByRouter.selector);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
// forward succeeds from correct router
@@ -168,7 +166,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
vm.expectEmit();
// We expect the message to be emitted with strict = false.
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -181,7 +179,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
vm.expectEmit();
// We expect the message to be emitted with strict = false.
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -193,7 +191,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -207,7 +205,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -221,7 +219,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -234,7 +232,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
uint64 sequenceNumberBefore = s_onRamp.getExpectedNextSequenceNumber(DEST_CHAIN_SELECTOR) - 1;
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, OWNER);
@@ -256,7 +254,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
uint64 sequenceNumberBefore = s_onRamp.getExpectedNextSequenceNumber(DEST_CHAIN_SELECTOR) - 1;
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, OWNER);
@@ -274,7 +272,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.FeePaid(s_sourceFeeToken, feeAmount);
+ emit OnRamp.FeePaid(s_sourceFeeToken, feeAmount);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
assertEq(IERC20(s_sourceFeeToken).balanceOf(address(s_onRamp)), feeAmount);
@@ -294,7 +292,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
uint256 expectedJuels = (feeAmount * conversionRate) / 1e18;
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.FeePaid(s_sourceTokens[1], expectedJuels);
+ emit OnRamp.FeePaid(s_sourceTokens[1], expectedJuels);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
assertEq(IERC20(s_sourceTokens[1]).balanceOf(address(s_onRamp)), feeAmount);
@@ -320,9 +318,9 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
Internal.EVM2AnyRampMessage memory expectedEvent = _messageToEvent(message, 1, 1, feeTokenAmount, originalSender);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.FeePaid(s_sourceFeeToken, feeTokenAmount);
+ emit OnRamp.FeePaid(s_sourceFeeToken, feeTokenAmount);
vm.expectEmit(false, false, false, true);
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, expectedEvent);
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, expectedEvent);
// Assert the message Id is correct
assertEq(
@@ -344,7 +342,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
s_outboundMessageValidator.setMessageIdValidationState(keccak256(abi.encode(message)), false);
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
+ emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER);
}
@@ -355,8 +353,8 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
// We pause by disabling the whitelist
vm.stopPrank();
vm.startPrank(OWNER);
- s_onRamp.setDynamicConfig(_generateDynamicMultiOnRampConfig(address(2)));
- vm.expectRevert(EVM2EVMMultiOnRamp.MustBeCalledByRouter.selector);
+ s_onRamp.setDynamicConfig(_generateDynamicOnRampConfig(address(2)));
+ vm.expectRevert(OnRamp.MustBeCalledByRouter.selector);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, _generateEmptyMessage(), 0, OWNER);
}
@@ -372,12 +370,12 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
function test_Permissions_Revert() public {
vm.stopPrank();
vm.startPrank(OWNER);
- vm.expectRevert(EVM2EVMMultiOnRamp.MustBeCalledByRouter.selector);
+ vm.expectRevert(OnRamp.MustBeCalledByRouter.selector);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, _generateEmptyMessage(), 0, OWNER);
}
function test_OriginalSender_Revert() public {
- vm.expectRevert(EVM2EVMMultiOnRamp.RouterMustSetOriginalSender.selector);
+ vm.expectRevert(OnRamp.RouterMustSetOriginalSender.selector);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, _generateEmptyMessage(), 0, address(0));
}
@@ -405,7 +403,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
message.tokenAmounts = new Client.EVMTokenAmount[](1);
message.tokenAmounts[0].amount = 0;
message.tokenAmounts[0].token = s_sourceTokens[0];
- vm.expectRevert(EVM2EVMMultiOnRamp.CannotSendZeroTokens.selector);
+ vm.expectRevert(OnRamp.CannotSendZeroTokens.selector);
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, STRANGER);
}
@@ -422,12 +420,12 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
vm.stopPrank();
vm.startPrank(OWNER);
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(wrongToken, 1);
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(wrongToken, 1);
s_priceRegistry.updatePrices(priceUpdates);
// Change back to the router
vm.startPrank(address(s_sourceRouter));
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOnRamp.UnsupportedToken.selector, wrongToken));
+ vm.expectRevert(abi.encodeWithSelector(OnRamp.UnsupportedToken.selector, wrongToken));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, OWNER);
}
@@ -438,7 +436,7 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
message.tokenAmounts[0].amount = 1;
message.tokenAmounts[0].token = address(1);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOnRamp.UnsupportedToken.selector, message.tokenAmounts[0].token));
+ vm.expectRevert(abi.encodeWithSelector(OnRamp.UnsupportedToken.selector, message.tokenAmounts[0].token));
s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, OWNER);
}
@@ -474,8 +472,8 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
remotePoolAddress: abi.encode(s_destTokenPool),
remoteTokenAddress: abi.encode(s_destToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
newPool.applyChainUpdates(chainUpdates);
@@ -532,14 +530,14 @@ contract EVM2EVMMultiOnRamp_forwardFromRouter is EVM2EVMMultiOnRampSetup {
}
}
-contract EVM2EVMMultiOnRamp_getSupportedTokens is EVM2EVMMultiOnRampSetup {
+contract OnRamp_getSupportedTokens is OnRampSetup {
function test_GetSupportedTokens_Revert() public {
- vm.expectRevert(EVM2EVMMultiOnRamp.GetSupportedTokensFunctionalityRemovedCheckAdminRegistry.selector);
+ vm.expectRevert(OnRamp.GetSupportedTokensFunctionalityRemovedCheckAdminRegistry.selector);
s_onRamp.getSupportedTokens(DEST_CHAIN_SELECTOR);
}
}
-contract EVM2EVMMultiOnRamp_getFee is EVM2EVMMultiOnRampSetup {
+contract OnRamp_getFee is OnRampSetup {
using USDPriceWith18Decimals for uint224;
function test_EmptyMessage_Success() public view {
@@ -577,7 +575,7 @@ contract EVM2EVMMultiOnRamp_getFee is EVM2EVMMultiOnRampSetup {
function test_Unhealthy_Revert() public {
s_mockRMN.setGlobalCursed(true);
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOnRamp.CursedByRMN.selector, DEST_CHAIN_SELECTOR));
+ vm.expectRevert(abi.encodeWithSelector(OnRamp.CursedByRMN.selector, DEST_CHAIN_SELECTOR));
s_onRamp.getFee(DEST_CHAIN_SELECTOR, _generateEmptyMessage());
}
@@ -600,71 +598,65 @@ contract EVM2EVMMultiOnRamp_getFee is EVM2EVMMultiOnRampSetup {
}
}
-contract EVM2EVMMultiOnRamp_setDynamicConfig is EVM2EVMMultiOnRampSetup {
+contract OnRamp_setDynamicConfig is OnRampSetup {
function test_SetDynamicConfig_Success() public {
- EVM2EVMMultiOnRamp.StaticConfig memory staticConfig = s_onRamp.getStaticConfig();
- EVM2EVMMultiOnRamp.DynamicConfig memory newConfig = EVM2EVMMultiOnRamp.DynamicConfig({
+ OnRamp.StaticConfig memory staticConfig = s_onRamp.getStaticConfig();
+ OnRamp.DynamicConfig memory newConfig = OnRamp.DynamicConfig({
priceRegistry: address(23423),
messageValidator: makeAddr("messageValidator"),
feeAggregator: FEE_AGGREGATOR
});
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.ConfigSet(staticConfig, newConfig);
+ emit OnRamp.ConfigSet(staticConfig, newConfig);
s_onRamp.setDynamicConfig(newConfig);
- EVM2EVMMultiOnRamp.DynamicConfig memory gotDynamicConfig = s_onRamp.getDynamicConfig();
+ OnRamp.DynamicConfig memory gotDynamicConfig = s_onRamp.getDynamicConfig();
assertEq(newConfig.priceRegistry, gotDynamicConfig.priceRegistry);
}
// Reverts
function test_SetConfigInvalidConfigPriceRegistryEqAddressZero_Revert() public {
- EVM2EVMMultiOnRamp.DynamicConfig memory newConfig = EVM2EVMMultiOnRamp.DynamicConfig({
+ OnRamp.DynamicConfig memory newConfig = OnRamp.DynamicConfig({
priceRegistry: address(0),
feeAggregator: FEE_AGGREGATOR,
messageValidator: makeAddr("messageValidator")
});
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
s_onRamp.setDynamicConfig(newConfig);
}
function test_SetConfigInvalidConfig_Revert() public {
- EVM2EVMMultiOnRamp.DynamicConfig memory newConfig = EVM2EVMMultiOnRamp.DynamicConfig({
- priceRegistry: address(23423),
- messageValidator: address(0),
- feeAggregator: FEE_AGGREGATOR
- });
+ OnRamp.DynamicConfig memory newConfig =
+ OnRamp.DynamicConfig({priceRegistry: address(23423), messageValidator: address(0), feeAggregator: FEE_AGGREGATOR});
// Invalid price reg reverts.
newConfig.priceRegistry = address(0);
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
s_onRamp.setDynamicConfig(newConfig);
}
function test_SetConfigInvalidConfigFeeAggregatorEqAddressZero_Revert() public {
- EVM2EVMMultiOnRamp.DynamicConfig memory newConfig = EVM2EVMMultiOnRamp.DynamicConfig({
- priceRegistry: address(23423),
- messageValidator: address(0),
- feeAggregator: address(0)
- });
- vm.expectRevert(EVM2EVMMultiOnRamp.InvalidConfig.selector);
+ OnRamp.DynamicConfig memory newConfig =
+ OnRamp.DynamicConfig({priceRegistry: address(23423), messageValidator: address(0), feeAggregator: address(0)});
+ vm.expectRevert(OnRamp.InvalidConfig.selector);
s_onRamp.setDynamicConfig(newConfig);
}
function test_SetConfigOnlyOwner_Revert() public {
vm.startPrank(STRANGER);
vm.expectRevert("Only callable by owner");
- s_onRamp.setDynamicConfig(_generateDynamicMultiOnRampConfig(address(2)));
+ s_onRamp.setDynamicConfig(_generateDynamicOnRampConfig(address(2)));
vm.startPrank(ADMIN);
vm.expectRevert("Only callable by owner");
- s_onRamp.setDynamicConfig(_generateDynamicMultiOnRampConfig(address(2)));
+ s_onRamp.setDynamicConfig(_generateDynamicOnRampConfig(address(2)));
}
}
-contract EVM2EVMMultiOnRamp_withdrawFeeTokens is EVM2EVMMultiOnRampSetup {
+contract OnRamp_withdrawFeeTokens is OnRampSetup {
mapping(address => uint256) internal s_nopFees;
function setUp() public virtual override {
@@ -701,7 +693,7 @@ contract EVM2EVMMultiOnRamp_withdrawFeeTokens is EVM2EVMMultiOnRampSetup {
for (uint256 i = 0; i < feeTokens.length; ++i) {
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.FeeTokenWithdrawn(FEE_AGGREGATOR, feeTokens[i], amounts[i]);
+ emit OnRamp.FeeTokenWithdrawn(FEE_AGGREGATOR, feeTokens[i], amounts[i]);
}
s_onRamp.withdrawFeeTokens();
@@ -714,7 +706,7 @@ contract EVM2EVMMultiOnRamp_withdrawFeeTokens is EVM2EVMMultiOnRampSetup {
function test_WithdrawFeeTokens_Success() public {
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.FeeTokenWithdrawn(FEE_AGGREGATOR, s_sourceFeeToken, s_nopFees[s_sourceFeeToken]);
+ emit OnRamp.FeeTokenWithdrawn(FEE_AGGREGATOR, s_sourceFeeToken, s_nopFees[s_sourceFeeToken]);
s_onRamp.withdrawFeeTokens();
@@ -723,7 +715,7 @@ contract EVM2EVMMultiOnRamp_withdrawFeeTokens is EVM2EVMMultiOnRampSetup {
}
}
-contract EVM2EVMMultiOnRamp_getTokenPool is EVM2EVMMultiOnRampSetup {
+contract OnRamp_getTokenPool is OnRampSetup {
function test_GetTokenPool_Success() public view {
assertEq(
s_sourcePoolByToken[s_sourceTokens[0]],
@@ -741,39 +733,34 @@ contract EVM2EVMMultiOnRamp_getTokenPool is EVM2EVMMultiOnRampSetup {
}
}
-contract EVM2EVMMultiOnRamp_applyDestChainConfigUpdates is EVM2EVMMultiOnRampSetup {
+contract OnRamp_applyDestChainConfigUpdates is OnRampSetup {
function test_ApplyDestChainConfigUpdates_Success() external {
vm.stopPrank();
vm.startPrank(OWNER);
- EVM2EVMMultiOnRamp.DestChainConfigArgs[] memory configArgs = new EVM2EVMMultiOnRamp.DestChainConfigArgs[](1);
+ OnRamp.DestChainConfigArgs[] memory configArgs = new OnRamp.DestChainConfigArgs[](1);
configArgs[0].destChainSelector = DEST_CHAIN_SELECTOR;
// supports disabling a lane by setting a router to zero
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.DestChainConfigSet(
- DEST_CHAIN_SELECTOR, EVM2EVMMultiOnRamp.DestChainConfig(0, IRouter(address(0)))
- );
+ emit OnRamp.DestChainConfigSet(DEST_CHAIN_SELECTOR, OnRamp.DestChainConfig(0, IRouter(address(0))));
s_onRamp.applyDestChainConfigUpdates(configArgs);
assertEq(address(0), address(s_onRamp.getRouter(DEST_CHAIN_SELECTOR)));
// supports updating and adding lanes simultaneously
- configArgs = new EVM2EVMMultiOnRamp.DestChainConfigArgs[](2);
- configArgs[0] =
- EVM2EVMMultiOnRamp.DestChainConfigArgs({destChainSelector: DEST_CHAIN_SELECTOR, router: s_sourceRouter});
- configArgs[1] = EVM2EVMMultiOnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999))});
+ configArgs = new OnRamp.DestChainConfigArgs[](2);
+ configArgs[0] = OnRamp.DestChainConfigArgs({destChainSelector: DEST_CHAIN_SELECTOR, router: s_sourceRouter});
+ configArgs[1] = OnRamp.DestChainConfigArgs({destChainSelector: 9999, router: IRouter(address(9999))});
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.DestChainConfigSet(
- DEST_CHAIN_SELECTOR, EVM2EVMMultiOnRamp.DestChainConfig(0, s_sourceRouter)
- );
+ emit OnRamp.DestChainConfigSet(DEST_CHAIN_SELECTOR, OnRamp.DestChainConfig(0, s_sourceRouter));
vm.expectEmit();
- emit EVM2EVMMultiOnRamp.DestChainConfigSet(9999, EVM2EVMMultiOnRamp.DestChainConfig(0, IRouter(address(9999))));
+ emit OnRamp.DestChainConfigSet(9999, OnRamp.DestChainConfig(0, IRouter(address(9999))));
s_onRamp.applyDestChainConfigUpdates(configArgs);
assertEq(address(s_sourceRouter), address(s_onRamp.getRouter(DEST_CHAIN_SELECTOR)));
assertEq(address(9999), address(s_onRamp.getRouter(9999)));
// handles empty list
uint256 numLogs = vm.getRecordedLogs().length;
- configArgs = new EVM2EVMMultiOnRamp.DestChainConfigArgs[](0);
+ configArgs = new OnRamp.DestChainConfigArgs[](0);
s_onRamp.applyDestChainConfigUpdates(configArgs);
assertEq(numLogs, vm.getRecordedLogs().length); // indicates no changes made
}
@@ -781,9 +768,9 @@ contract EVM2EVMMultiOnRamp_applyDestChainConfigUpdates is EVM2EVMMultiOnRampSet
function test_ApplyDestChainConfigUpdates_WithInalidChainSelector_Revert() external {
vm.stopPrank();
vm.startPrank(OWNER);
- EVM2EVMMultiOnRamp.DestChainConfigArgs[] memory configArgs = new EVM2EVMMultiOnRamp.DestChainConfigArgs[](1);
+ OnRamp.DestChainConfigArgs[] memory configArgs = new OnRamp.DestChainConfigArgs[](1);
configArgs[0].destChainSelector = 0; // invalid
- vm.expectRevert(abi.encodeWithSelector(EVM2EVMMultiOnRamp.InvalidDestChainConfig.selector, 0));
+ vm.expectRevert(abi.encodeWithSelector(OnRamp.InvalidDestChainConfig.selector, 0));
s_onRamp.applyDestChainConfigUpdates(configArgs);
}
}
diff --git a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMMultiOnRampSetup.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol
similarity index 68%
rename from contracts/src/v0.8/ccip/test/onRamp/EVM2EVMMultiOnRampSetup.t.sol
rename to contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol
index d237a23e8f2..a8d1919948a 100644
--- a/contracts/src/v0.8/ccip/test/onRamp/EVM2EVMMultiOnRampSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/onRamp/OnRampSetup.t.sol
@@ -1,40 +1,33 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {IPoolV1} from "../../interfaces/IPool.sol";
import {IRouter} from "../../interfaces/IRouter.sol";
import {AuthorizedCallers} from "../../../shared/access/AuthorizedCallers.sol";
import {NonceManager} from "../../NonceManager.sol";
-import {PriceRegistry} from "../../PriceRegistry.sol";
import {Router} from "../../Router.sol";
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
-import {EVM2EVMMultiOnRamp} from "../../onRamp/EVM2EVMMultiOnRamp.sol";
-import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
-import {TokenPool} from "../../pools/TokenPool.sol";
-import {TokenAdminRegistry} from "../../tokenAdminRegistry/TokenAdminRegistry.sol";
-import {TokenSetup} from "../TokenSetup.t.sol";
-import {EVM2EVMMultiOnRampHelper} from "../helpers/EVM2EVMMultiOnRampHelper.sol";
+import {OnRamp} from "../../onRamp/OnRamp.sol";
import {MessageInterceptorHelper} from "../helpers/MessageInterceptorHelper.sol";
+import {OnRampHelper} from "../helpers/OnRampHelper.sol";
import {PriceRegistryFeeSetup} from "../priceRegistry/PriceRegistry.t.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
-contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
+contract OnRampSetup is PriceRegistryFeeSetup {
uint256 internal immutable i_tokenAmount0 = 9;
uint256 internal immutable i_tokenAmount1 = 7;
bytes32 internal s_metadataHash;
- EVM2EVMMultiOnRampHelper internal s_onRamp;
+ OnRampHelper internal s_onRamp;
MessageInterceptorHelper internal s_outboundMessageValidator;
address[] internal s_offRamps;
NonceManager internal s_outboundNonceManager;
- function setUp() public virtual override(TokenSetup, PriceRegistryFeeSetup) {
- TokenSetup.setUp();
- PriceRegistryFeeSetup.setUp();
+ function setUp() public virtual override {
+ super.setUp();
s_outboundMessageValidator = new MessageInterceptorHelper();
s_outboundNonceManager = new NonceManager(new address[](0));
@@ -59,7 +52,7 @@ contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
}
function _generateTokenMessage() public view returns (Client.EVM2AnyMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = getCastedSourceEVMTokenAmountsWithZeroAmounts();
+ Client.EVMTokenAmount[] memory tokenAmounts = _getCastedSourceEVMTokenAmountsWithZeroAmounts();
tokenAmounts[0].amount = i_tokenAmount0;
tokenAmounts[1].amount = i_tokenAmount1;
return Client.EVM2AnyMessage({
@@ -91,16 +84,9 @@ contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
);
}
- function _generateDynamicMultiOnRampConfig(address priceRegistry)
- internal
- pure
- returns (EVM2EVMMultiOnRamp.DynamicConfig memory)
- {
- return EVM2EVMMultiOnRamp.DynamicConfig({
- priceRegistry: priceRegistry,
- messageValidator: address(0),
- feeAggregator: FEE_AGGREGATOR
- });
+ function _generateDynamicOnRampConfig(address priceRegistry) internal pure returns (OnRamp.DynamicConfig memory) {
+ return
+ OnRamp.DynamicConfig({priceRegistry: priceRegistry, messageValidator: address(0), feeAggregator: FEE_AGGREGATOR});
}
// Slicing is only available for calldata. So we have to build a new bytes array.
@@ -112,14 +98,9 @@ contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
return result;
}
- function _generateDestChainConfigArgs(IRouter router)
- internal
- pure
- returns (EVM2EVMMultiOnRamp.DestChainConfigArgs[] memory)
- {
- EVM2EVMMultiOnRamp.DestChainConfigArgs[] memory destChainConfigs = new EVM2EVMMultiOnRamp.DestChainConfigArgs[](1);
- destChainConfigs[0] =
- EVM2EVMMultiOnRamp.DestChainConfigArgs({destChainSelector: DEST_CHAIN_SELECTOR, router: router});
+ function _generateDestChainConfigArgs(IRouter router) internal pure returns (OnRamp.DestChainConfigArgs[] memory) {
+ OnRamp.DestChainConfigArgs[] memory destChainConfigs = new OnRamp.DestChainConfigArgs[](1);
+ destChainConfigs[0] = OnRamp.DestChainConfigArgs({destChainSelector: DEST_CHAIN_SELECTOR, router: router});
return destChainConfigs;
}
@@ -128,15 +109,15 @@ contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
IRouter router,
address nonceManager,
address tokenAdminRegistry
- ) internal returns (EVM2EVMMultiOnRampHelper, bytes32 metadataHash) {
- EVM2EVMMultiOnRampHelper onRamp = new EVM2EVMMultiOnRampHelper(
- EVM2EVMMultiOnRamp.StaticConfig({
+ ) internal returns (OnRampHelper, bytes32 metadataHash) {
+ OnRampHelper onRamp = new OnRampHelper(
+ OnRamp.StaticConfig({
chainSelector: sourceChainSelector,
rmnProxy: address(s_mockRMN),
nonceManager: nonceManager,
tokenAdminRegistry: tokenAdminRegistry
}),
- _generateDynamicMultiOnRampConfig(address(s_priceRegistry)),
+ _generateDynamicOnRampConfig(address(s_priceRegistry)),
_generateDestChainConfigArgs(router)
);
@@ -164,7 +145,7 @@ contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
resetPrank = true;
}
- EVM2EVMMultiOnRamp.DynamicConfig memory dynamicConfig = s_onRamp.getDynamicConfig();
+ OnRamp.DynamicConfig memory dynamicConfig = s_onRamp.getDynamicConfig();
dynamicConfig.messageValidator = address(s_outboundMessageValidator);
s_onRamp.setDynamicConfig(dynamicConfig);
@@ -174,19 +155,13 @@ contract EVM2EVMMultiOnRampSetup is TokenSetup, PriceRegistryFeeSetup {
}
}
- function _assertStaticConfigsEqual(
- EVM2EVMMultiOnRamp.StaticConfig memory a,
- EVM2EVMMultiOnRamp.StaticConfig memory b
- ) internal pure {
+ function _assertStaticConfigsEqual(OnRamp.StaticConfig memory a, OnRamp.StaticConfig memory b) internal pure {
assertEq(a.chainSelector, b.chainSelector);
assertEq(a.rmnProxy, b.rmnProxy);
assertEq(a.tokenAdminRegistry, b.tokenAdminRegistry);
}
- function _assertDynamicConfigsEqual(
- EVM2EVMMultiOnRamp.DynamicConfig memory a,
- EVM2EVMMultiOnRamp.DynamicConfig memory b
- ) internal pure {
+ function _assertDynamicConfigsEqual(OnRamp.DynamicConfig memory a, OnRamp.DynamicConfig memory b) internal pure {
assertEq(a.priceRegistry, b.priceRegistry);
}
}
diff --git a/contracts/src/v0.8/ccip/test/pools/BurnFromMintTokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/BurnFromMintTokenPool.t.sol
index 307cbf21f4e..b5967e74d1e 100644
--- a/contracts/src/v0.8/ccip/test/pools/BurnFromMintTokenPool.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/BurnFromMintTokenPool.t.sol
@@ -5,7 +5,6 @@ import {Pool} from "../../libraries/Pool.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {BurnFromMintTokenPool} from "../../pools/BurnFromMintTokenPool.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {BaseTest} from "../BaseTest.t.sol";
import {BurnMintSetup} from "./BurnMintSetup.t.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
@@ -95,8 +94,8 @@ contract BurnFromMintTokenPool_lockOrBurn is BurnFromMintTokenPoolSetup {
amount: 1,
localToken: address(s_burnMintERC677),
remoteChainSelector: wrongChainSelector,
- sourcePoolAddress: generateSourceTokenData().sourcePoolAddress,
- sourcePoolData: generateSourceTokenData().extraData,
+ sourcePoolAddress: _generateSourceTokenData().sourcePoolAddress,
+ sourcePoolData: _generateSourceTokenData().extraData,
offchainTokenData: ""
})
);
diff --git a/contracts/src/v0.8/ccip/test/pools/BurnMintSetup.t.sol b/contracts/src/v0.8/ccip/test/pools/BurnMintSetup.t.sol
index a39fd1bb9fa..220f6ca1125 100644
--- a/contracts/src/v0.8/ccip/test/pools/BurnMintSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/BurnMintSetup.t.sol
@@ -28,8 +28,8 @@ contract BurnMintSetup is RouterSetup {
remotePoolAddress: abi.encode(s_remoteBurnMintPool),
remoteTokenAddress: abi.encode(s_remoteToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
BurnMintTokenPool(pool).applyChainUpdates(chains);
diff --git a/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol
index 5a7644d033f..8a6d047380c 100644
--- a/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/BurnMintTokenPool.t.sol
@@ -1,15 +1,10 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {IPoolV1} from "../../interfaces/IPool.sol";
-
-import {Internal} from "../../libraries/Internal.sol";
import {Pool} from "../../libraries/Pool.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
-import {EVM2EVMOffRamp} from "../../offRamp/EVM2EVMOffRamp.sol";
import {BurnMintTokenPool} from "../../pools/BurnMintTokenPool.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {BaseTest} from "../BaseTest.t.sol";
import {BurnMintSetup} from "./BurnMintSetup.t.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
@@ -144,8 +139,8 @@ contract BurnMintTokenPool_releaseOrMint is BurnMintTokenPoolSetup {
amount: 1e5,
localToken: address(s_burnMintERC677),
remoteChainSelector: DEST_CHAIN_SELECTOR,
- sourcePoolAddress: generateSourceTokenData().sourcePoolAddress,
- sourcePoolData: generateSourceTokenData().extraData,
+ sourcePoolAddress: _generateSourceTokenData().sourcePoolAddress,
+ sourcePoolData: _generateSourceTokenData().extraData,
offchainTokenData: ""
})
);
@@ -164,8 +159,8 @@ contract BurnMintTokenPool_releaseOrMint is BurnMintTokenPoolSetup {
amount: 1,
localToken: address(s_burnMintERC677),
remoteChainSelector: wrongChainSelector,
- sourcePoolAddress: generateSourceTokenData().sourcePoolAddress,
- sourcePoolData: generateSourceTokenData().extraData,
+ sourcePoolAddress: _generateSourceTokenData().sourcePoolAddress,
+ sourcePoolData: _generateSourceTokenData().extraData,
offchainTokenData: ""
})
);
diff --git a/contracts/src/v0.8/ccip/test/pools/BurnWithFromMintTokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/BurnWithFromMintTokenPool.t.sol
index 568aac6ba18..92e871708da 100644
--- a/contracts/src/v0.8/ccip/test/pools/BurnWithFromMintTokenPool.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/BurnWithFromMintTokenPool.t.sol
@@ -5,7 +5,6 @@ import {Pool} from "../../libraries/Pool.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {BurnWithFromMintTokenPool} from "../../pools/BurnWithFromMintTokenPool.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {BaseTest} from "../BaseTest.t.sol";
import {BurnMintSetup} from "./BurnMintSetup.t.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
@@ -96,8 +95,8 @@ contract BurnWithFromMintTokenPool_lockOrBurn is BurnWithFromMintTokenPoolSetup
amount: 1,
localToken: address(s_burnMintERC677),
remoteChainSelector: wrongChainSelector,
- sourcePoolAddress: generateSourceTokenData().sourcePoolAddress,
- sourcePoolData: generateSourceTokenData().extraData,
+ sourcePoolAddress: _generateSourceTokenData().sourcePoolAddress,
+ sourcePoolData: _generateSourceTokenData().extraData,
offchainTokenData: ""
})
);
diff --git a/contracts/src/v0.8/ccip/test/pools/LockReleaseTokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/LockReleaseTokenPool.t.sol
index fb5d5e0fd10..ed8a1cf31f1 100644
--- a/contracts/src/v0.8/ccip/test/pools/LockReleaseTokenPool.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/LockReleaseTokenPool.t.sol
@@ -5,13 +5,10 @@ import {IPoolV1} from "../../interfaces/IPool.sol";
import {BurnMintERC677} from "../../../shared/token/ERC677/BurnMintERC677.sol";
import {Router} from "../../Router.sol";
-import {Internal} from "../../libraries/Internal.sol";
import {Pool} from "../../libraries/Pool.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
-import {EVM2EVMOffRamp} from "../../offRamp/EVM2EVMOffRamp.sol";
import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {BaseTest} from "../BaseTest.t.sol";
import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
import {IERC165} from "../../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/IERC165.sol";
@@ -47,8 +44,8 @@ contract LockReleaseTokenPoolSetup is RouterSetup {
remotePoolAddress: abi.encode(s_destPoolAddress),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_lockReleaseTokenPool.applyChainUpdates(chainUpdate);
@@ -80,7 +77,7 @@ contract LockReleaseTokenPool_setRebalancer is LockReleaseTokenPoolSetup {
contract LockReleaseTokenPool_lockOrBurn is LockReleaseTokenPoolSetup {
function test_Fuzz_LockOrBurnNoAllowList_Success(uint256 amount) public {
- amount = bound(amount, 1, getOutboundRateLimiterConfig().capacity);
+ amount = bound(amount, 1, _getOutboundRateLimiterConfig().capacity);
vm.startPrank(s_allowedOnRamp);
vm.expectEmit();
@@ -179,8 +176,8 @@ contract LockReleaseTokenPool_releaseOrMint is LockReleaseTokenPoolSetup {
remotePoolAddress: abi.encode(s_sourcePoolAddress),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_lockReleaseTokenPool.applyChainUpdates(chainUpdate);
@@ -222,7 +219,7 @@ contract LockReleaseTokenPool_releaseOrMint is LockReleaseTokenPoolSetup {
deal(address(s_token), address(s_lockReleaseTokenPool), amount);
vm.startPrank(s_allowedOffRamp);
- uint256 capacity = getInboundRateLimiterConfig().capacity;
+ uint256 capacity = _getInboundRateLimiterConfig().capacity;
// Determine if we hit the rate limit or the txs should succeed.
if (amount > capacity) {
vm.expectRevert(
@@ -298,8 +295,8 @@ contract LockReleaseTokenPool_releaseOrMint is LockReleaseTokenPoolSetup {
amount: 1e5,
localToken: address(s_token),
remoteChainSelector: SOURCE_CHAIN_SELECTOR,
- sourcePoolAddress: generateSourceTokenData().sourcePoolAddress,
- sourcePoolData: generateSourceTokenData().extraData,
+ sourcePoolAddress: _generateSourceTokenData().sourcePoolAddress,
+ sourcePoolData: _generateSourceTokenData().extraData,
offchainTokenData: ""
})
);
diff --git a/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol
index 2c9eaf6df0e..2c1bc0ed575 100644
--- a/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/TokenPool.t.sol
@@ -5,7 +5,6 @@ import {BurnMintERC677} from "../../../shared/token/ERC677/BurnMintERC677.sol";
import {Router} from "../../Router.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {TokenPool} from "../../pools/TokenPool.sol";
-import {BaseTest} from "../BaseTest.t.sol";
import {TokenPoolHelper} from "../helpers/TokenPoolHelper.sol";
import {RouterSetup} from "../router/RouterSetup.t.sol";
@@ -55,8 +54,8 @@ contract TokenPool_getRemotePool is TokenPoolSetup {
remotePoolAddress: abi.encode(remotePool),
remoteTokenAddress: abi.encode(remoteToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdates);
@@ -78,8 +77,8 @@ contract TokenPool_setRemotePool is TokenPoolSetup {
remotePoolAddress: abi.encode(initialPool),
remoteTokenAddress: abi.encode(remoteToken),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdates);
@@ -379,8 +378,8 @@ contract TokenPool_setChainRateLimiterConfig is TokenPoolSetup {
remotePoolAddress: abi.encode(address(2)),
remoteTokenAddress: abi.encode(address(3)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdates);
}
@@ -434,7 +433,7 @@ contract TokenPool_setChainRateLimiterConfig is TokenPoolSetup {
vm.expectRevert(abi.encodeWithSelector(TokenPool.Unauthorized.selector, STRANGER));
s_tokenPool.setChainRateLimiterConfig(
- s_remoteChainSelector, getOutboundRateLimiterConfig(), getInboundRateLimiterConfig()
+ s_remoteChainSelector, _getOutboundRateLimiterConfig(), _getInboundRateLimiterConfig()
);
}
@@ -443,7 +442,7 @@ contract TokenPool_setChainRateLimiterConfig is TokenPoolSetup {
vm.expectRevert(abi.encodeWithSelector(TokenPool.NonExistentChain.selector, wrongChainSelector));
s_tokenPool.setChainRateLimiterConfig(
- wrongChainSelector, getOutboundRateLimiterConfig(), getInboundRateLimiterConfig()
+ wrongChainSelector, _getOutboundRateLimiterConfig(), _getInboundRateLimiterConfig()
);
}
}
@@ -476,8 +475,8 @@ contract TokenPool_onlyOnRamp is TokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdate);
@@ -507,8 +506,8 @@ contract TokenPool_onlyOnRamp is TokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdate);
@@ -548,8 +547,8 @@ contract TokenPool_onlyOnRamp is TokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdate);
@@ -572,8 +571,8 @@ contract TokenPool_onlyOffRamp is TokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdate);
@@ -603,8 +602,8 @@ contract TokenPool_onlyOffRamp is TokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdate);
@@ -644,8 +643,8 @@ contract TokenPool_onlyOffRamp is TokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_tokenPool.applyChainUpdates(chainUpdate);
diff --git a/contracts/src/v0.8/ccip/test/pools/USDCTokenPool.t.sol b/contracts/src/v0.8/ccip/test/pools/USDCTokenPool.t.sol
index 7259e1d17c0..e60d5542f41 100644
--- a/contracts/src/v0.8/ccip/test/pools/USDCTokenPool.t.sol
+++ b/contracts/src/v0.8/ccip/test/pools/USDCTokenPool.t.sol
@@ -57,7 +57,7 @@ contract USDCTokenPoolSetup is BaseTest {
BurnMintERC677 usdcToken = new BurnMintERC677("LINK", "LNK", 18, 0);
s_token = usdcToken;
deal(address(s_token), OWNER, type(uint256).max);
- setUpRamps();
+ _setUpRamps();
s_mockUSDCTransmitter = new MockE2EUSDCTransmitter(0, DEST_DOMAIN_IDENTIFIER, address(s_token));
s_mockUSDC = new MockUSDCTokenMessenger(0, address(s_mockUSDCTransmitter));
@@ -78,16 +78,16 @@ contract USDCTokenPoolSetup is BaseTest {
remotePoolAddress: abi.encode(SOURCE_CHAIN_USDC_POOL),
remoteTokenAddress: abi.encode(address(s_token)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
chainUpdates[1] = TokenPool.ChainUpdate({
remoteChainSelector: DEST_CHAIN_SELECTOR,
remotePoolAddress: abi.encode(DEST_CHAIN_USDC_POOL),
remoteTokenAddress: abi.encode(DEST_CHAIN_USDC_TOKEN),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_usdcTokenPool.applyChainUpdates(chainUpdates);
@@ -105,7 +105,7 @@ contract USDCTokenPoolSetup is BaseTest {
s_usdcTokenPoolWithAllowList.setDomains(domains);
}
- function setUpRamps() internal {
+ function _setUpRamps() internal {
s_router = new Router(address(s_token), address(s_mockRMN));
Router.OnRamp[] memory onRampUpdates = new Router.OnRamp[](1);
@@ -176,7 +176,7 @@ contract USDCTokenPool_lockOrBurn is USDCTokenPoolSetup {
function test_Fuzz_LockOrBurn_Success(bytes32 destinationReceiver, uint256 amount) public {
vm.assume(destinationReceiver != bytes32(0));
- amount = bound(amount, 1, getOutboundRateLimiterConfig().capacity);
+ amount = bound(amount, 1, _getOutboundRateLimiterConfig().capacity);
s_token.transfer(address(s_usdcTokenPool), amount);
vm.startPrank(s_routerAllowedOnRamp);
@@ -217,7 +217,7 @@ contract USDCTokenPool_lockOrBurn is USDCTokenPoolSetup {
function test_Fuzz_LockOrBurnWithAllowList_Success(bytes32 destinationReceiver, uint256 amount) public {
vm.assume(destinationReceiver != bytes32(0));
- amount = bound(amount, 1, getOutboundRateLimiterConfig().capacity);
+ amount = bound(amount, 1, _getOutboundRateLimiterConfig().capacity);
s_token.transfer(address(s_usdcTokenPoolWithAllowList), amount);
vm.startPrank(s_routerAllowedOnRamp);
@@ -267,8 +267,8 @@ contract USDCTokenPool_lockOrBurn is USDCTokenPoolSetup {
remotePoolAddress: abi.encode(address(1)),
remoteTokenAddress: abi.encode(address(2)),
allowed: true,
- outboundRateLimiterConfig: getOutboundRateLimiterConfig(),
- inboundRateLimiterConfig: getInboundRateLimiterConfig()
+ outboundRateLimiterConfig: _getOutboundRateLimiterConfig(),
+ inboundRateLimiterConfig: _getInboundRateLimiterConfig()
});
s_usdcTokenPool.applyChainUpdates(chainUpdates);
@@ -336,7 +336,7 @@ contract USDCTokenPool_releaseOrMint is USDCTokenPoolSetup {
function test_Fuzz_ReleaseOrMint_Success(address recipient, uint256 amount) public {
vm.assume(recipient != address(0) && recipient != address(s_token));
- amount = bound(amount, 0, getInboundRateLimiterConfig().capacity);
+ amount = bound(amount, 0, _getInboundRateLimiterConfig().capacity);
USDCMessage memory usdcMessage = USDCMessage({
version: 0,
@@ -493,7 +493,7 @@ contract USDCTokenPool_releaseOrMint is USDCTokenPoolSetup {
}
function test_TokenMaxCapacityExceeded_Revert() public {
- uint256 capacity = getInboundRateLimiterConfig().capacity;
+ uint256 capacity = _getInboundRateLimiterConfig().capacity;
uint256 amount = 10 * capacity;
address recipient = address(1);
vm.startPrank(s_routerAllowedOffRamp);
diff --git a/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistry.t.sol b/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistry.t.sol
index b26eb564746..f59d27a2cb1 100644
--- a/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistry.t.sol
+++ b/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistry.t.sol
@@ -1,435 +1,17 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;
-import {IPriceRegistry} from "../../interfaces/IPriceRegistry.sol";
-import {ITokenAdminRegistry} from "../../interfaces/ITokenAdminRegistry.sol";
-
import {AuthorizedCallers} from "../../../shared/access/AuthorizedCallers.sol";
-import {BurnMintERC677} from "../../../shared/token/ERC677/BurnMintERC677.sol";
import {MockV3Aggregator} from "../../../tests/MockV3Aggregator.sol";
import {PriceRegistry} from "../../PriceRegistry.sol";
-
import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
import {Pool} from "../../libraries/Pool.sol";
import {USDPriceWith18Decimals} from "../../libraries/USDPriceWith18Decimals.sol";
-import {LockReleaseTokenPool} from "../../pools/LockReleaseTokenPool.sol";
-import {TokenPool} from "../../pools/TokenPool.sol";
-import {TokenAdminRegistry} from "../../tokenAdminRegistry/TokenAdminRegistry.sol";
-
-import {TokenSetup} from "../TokenSetup.t.sol";
-import {MaybeRevertingBurnMintTokenPool} from "../helpers/MaybeRevertingBurnMintTokenPool.sol";
import {PriceRegistryHelper} from "../helpers/PriceRegistryHelper.sol";
-
-import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol";
+import {PriceRegistryFeeSetup, PriceRegistrySetup} from "./PriceRegistrySetup.t.sol";
import {Vm} from "forge-std/Vm.sol";
-import {console} from "forge-std/console.sol";
-
-contract PriceRegistrySetup is TokenSetup {
- uint112 internal constant USD_PER_GAS = 1e6; // 0.001 gwei
- uint112 internal constant USD_PER_DATA_AVAILABILITY_GAS = 1e9; // 1 gwei
-
- address internal constant CUSTOM_TOKEN = address(12345);
- uint224 internal constant CUSTOM_TOKEN_PRICE = 1e17; // $0.1 CUSTOM
-
- // Encode L1 gas price and L2 gas price into a packed price.
- // L1 gas price is left-shifted to the higher-order bits.
- uint224 internal constant PACKED_USD_PER_GAS =
- (uint224(USD_PER_DATA_AVAILABILITY_GAS) << Internal.GAS_PRICE_BITS) + USD_PER_GAS;
-
- PriceRegistryHelper internal s_priceRegistry;
- // Cheat to store the price updates in storage since struct arrays aren't supported.
- bytes internal s_encodedInitialPriceUpdates;
- address internal s_weth;
-
- address[] internal s_sourceFeeTokens;
- uint224[] internal s_sourceTokenPrices;
- address[] internal s_destFeeTokens;
- uint224[] internal s_destTokenPrices;
-
- PriceRegistry.PremiumMultiplierWeiPerEthArgs[] internal s_priceRegistryPremiumMultiplierWeiPerEthArgs;
- PriceRegistry.TokenTransferFeeConfigArgs[] internal s_priceRegistryTokenTransferFeeConfigArgs;
-
- mapping(address token => address dataFeedAddress) internal s_dataFeedByToken;
-
- function setUp() public virtual override {
- TokenSetup.setUp();
-
- _deployTokenPriceDataFeed(s_sourceFeeToken, 8, 1e8);
-
- s_weth = s_sourceRouter.getWrappedNative();
- _deployTokenPriceDataFeed(s_weth, 8, 1e11);
-
- address[] memory sourceFeeTokens = new address[](3);
- sourceFeeTokens[0] = s_sourceTokens[0];
- sourceFeeTokens[1] = s_sourceTokens[1];
- sourceFeeTokens[2] = s_sourceRouter.getWrappedNative();
- s_sourceFeeTokens = sourceFeeTokens;
-
- uint224[] memory sourceTokenPrices = new uint224[](3);
- sourceTokenPrices[0] = 5e18;
- sourceTokenPrices[1] = 2000e18;
- sourceTokenPrices[2] = 2000e18;
- s_sourceTokenPrices = sourceTokenPrices;
-
- address[] memory destFeeTokens = new address[](3);
- destFeeTokens[0] = s_destTokens[0];
- destFeeTokens[1] = s_destTokens[1];
- destFeeTokens[2] = s_destRouter.getWrappedNative();
- s_destFeeTokens = destFeeTokens;
-
- uint224[] memory destTokenPrices = new uint224[](3);
- destTokenPrices[0] = 5e18;
- destTokenPrices[1] = 2000e18;
- destTokenPrices[2] = 2000e18;
- s_destTokenPrices = destTokenPrices;
-
- uint256 sourceTokenCount = sourceFeeTokens.length;
- uint256 destTokenCount = destFeeTokens.length;
- address[] memory pricedTokens = new address[](sourceTokenCount + destTokenCount);
- uint224[] memory tokenPrices = new uint224[](sourceTokenCount + destTokenCount);
- for (uint256 i = 0; i < sourceTokenCount; ++i) {
- pricedTokens[i] = sourceFeeTokens[i];
- tokenPrices[i] = sourceTokenPrices[i];
- }
- for (uint256 i = 0; i < destTokenCount; ++i) {
- pricedTokens[i + sourceTokenCount] = destFeeTokens[i];
- tokenPrices[i + sourceTokenCount] = destTokenPrices[i];
- }
-
- Internal.PriceUpdates memory priceUpdates = getPriceUpdatesStruct(pricedTokens, tokenPrices);
- priceUpdates.gasPriceUpdates =
- getSingleGasPriceUpdateStruct(DEST_CHAIN_SELECTOR, PACKED_USD_PER_GAS).gasPriceUpdates;
-
- s_encodedInitialPriceUpdates = abi.encode(priceUpdates);
-
- address[] memory priceUpdaters = new address[](1);
- priceUpdaters[0] = OWNER;
- address[] memory feeTokens = new address[](2);
- feeTokens[0] = s_sourceTokens[0];
- feeTokens[1] = s_weth;
- PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](0);
-
- s_priceRegistryPremiumMultiplierWeiPerEthArgs.push(
- PriceRegistry.PremiumMultiplierWeiPerEthArgs({
- token: s_sourceFeeToken,
- premiumMultiplierWeiPerEth: 5e17 // 0.5x
- })
- );
- s_priceRegistryPremiumMultiplierWeiPerEthArgs.push(
- PriceRegistry.PremiumMultiplierWeiPerEthArgs({
- token: s_sourceRouter.getWrappedNative(),
- premiumMultiplierWeiPerEth: 2e18 // 2x
- })
- );
-
- s_priceRegistryTokenTransferFeeConfigArgs.push();
- s_priceRegistryTokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR;
- s_priceRegistryTokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs.push(
- PriceRegistry.TokenTransferFeeConfigSingleTokenArgs({
- token: s_sourceFeeToken,
- tokenTransferFeeConfig: PriceRegistry.TokenTransferFeeConfig({
- minFeeUSDCents: 1_00, // 1 USD
- maxFeeUSDCents: 1000_00, // 1,000 USD
- deciBps: 2_5, // 2.5 bps, or 0.025%
- destGasOverhead: 40_000,
- destBytesOverhead: 32,
- isEnabled: true
- })
- })
- );
- s_priceRegistryTokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs.push(
- PriceRegistry.TokenTransferFeeConfigSingleTokenArgs({
- token: CUSTOM_TOKEN,
- tokenTransferFeeConfig: PriceRegistry.TokenTransferFeeConfig({
- minFeeUSDCents: 2_00, // 1 USD
- maxFeeUSDCents: 2000_00, // 1,000 USD
- deciBps: 10_0, // 10 bps, or 0.1%
- destGasOverhead: 1,
- destBytesOverhead: 200,
- isEnabled: true
- })
- })
- );
-
- s_priceRegistry = new PriceRegistryHelper(
- PriceRegistry.StaticConfig({
- linkToken: s_sourceTokens[0],
- maxFeeJuelsPerMsg: MAX_MSG_FEES_JUELS,
- stalenessThreshold: uint32(TWELVE_HOURS)
- }),
- priceUpdaters,
- feeTokens,
- tokenPriceFeedUpdates,
- s_priceRegistryTokenTransferFeeConfigArgs,
- s_priceRegistryPremiumMultiplierWeiPerEthArgs,
- _generatePriceRegistryDestChainConfigArgs()
- );
- s_priceRegistry.updatePrices(priceUpdates);
- }
-
- function _deployTokenPriceDataFeed(address token, uint8 decimals, int256 initialAnswer) internal returns (address) {
- MockV3Aggregator dataFeed = new MockV3Aggregator(decimals, initialAnswer);
- s_dataFeedByToken[token] = address(dataFeed);
- return address(dataFeed);
- }
-
- function getPriceUpdatesStruct(
- address[] memory tokens,
- uint224[] memory prices
- ) internal pure returns (Internal.PriceUpdates memory) {
- uint256 length = tokens.length;
-
- Internal.TokenPriceUpdate[] memory tokenPriceUpdates = new Internal.TokenPriceUpdate[](length);
- for (uint256 i = 0; i < length; ++i) {
- tokenPriceUpdates[i] = Internal.TokenPriceUpdate({sourceToken: tokens[i], usdPerToken: prices[i]});
- }
- Internal.PriceUpdates memory priceUpdates =
- Internal.PriceUpdates({tokenPriceUpdates: tokenPriceUpdates, gasPriceUpdates: new Internal.GasPriceUpdate[](0)});
-
- return priceUpdates;
- }
-
- function getEmptyPriceUpdates() internal pure returns (Internal.PriceUpdates memory priceUpdates) {
- return Internal.PriceUpdates({
- tokenPriceUpdates: new Internal.TokenPriceUpdate[](0),
- gasPriceUpdates: new Internal.GasPriceUpdate[](0)
- });
- }
-
- function getSingleTokenPriceFeedUpdateStruct(
- address sourceToken,
- address dataFeedAddress,
- uint8 tokenDecimals
- ) internal pure returns (PriceRegistry.TokenPriceFeedUpdate memory) {
- return PriceRegistry.TokenPriceFeedUpdate({
- sourceToken: sourceToken,
- feedConfig: IPriceRegistry.TokenPriceFeedConfig({dataFeedAddress: dataFeedAddress, tokenDecimals: tokenDecimals})
- });
- }
-
- function _initialiseSingleTokenPriceFeed() internal returns (address) {
- PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
- s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
- return s_sourceTokens[0];
- }
-
- function _generateTokenTransferFeeConfigArgs(
- uint256 destChainSelectorLength,
- uint256 tokenLength
- ) internal pure returns (PriceRegistry.TokenTransferFeeConfigArgs[] memory) {
- PriceRegistry.TokenTransferFeeConfigArgs[] memory tokenTransferFeeConfigArgs =
- new PriceRegistry.TokenTransferFeeConfigArgs[](destChainSelectorLength);
- for (uint256 i = 0; i < destChainSelectorLength; ++i) {
- tokenTransferFeeConfigArgs[i].tokenTransferFeeConfigs =
- new PriceRegistry.TokenTransferFeeConfigSingleTokenArgs[](tokenLength);
- }
- return tokenTransferFeeConfigArgs;
- }
-
- function _generatePriceRegistryDestChainConfigArgs()
- internal
- pure
- returns (PriceRegistry.DestChainConfigArgs[] memory)
- {
- PriceRegistry.DestChainConfigArgs[] memory destChainConfigs = new PriceRegistry.DestChainConfigArgs[](1);
- destChainConfigs[0] = PriceRegistry.DestChainConfigArgs({
- destChainSelector: DEST_CHAIN_SELECTOR,
- destChainConfig: PriceRegistry.DestChainConfig({
- isEnabled: true,
- maxNumberOfTokensPerMsg: MAX_TOKENS_LENGTH,
- destGasOverhead: DEST_GAS_OVERHEAD,
- destGasPerPayloadByte: DEST_GAS_PER_PAYLOAD_BYTE,
- destDataAvailabilityOverheadGas: DEST_DATA_AVAILABILITY_OVERHEAD_GAS,
- destGasPerDataAvailabilityByte: DEST_GAS_PER_DATA_AVAILABILITY_BYTE,
- destDataAvailabilityMultiplierBps: DEST_GAS_DATA_AVAILABILITY_MULTIPLIER_BPS,
- maxDataBytes: MAX_DATA_SIZE,
- maxPerMsgGasLimit: MAX_GAS_LIMIT,
- defaultTokenFeeUSDCents: DEFAULT_TOKEN_FEE_USD_CENTS,
- defaultTokenDestGasOverhead: DEFAULT_TOKEN_DEST_GAS_OVERHEAD,
- defaultTokenDestBytesOverhead: DEFAULT_TOKEN_BYTES_OVERHEAD,
- defaultTxGasLimit: GAS_LIMIT,
- gasMultiplierWeiPerEth: 5e17,
- networkFeeUSDCents: 1_00,
- enforceOutOfOrder: false,
- chainFamilySelector: Internal.CHAIN_FAMILY_SELECTOR_EVM
- })
- });
- return destChainConfigs;
- }
-
- function _assertTokenPriceFeedConfigEquality(
- IPriceRegistry.TokenPriceFeedConfig memory config1,
- IPriceRegistry.TokenPriceFeedConfig memory config2
- ) internal pure virtual {
- assertEq(config1.dataFeedAddress, config2.dataFeedAddress);
- assertEq(config1.tokenDecimals, config2.tokenDecimals);
- }
-
- function _assertTokenPriceFeedConfigUnconfigured(IPriceRegistry.TokenPriceFeedConfig memory config)
- internal
- pure
- virtual
- {
- _assertTokenPriceFeedConfigEquality(
- config, IPriceRegistry.TokenPriceFeedConfig({dataFeedAddress: address(0), tokenDecimals: 0})
- );
- }
-
- function _assertTokenTransferFeeConfigEqual(
- PriceRegistry.TokenTransferFeeConfig memory a,
- PriceRegistry.TokenTransferFeeConfig memory b
- ) internal pure {
- assertEq(a.minFeeUSDCents, b.minFeeUSDCents);
- assertEq(a.maxFeeUSDCents, b.maxFeeUSDCents);
- assertEq(a.deciBps, b.deciBps);
- assertEq(a.destGasOverhead, b.destGasOverhead);
- assertEq(a.destBytesOverhead, b.destBytesOverhead);
- assertEq(a.isEnabled, b.isEnabled);
- }
-
- function _assertPriceRegistryStaticConfigsEqual(
- PriceRegistry.StaticConfig memory a,
- PriceRegistry.StaticConfig memory b
- ) internal pure {
- assertEq(a.linkToken, b.linkToken);
- assertEq(a.maxFeeJuelsPerMsg, b.maxFeeJuelsPerMsg);
- }
-
- function _assertPriceRegistryDestChainConfigsEqual(
- PriceRegistry.DestChainConfig memory a,
- PriceRegistry.DestChainConfig memory b
- ) internal pure {
- assertEq(a.isEnabled, b.isEnabled);
- assertEq(a.maxNumberOfTokensPerMsg, b.maxNumberOfTokensPerMsg);
- assertEq(a.maxDataBytes, b.maxDataBytes);
- assertEq(a.maxPerMsgGasLimit, b.maxPerMsgGasLimit);
- assertEq(a.destGasOverhead, b.destGasOverhead);
- assertEq(a.destGasPerPayloadByte, b.destGasPerPayloadByte);
- assertEq(a.destDataAvailabilityOverheadGas, b.destDataAvailabilityOverheadGas);
- assertEq(a.destGasPerDataAvailabilityByte, b.destGasPerDataAvailabilityByte);
- assertEq(a.destDataAvailabilityMultiplierBps, b.destDataAvailabilityMultiplierBps);
- assertEq(a.defaultTokenFeeUSDCents, b.defaultTokenFeeUSDCents);
- assertEq(a.defaultTokenDestGasOverhead, b.defaultTokenDestGasOverhead);
- assertEq(a.defaultTokenDestBytesOverhead, b.defaultTokenDestBytesOverhead);
- assertEq(a.defaultTxGasLimit, b.defaultTxGasLimit);
- }
-}
-
-contract PriceRegistryFeeSetup is PriceRegistrySetup {
- uint224 internal s_feeTokenPrice;
- uint224 internal s_wrappedTokenPrice;
- uint224 internal s_customTokenPrice;
-
- address internal s_selfServeTokenDefaultPricing = makeAddr("self-serve-token-default-pricing");
-
- address internal s_destTokenPool = makeAddr("destTokenPool");
- address internal s_destToken = makeAddr("destToken");
-
- function setUp() public virtual override {
- super.setUp();
-
- s_feeTokenPrice = s_sourceTokenPrices[0];
- s_wrappedTokenPrice = s_sourceTokenPrices[2];
- s_customTokenPrice = CUSTOM_TOKEN_PRICE;
-
- s_priceRegistry.updatePrices(getSingleTokenPriceUpdateStruct(CUSTOM_TOKEN, CUSTOM_TOKEN_PRICE));
- }
-
- function _generateEmptyMessage() public view returns (Client.EVM2AnyMessage memory) {
- return Client.EVM2AnyMessage({
- receiver: abi.encode(OWNER),
- data: "",
- tokenAmounts: new Client.EVMTokenAmount[](0),
- feeToken: s_sourceFeeToken,
- extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: GAS_LIMIT}))
- });
- }
-
- function _generateSingleTokenMessage(
- address token,
- uint256 amount
- ) public view returns (Client.EVM2AnyMessage memory) {
- Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
- tokenAmounts[0] = Client.EVMTokenAmount({token: token, amount: amount});
-
- return Client.EVM2AnyMessage({
- receiver: abi.encode(OWNER),
- data: "",
- tokenAmounts: tokenAmounts,
- feeToken: s_sourceFeeToken,
- extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: GAS_LIMIT}))
- });
- }
-
- function _messageToEvent(
- Client.EVM2AnyMessage memory message,
- uint64 sourceChainSelector,
- uint64 destChainSelector,
- uint64 seqNum,
- uint64 nonce,
- uint256 feeTokenAmount,
- address originalSender,
- bytes32 metadataHash,
- TokenAdminRegistry tokenAdminRegistry
- ) internal view returns (Internal.EVM2AnyRampMessage memory) {
- Client.EVMExtraArgsV2 memory extraArgs =
- s_priceRegistry.parseEVMExtraArgsFromBytes(message.extraArgs, destChainSelector);
-
- Internal.EVM2AnyRampMessage memory messageEvent = Internal.EVM2AnyRampMessage({
- header: Internal.RampMessageHeader({
- messageId: "",
- sourceChainSelector: sourceChainSelector,
- destChainSelector: destChainSelector,
- sequenceNumber: seqNum,
- nonce: extraArgs.allowOutOfOrderExecution ? 0 : nonce
- }),
- sender: originalSender,
- data: message.data,
- receiver: message.receiver,
- extraArgs: Client._argsToBytes(extraArgs),
- feeToken: message.feeToken,
- feeTokenAmount: feeTokenAmount,
- tokenAmounts: new Internal.RampTokenAmount[](message.tokenAmounts.length)
- });
-
- for (uint256 i = 0; i < message.tokenAmounts.length; ++i) {
- messageEvent.tokenAmounts[i] = _getSourceTokenData(message.tokenAmounts[i], tokenAdminRegistry);
- }
-
- messageEvent.header.messageId = Internal._hash(messageEvent, metadataHash);
- return messageEvent;
- }
-
- function _getSourceTokenData(
- Client.EVMTokenAmount memory tokenAmount,
- TokenAdminRegistry tokenAdminRegistry
- ) internal view returns (Internal.RampTokenAmount memory) {
- address destToken = s_destTokenBySourceToken[tokenAmount.token];
-
- return Internal.RampTokenAmount({
- sourcePoolAddress: abi.encode(tokenAdminRegistry.getTokenConfig(tokenAmount.token).tokenPool),
- destTokenAddress: abi.encode(destToken),
- extraData: "",
- amount: tokenAmount.amount
- });
- }
-
- function calcUSDValueFromTokenAmount(uint224 tokenPrice, uint256 tokenAmount) internal pure returns (uint256) {
- return (tokenPrice * tokenAmount) / 1e18;
- }
-
- function applyBpsRatio(uint256 tokenAmount, uint16 ratio) internal pure returns (uint256) {
- return (tokenAmount * ratio) / 1e5;
- }
-
- function configUSDCentToWei(uint256 usdCent) internal pure returns (uint256) {
- return usdCent * 1e16;
- }
-}
contract PriceRegistry_constructor is PriceRegistrySetup {
function test_Setup_Success() public virtual {
@@ -441,9 +23,9 @@ contract PriceRegistry_constructor is PriceRegistrySetup {
feeTokens[1] = s_sourceTokens[1];
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](2);
tokenPriceFeedUpdates[0] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
tokenPriceFeedUpdates[1] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[1], s_dataFeedByToken[s_sourceTokens[1]], 6);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[1], s_dataFeedByToken[s_sourceTokens[1]], 6);
PriceRegistry.DestChainConfigArgs[] memory destChainConfigArgs = _generatePriceRegistryDestChainConfigArgs();
@@ -641,7 +223,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 18, int256(uint256(type(uint224).max)));
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
uint224 tokenPriceAnswer = s_priceRegistry.getValidatedTokenPrice(tokenAddress);
@@ -655,7 +237,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 8, 1e8);
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 6);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 6);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
uint224 tokenPriceAnswer = s_priceRegistry.getValidatedTokenPrice(tokenAddress);
@@ -669,7 +251,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 8, 1e8);
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 24);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 24);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
uint224 tokenPriceAnswer = s_priceRegistry.getValidatedTokenPrice(tokenAddress);
@@ -683,7 +265,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 18, 1e18);
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
uint224 tokenPriceAnswer = s_priceRegistry.getValidatedTokenPrice(tokenAddress);
@@ -697,7 +279,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 0, 1e31);
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 0);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 0);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
uint224 tokenPriceAnswer = s_priceRegistry.getValidatedTokenPrice(tokenAddress);
@@ -711,7 +293,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 20, 1e18);
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 20);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 20);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
uint224 tokenPriceAnswer = s_priceRegistry.getValidatedTokenPrice(tokenAddress);
@@ -738,7 +320,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 18, int256(uint256(type(uint224).max) + 1));
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
vm.expectRevert(PriceRegistry.DataFeedValueOutOfUint224Range.selector);
@@ -750,7 +332,7 @@ contract PriceRegistry_getValidatedTokenPrice is PriceRegistrySetup {
address feedAddress = _deployTokenPriceDataFeed(tokenAddress, 18, -1);
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
- tokenPriceFeedUpdates[0] = getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
+ tokenPriceFeedUpdates[0] = _getSingleTokenPriceFeedUpdateStruct(tokenAddress, feedAddress, 18);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
vm.expectRevert(PriceRegistry.DataFeedValueOutOfUint224Range.selector);
@@ -1050,7 +632,7 @@ contract PriceRegistry_updateTokenPriceFeeds is PriceRegistrySetup {
function test_SingleFeedUpdate_Success() public {
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
tokenPriceFeedUpdates[0] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
_assertTokenPriceFeedConfigUnconfigured(
s_priceRegistry.getTokenPriceFeedConfig(tokenPriceFeedUpdates[0].sourceToken)
@@ -1073,7 +655,7 @@ contract PriceRegistry_updateTokenPriceFeeds is PriceRegistrySetup {
for (uint256 i = 0; i < 2; ++i) {
tokenPriceFeedUpdates[i] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[i], s_dataFeedByToken[s_sourceTokens[i]], 18);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[i], s_dataFeedByToken[s_sourceTokens[i]], 18);
_assertTokenPriceFeedConfigUnconfigured(
s_priceRegistry.getTokenPriceFeedConfig(tokenPriceFeedUpdates[i].sourceToken)
@@ -1102,7 +684,7 @@ contract PriceRegistry_updateTokenPriceFeeds is PriceRegistrySetup {
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
tokenPriceFeedUpdates[0] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
_assertTokenPriceFeedConfigEquality(
@@ -1129,7 +711,7 @@ contract PriceRegistry_updateTokenPriceFeeds is PriceRegistrySetup {
function test_FeedNotUpdated() public {
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
tokenPriceFeedUpdates[0] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
@@ -1144,7 +726,7 @@ contract PriceRegistry_updateTokenPriceFeeds is PriceRegistrySetup {
function test_FeedUpdatedByNonOwner_Revert() public {
PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
tokenPriceFeedUpdates[0] =
- getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
vm.startPrank(STRANGER);
vm.expectRevert("Only callable by owner");
@@ -1713,7 +1295,7 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
(uint256 feeUSDWei, uint32 destGasOverhead, uint32 destBytesOverhead) =
s_priceRegistry.getTokenTransferCost(DEST_CHAIN_SELECTOR, message.feeToken, s_feeTokenPrice, message.tokenAmounts);
- assertEq(configUSDCentToWei(transferFeeConfig.minFeeUSDCents), feeUSDWei);
+ assertEq(_configUSDCentToWei(transferFeeConfig.minFeeUSDCents), feeUSDWei);
assertEq(transferFeeConfig.destGasOverhead, destGasOverhead);
assertEq(transferFeeConfig.destBytesOverhead, destBytesOverhead);
}
@@ -1726,7 +1308,7 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
(uint256 feeUSDWei, uint32 destGasOverhead, uint32 destBytesOverhead) =
s_priceRegistry.getTokenTransferCost(DEST_CHAIN_SELECTOR, message.feeToken, s_feeTokenPrice, message.tokenAmounts);
- assertEq(configUSDCentToWei(transferFeeConfig.minFeeUSDCents), feeUSDWei);
+ assertEq(_configUSDCentToWei(transferFeeConfig.minFeeUSDCents), feeUSDWei);
assertEq(transferFeeConfig.destGasOverhead, destGasOverhead);
assertEq(transferFeeConfig.destBytesOverhead, destBytesOverhead);
}
@@ -1739,7 +1321,7 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
(uint256 feeUSDWei, uint32 destGasOverhead, uint32 destBytesOverhead) =
s_priceRegistry.getTokenTransferCost(DEST_CHAIN_SELECTOR, message.feeToken, s_feeTokenPrice, message.tokenAmounts);
- assertEq(configUSDCentToWei(transferFeeConfig.maxFeeUSDCents), feeUSDWei);
+ assertEq(_configUSDCentToWei(transferFeeConfig.maxFeeUSDCents), feeUSDWei);
assertEq(transferFeeConfig.destGasOverhead, destGasOverhead);
assertEq(transferFeeConfig.destBytesOverhead, destBytesOverhead);
}
@@ -1754,8 +1336,8 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
(uint256 feeUSDWei, uint32 destGasOverhead, uint32 destBytesOverhead) =
s_priceRegistry.getTokenTransferCost(DEST_CHAIN_SELECTOR, message.feeToken, s_feeTokenPrice, message.tokenAmounts);
- uint256 usdWei = calcUSDValueFromTokenAmount(s_feeTokenPrice, tokenAmount);
- uint256 bpsUSDWei = applyBpsRatio(
+ uint256 usdWei = _calcUSDValueFromTokenAmount(s_feeTokenPrice, tokenAmount);
+ uint256 bpsUSDWei = _applyBpsRatio(
usdWei, s_priceRegistryTokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig.deciBps
);
@@ -1782,8 +1364,8 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
(uint256 feeUSDWei, uint32 destGasOverhead, uint32 destBytesOverhead) =
s_priceRegistry.getTokenTransferCost(DEST_CHAIN_SELECTOR, message.feeToken, s_feeTokenPrice, message.tokenAmounts);
- uint256 usdWei = calcUSDValueFromTokenAmount(s_customTokenPrice, tokenAmount);
- uint256 bpsUSDWei = applyBpsRatio(
+ uint256 usdWei = _calcUSDValueFromTokenAmount(s_customTokenPrice, tokenAmount);
+ uint256 bpsUSDWei = _applyBpsRatio(
usdWei, s_priceRegistryTokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[1].tokenTransferFeeConfig.deciBps
);
@@ -1816,7 +1398,9 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
// if token charges 0 bps, it should cost minFee to transfer
assertEq(
- configUSDCentToWei(tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig.minFeeUSDCents),
+ _configUSDCentToWei(
+ tokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs[0].tokenTransferFeeConfig.minFeeUSDCents
+ ),
feeUSDWei
);
assertEq(0, destGasOverhead);
@@ -1888,7 +1472,7 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
uint256 expectedFeeUSDWei = 0;
for (uint256 i = 0; i < testTokens.length; ++i) {
- expectedFeeUSDWei += configUSDCentToWei(
+ expectedFeeUSDWei += _configUSDCentToWei(
tokenTransferFeeConfigs[i].minFeeUSDCents == 0
? DEFAULT_TOKEN_FEE_USD_CENTS
: tokenTransferFeeConfigs[i].minFeeUSDCents
@@ -1902,15 +1486,15 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
// Set 1st token transfer to a meaningful amount so its bps fee is now between min and max fee
message.tokenAmounts[0] = Client.EVMTokenAmount({token: testTokens[0], amount: 10000e18});
- uint256 token0USDWei = applyBpsRatio(
- calcUSDValueFromTokenAmount(tokenPrices[0], message.tokenAmounts[0].amount), tokenTransferFeeConfigs[0].deciBps
+ uint256 token0USDWei = _applyBpsRatio(
+ _calcUSDValueFromTokenAmount(tokenPrices[0], message.tokenAmounts[0].amount), tokenTransferFeeConfigs[0].deciBps
);
- uint256 token1USDWei = configUSDCentToWei(DEFAULT_TOKEN_FEE_USD_CENTS);
+ uint256 token1USDWei = _configUSDCentToWei(DEFAULT_TOKEN_FEE_USD_CENTS);
(feeUSDWei, destGasOverhead, destBytesOverhead) = s_priceRegistry.getTokenTransferCost(
DEST_CHAIN_SELECTOR, message.feeToken, s_wrappedTokenPrice, message.tokenAmounts
);
- expectedFeeUSDWei = token0USDWei + token1USDWei + configUSDCentToWei(tokenTransferFeeConfigs[2].minFeeUSDCents);
+ expectedFeeUSDWei = token0USDWei + token1USDWei + _configUSDCentToWei(tokenTransferFeeConfigs[2].minFeeUSDCents);
assertEq(expectedFeeUSDWei, feeUSDWei, "wrong feeUSDWei 2");
assertEq(expectedTotalGas, destGasOverhead, "wrong destGasOverhead 2");
@@ -1922,7 +1506,7 @@ contract PriceRegistry_getTokenTransferCost is PriceRegistryFeeSetup {
(feeUSDWei, destGasOverhead, destBytesOverhead) = s_priceRegistry.getTokenTransferCost(
DEST_CHAIN_SELECTOR, message.feeToken, s_wrappedTokenPrice, message.tokenAmounts
);
- expectedFeeUSDWei = token0USDWei + token1USDWei + configUSDCentToWei(tokenTransferFeeConfigs[2].maxFeeUSDCents);
+ expectedFeeUSDWei = token0USDWei + token1USDWei + _configUSDCentToWei(tokenTransferFeeConfigs[2].maxFeeUSDCents);
assertEq(expectedFeeUSDWei, feeUSDWei, "wrong feeUSDWei 3");
assertEq(expectedTotalGas, destGasOverhead, "wrong destGasOverhead 3");
@@ -1947,7 +1531,7 @@ contract PriceRegistry_getValidatedFee is PriceRegistryFeeSetup {
uint256 gasUsed = GAS_LIMIT + DEST_GAS_OVERHEAD;
uint256 gasFeeUSD = (gasUsed * destChainConfig.gasMultiplierWeiPerEth * USD_PER_GAS);
- uint256 messageFeeUSD = (configUSDCentToWei(destChainConfig.networkFeeUSDCents) * premiumMultiplierWeiPerEth);
+ uint256 messageFeeUSD = (_configUSDCentToWei(destChainConfig.networkFeeUSDCents) * premiumMultiplierWeiPerEth);
uint256 dataAvailabilityFeeUSD = s_priceRegistry.getDataAvailabilityCost(
DEST_CHAIN_SELECTOR, USD_PER_DATA_AVAILABILITY_GAS, message.data.length, message.tokenAmounts.length, 0
);
@@ -1972,7 +1556,7 @@ contract PriceRegistry_getValidatedFee is PriceRegistryFeeSetup {
uint256 gasUsed = GAS_LIMIT + DEST_GAS_OVERHEAD;
uint256 gasFeeUSD = (gasUsed * destChainConfig.gasMultiplierWeiPerEth * USD_PER_GAS);
- uint256 messageFeeUSD = (configUSDCentToWei(destChainConfig.networkFeeUSDCents) * premiumMultiplierWeiPerEth);
+ uint256 messageFeeUSD = (_configUSDCentToWei(destChainConfig.networkFeeUSDCents) * premiumMultiplierWeiPerEth);
uint256 totalPriceInFeeToken = (gasFeeUSD + messageFeeUSD) / s_feeTokenPrice;
assertEq(totalPriceInFeeToken, feeAmount);
@@ -1999,7 +1583,7 @@ contract PriceRegistry_getValidatedFee is PriceRegistryFeeSetup {
uint256 feeAmount = s_priceRegistry.getValidatedFee(DEST_CHAIN_SELECTOR, message);
uint256 gasUsed = customGasLimit + DEST_GAS_OVERHEAD + customDataSize * DEST_GAS_PER_PAYLOAD_BYTE;
uint256 gasFeeUSD = (gasUsed * destChainConfig.gasMultiplierWeiPerEth * USD_PER_GAS);
- uint256 messageFeeUSD = (configUSDCentToWei(destChainConfig.networkFeeUSDCents) * premiumMultiplierWeiPerEth);
+ uint256 messageFeeUSD = (_configUSDCentToWei(destChainConfig.networkFeeUSDCents) * premiumMultiplierWeiPerEth);
uint256 dataAvailabilityFeeUSD = s_priceRegistry.getDataAvailabilityCost(
DEST_CHAIN_SELECTOR, USD_PER_DATA_AVAILABILITY_GAS, message.data.length, message.tokenAmounts.length, 0
);
diff --git a/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistrySetup.t.sol b/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistrySetup.t.sol
new file mode 100644
index 00000000000..6a4a1e32052
--- /dev/null
+++ b/contracts/src/v0.8/ccip/test/priceRegistry/PriceRegistrySetup.t.sol
@@ -0,0 +1,418 @@
+// SPDX-License-Identifier: BUSL-1.1
+pragma solidity 0.8.24;
+
+import {IPriceRegistry} from "../../interfaces/IPriceRegistry.sol";
+
+import {MockV3Aggregator} from "../../../tests/MockV3Aggregator.sol";
+import {PriceRegistry} from "../../PriceRegistry.sol";
+import {Client} from "../../libraries/Client.sol";
+import {Internal} from "../../libraries/Internal.sol";
+import {TokenAdminRegistry} from "../../tokenAdminRegistry/TokenAdminRegistry.sol";
+import {TokenSetup} from "../TokenSetup.t.sol";
+import {PriceRegistryHelper} from "../helpers/PriceRegistryHelper.sol";
+
+contract PriceRegistrySetup is TokenSetup {
+ uint112 internal constant USD_PER_GAS = 1e6; // 0.001 gwei
+ uint112 internal constant USD_PER_DATA_AVAILABILITY_GAS = 1e9; // 1 gwei
+
+ address internal constant CUSTOM_TOKEN = address(12345);
+ uint224 internal constant CUSTOM_TOKEN_PRICE = 1e17; // $0.1 CUSTOM
+
+ // Encode L1 gas price and L2 gas price into a packed price.
+ // L1 gas price is left-shifted to the higher-order bits.
+ uint224 internal constant PACKED_USD_PER_GAS =
+ (uint224(USD_PER_DATA_AVAILABILITY_GAS) << Internal.GAS_PRICE_BITS) + USD_PER_GAS;
+
+ PriceRegistryHelper internal s_priceRegistry;
+ // Cheat to store the price updates in storage since struct arrays aren't supported.
+ bytes internal s_encodedInitialPriceUpdates;
+ address internal s_weth;
+
+ address[] internal s_sourceFeeTokens;
+ uint224[] internal s_sourceTokenPrices;
+ address[] internal s_destFeeTokens;
+ uint224[] internal s_destTokenPrices;
+
+ PriceRegistry.PremiumMultiplierWeiPerEthArgs[] internal s_priceRegistryPremiumMultiplierWeiPerEthArgs;
+ PriceRegistry.TokenTransferFeeConfigArgs[] internal s_priceRegistryTokenTransferFeeConfigArgs;
+
+ mapping(address token => address dataFeedAddress) internal s_dataFeedByToken;
+
+ function setUp() public virtual override {
+ TokenSetup.setUp();
+
+ _deployTokenPriceDataFeed(s_sourceFeeToken, 8, 1e8);
+
+ s_weth = s_sourceRouter.getWrappedNative();
+ _deployTokenPriceDataFeed(s_weth, 8, 1e11);
+
+ address[] memory sourceFeeTokens = new address[](3);
+ sourceFeeTokens[0] = s_sourceTokens[0];
+ sourceFeeTokens[1] = s_sourceTokens[1];
+ sourceFeeTokens[2] = s_sourceRouter.getWrappedNative();
+ s_sourceFeeTokens = sourceFeeTokens;
+
+ uint224[] memory sourceTokenPrices = new uint224[](3);
+ sourceTokenPrices[0] = 5e18;
+ sourceTokenPrices[1] = 2000e18;
+ sourceTokenPrices[2] = 2000e18;
+ s_sourceTokenPrices = sourceTokenPrices;
+
+ address[] memory destFeeTokens = new address[](3);
+ destFeeTokens[0] = s_destTokens[0];
+ destFeeTokens[1] = s_destTokens[1];
+ destFeeTokens[2] = s_destRouter.getWrappedNative();
+ s_destFeeTokens = destFeeTokens;
+
+ uint224[] memory destTokenPrices = new uint224[](3);
+ destTokenPrices[0] = 5e18;
+ destTokenPrices[1] = 2000e18;
+ destTokenPrices[2] = 2000e18;
+ s_destTokenPrices = destTokenPrices;
+
+ uint256 sourceTokenCount = sourceFeeTokens.length;
+ uint256 destTokenCount = destFeeTokens.length;
+ address[] memory pricedTokens = new address[](sourceTokenCount + destTokenCount);
+ uint224[] memory tokenPrices = new uint224[](sourceTokenCount + destTokenCount);
+ for (uint256 i = 0; i < sourceTokenCount; ++i) {
+ pricedTokens[i] = sourceFeeTokens[i];
+ tokenPrices[i] = sourceTokenPrices[i];
+ }
+ for (uint256 i = 0; i < destTokenCount; ++i) {
+ pricedTokens[i + sourceTokenCount] = destFeeTokens[i];
+ tokenPrices[i + sourceTokenCount] = destTokenPrices[i];
+ }
+
+ Internal.PriceUpdates memory priceUpdates = _getPriceUpdatesStruct(pricedTokens, tokenPrices);
+ priceUpdates.gasPriceUpdates = new Internal.GasPriceUpdate[](1);
+ priceUpdates.gasPriceUpdates[0] =
+ Internal.GasPriceUpdate({destChainSelector: DEST_CHAIN_SELECTOR, usdPerUnitGas: PACKED_USD_PER_GAS});
+
+ s_encodedInitialPriceUpdates = abi.encode(priceUpdates);
+
+ address[] memory priceUpdaters = new address[](1);
+ priceUpdaters[0] = OWNER;
+ address[] memory feeTokens = new address[](2);
+ feeTokens[0] = s_sourceTokens[0];
+ feeTokens[1] = s_weth;
+ PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](0);
+
+ s_priceRegistryPremiumMultiplierWeiPerEthArgs.push(
+ PriceRegistry.PremiumMultiplierWeiPerEthArgs({
+ token: s_sourceFeeToken,
+ premiumMultiplierWeiPerEth: 5e17 // 0.5x
+ })
+ );
+ s_priceRegistryPremiumMultiplierWeiPerEthArgs.push(
+ PriceRegistry.PremiumMultiplierWeiPerEthArgs({
+ token: s_sourceRouter.getWrappedNative(),
+ premiumMultiplierWeiPerEth: 2e18 // 2x
+ })
+ );
+
+ s_priceRegistryTokenTransferFeeConfigArgs.push();
+ s_priceRegistryTokenTransferFeeConfigArgs[0].destChainSelector = DEST_CHAIN_SELECTOR;
+ s_priceRegistryTokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs.push(
+ PriceRegistry.TokenTransferFeeConfigSingleTokenArgs({
+ token: s_sourceFeeToken,
+ tokenTransferFeeConfig: PriceRegistry.TokenTransferFeeConfig({
+ minFeeUSDCents: 1_00, // 1 USD
+ maxFeeUSDCents: 1000_00, // 1,000 USD
+ deciBps: 2_5, // 2.5 bps, or 0.025%
+ destGasOverhead: 40_000,
+ destBytesOverhead: 32,
+ isEnabled: true
+ })
+ })
+ );
+ s_priceRegistryTokenTransferFeeConfigArgs[0].tokenTransferFeeConfigs.push(
+ PriceRegistry.TokenTransferFeeConfigSingleTokenArgs({
+ token: CUSTOM_TOKEN,
+ tokenTransferFeeConfig: PriceRegistry.TokenTransferFeeConfig({
+ minFeeUSDCents: 2_00, // 1 USD
+ maxFeeUSDCents: 2000_00, // 1,000 USD
+ deciBps: 10_0, // 10 bps, or 0.1%
+ destGasOverhead: 1,
+ destBytesOverhead: 200,
+ isEnabled: true
+ })
+ })
+ );
+
+ s_priceRegistry = new PriceRegistryHelper(
+ PriceRegistry.StaticConfig({
+ linkToken: s_sourceTokens[0],
+ maxFeeJuelsPerMsg: MAX_MSG_FEES_JUELS,
+ stalenessThreshold: uint32(TWELVE_HOURS)
+ }),
+ priceUpdaters,
+ feeTokens,
+ tokenPriceFeedUpdates,
+ s_priceRegistryTokenTransferFeeConfigArgs,
+ s_priceRegistryPremiumMultiplierWeiPerEthArgs,
+ _generatePriceRegistryDestChainConfigArgs()
+ );
+ s_priceRegistry.updatePrices(priceUpdates);
+ }
+
+ function _deployTokenPriceDataFeed(address token, uint8 decimals, int256 initialAnswer) internal returns (address) {
+ MockV3Aggregator dataFeed = new MockV3Aggregator(decimals, initialAnswer);
+ s_dataFeedByToken[token] = address(dataFeed);
+ return address(dataFeed);
+ }
+
+ function _getPriceUpdatesStruct(
+ address[] memory tokens,
+ uint224[] memory prices
+ ) internal pure returns (Internal.PriceUpdates memory) {
+ uint256 length = tokens.length;
+
+ Internal.TokenPriceUpdate[] memory tokenPriceUpdates = new Internal.TokenPriceUpdate[](length);
+ for (uint256 i = 0; i < length; ++i) {
+ tokenPriceUpdates[i] = Internal.TokenPriceUpdate({sourceToken: tokens[i], usdPerToken: prices[i]});
+ }
+ Internal.PriceUpdates memory priceUpdates =
+ Internal.PriceUpdates({tokenPriceUpdates: tokenPriceUpdates, gasPriceUpdates: new Internal.GasPriceUpdate[](0)});
+
+ return priceUpdates;
+ }
+
+ function _getEmptyPriceUpdates() internal pure returns (Internal.PriceUpdates memory priceUpdates) {
+ return Internal.PriceUpdates({
+ tokenPriceUpdates: new Internal.TokenPriceUpdate[](0),
+ gasPriceUpdates: new Internal.GasPriceUpdate[](0)
+ });
+ }
+
+ function _getSingleTokenPriceFeedUpdateStruct(
+ address sourceToken,
+ address dataFeedAddress,
+ uint8 tokenDecimals
+ ) internal pure returns (PriceRegistry.TokenPriceFeedUpdate memory) {
+ return PriceRegistry.TokenPriceFeedUpdate({
+ sourceToken: sourceToken,
+ feedConfig: IPriceRegistry.TokenPriceFeedConfig({dataFeedAddress: dataFeedAddress, tokenDecimals: tokenDecimals})
+ });
+ }
+
+ function _initialiseSingleTokenPriceFeed() internal returns (address) {
+ PriceRegistry.TokenPriceFeedUpdate[] memory tokenPriceFeedUpdates = new PriceRegistry.TokenPriceFeedUpdate[](1);
+ tokenPriceFeedUpdates[0] =
+ _getSingleTokenPriceFeedUpdateStruct(s_sourceTokens[0], s_dataFeedByToken[s_sourceTokens[0]], 18);
+ s_priceRegistry.updateTokenPriceFeeds(tokenPriceFeedUpdates);
+ return s_sourceTokens[0];
+ }
+
+ function _generateTokenTransferFeeConfigArgs(
+ uint256 destChainSelectorLength,
+ uint256 tokenLength
+ ) internal pure returns (PriceRegistry.TokenTransferFeeConfigArgs[] memory) {
+ PriceRegistry.TokenTransferFeeConfigArgs[] memory tokenTransferFeeConfigArgs =
+ new PriceRegistry.TokenTransferFeeConfigArgs[](destChainSelectorLength);
+ for (uint256 i = 0; i < destChainSelectorLength; ++i) {
+ tokenTransferFeeConfigArgs[i].tokenTransferFeeConfigs =
+ new PriceRegistry.TokenTransferFeeConfigSingleTokenArgs[](tokenLength);
+ }
+ return tokenTransferFeeConfigArgs;
+ }
+
+ function _generatePriceRegistryDestChainConfigArgs()
+ internal
+ pure
+ returns (PriceRegistry.DestChainConfigArgs[] memory)
+ {
+ PriceRegistry.DestChainConfigArgs[] memory destChainConfigs = new PriceRegistry.DestChainConfigArgs[](1);
+ destChainConfigs[0] = PriceRegistry.DestChainConfigArgs({
+ destChainSelector: DEST_CHAIN_SELECTOR,
+ destChainConfig: PriceRegistry.DestChainConfig({
+ isEnabled: true,
+ maxNumberOfTokensPerMsg: MAX_TOKENS_LENGTH,
+ destGasOverhead: DEST_GAS_OVERHEAD,
+ destGasPerPayloadByte: DEST_GAS_PER_PAYLOAD_BYTE,
+ destDataAvailabilityOverheadGas: DEST_DATA_AVAILABILITY_OVERHEAD_GAS,
+ destGasPerDataAvailabilityByte: DEST_GAS_PER_DATA_AVAILABILITY_BYTE,
+ destDataAvailabilityMultiplierBps: DEST_GAS_DATA_AVAILABILITY_MULTIPLIER_BPS,
+ maxDataBytes: MAX_DATA_SIZE,
+ maxPerMsgGasLimit: MAX_GAS_LIMIT,
+ defaultTokenFeeUSDCents: DEFAULT_TOKEN_FEE_USD_CENTS,
+ defaultTokenDestGasOverhead: DEFAULT_TOKEN_DEST_GAS_OVERHEAD,
+ defaultTokenDestBytesOverhead: DEFAULT_TOKEN_BYTES_OVERHEAD,
+ defaultTxGasLimit: GAS_LIMIT,
+ gasMultiplierWeiPerEth: 5e17,
+ networkFeeUSDCents: 1_00,
+ enforceOutOfOrder: false,
+ chainFamilySelector: Internal.CHAIN_FAMILY_SELECTOR_EVM
+ })
+ });
+ return destChainConfigs;
+ }
+
+ function _assertTokenPriceFeedConfigEquality(
+ IPriceRegistry.TokenPriceFeedConfig memory config1,
+ IPriceRegistry.TokenPriceFeedConfig memory config2
+ ) internal pure virtual {
+ assertEq(config1.dataFeedAddress, config2.dataFeedAddress);
+ assertEq(config1.tokenDecimals, config2.tokenDecimals);
+ }
+
+ function _assertTokenPriceFeedConfigUnconfigured(IPriceRegistry.TokenPriceFeedConfig memory config)
+ internal
+ pure
+ virtual
+ {
+ _assertTokenPriceFeedConfigEquality(
+ config, IPriceRegistry.TokenPriceFeedConfig({dataFeedAddress: address(0), tokenDecimals: 0})
+ );
+ }
+
+ function _assertTokenTransferFeeConfigEqual(
+ PriceRegistry.TokenTransferFeeConfig memory a,
+ PriceRegistry.TokenTransferFeeConfig memory b
+ ) internal pure {
+ assertEq(a.minFeeUSDCents, b.minFeeUSDCents);
+ assertEq(a.maxFeeUSDCents, b.maxFeeUSDCents);
+ assertEq(a.deciBps, b.deciBps);
+ assertEq(a.destGasOverhead, b.destGasOverhead);
+ assertEq(a.destBytesOverhead, b.destBytesOverhead);
+ assertEq(a.isEnabled, b.isEnabled);
+ }
+
+ function _assertPriceRegistryStaticConfigsEqual(
+ PriceRegistry.StaticConfig memory a,
+ PriceRegistry.StaticConfig memory b
+ ) internal pure {
+ assertEq(a.linkToken, b.linkToken);
+ assertEq(a.maxFeeJuelsPerMsg, b.maxFeeJuelsPerMsg);
+ }
+
+ function _assertPriceRegistryDestChainConfigsEqual(
+ PriceRegistry.DestChainConfig memory a,
+ PriceRegistry.DestChainConfig memory b
+ ) internal pure {
+ assertEq(a.isEnabled, b.isEnabled);
+ assertEq(a.maxNumberOfTokensPerMsg, b.maxNumberOfTokensPerMsg);
+ assertEq(a.maxDataBytes, b.maxDataBytes);
+ assertEq(a.maxPerMsgGasLimit, b.maxPerMsgGasLimit);
+ assertEq(a.destGasOverhead, b.destGasOverhead);
+ assertEq(a.destGasPerPayloadByte, b.destGasPerPayloadByte);
+ assertEq(a.destDataAvailabilityOverheadGas, b.destDataAvailabilityOverheadGas);
+ assertEq(a.destGasPerDataAvailabilityByte, b.destGasPerDataAvailabilityByte);
+ assertEq(a.destDataAvailabilityMultiplierBps, b.destDataAvailabilityMultiplierBps);
+ assertEq(a.defaultTokenFeeUSDCents, b.defaultTokenFeeUSDCents);
+ assertEq(a.defaultTokenDestGasOverhead, b.defaultTokenDestGasOverhead);
+ assertEq(a.defaultTokenDestBytesOverhead, b.defaultTokenDestBytesOverhead);
+ assertEq(a.defaultTxGasLimit, b.defaultTxGasLimit);
+ }
+}
+
+contract PriceRegistryFeeSetup is PriceRegistrySetup {
+ uint224 internal s_feeTokenPrice;
+ uint224 internal s_wrappedTokenPrice;
+ uint224 internal s_customTokenPrice;
+
+ address internal s_selfServeTokenDefaultPricing = makeAddr("self-serve-token-default-pricing");
+
+ address internal s_destTokenPool = makeAddr("destTokenPool");
+ address internal s_destToken = makeAddr("destToken");
+
+ function setUp() public virtual override {
+ super.setUp();
+
+ s_feeTokenPrice = s_sourceTokenPrices[0];
+ s_wrappedTokenPrice = s_sourceTokenPrices[2];
+ s_customTokenPrice = CUSTOM_TOKEN_PRICE;
+
+ s_priceRegistry.updatePrices(_getSingleTokenPriceUpdateStruct(CUSTOM_TOKEN, CUSTOM_TOKEN_PRICE));
+ }
+
+ function _generateEmptyMessage() public view returns (Client.EVM2AnyMessage memory) {
+ return Client.EVM2AnyMessage({
+ receiver: abi.encode(OWNER),
+ data: "",
+ tokenAmounts: new Client.EVMTokenAmount[](0),
+ feeToken: s_sourceFeeToken,
+ extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: GAS_LIMIT}))
+ });
+ }
+
+ function _generateSingleTokenMessage(
+ address token,
+ uint256 amount
+ ) public view returns (Client.EVM2AnyMessage memory) {
+ Client.EVMTokenAmount[] memory tokenAmounts = new Client.EVMTokenAmount[](1);
+ tokenAmounts[0] = Client.EVMTokenAmount({token: token, amount: amount});
+
+ return Client.EVM2AnyMessage({
+ receiver: abi.encode(OWNER),
+ data: "",
+ tokenAmounts: tokenAmounts,
+ feeToken: s_sourceFeeToken,
+ extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: GAS_LIMIT}))
+ });
+ }
+
+ function _messageToEvent(
+ Client.EVM2AnyMessage memory message,
+ uint64 sourceChainSelector,
+ uint64 destChainSelector,
+ uint64 seqNum,
+ uint64 nonce,
+ uint256 feeTokenAmount,
+ address originalSender,
+ bytes32 metadataHash,
+ TokenAdminRegistry tokenAdminRegistry
+ ) internal view returns (Internal.EVM2AnyRampMessage memory) {
+ Client.EVMExtraArgsV2 memory extraArgs =
+ s_priceRegistry.parseEVMExtraArgsFromBytes(message.extraArgs, destChainSelector);
+
+ Internal.EVM2AnyRampMessage memory messageEvent = Internal.EVM2AnyRampMessage({
+ header: Internal.RampMessageHeader({
+ messageId: "",
+ sourceChainSelector: sourceChainSelector,
+ destChainSelector: destChainSelector,
+ sequenceNumber: seqNum,
+ nonce: extraArgs.allowOutOfOrderExecution ? 0 : nonce
+ }),
+ sender: originalSender,
+ data: message.data,
+ receiver: message.receiver,
+ extraArgs: Client._argsToBytes(extraArgs),
+ feeToken: message.feeToken,
+ feeTokenAmount: feeTokenAmount,
+ tokenAmounts: new Internal.RampTokenAmount[](message.tokenAmounts.length)
+ });
+
+ for (uint256 i = 0; i < message.tokenAmounts.length; ++i) {
+ messageEvent.tokenAmounts[i] = _getSourceTokenData(message.tokenAmounts[i], tokenAdminRegistry);
+ }
+
+ messageEvent.header.messageId = Internal._hash(messageEvent, metadataHash);
+ return messageEvent;
+ }
+
+ function _getSourceTokenData(
+ Client.EVMTokenAmount memory tokenAmount,
+ TokenAdminRegistry tokenAdminRegistry
+ ) internal view returns (Internal.RampTokenAmount memory) {
+ address destToken = s_destTokenBySourceToken[tokenAmount.token];
+
+ return Internal.RampTokenAmount({
+ sourcePoolAddress: abi.encode(tokenAdminRegistry.getTokenConfig(tokenAmount.token).tokenPool),
+ destTokenAddress: abi.encode(destToken),
+ extraData: "",
+ amount: tokenAmount.amount
+ });
+ }
+
+ function _calcUSDValueFromTokenAmount(uint224 tokenPrice, uint256 tokenAmount) internal pure returns (uint256) {
+ return (tokenPrice * tokenAmount) / 1e18;
+ }
+
+ function _applyBpsRatio(uint256 tokenAmount, uint16 ratio) internal pure returns (uint256) {
+ return (tokenAmount * ratio) / 1e5;
+ }
+
+ function _configUSDCentToWei(uint256 usdCent) internal pure returns (uint256) {
+ return usdCent * 1e16;
+ }
+}
diff --git a/contracts/src/v0.8/ccip/test/rateLimiter/AggregateRateLimiter.t.sol b/contracts/src/v0.8/ccip/test/rateLimiter/AggregateRateLimiter.t.sol
index d3a07ef11e9..af970b0f920 100644
--- a/contracts/src/v0.8/ccip/test/rateLimiter/AggregateRateLimiter.t.sol
+++ b/contracts/src/v0.8/ccip/test/rateLimiter/AggregateRateLimiter.t.sol
@@ -6,7 +6,7 @@ import {Client} from "../../libraries/Client.sol";
import {Internal} from "../../libraries/Internal.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {AggregateRateLimiterHelper} from "../helpers/AggregateRateLimiterHelper.sol";
-import {PriceRegistrySetup} from "../priceRegistry/PriceRegistry.t.sol";
+import {PriceRegistrySetup} from "../priceRegistry/PriceRegistrySetup.t.sol";
import {stdError} from "forge-std/Test.sol";
@@ -20,7 +20,7 @@ contract AggregateTokenLimiterSetup is PriceRegistrySetup {
function setUp() public virtual override {
PriceRegistrySetup.setUp();
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(TOKEN, TOKEN_PRICE);
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(TOKEN, TOKEN_PRICE);
s_priceRegistry.updatePrices(priceUpdates);
s_config = RateLimiter.Config({isEnabled: true, rate: 5, capacity: 100});
diff --git a/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol b/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol
index e30ce02212a..292c4533e4e 100644
--- a/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol
+++ b/contracts/src/v0.8/ccip/test/rateLimiter/MultiAggregateRateLimiter.t.sol
@@ -8,7 +8,7 @@ import {Internal} from "../../libraries/Internal.sol";
import {RateLimiter} from "../../libraries/RateLimiter.sol";
import {BaseTest} from "../BaseTest.t.sol";
import {MultiAggregateRateLimiterHelper} from "../helpers/MultiAggregateRateLimiterHelper.sol";
-import {PriceRegistrySetup} from "../priceRegistry/PriceRegistry.t.sol";
+import {PriceRegistrySetup} from "../priceRegistry/PriceRegistrySetup.t.sol";
import {stdError} from "forge-std/Test.sol";
import {Vm} from "forge-std/Vm.sol";
@@ -33,7 +33,7 @@ contract MultiAggregateRateLimiterSetup is BaseTest, PriceRegistrySetup {
BaseTest.setUp();
PriceRegistrySetup.setUp();
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(TOKEN, TOKEN_PRICE);
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(TOKEN, TOKEN_PRICE);
s_priceRegistry.updatePrices(priceUpdates);
MultiAggregateRateLimiter.RateLimiterConfigArgs[] memory configUpdates =
@@ -683,7 +683,7 @@ contract MultiAggregateRateLimiter_onInboundMessage is MultiAggregateRateLimiter
});
Internal.PriceUpdates memory priceUpdates =
- getSingleTokenPriceUpdateStruct(s_destTokens[i], TOKEN_PRICE * (i + 1));
+ _getSingleTokenPriceUpdateStruct(s_destTokens[i], TOKEN_PRICE * (i + 1));
s_priceRegistry.updatePrices(priceUpdates);
}
s_rateLimiter.updateRateLimitTokens(new MultiAggregateRateLimiter.LocalRateLimitToken[](0), tokensToAdd);
@@ -919,7 +919,7 @@ contract MultiAggregateRateLimiter_onOutboundMessage is MultiAggregateRateLimite
});
Internal.PriceUpdates memory priceUpdates =
- getSingleTokenPriceUpdateStruct(s_sourceTokens[i], TOKEN_PRICE * (i + 1));
+ _getSingleTokenPriceUpdateStruct(s_sourceTokens[i], TOKEN_PRICE * (i + 1));
s_priceRegistry.updatePrices(priceUpdates);
}
s_rateLimiter.updateRateLimitTokens(new MultiAggregateRateLimiter.LocalRateLimitToken[](0), tokensToAdd);
diff --git a/contracts/src/v0.8/ccip/test/router/Router.t.sol b/contracts/src/v0.8/ccip/test/router/Router.t.sol
index cfe01e3c417..5f3a3a66ab0 100644
--- a/contracts/src/v0.8/ccip/test/router/Router.t.sol
+++ b/contracts/src/v0.8/ccip/test/router/Router.t.sol
@@ -265,8 +265,11 @@ contract Router_ccipSend is EVM2EVMOnRampSetup {
s_priceRegistry.applyFeeTokensUpdates(feeTokens, new address[](0));
// Update the price of the newly set feeToken
- Internal.PriceUpdates memory priceUpdates = getSingleTokenPriceUpdateStruct(feeTokenWithZeroFeeAndGas, 2_000 ether);
- priceUpdates.gasPriceUpdates = getSingleGasPriceUpdateStruct(DEST_CHAIN_SELECTOR, 0).gasPriceUpdates;
+ Internal.PriceUpdates memory priceUpdates = _getSingleTokenPriceUpdateStruct(feeTokenWithZeroFeeAndGas, 2_000 ether);
+ priceUpdates.gasPriceUpdates = new Internal.GasPriceUpdate[](1);
+ priceUpdates.gasPriceUpdates[0] =
+ Internal.GasPriceUpdate({destChainSelector: DEST_CHAIN_SELECTOR, usdPerUnitGas: 0});
+
s_priceRegistry.updatePrices(priceUpdates);
// Set the feeToken args on the onRamp
@@ -396,20 +399,20 @@ contract Router_applyRampUpdates is RouterSetup {
s_receiver = new MaybeRevertMessageReceiver(false);
}
- function assertOffRampRouteSucceeds(Router.OffRamp memory offRamp) internal {
+ function _assertOffRampRouteSucceeds(Router.OffRamp memory offRamp) internal {
vm.startPrank(offRamp.offRamp);
- Client.Any2EVMMessage memory message = generateReceiverMessage(offRamp.sourceChainSelector);
+ Client.Any2EVMMessage memory message = _generateReceiverMessage(offRamp.sourceChainSelector);
vm.expectCall(address(s_receiver), abi.encodeWithSelector(IAny2EVMMessageReceiver.ccipReceive.selector, message));
s_sourceRouter.routeMessage(message, GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver));
}
- function assertOffRampRouteReverts(Router.OffRamp memory offRamp) internal {
+ function _assertOffRampRouteReverts(Router.OffRamp memory offRamp) internal {
vm.startPrank(offRamp.offRamp);
vm.expectRevert(IRouter.OnlyOffRamp.selector);
s_sourceRouter.routeMessage(
- generateReceiverMessage(offRamp.sourceChainSelector), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
+ _generateReceiverMessage(offRamp.sourceChainSelector), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
);
}
@@ -483,7 +486,7 @@ contract Router_applyRampUpdates is RouterSetup {
for (uint256 i = 0; i < offRampUpdates.length; ++i) {
assertEq(offRampUpdates[i].offRamp, gotOffRamps[i].offRamp);
assertTrue(s_sourceRouter.isOffRamp(offRampUpdates[i].sourceChainSelector, offRampUpdates[i].offRamp));
- assertOffRampRouteSucceeds(offRampUpdates[i]);
+ _assertOffRampRouteSucceeds(offRampUpdates[i]);
}
vm.startPrank(OWNER);
@@ -520,14 +523,14 @@ contract Router_applyRampUpdates is RouterSetup {
assertFalse(
s_sourceRouter.isOffRamp(partialOffRampRemoves[i].sourceChainSelector, partialOffRampRemoves[i].offRamp)
);
- assertOffRampRouteReverts(partialOffRampRemoves[i]);
+ _assertOffRampRouteReverts(partialOffRampRemoves[i]);
assertTrue(s_sourceRouter.isOffRamp(partialOffRampAdds[i].sourceChainSelector, partialOffRampAdds[i].offRamp));
- assertOffRampRouteSucceeds(partialOffRampAdds[i]);
+ _assertOffRampRouteSucceeds(partialOffRampAdds[i]);
}
for (uint256 i = numberOfPartialUpdates; i < offRampUpdates.length; ++i) {
assertTrue(s_sourceRouter.isOffRamp(offRampUpdates[i].sourceChainSelector, offRampUpdates[i].offRamp));
- assertOffRampRouteSucceeds(offRampUpdates[i]);
+ _assertOffRampRouteSucceeds(offRampUpdates[i]);
}
vm.startPrank(OWNER);
@@ -557,11 +560,11 @@ contract Router_applyRampUpdates is RouterSetup {
for (uint256 i = 0; i < numberOfPartialUpdates; ++i) {
assertFalse(s_sourceRouter.isOffRamp(partialOffRampAdds[i].sourceChainSelector, partialOffRampAdds[i].offRamp));
- assertOffRampRouteReverts(partialOffRampAdds[i]);
+ _assertOffRampRouteReverts(partialOffRampAdds[i]);
}
for (uint256 i = 0; i < offRampUpdates.length; ++i) {
assertFalse(s_sourceRouter.isOffRamp(offRampUpdates[i].sourceChainSelector, offRampUpdates[i].offRamp));
- assertOffRampRouteReverts(offRampUpdates[i]);
+ _assertOffRampRouteReverts(offRampUpdates[i]);
}
vm.startPrank(OWNER);
@@ -582,13 +585,13 @@ contract Router_applyRampUpdates is RouterSetup {
for (uint256 i = 0; i < offRampUpdates.length; ++i) {
assertEq(offRampUpdates[i].offRamp, gotOffRamps[i].offRamp);
assertTrue(s_sourceRouter.isOffRamp(offRampUpdates[i].sourceChainSelector, offRampUpdates[i].offRamp));
- assertOffRampRouteSucceeds(offRampUpdates[i]);
+ _assertOffRampRouteSucceeds(offRampUpdates[i]);
}
// Check offramps that were not added back remain unset.
for (uint256 i = 0; i < numberOfPartialUpdates; ++i) {
assertFalse(s_sourceRouter.isOffRamp(partialOffRampAdds[i].sourceChainSelector, partialOffRampAdds[i].offRamp));
- assertOffRampRouteReverts(partialOffRampAdds[i]);
+ _assertOffRampRouteReverts(partialOffRampAdds[i]);
}
}
@@ -691,18 +694,18 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
vm.startPrank(address(s_offRamp));
}
- function generateManualGasLimit(uint256 callDataLength) internal view returns (uint256) {
+ function _generateManualGasLimit(uint256 callDataLength) internal view returns (uint256) {
return ((gasleft() - 2 * (16 * callDataLength + GAS_FOR_CALL_EXACT_CHECK)) * 62) / 64;
}
function test_ManualExec_Success() public {
- Client.Any2EVMMessage memory message = generateReceiverMessage(SOURCE_CHAIN_SELECTOR);
+ Client.Any2EVMMessage memory message = _generateReceiverMessage(SOURCE_CHAIN_SELECTOR);
// Manuel execution cannot run out of gas
(bool success, bytes memory retData, uint256 gasUsed) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
GAS_FOR_CALL_EXACT_CHECK,
- generateManualGasLimit(message.data.length),
+ _generateManualGasLimit(message.data.length),
address(s_receiver)
);
assertTrue(success);
@@ -711,7 +714,7 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
}
function test_ExecutionEvent_Success() public {
- Client.Any2EVMMessage memory message = generateReceiverMessage(SOURCE_CHAIN_SELECTOR);
+ Client.Any2EVMMessage memory message = _generateReceiverMessage(SOURCE_CHAIN_SELECTOR);
// Should revert with reason
bytes memory realError1 = new bytes(2);
realError1[0] = 0xbe;
@@ -727,9 +730,9 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
);
(bool success, bytes memory retData, uint256 gasUsed) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
GAS_FOR_CALL_EXACT_CHECK,
- generateManualGasLimit(message.data.length),
+ _generateManualGasLimit(message.data.length),
address(s_reverting_receiver)
);
@@ -753,9 +756,9 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
);
(success, retData, gasUsed) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
GAS_FOR_CALL_EXACT_CHECK,
- generateManualGasLimit(message.data.length),
+ _generateManualGasLimit(message.data.length),
address(s_reverting_receiver)
);
@@ -782,9 +785,9 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
);
(success, retData, gasUsed) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
GAS_FOR_CALL_EXACT_CHECK,
- generateManualGasLimit(message.data.length),
+ _generateManualGasLimit(message.data.length),
address(s_receiver)
);
@@ -794,7 +797,7 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
}
function test_Fuzz_ExecutionEvent_Success(bytes calldata error) public {
- Client.Any2EVMMessage memory message = generateReceiverMessage(SOURCE_CHAIN_SELECTOR);
+ Client.Any2EVMMessage memory message = _generateReceiverMessage(SOURCE_CHAIN_SELECTOR);
s_reverting_receiver.setErr(error);
bytes memory expectedRetData;
@@ -827,9 +830,9 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
}
(bool success, bytes memory retData,) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR),
GAS_FOR_CALL_EXACT_CHECK,
- generateManualGasLimit(message.data.length),
+ _generateManualGasLimit(message.data.length),
address(s_reverting_receiver)
);
@@ -839,13 +842,13 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
function test_AutoExec_Success() public {
(bool success,,) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
);
assertTrue(success);
(success,,) = s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 1, address(s_receiver)
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 1, address(s_receiver)
);
// Can run out of gas, should return false
@@ -859,7 +862,7 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
vm.expectRevert(IRouter.OnlyOffRamp.selector);
s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
);
}
@@ -867,7 +870,7 @@ contract Router_routeMessage is EVM2EVMOffRampSetup {
s_mockRMN.setGlobalCursed(true);
vm.expectRevert(Router.BadARMSignal.selector);
s_destRouter.routeMessage(
- generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
+ _generateReceiverMessage(SOURCE_CHAIN_SELECTOR), GAS_FOR_CALL_EXACT_CHECK, 100_000, address(s_receiver)
);
}
}
diff --git a/contracts/src/v0.8/ccip/test/router/RouterSetup.t.sol b/contracts/src/v0.8/ccip/test/router/RouterSetup.t.sol
index 423a47951dd..7297721baae 100644
--- a/contracts/src/v0.8/ccip/test/router/RouterSetup.t.sol
+++ b/contracts/src/v0.8/ccip/test/router/RouterSetup.t.sol
@@ -26,7 +26,7 @@ contract RouterSetup is BaseTest {
}
}
- function generateReceiverMessage(uint64 chainSelector) internal pure returns (Client.Any2EVMMessage memory) {
+ function _generateReceiverMessage(uint64 chainSelector) internal pure returns (Client.Any2EVMMessage memory) {
Client.EVMTokenAmount[] memory ta = new Client.EVMTokenAmount[](0);
return Client.Any2EVMMessage({
messageId: bytes32("a"),
@@ -37,7 +37,7 @@ contract RouterSetup is BaseTest {
});
}
- function generateSourceTokenData() internal pure returns (Internal.SourceTokenData memory) {
+ function _generateSourceTokenData() internal pure returns (Internal.SourceTokenData memory) {
return Internal.SourceTokenData({
sourcePoolAddress: abi.encode(address(12312412312)),
destTokenAddress: abi.encode(address(9809808909)),
diff --git a/contracts/src/v0.8/ccip/v1.4-CCIP-License-grants.md b/contracts/src/v0.8/ccip/v1.4-CCIP-License-grants.md
deleted file mode 100644
index f206b8adcc1..00000000000
--- a/contracts/src/v0.8/ccip/v1.4-CCIP-License-grants.md
+++ /dev/null
@@ -1,5 +0,0 @@
-v1.4-CCIP-License-grants
-
-Additional Use Grant(s):
-
-You may make use of the Cross-Chain Interoperability Protocol v1.4 (which is available subject to the license here the “Licensed Work ”) solely for purposes of importing client-side libraries or example clients to facilitate the integration of the Licensed Work into your application.
\ No newline at end of file
diff --git a/contracts/src/v0.8/ccip/v1.5-CCIP-License-grants.md b/contracts/src/v0.8/ccip/v1.5-CCIP-License-grants.md
new file mode 100644
index 00000000000..ef0f55ea924
--- /dev/null
+++ b/contracts/src/v0.8/ccip/v1.5-CCIP-License-grants.md
@@ -0,0 +1,8 @@
+v1.5-CCIP-License-grants
+
+Additional Use Grant(s):
+
+You may make use of the Cross-Chain Interoperability Protocol v1.5 (which is available subject to the license here, the “Licensed Work ”) solely for purposes of
+
+1. importing client-side libraries or example clients to facilitate the integration of the Licensed Work into your application.
+2. Developing, deploying and operating [the token pool contracts](./pools) solely for purposes of the integration and use of CCIP.
\ No newline at end of file
diff --git a/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go b/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go
index 66c47f4741f..aef9e152631 100644
--- a/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go
+++ b/core/capabilities/ccip/ccip_integration_tests/ccipreader/ccipreader_test.go
@@ -69,7 +69,7 @@ func TestCCIPReader_CommitReportsGTETimestamp(t *testing.T) {
const numReports = 5
for i := uint8(0); i < numReports; i++ {
- _, err := s.contract.EmitCommitReportAccepted(s.auth, ccip_reader_tester.EVM2EVMMultiOffRampCommitReport{
+ _, err := s.contract.EmitCommitReportAccepted(s.auth, ccip_reader_tester.OffRampCommitReport{
PriceUpdates: ccip_reader_tester.InternalPriceUpdates{
TokenPriceUpdates: []ccip_reader_tester.InternalTokenPriceUpdate{
{
@@ -84,10 +84,10 @@ func TestCCIPReader_CommitReportsGTETimestamp(t *testing.T) {
},
},
},
- MerkleRoots: []ccip_reader_tester.EVM2EVMMultiOffRampMerkleRoot{
+ MerkleRoots: []ccip_reader_tester.OffRampMerkleRoot{
{
SourceChainSelector: uint64(chainS1),
- Interval: ccip_reader_tester.EVM2EVMMultiOffRampInterval{
+ Interval: ccip_reader_tester.OffRampInterval{
Min: 10,
Max: 20,
},
@@ -350,7 +350,7 @@ func testSetup(ctx context.Context, t *testing.T, readerChain, destChain cciptyp
assert.NoError(t, lp.Start(ctx))
for sourceChain, seqNum := range onChainSeqNums {
- _, err1 := contract.SetSourceChainConfig(auth, uint64(sourceChain), ccip_reader_tester.EVM2EVMMultiOffRampSourceChainConfig{
+ _, err1 := contract.SetSourceChainConfig(auth, uint64(sourceChain), ccip_reader_tester.OffRampSourceChainConfig{
IsEnabled: true,
MinSeqNr: uint64(seqNum),
})
diff --git a/core/capabilities/ccip/ccip_integration_tests/helpers.go b/core/capabilities/ccip/ccip_integration_tests/helpers.go
index 7792dfd3616..11c8d968005 100644
--- a/core/capabilities/ccip/ccip_integration_tests/helpers.go
+++ b/core/capabilities/ccip/ccip_integration_tests/helpers.go
@@ -24,15 +24,15 @@ import (
"github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3confighelper"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_config"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/nonce_manager"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ocr3_config_encoder"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9"
@@ -47,9 +47,9 @@ import (
var (
homeChainID = chainsel.GETH_TESTNET.EvmChainID
- ccipSendRequestedTopic = evm_2_evm_multi_onramp.EVM2EVMMultiOnRampCCIPSendRequested{}.Topic()
- commitReportAcceptedTopic = evm_2_evm_multi_offramp.EVM2EVMMultiOffRampCommitReportAccepted{}.Topic()
- executionStateChangedTopic = evm_2_evm_multi_offramp.EVM2EVMMultiOffRampExecutionStateChanged{}.Topic()
+ ccipSendRequestedTopic = onramp.OnRampCCIPSendRequested{}.Topic()
+ commitReportAcceptedTopic = offramp.OffRampCommitReportAccepted{}.Topic()
+ executionStateChangedTopic = offramp.OffRampExecutionStateChanged{}.Topic()
)
const (
@@ -102,10 +102,10 @@ type onchainUniverse struct {
linkToken *link_token.LinkToken
weth *weth9.WETH9
router *router.Router
- rmnProxy *arm_proxy_contract.ARMProxyContract
- rmn *mock_arm_contract.MockARMContract
- onramp *evm_2_evm_multi_onramp.EVM2EVMMultiOnRamp
- offramp *evm_2_evm_multi_offramp.EVM2EVMMultiOffRamp
+ rmnProxy *rmn_proxy_contract.RMNProxyContract
+ rmn *mock_rmn_contract.MockRMNContract
+ onramp *onramp.OnRamp
+ offramp *offramp.OffRamp
priceRegistry *price_registry.PriceRegistry
tokenAdminRegistry *token_admin_registry.TokenAdminRegistry
nonceManager *nonce_manager.NonceManager
@@ -179,8 +179,8 @@ func createUniverses(
backend := base.backend
// deploy the CCIP contracts
linkToken := deployLinkToken(t, owner, backend, chainID)
- rmn := deployMockARMContract(t, owner, backend, chainID)
- rmnProxy := deployARMProxyContract(t, owner, backend, rmn.Address(), chainID)
+ rmn := deployMockRMNContract(t, owner, backend, chainID)
+ rmnProxy := deployRMNProxyContract(t, owner, backend, rmn.Address(), chainID)
weth := deployWETHContract(t, owner, backend, chainID)
rout := deployRouter(t, owner, backend, weth.Address(), rmnProxy.Address(), chainID)
priceRegistry := deployPriceRegistry(t, owner, backend, linkToken.Address(), weth.Address(), big.NewInt(1e18), chainID)
@@ -190,50 +190,50 @@ func createUniverses(
// ======================================================================
// OnRamp
// ======================================================================
- onRampAddr, _, _, err := evm_2_evm_multi_onramp.DeployEVM2EVMMultiOnRamp(
+ onRampAddr, _, _, err := onramp.DeployOnRamp(
owner,
backend,
- evm_2_evm_multi_onramp.EVM2EVMMultiOnRampStaticConfig{
+ onramp.OnRampStaticConfig{
ChainSelector: getSelector(chainID),
RmnProxy: rmnProxy.Address(),
NonceManager: nonceManager.Address(),
TokenAdminRegistry: tokenAdminRegistry.Address(),
},
- evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDynamicConfig{
+ onramp.OnRampDynamicConfig{
PriceRegistry: priceRegistry.Address(),
// `withdrawFeeTokens` onRamp function is not part of the message flow
// so we can set this to any address
FeeAggregator: testutils.NewAddress(),
},
// Destination chain configs will be set up later once we have all chains
- []evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainConfigArgs{},
+ []onramp.OnRampDestChainConfigArgs{},
)
require.NoErrorf(t, err, "failed to deploy onramp on chain id %d", chainID)
backend.Commit()
- onramp, err := evm_2_evm_multi_onramp.NewEVM2EVMMultiOnRamp(onRampAddr, backend)
+ onramp, err := onramp.NewOnRamp(onRampAddr, backend)
require.NoError(t, err)
// ======================================================================
// OffRamp
// ======================================================================
- offrampAddr, _, _, err := evm_2_evm_multi_offramp.DeployEVM2EVMMultiOffRamp(
+ offrampAddr, _, _, err := offramp.DeployOffRamp(
owner,
backend,
- evm_2_evm_multi_offramp.EVM2EVMMultiOffRampStaticConfig{
+ offramp.OffRampStaticConfig{
ChainSelector: getSelector(chainID),
RmnProxy: rmnProxy.Address(),
TokenAdminRegistry: tokenAdminRegistry.Address(),
NonceManager: nonceManager.Address(),
},
- evm_2_evm_multi_offramp.EVM2EVMMultiOffRampDynamicConfig{
+ offramp.OffRampDynamicConfig{
PriceRegistry: priceRegistry.Address(),
},
// Source chain configs will be set up later once we have all chains
- []evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs{},
+ []offramp.OffRampSourceChainConfigArgs{},
)
require.NoErrorf(t, err, "failed to deploy offramp on chain id %d", chainID)
backend.Commit()
- offramp, err := evm_2_evm_multi_offramp.NewEVM2EVMMultiOffRamp(offrampAddr, backend)
+ offramp, err := offramp.NewOffRamp(offrampAddr, backend)
require.NoError(t, err)
receiverAddress, _, _, err := maybe_revert_message_receiver.DeployMaybeRevertMessageReceiver(
@@ -582,14 +582,14 @@ func (h *homeChain) AddDON(
}
// get the config digest from the ccip config contract and set config on the offramp.
- var offrampOCR3Configs []evm_2_evm_multi_offramp.MultiOCR3BaseOCRConfigArgs
+ var offrampOCR3Configs []offramp.MultiOCR3BaseOCRConfigArgs
for _, pluginType := range []cctypes.PluginType{cctypes.PluginTypeCCIPCommit, cctypes.PluginTypeCCIPExec} {
ocrConfig, err1 := h.ccipConfig.GetOCRConfig(&bind.CallOpts{
Context: testutils.Context(t),
}, donID, uint8(pluginType))
require.NoError(t, err1, "failed to get OCR3 config from ccip config contract")
require.Len(t, ocrConfig, 1, "expected exactly one OCR3 config")
- offrampOCR3Configs = append(offrampOCR3Configs, evm_2_evm_multi_offramp.MultiOCR3BaseOCRConfigArgs{
+ offrampOCR3Configs = append(offrampOCR3Configs, offramp.MultiOCR3BaseOCRConfigArgs{
ConfigDigest: ocrConfig[0].ConfigDigest,
OcrPluginType: uint8(pluginType),
F: f,
@@ -747,12 +747,12 @@ func wirePriceRegistry(t *testing.T, uni onchainUniverse, universes map[uint64]o
// Setting OnRampDestChainConfigs
func wireOnRamp(t *testing.T, uni onchainUniverse, universes map[uint64]onchainUniverse) {
owner := uni.owner
- var onrampSourceChainConfigArgs []evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainConfigArgs
+ var onrampSourceChainConfigArgs []onramp.OnRampDestChainConfigArgs
for remoteChainID := range universes {
if remoteChainID == uni.chainID {
continue
}
- onrampSourceChainConfigArgs = append(onrampSourceChainConfigArgs, evm_2_evm_multi_onramp.EVM2EVMMultiOnRampDestChainConfigArgs{
+ onrampSourceChainConfigArgs = append(onrampSourceChainConfigArgs, onramp.OnRampDestChainConfigArgs{
DestChainSelector: getSelector(remoteChainID),
Router: uni.router.Address(),
})
@@ -765,12 +765,12 @@ func wireOnRamp(t *testing.T, uni onchainUniverse, universes map[uint64]onchainU
// Setting OffRampSourceChainConfigs
func wireOffRamp(t *testing.T, uni onchainUniverse, universes map[uint64]onchainUniverse) {
owner := uni.owner
- var offrampSourceChainConfigArgs []evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs
+ var offrampSourceChainConfigArgs []offramp.OffRampSourceChainConfigArgs
for remoteChainID, remoteUniverse := range universes {
if remoteChainID == uni.chainID {
continue
}
- offrampSourceChainConfigArgs = append(offrampSourceChainConfigArgs, evm_2_evm_multi_offramp.EVM2EVMMultiOffRampSourceChainConfigArgs{
+ offrampSourceChainConfigArgs = append(offrampSourceChainConfigArgs, offramp.OffRampSourceChainConfigArgs{
SourceChainSelector: getSelector(remoteChainID),
IsEnabled: true,
Router: uni.router.Address(),
@@ -858,20 +858,20 @@ func deployLinkToken(t *testing.T, owner *bind.TransactOpts, backend *backends.S
return linkToken
}
-func deployMockARMContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *mock_arm_contract.MockARMContract {
- rmnAddr, _, _, err := mock_arm_contract.DeployMockARMContract(owner, backend)
+func deployMockRMNContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, chainID uint64) *mock_rmn_contract.MockRMNContract {
+ rmnAddr, _, _, err := mock_rmn_contract.DeployMockRMNContract(owner, backend)
require.NoErrorf(t, err, "failed to deploy mock arm on chain id %d", chainID)
backend.Commit()
- rmn, err := mock_arm_contract.NewMockARMContract(rmnAddr, backend)
+ rmn, err := mock_rmn_contract.NewMockRMNContract(rmnAddr, backend)
require.NoError(t, err)
return rmn
}
-func deployARMProxyContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, rmnAddr common.Address, chainID uint64) *arm_proxy_contract.ARMProxyContract {
- rmnProxyAddr, _, _, err := arm_proxy_contract.DeployARMProxyContract(owner, backend, rmnAddr)
+func deployRMNProxyContract(t *testing.T, owner *bind.TransactOpts, backend *backends.SimulatedBackend, rmnAddr common.Address, chainID uint64) *rmn_proxy_contract.RMNProxyContract {
+ rmnProxyAddr, _, _, err := rmn_proxy_contract.DeployRMNProxyContract(owner, backend, rmnAddr)
require.NoErrorf(t, err, "failed to deploy arm proxy on chain id %d", chainID)
backend.Commit()
- rmnProxy, err := arm_proxy_contract.NewARMProxyContract(rmnProxyAddr, backend)
+ rmnProxy, err := rmn_proxy_contract.NewRMNProxyContract(rmnProxyAddr, backend)
require.NoError(t, err)
return rmnProxy
}
diff --git a/core/capabilities/ccip/ccip_integration_tests/home_chain_test.go b/core/capabilities/ccip/ccip_integration_tests/home_chain_test.go
index c78fd37b809..c8b261eba1e 100644
--- a/core/capabilities/ccip/ccip_integration_tests/home_chain_test.go
+++ b/core/capabilities/ccip/ccip_integration_tests/home_chain_test.go
@@ -1,6 +1,7 @@
package ccip_integration_tests
import (
+ "math/big"
"testing"
"time"
@@ -35,6 +36,7 @@ func TestHomeChainReader(t *testing.T) {
}
p2pIDs := integrationhelpers.P2pIDsFromInts(arr)
uni.AddCapability(p2pIDs)
+
//==============================Apply configs to Capability Contract=================================
encodedChainConfig, err := chainconfig.EncodeChainConfig(chainconfig.ChainConfig{
GasPriceDeviationPPB: cciptypes.NewBigIntFromInt64(1000),
@@ -43,28 +45,26 @@ func TestHomeChainReader(t *testing.T) {
OptimisticConfirmations: 1,
})
require.NoError(t, err)
- chainAConf := integrationhelpers.SetupConfigInfo(integrationhelpers.ChainA, p2pIDs, integrationhelpers.FChainA, encodedChainConfig)
- chainBConf := integrationhelpers.SetupConfigInfo(integrationhelpers.ChainB, p2pIDs[1:], integrationhelpers.FChainB, encodedChainConfig)
- chainCConf := integrationhelpers.SetupConfigInfo(integrationhelpers.ChainC, p2pIDs[2:], integrationhelpers.FChainC, encodedChainConfig)
inputConfig := []capcfg.CCIPConfigTypesChainConfigInfo{
- chainAConf,
- chainBConf,
- chainCConf,
+ integrationhelpers.SetupConfigInfo(integrationhelpers.ChainA, p2pIDs, integrationhelpers.FChainA, encodedChainConfig),
+ integrationhelpers.SetupConfigInfo(integrationhelpers.ChainB, p2pIDs[1:], integrationhelpers.FChainB, encodedChainConfig),
+ integrationhelpers.SetupConfigInfo(integrationhelpers.ChainC, p2pIDs[2:], integrationhelpers.FChainC, encodedChainConfig),
}
_, err = uni.CcipCfg.ApplyChainConfigUpdates(uni.Transactor, nil, inputConfig)
require.NoError(t, err)
uni.Backend.Commit()
- //================================Setup HomeChainReader===============================
-
- pollDuration := time.Second
- homeChain := uni.HomeChainReader
+ chainConfigInfos, err := uni.CcipCfg.GetAllChainConfigs(nil, big.NewInt(0), big.NewInt(100))
+ require.NoError(t, err)
+ require.Len(t, chainConfigInfos, len(inputConfig))
+ // Wait for the home chain reader to read the expected amount of chain configs.
gomega.NewWithT(t).Eventually(func() bool {
- configs, _ := homeChain.GetAllChainConfigs()
- return configs != nil
- }, testutils.WaitTimeout(t), pollDuration*5).Should(gomega.BeTrue())
+ configs, _ := uni.HomeChainReader.GetAllChainConfigs()
+ return len(configs) == len(inputConfig)
+ }, testutils.WaitTimeout(t), 1*time.Second).Should(gomega.BeTrue())
t.Logf("homchain reader is ready")
+
//================================Test HomeChain Reader===============================
expectedChainConfigs := map[cciptypes.ChainSelector]ccipreader.ChainConfig{}
for _, c := range inputConfig {
@@ -74,16 +74,26 @@ func TestHomeChainReader(t *testing.T) {
Config: mustDecodeChainConfig(t, c.ChainConfig.Config),
}
}
- configs, err := homeChain.GetAllChainConfigs()
+
+ configs, err := uni.HomeChainReader.GetAllChainConfigs()
require.NoError(t, err)
+
require.Equal(t, expectedChainConfigs, configs)
- //=================================Remove ChainC from OnChainConfig=========================================
+
+ // Remove chain C from the chain configs and expect the home chain reader to
+ // update its state accordingly.
_, err = uni.CcipCfg.ApplyChainConfigUpdates(uni.Transactor, []uint64{integrationhelpers.ChainC}, nil)
require.NoError(t, err)
uni.Backend.Commit()
- time.Sleep(pollDuration * 5) // Wait for the chain reader to update
- configs, err = homeChain.GetAllChainConfigs()
+
+ // Wait for the home chain reader to read the expected amount of chain configs.
+ gomega.NewWithT(t).Eventually(func() bool {
+ chainConfigs, _ := uni.HomeChainReader.GetAllChainConfigs()
+ return len(chainConfigs) == len(inputConfig)-1
+ }, testutils.WaitTimeout(t), 1*time.Second).Should(gomega.BeTrue())
+ configs, err = uni.HomeChainReader.GetAllChainConfigs()
require.NoError(t, err)
+
delete(expectedChainConfigs, cciptypes.ChainSelector(integrationhelpers.ChainC))
require.Equal(t, expectedChainConfigs, configs)
}
diff --git a/core/capabilities/ccip/ccip_integration_tests/ocr3_node_test.go b/core/capabilities/ccip/ccip_integration_tests/ocr3_node_test.go
index 8cafb901724..5914db8082d 100644
--- a/core/capabilities/ccip/ccip_integration_tests/ocr3_node_test.go
+++ b/core/capabilities/ccip/ccip_integration_tests/ocr3_node_test.go
@@ -12,7 +12,7 @@ import (
"go.uber.org/zap/zapcore"
"github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/p2pkey"
@@ -111,7 +111,7 @@ func TestIntegration_OCR3Nodes(t *testing.T) {
AddChainConfig(t, homeChainUni, getSelector(uni.chainID), p2pIDs, fChain)
}
- cfgs, err := homeChainUni.ccipConfig.GetAllChainConfigs(callCtx)
+ cfgs, err := homeChainUni.ccipConfig.GetAllChainConfigs(callCtx, big.NewInt(0), big.NewInt(100))
require.NoError(t, err)
require.Len(t, cfgs, numChains)
@@ -226,7 +226,7 @@ func waitForCommitWithInterval(
expectedSourceChainSelector uint64,
expectedSeqNumRange ccipocr3.SeqNumRange,
) {
- sink := make(chan *evm_2_evm_multi_offramp.EVM2EVMMultiOffRampCommitReportAccepted)
+ sink := make(chan *offramp.OffRampCommitReportAccepted)
subscription, err := uni.offramp.WatchCommitReportAccepted(&bind.WatchOpts{
Context: testutils.Context(t),
}, sink)
diff --git a/core/capabilities/ccip/ccip_integration_tests/ocr_node_helper.go b/core/capabilities/ccip/ccip_integration_tests/ocr_node_helper.go
index ec35621bf8c..9ac8ecb2fbb 100644
--- a/core/capabilities/ccip/ccip_integration_tests/ocr_node_helper.go
+++ b/core/capabilities/ccip/ccip_integration_tests/ocr_node_helper.go
@@ -32,7 +32,6 @@ import (
evmutils "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/chains/legacyevm"
configv2 "github.com/smartcontractkit/chainlink/v2/core/config/toml"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/logger/audit"
@@ -41,6 +40,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/keystore/chaintype"
"github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ocr2key"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/plugins"
"github.com/stretchr/testify/require"
diff --git a/core/capabilities/ccip/ccipevm/commitcodec.go b/core/capabilities/ccip/ccipevm/commitcodec.go
index 928cecd0a41..2346c9f141b 100644
--- a/core/capabilities/ccip/ccipevm/commitcodec.go
+++ b/core/capabilities/ccip/ccipevm/commitcodec.go
@@ -11,19 +11,19 @@ import (
"github.com/smartcontractkit/libocr/offchainreporting2plus/types"
cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
)
// CommitPluginCodecV1 is a codec for encoding and decoding commit plugin reports.
// Compatible with:
-// - "EVM2EVMMultiOffRamp 1.6.0-dev"
+// - "OffRamp 1.6.0-dev"
type CommitPluginCodecV1 struct {
commitReportAcceptedEventInputs abi.Arguments
}
func NewCommitPluginCodecV1() *CommitPluginCodecV1 {
- abiParsed, err := abi.JSON(strings.NewReader(evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI))
+ abiParsed, err := abi.JSON(strings.NewReader(offramp.OffRampABI))
if err != nil {
panic(fmt.Errorf("parse multi offramp abi: %s", err))
}
@@ -32,11 +32,11 @@ func NewCommitPluginCodecV1() *CommitPluginCodecV1 {
}
func (c *CommitPluginCodecV1) Encode(ctx context.Context, report cciptypes.CommitPluginReport) ([]byte, error) {
- merkleRoots := make([]evm_2_evm_multi_offramp.EVM2EVMMultiOffRampMerkleRoot, 0, len(report.MerkleRoots))
+ merkleRoots := make([]offramp.OffRampMerkleRoot, 0, len(report.MerkleRoots))
for _, root := range report.MerkleRoots {
- merkleRoots = append(merkleRoots, evm_2_evm_multi_offramp.EVM2EVMMultiOffRampMerkleRoot{
+ merkleRoots = append(merkleRoots, offramp.OffRampMerkleRoot{
SourceChainSelector: uint64(root.ChainSel),
- Interval: evm_2_evm_multi_offramp.EVM2EVMMultiOffRampInterval{
+ Interval: offramp.OffRampInterval{
Min: uint64(root.SeqNumsRange.Start()),
Max: uint64(root.SeqNumsRange.End()),
},
@@ -44,7 +44,7 @@ func (c *CommitPluginCodecV1) Encode(ctx context.Context, report cciptypes.Commi
})
}
- tokenPriceUpdates := make([]evm_2_evm_multi_offramp.InternalTokenPriceUpdate, 0, len(report.PriceUpdates.TokenPriceUpdates))
+ tokenPriceUpdates := make([]offramp.InternalTokenPriceUpdate, 0, len(report.PriceUpdates.TokenPriceUpdates))
for _, update := range report.PriceUpdates.TokenPriceUpdates {
if !common.IsHexAddress(string(update.TokenID)) {
return nil, fmt.Errorf("invalid token address: %s", update.TokenID)
@@ -52,26 +52,26 @@ func (c *CommitPluginCodecV1) Encode(ctx context.Context, report cciptypes.Commi
if update.Price.IsEmpty() {
return nil, fmt.Errorf("empty price for token: %s", update.TokenID)
}
- tokenPriceUpdates = append(tokenPriceUpdates, evm_2_evm_multi_offramp.InternalTokenPriceUpdate{
+ tokenPriceUpdates = append(tokenPriceUpdates, offramp.InternalTokenPriceUpdate{
SourceToken: common.HexToAddress(string(update.TokenID)),
UsdPerToken: update.Price.Int,
})
}
- gasPriceUpdates := make([]evm_2_evm_multi_offramp.InternalGasPriceUpdate, 0, len(report.PriceUpdates.GasPriceUpdates))
+ gasPriceUpdates := make([]offramp.InternalGasPriceUpdate, 0, len(report.PriceUpdates.GasPriceUpdates))
for _, update := range report.PriceUpdates.GasPriceUpdates {
if update.GasPrice.IsEmpty() {
return nil, fmt.Errorf("empty gas price for chain: %d", update.ChainSel)
}
- gasPriceUpdates = append(gasPriceUpdates, evm_2_evm_multi_offramp.InternalGasPriceUpdate{
+ gasPriceUpdates = append(gasPriceUpdates, offramp.InternalGasPriceUpdate{
DestChainSelector: uint64(update.ChainSel),
UsdPerUnitGas: update.GasPrice.Int,
})
}
- evmReport := evm_2_evm_multi_offramp.EVM2EVMMultiOffRampCommitReport{
- PriceUpdates: evm_2_evm_multi_offramp.InternalPriceUpdates{
+ evmReport := offramp.OffRampCommitReport{
+ PriceUpdates: offramp.InternalPriceUpdates{
TokenPriceUpdates: tokenPriceUpdates,
GasPriceUpdates: gasPriceUpdates,
},
@@ -90,11 +90,11 @@ func (c *CommitPluginCodecV1) Decode(ctx context.Context, bytes []byte) (cciptyp
return cciptypes.CommitPluginReport{}, fmt.Errorf("expected 1 argument, got %d", len(unpacked))
}
- commitReportRaw := abi.ConvertType(unpacked[0], new(evm_2_evm_multi_offramp.EVM2EVMMultiOffRampCommitReport))
- commitReport, is := commitReportRaw.(*evm_2_evm_multi_offramp.EVM2EVMMultiOffRampCommitReport)
+ commitReportRaw := abi.ConvertType(unpacked[0], new(offramp.OffRampCommitReport))
+ commitReport, is := commitReportRaw.(*offramp.OffRampCommitReport)
if !is {
return cciptypes.CommitPluginReport{},
- fmt.Errorf("expected EVM2EVMMultiOffRampCommitReport, got %T", unpacked[0])
+ fmt.Errorf("expected OffRampCommitReport, got %T", unpacked[0])
}
merkleRoots := make([]cciptypes.MerkleRootChain, 0, len(commitReport.MerkleRoots))
diff --git a/core/capabilities/ccip/ccipevm/executecodec.go b/core/capabilities/ccip/ccipevm/executecodec.go
index a64c775112c..2349beb390b 100644
--- a/core/capabilities/ccip/ccipevm/executecodec.go
+++ b/core/capabilities/ccip/ccipevm/executecodec.go
@@ -10,19 +10,19 @@ import (
cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
)
// ExecutePluginCodecV1 is a codec for encoding and decoding execute plugin reports.
// Compatible with:
-// - "EVM2EVMMultiOffRamp 1.6.0-dev"
+// - "OffRamp 1.6.0-dev"
type ExecutePluginCodecV1 struct {
executeReportMethodInputs abi.Arguments
}
func NewExecutePluginCodecV1() *ExecutePluginCodecV1 {
- abiParsed, err := abi.JSON(strings.NewReader(evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI))
+ abiParsed, err := abi.JSON(strings.NewReader(offramp.OffRampABI))
if err != nil {
panic(fmt.Errorf("parse multi offramp abi: %s", err))
}
@@ -37,7 +37,7 @@ func NewExecutePluginCodecV1() *ExecutePluginCodecV1 {
}
func (e *ExecutePluginCodecV1) Encode(ctx context.Context, report cciptypes.ExecutePluginReport) ([]byte, error) {
- evmReport := make([]evm_2_evm_multi_offramp.InternalExecutionReportSingleChain, 0, len(report.ChainReports))
+ evmReport := make([]offramp.InternalExecutionReportSingleChain, 0, len(report.ChainReports))
for _, chainReport := range report.ChainReports {
if chainReport.ProofFlagBits.IsEmpty() {
@@ -49,17 +49,17 @@ func (e *ExecutePluginCodecV1) Encode(ctx context.Context, report cciptypes.Exec
evmProofs = append(evmProofs, proof)
}
- evmMessages := make([]evm_2_evm_multi_offramp.InternalAny2EVMRampMessage, 0, len(chainReport.Messages))
+ evmMessages := make([]offramp.InternalAny2EVMRampMessage, 0, len(chainReport.Messages))
for _, message := range chainReport.Messages {
receiver := common.BytesToAddress(message.Receiver)
- tokenAmounts := make([]evm_2_evm_multi_offramp.InternalRampTokenAmount, 0, len(message.TokenAmounts))
+ tokenAmounts := make([]offramp.InternalRampTokenAmount, 0, len(message.TokenAmounts))
for _, tokenAmount := range message.TokenAmounts {
if tokenAmount.Amount.IsEmpty() {
return nil, fmt.Errorf("empty amount for token: %s", tokenAmount.DestTokenAddress)
}
- tokenAmounts = append(tokenAmounts, evm_2_evm_multi_offramp.InternalRampTokenAmount{
+ tokenAmounts = append(tokenAmounts, offramp.InternalRampTokenAmount{
SourcePoolAddress: tokenAmount.SourcePoolAddress,
DestTokenAddress: tokenAmount.DestTokenAddress,
ExtraData: tokenAmount.ExtraData,
@@ -72,8 +72,8 @@ func (e *ExecutePluginCodecV1) Encode(ctx context.Context, report cciptypes.Exec
return nil, fmt.Errorf("decode extra args to get gas limit: %w", err)
}
- evmMessages = append(evmMessages, evm_2_evm_multi_offramp.InternalAny2EVMRampMessage{
- Header: evm_2_evm_multi_offramp.InternalRampMessageHeader{
+ evmMessages = append(evmMessages, offramp.InternalAny2EVMRampMessage{
+ Header: offramp.InternalRampMessageHeader{
MessageId: message.Header.MessageID,
SourceChainSelector: uint64(message.Header.SourceChainSelector),
DestChainSelector: uint64(message.Header.DestChainSelector),
@@ -88,7 +88,7 @@ func (e *ExecutePluginCodecV1) Encode(ctx context.Context, report cciptypes.Exec
})
}
- evmChainReport := evm_2_evm_multi_offramp.InternalExecutionReportSingleChain{
+ evmChainReport := offramp.InternalExecutionReportSingleChain{
SourceChainSelector: uint64(chainReport.SourceChainSelector),
Messages: evmMessages,
OffchainTokenData: chainReport.OffchainTokenData,
@@ -110,8 +110,8 @@ func (e *ExecutePluginCodecV1) Decode(ctx context.Context, encodedReport []byte)
return cciptypes.ExecutePluginReport{}, fmt.Errorf("unpacked report is empty")
}
- evmReportRaw := abi.ConvertType(unpacked[0], new([]evm_2_evm_multi_offramp.InternalExecutionReportSingleChain))
- evmReportPtr, is := evmReportRaw.(*[]evm_2_evm_multi_offramp.InternalExecutionReportSingleChain)
+ evmReportRaw := abi.ConvertType(unpacked[0], new([]offramp.InternalExecutionReportSingleChain))
+ evmReportPtr, is := evmReportRaw.(*[]offramp.InternalExecutionReportSingleChain)
if !is {
return cciptypes.ExecutePluginReport{}, fmt.Errorf("got an unexpected report type %T", unpacked[0])
}
diff --git a/core/capabilities/ccip/ccipevm/msghasher.go b/core/capabilities/ccip/ccipevm/msghasher.go
index 0df0a8254ac..e620d96a43a 100644
--- a/core/capabilities/ccip/ccipevm/msghasher.go
+++ b/core/capabilities/ccip/ccipevm/msghasher.go
@@ -32,7 +32,7 @@ var (
// MessageHasherV1 implements the MessageHasher interface.
// Compatible with:
-// - "EVM2EVMMultiOnRamp 1.6.0-dev"
+// - "OnRamp 1.6.0-dev"
type MessageHasherV1 struct{}
func NewMessageHasherV1() *MessageHasherV1 {
diff --git a/core/capabilities/ccip/configs/evm/chain_writer.go b/core/capabilities/ccip/configs/evm/chain_writer.go
index 6d3b73c6f5c..6f8c4a1570b 100644
--- a/core/capabilities/ccip/configs/evm/chain_writer.go
+++ b/core/capabilities/ccip/configs/evm/chain_writer.go
@@ -12,12 +12,12 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
evmrelaytypes "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/types"
)
var (
- offrampABI = evmtypes.MustGetABI(evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI)
+ offrampABI = evmtypes.MustGetABI(offramp.OffRampABI)
)
func MustChainWriterConfig(
@@ -45,7 +45,7 @@ func ChainWriterConfigRaw(
return evmrelaytypes.ChainWriterConfig{
Contracts: map[string]*evmrelaytypes.ContractConfig{
consts.ContractNameOffRamp: {
- ContractABI: evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI,
+ ContractABI: offramp.OffRampABI,
Configs: map[string]*evmrelaytypes.ChainWriterDefinition{
consts.MethodCommit: {
ChainSpecificName: mustGetMethodName("commit", offrampABI),
diff --git a/core/capabilities/ccip/configs/evm/contract_reader.go b/core/capabilities/ccip/configs/evm/contract_reader.go
index 085729690d5..6774c8c1fe5 100644
--- a/core/capabilities/ccip/configs/evm/contract_reader.go
+++ b/core/capabilities/ccip/configs/evm/contract_reader.go
@@ -10,15 +10,15 @@ import (
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_config"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
kcr "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry"
evmrelaytypes "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/types"
)
var (
- onrampABI = evmtypes.MustGetABI(evm_2_evm_multi_onramp.EVM2EVMMultiOnRampABI)
+ onrampABI = evmtypes.MustGetABI(onramp.OnRampABI)
capabilitiesRegsitryABI = evmtypes.MustGetABI(kcr.CapabilitiesRegistryABI)
ccipConfigABI = evmtypes.MustGetABI(ccip_config.CCIPConfigABI)
priceRegistryABI = evmtypes.MustGetABI(price_registry.PriceRegistryABI)
@@ -53,7 +53,7 @@ func DestReaderConfig() evmrelaytypes.ChainReaderConfig {
return evmrelaytypes.ChainReaderConfig{
Contracts: map[string]evmrelaytypes.ChainContractReader{
consts.ContractNameOffRamp: {
- ContractABI: evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI,
+ ContractABI: offramp.OffRampABI,
ContractPollingFilter: evmrelaytypes.ContractPollingFilter{
GenericEventNames: []string{
mustGetEventName(consts.EventNameExecutionStateChanged, offrampABI),
@@ -108,7 +108,7 @@ func SourceReaderConfig() evmrelaytypes.ChainReaderConfig {
return evmrelaytypes.ChainReaderConfig{
Contracts: map[string]evmrelaytypes.ChainContractReader{
consts.ContractNameOnRamp: {
- ContractABI: evm_2_evm_multi_onramp.EVM2EVMMultiOnRampABI,
+ ContractABI: onramp.OnRampABI,
ContractPollingFilter: evmrelaytypes.ContractPollingFilter{
GenericEventNames: []string{
mustGetEventName(consts.EventNameCCIPSendRequested, onrampABI),
diff --git a/core/capabilities/ccip/oraclecreator/inprocess.go b/core/capabilities/ccip/oraclecreator/inprocess.go
index fa74c1b0eaa..266ffc2d77d 100644
--- a/core/capabilities/ccip/oraclecreator/inprocess.go
+++ b/core/capabilities/ccip/oraclecreator/inprocess.go
@@ -28,7 +28,7 @@ import (
cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3"
- commitocr3 "github.com/smartcontractkit/chainlink-ccip/commit"
+ commitocr3 "github.com/smartcontractkit/chainlink-ccip/commitrmnocb"
execocr3 "github.com/smartcontractkit/chainlink-ccip/execute"
ccipreaderpkg "github.com/smartcontractkit/chainlink-ccip/pkg/reader"
diff --git a/core/chains/evm/client/chain_client.go b/core/chains/evm/client/chain_client.go
index 75973469140..c27d294ebfd 100644
--- a/core/chains/evm/client/chain_client.go
+++ b/core/chains/evm/client/chain_client.go
@@ -20,7 +20,6 @@ import (
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
)
-const queryTimeout = 10 * time.Second
const BALANCE_OF_ADDRESS_FUNCTION_SELECTOR = "0x70a08231"
var _ Client = (*chainClient)(nil)
@@ -99,7 +98,7 @@ type Client interface {
}
func ContextWithDefaultTimeout() (ctx context.Context, cancel context.CancelFunc) {
- return context.WithTimeout(context.Background(), queryTimeout)
+ return context.WithTimeout(context.Background(), commonclient.QueryTimeout)
}
type chainClient struct {
@@ -161,9 +160,13 @@ func (c *chainClient) BalanceAt(ctx context.Context, account common.Address, blo
return c.multiNode.BalanceAt(ctx, account, blockNumber)
}
+// BatchCallContext - sends all given requests as a single batch.
// Request specific errors for batch calls are returned to the individual BatchElem.
// Ensure the same BatchElem slice provided by the caller is passed through the call stack
// to ensure the caller has access to the errors.
+// Note: some chains (e.g Astar) have custom finality requests, so even when FinalityTagEnabled=true, finality tag
+// might not be properly handled and returned results might have weaker finality guarantees. It's highly recommended
+// to use HeadTracker to identify latest finalized block.
func (c *chainClient) BatchCallContext(ctx context.Context, b []rpc.BatchElem) error {
return c.multiNode.BatchCallContext(ctx, b)
}
diff --git a/core/chains/evm/client/chain_client_test.go b/core/chains/evm/client/chain_client_test.go
index 33955c16451..47041e40e91 100644
--- a/core/chains/evm/client/chain_client_test.go
+++ b/core/chains/evm/client/chain_client_test.go
@@ -328,7 +328,7 @@ func TestEthClient_HeaderByNumber(t *testing.T) {
`{"difficulty":"0xf3a00","extraData":"0xd883010503846765746887676f312e372e318664617277696e","gasLimit":"0xffc001","gasUsed":"0x0","hash":"0x41800b5c3f1717687d85fc9018faac0a6e90b39deaa0b99e7fe4fe796ddeb26a","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0xd1aeb42885a43b72b518182ef893125814811048","mixHash":"0x0f98b15f1a4901a7e9204f3c500a7bd527b3fb2c3340e12176a44b83e414a69e","nonce":"0x0ece08ea8c49dfd9","number":"0x1","parentHash":"0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x218","stateRoot":"0xc7b01007a10da045eacb90385887dd0c38fcb5db7393006bdde24b93873c334b","timestamp":"0x58318da2","totalDifficulty":"0x1f3a00","transactions":[],"transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","uncles":[]}`},
{"happy parity", expectedBlockNum, expectedBlockNum.Int64(), nil,
`{"author":"0xd1aeb42885a43b72b518182ef893125814811048","difficulty":"0xf3a00","extraData":"0xd883010503846765746887676f312e372e318664617277696e","gasLimit":"0xffc001","gasUsed":"0x0","hash":"0x41800b5c3f1717687d85fc9018faac0a6e90b39deaa0b99e7fe4fe796ddeb26a","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0xd1aeb42885a43b72b518182ef893125814811048","mixHash":"0x0f98b15f1a4901a7e9204f3c500a7bd527b3fb2c3340e12176a44b83e414a69e","nonce":"0x0ece08ea8c49dfd9","number":"0x1","parentHash":"0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sealFields":["0xa00f98b15f1a4901a7e9204f3c500a7bd527b3fb2c3340e12176a44b83e414a69e","0x880ece08ea8c49dfd9"],"sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x218","stateRoot":"0xc7b01007a10da045eacb90385887dd0c38fcb5db7393006bdde24b93873c334b","timestamp":"0x58318da2","totalDifficulty":"0x1f3a00","transactions":[],"transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","uncles":[]}`},
- {"missing header", expectedBlockNum, 0, fmt.Errorf("no live nodes available for chain %s", testutils.FixtureChainID.String()),
+ {"missing header", expectedBlockNum, 0, fmt.Errorf("RPCClient returned error (eth-primary-rpc-0): not found"),
`null`},
}
@@ -366,7 +366,7 @@ func TestEthClient_HeaderByNumber(t *testing.T) {
ctx, cancel := context.WithTimeout(tests.Context(t), 5*time.Second)
result, err := ethClient.HeadByNumber(ctx, expectedBlockNum)
if test.error != nil {
- require.Error(t, err, test.error)
+ require.EqualError(t, err, test.error.Error())
} else {
require.NoError(t, err)
require.Equal(t, expectedBlockHash, result.Hash.Hex())
@@ -751,7 +751,7 @@ func newMockRpc(t *testing.T) *mocks.RPCClient {
mockRpc.On("Close").Return(nil).Once()
mockRpc.On("ChainID", mock.Anything).Return(testutils.FixtureChainID, nil).Once()
// node does not always manage to fully setup aliveLoop, so we have to make calls optional to avoid flakes
- mockRpc.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(client.NewMockSubscription(), nil).Maybe()
+ mockRpc.On("SubscribeToHeads", mock.Anything).Return(nil, client.NewMockSubscription(), nil).Maybe()
mockRpc.On("SetAliveLoopSub", mock.Anything).Return().Maybe()
return mockRpc
}
diff --git a/core/chains/evm/client/config_builder.go b/core/chains/evm/client/config_builder.go
index 19e0f14fd67..fa702bac111 100644
--- a/core/chains/evm/client/config_builder.go
+++ b/core/chains/evm/client/config_builder.go
@@ -41,6 +41,8 @@ func NewClientConfigs(
finalizedBlockOffset *uint32,
enforceRepeatableRead *bool,
deathDeclarationDelay time.Duration,
+ noNewFinalizedHeadsThreshold time.Duration,
+ finalizedBlockPollInterval time.Duration,
) (commonclient.ChainConfig, evmconfig.NodePool, []*toml.Node, error) {
nodes, err := parseNodeConfigs(nodeCfgs)
@@ -48,24 +50,26 @@ func NewClientConfigs(
return nil, nil, nil, err
}
nodePool := toml.NodePool{
- SelectionMode: selectionMode,
- LeaseDuration: commonconfig.MustNewDuration(leaseDuration),
- PollFailureThreshold: pollFailureThreshold,
- PollInterval: commonconfig.MustNewDuration(pollInterval),
- SyncThreshold: syncThreshold,
- NodeIsSyncingEnabled: nodeIsSyncingEnabled,
- EnforceRepeatableRead: enforceRepeatableRead,
- DeathDeclarationDelay: commonconfig.MustNewDuration(deathDeclarationDelay),
+ SelectionMode: selectionMode,
+ LeaseDuration: commonconfig.MustNewDuration(leaseDuration),
+ PollFailureThreshold: pollFailureThreshold,
+ PollInterval: commonconfig.MustNewDuration(pollInterval),
+ SyncThreshold: syncThreshold,
+ NodeIsSyncingEnabled: nodeIsSyncingEnabled,
+ EnforceRepeatableRead: enforceRepeatableRead,
+ DeathDeclarationDelay: commonconfig.MustNewDuration(deathDeclarationDelay),
+ FinalizedBlockPollInterval: commonconfig.MustNewDuration(finalizedBlockPollInterval),
}
nodePoolCfg := &evmconfig.NodePoolConfig{C: nodePool}
chainConfig := &evmconfig.EVMConfig{
C: &toml.EVMConfig{
Chain: toml.Chain{
- ChainType: chaintype.NewChainTypeConfig(chainType),
- FinalityDepth: finalityDepth,
- FinalityTagEnabled: finalityTagEnabled,
- NoNewHeadsThreshold: commonconfig.MustNewDuration(noNewHeadsThreshold),
- FinalizedBlockOffset: finalizedBlockOffset,
+ ChainType: chaintype.NewChainTypeConfig(chainType),
+ FinalityDepth: finalityDepth,
+ FinalityTagEnabled: finalityTagEnabled,
+ NoNewHeadsThreshold: commonconfig.MustNewDuration(noNewHeadsThreshold),
+ FinalizedBlockOffset: finalizedBlockOffset,
+ NoNewFinalizedHeadsThreshold: commonconfig.MustNewDuration(noNewFinalizedHeadsThreshold),
},
},
}
diff --git a/core/chains/evm/client/config_builder_test.go b/core/chains/evm/client/config_builder_test.go
index 7c08bf18c1d..403c6c2d619 100644
--- a/core/chains/evm/client/config_builder_test.go
+++ b/core/chains/evm/client/config_builder_test.go
@@ -26,6 +26,7 @@ func TestClientConfigBuilder(t *testing.T) {
finalizedBlockOffset := ptr[uint32](16)
enforceRepeatableRead := ptr(true)
deathDeclarationDelay := time.Second * 3
+ noNewFinalizedBlocksThreshold := time.Second
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo"),
@@ -38,7 +39,7 @@ func TestClientConfigBuilder(t *testing.T) {
noNewHeadsThreshold := time.Second
chainCfg, nodePool, nodes, err := client.NewClientConfigs(selectionMode, leaseDuration, chainTypeStr, nodeConfigs,
pollFailureThreshold, pollInterval, syncThreshold, nodeIsSyncingEnabled, noNewHeadsThreshold, finalityDepth,
- finalityTagEnabled, finalizedBlockOffset, enforceRepeatableRead, deathDeclarationDelay)
+ finalityTagEnabled, finalizedBlockOffset, enforceRepeatableRead, deathDeclarationDelay, noNewFinalizedBlocksThreshold, pollInterval)
require.NoError(t, err)
// Validate node pool configs
@@ -50,6 +51,7 @@ func TestClientConfigBuilder(t *testing.T) {
require.Equal(t, *nodeIsSyncingEnabled, nodePool.NodeIsSyncingEnabled())
require.Equal(t, *enforceRepeatableRead, nodePool.EnforceRepeatableRead())
require.Equal(t, deathDeclarationDelay, nodePool.DeathDeclarationDelay())
+ require.Equal(t, pollInterval, nodePool.FinalizedBlockPollInterval())
// Validate node configs
require.Equal(t, *nodeConfigs[0].Name, *nodes[0].Name)
@@ -61,6 +63,7 @@ func TestClientConfigBuilder(t *testing.T) {
require.Equal(t, *finalityDepth, chainCfg.FinalityDepth())
require.Equal(t, *finalityTagEnabled, chainCfg.FinalityTagEnabled())
require.Equal(t, *finalizedBlockOffset, chainCfg.FinalizedBlockOffset())
+ require.Equal(t, noNewFinalizedBlocksThreshold, chainCfg.NoNewFinalizedHeadsThreshold())
// let combiler tell us, when we do not have sufficient data to create evm client
_ = client.NewEvmClient(nodePool, chainCfg, nil, logger.Test(t), big.NewInt(10), nodes, chaintype.ChainType(chainTypeStr))
diff --git a/core/chains/evm/client/errors.go b/core/chains/evm/client/errors.go
index 83a8bce3931..e7fff8d0dbc 100644
--- a/core/chains/evm/client/errors.go
+++ b/core/chains/evm/client/errors.go
@@ -158,7 +158,7 @@ var arbitrum = ClientErrors{
Fatal: arbitrumFatal,
L2FeeTooLow: regexp.MustCompile(`(: |^)max fee per gas less than block base fee(:|$)`),
L2Full: regexp.MustCompile(`(: |^)(queue full|sequencer pending tx pool full, please try again)(:|$)`),
- ServiceUnavailable: regexp.MustCompile(`(: |^)502 Bad Gateway: [\s\S]*$`),
+ ServiceUnavailable: regexp.MustCompile(`(: |^)502 Bad Gateway: [\s\S]*$|network is unreachable|i/o timeout`),
}
var celo = ClientErrors{
@@ -250,6 +250,19 @@ var zkEvm = ClientErrors{
TerminallyStuck: regexp.MustCompile(`(?:: |^)not enough .* counters to continue the execution$`),
}
+var aStar = ClientErrors{
+ TerminallyUnderpriced: regexp.MustCompile(`(?:: |^)(gas price less than block base fee)$`),
+}
+
+var mantle = ClientErrors{
+ InsufficientEth: regexp.MustCompile(`(: |^)'*insufficient funds for gas \* price \+ value`),
+ Fatal: regexp.MustCompile(`(: |^)'*invalid sender`),
+}
+
+var gnosis = ClientErrors{
+ TransactionAlreadyInMempool: regexp.MustCompile(`(: |^)(alreadyknown)`),
+}
+
const TerminallyStuckMsg = "transaction terminally stuck"
// Tx.Error messages that are set internally so they are not chain or client specific
@@ -257,7 +270,7 @@ var internal = ClientErrors{
TerminallyStuck: regexp.MustCompile(TerminallyStuckMsg),
}
-var clients = []ClientErrors{parity, geth, arbitrum, metis, substrate, avalanche, nethermind, harmony, besu, erigon, klaytn, celo, zkSync, zkEvm, internal}
+var clients = []ClientErrors{parity, geth, arbitrum, metis, substrate, avalanche, nethermind, harmony, besu, erigon, klaytn, celo, zkSync, zkEvm, mantle, aStar, gnosis, internal}
// ClientErrorRegexes returns a map of compiled regexes for each error type
func ClientErrorRegexes(errsRegex config.ClientErrors) *ClientErrors {
diff --git a/core/chains/evm/client/errors_test.go b/core/chains/evm/client/errors_test.go
index 3af6b702652..bddc7dd3dbc 100644
--- a/core/chains/evm/client/errors_test.go
+++ b/core/chains/evm/client/errors_test.go
@@ -136,6 +136,7 @@ func Test_Eth_Errors(t *testing.T) {
// This seems to be an erroneous message from the zkSync client, we'll have to match it anyway
{"ErrorObject { code: ServerError(3), message: \\\"known transaction. transaction with hash 0xf016…ad63 is already in the system\\\", data: Some(RawValue(\\\"0x\\\")) }", true, "zkSync"},
{"client error transaction already in mempool", true, "tomlConfig"},
+ {"alreadyknown", true, "Gnosis"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
@@ -227,6 +228,8 @@ func Test_Eth_Errors(t *testing.T) {
tests := []errorCase{
{"call failed: 503 Service Unavailable: \r\n
503 Service Temporarily Unavailable\r\n\r\n503 Service Temporarily Unavailable
\r\n\r\n\r\n", true, "Nethermind"},
{"call failed: 502 Bad Gateway: \r\n502 Bad Gateway\r\n\r\n502 Bad Gateway
\r\n
", true, "Arbitrum"},
+ {"i/o timeout", true, "Arbitrum"},
+ {"network is unreachable", true, "Arbitrum"},
{"client error service unavailable", true, "tomlConfig"},
}
for _, test := range tests {
diff --git a/core/chains/evm/client/evm_client.go b/core/chains/evm/client/evm_client.go
index fd7fa5868a4..1fd533d6aab 100644
--- a/core/chains/evm/client/evm_client.go
+++ b/core/chains/evm/client/evm_client.go
@@ -3,6 +3,7 @@ package client
import (
"math/big"
"net/url"
+ "time"
"github.com/smartcontractkit/chainlink-common/pkg/logger"
@@ -17,16 +18,17 @@ func NewEvmClient(cfg evmconfig.NodePool, chainCfg commonclient.ChainConfig, cli
var empty url.URL
var primaries []commonclient.Node[*big.Int, *evmtypes.Head, RPCClient]
var sendonlys []commonclient.SendOnlyNode[*big.Int, RPCClient]
+ largePayloadRPCTimeout, defaultRPCTimeout := getRPCTimeouts(chainType)
for i, node := range nodes {
if node.SendOnly != nil && *node.SendOnly {
rpc := NewRPCClient(lggr, empty, (*url.URL)(node.HTTPURL), *node.Name, int32(i), chainID,
- commonclient.Secondary)
+ commonclient.Secondary, cfg.FinalizedBlockPollInterval(), largePayloadRPCTimeout, defaultRPCTimeout, chainType)
sendonly := commonclient.NewSendOnlyNode(lggr, (url.URL)(*node.HTTPURL),
*node.Name, chainID, rpc)
sendonlys = append(sendonlys, sendonly)
} else {
rpc := NewRPCClient(lggr, (url.URL)(*node.WSURL), (*url.URL)(node.HTTPURL), *node.Name, int32(i),
- chainID, commonclient.Primary)
+ chainID, commonclient.Primary, cfg.FinalizedBlockPollInterval(), largePayloadRPCTimeout, defaultRPCTimeout, chainType)
primaryNode := commonclient.NewNode(cfg, chainCfg,
lggr, (url.URL)(*node.WSURL), (*url.URL)(node.HTTPURL), *node.Name, int32(i), chainID, *node.Order,
rpc, "EVM")
@@ -37,3 +39,11 @@ func NewEvmClient(cfg evmconfig.NodePool, chainCfg commonclient.ChainConfig, cli
return NewChainClient(lggr, cfg.SelectionMode(), cfg.LeaseDuration(), chainCfg.NodeNoNewHeadsThreshold(),
primaries, sendonlys, chainID, chainType, clientErrors, cfg.DeathDeclarationDelay())
}
+
+func getRPCTimeouts(chainType chaintype.ChainType) (largePayload, defaultTimeout time.Duration) {
+ if chaintype.ChainHedera == chainType {
+ return 30 * time.Second, commonclient.QueryTimeout
+ }
+
+ return commonclient.QueryTimeout, commonclient.QueryTimeout
+}
diff --git a/core/chains/evm/client/evm_client_test.go b/core/chains/evm/client/evm_client_test.go
index 9ad25f96025..bdfcf426744 100644
--- a/core/chains/evm/client/evm_client_test.go
+++ b/core/chains/evm/client/evm_client_test.go
@@ -27,6 +27,8 @@ func TestNewEvmClient(t *testing.T) {
finalizedBlockOffset := ptr[uint32](16)
enforceRepeatableRead := ptr(true)
deathDeclarationDelay := time.Second * 3
+ noNewFinalizedBlocksThreshold := time.Second * 5
+ finalizedBlockPollInterval := time.Second * 4
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo"),
@@ -38,7 +40,7 @@ func TestNewEvmClient(t *testing.T) {
finalityTagEnabled := ptr(true)
chainCfg, nodePool, nodes, err := client.NewClientConfigs(selectionMode, leaseDuration, chainTypeStr, nodeConfigs,
pollFailureThreshold, pollInterval, syncThreshold, nodeIsSyncingEnabled, noNewHeadsThreshold, finalityDepth,
- finalityTagEnabled, finalizedBlockOffset, enforceRepeatableRead, deathDeclarationDelay)
+ finalityTagEnabled, finalizedBlockOffset, enforceRepeatableRead, deathDeclarationDelay, noNewFinalizedBlocksThreshold, finalizedBlockPollInterval)
require.NoError(t, err)
client := client.NewEvmClient(nodePool, chainCfg, nil, logger.Test(t), testutils.FixtureChainID, nodes, chaintype.ChainType(chainTypeStr))
diff --git a/core/chains/evm/client/helpers_test.go b/core/chains/evm/client/helpers_test.go
index e1017a5564f..e996ccc5e4f 100644
--- a/core/chains/evm/client/helpers_test.go
+++ b/core/chains/evm/client/helpers_test.go
@@ -140,7 +140,7 @@ func NewChainClientWithTestNode(
}
lggr := logger.Test(t)
- rpc := NewRPCClient(lggr, *parsed, rpcHTTPURL, "eth-primary-rpc-0", id, chainID, commonclient.Primary)
+ rpc := NewRPCClient(lggr, *parsed, rpcHTTPURL, "eth-primary-rpc-0", id, chainID, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
n := commonclient.NewNode[*big.Int, *evmtypes.Head, RPCClient](
nodeCfg, clientMocks.ChainConfig{NoNewHeadsThresholdVal: noNewHeadsThreshold}, lggr, *parsed, rpcHTTPURL, "eth-primary-node-0", id, chainID, 1, rpc, "EVM")
@@ -152,7 +152,7 @@ func NewChainClientWithTestNode(
return nil, pkgerrors.Errorf("sendonly ethereum rpc url scheme must be http(s): %s", u.String())
}
var empty url.URL
- rpc := NewRPCClient(lggr, empty, &sendonlyRPCURLs[i], fmt.Sprintf("eth-sendonly-rpc-%d", i), id, chainID, commonclient.Secondary)
+ rpc := NewRPCClient(lggr, empty, &sendonlyRPCURLs[i], fmt.Sprintf("eth-sendonly-rpc-%d", i), id, chainID, commonclient.Secondary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
s := commonclient.NewSendOnlyNode[*big.Int, RPCClient](
lggr, u, fmt.Sprintf("eth-sendonly-%d", i), chainID, rpc)
sendonlys = append(sendonlys, s)
diff --git a/core/chains/evm/client/mocks/rpc_client.go b/core/chains/evm/client/mocks/rpc_client.go
index fa866af29e0..06f79efd551 100644
--- a/core/chains/evm/client/mocks/rpc_client.go
+++ b/core/chains/evm/client/mocks/rpc_client.go
@@ -1883,8 +1883,8 @@ func (_c *RPCClient_SubscribeNewHead_Call) Run(run func(ctx context.Context, cha
return _c
}
-func (_c *RPCClient_SubscribeNewHead_Call) Return(_a0 commontypes.Subscription, _a1 error) *RPCClient_SubscribeNewHead_Call {
- _c.Call.Return(_a0, _a1)
+func (_c *RPCClient_SubscribeNewHead_Call) Return(s commontypes.Subscription, err error) *RPCClient_SubscribeNewHead_Call {
+ _c.Call.Return(s, err)
return _c
}
@@ -1893,6 +1893,140 @@ func (_c *RPCClient_SubscribeNewHead_Call) RunAndReturn(run func(context.Context
return _c
}
+// SubscribeToFinalizedHeads provides a mock function with given fields: _a0
+func (_m *RPCClient) SubscribeToFinalizedHeads(_a0 context.Context) (<-chan *types.Head, commontypes.Subscription, error) {
+ ret := _m.Called(_a0)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SubscribeToFinalizedHeads")
+ }
+
+ var r0 <-chan *types.Head
+ var r1 commontypes.Subscription
+ var r2 error
+ if rf, ok := ret.Get(0).(func(context.Context) (<-chan *types.Head, commontypes.Subscription, error)); ok {
+ return rf(_a0)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) <-chan *types.Head); ok {
+ r0 = rf(_a0)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan *types.Head)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) commontypes.Subscription); ok {
+ r1 = rf(_a0)
+ } else {
+ if ret.Get(1) != nil {
+ r1 = ret.Get(1).(commontypes.Subscription)
+ }
+ }
+
+ if rf, ok := ret.Get(2).(func(context.Context) error); ok {
+ r2 = rf(_a0)
+ } else {
+ r2 = ret.Error(2)
+ }
+
+ return r0, r1, r2
+}
+
+// RPCClient_SubscribeToFinalizedHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeToFinalizedHeads'
+type RPCClient_SubscribeToFinalizedHeads_Call struct {
+ *mock.Call
+}
+
+// SubscribeToFinalizedHeads is a helper method to define mock.On call
+// - _a0 context.Context
+func (_e *RPCClient_Expecter) SubscribeToFinalizedHeads(_a0 interface{}) *RPCClient_SubscribeToFinalizedHeads_Call {
+ return &RPCClient_SubscribeToFinalizedHeads_Call{Call: _e.mock.On("SubscribeToFinalizedHeads", _a0)}
+}
+
+func (_c *RPCClient_SubscribeToFinalizedHeads_Call) Run(run func(_a0 context.Context)) *RPCClient_SubscribeToFinalizedHeads_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *RPCClient_SubscribeToFinalizedHeads_Call) Return(_a0 <-chan *types.Head, _a1 commontypes.Subscription, _a2 error) *RPCClient_SubscribeToFinalizedHeads_Call {
+ _c.Call.Return(_a0, _a1, _a2)
+ return _c
+}
+
+func (_c *RPCClient_SubscribeToFinalizedHeads_Call) RunAndReturn(run func(context.Context) (<-chan *types.Head, commontypes.Subscription, error)) *RPCClient_SubscribeToFinalizedHeads_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SubscribeToHeads provides a mock function with given fields: ctx
+func (_m *RPCClient) SubscribeToHeads(ctx context.Context) (<-chan *types.Head, commontypes.Subscription, error) {
+ ret := _m.Called(ctx)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SubscribeToHeads")
+ }
+
+ var r0 <-chan *types.Head
+ var r1 commontypes.Subscription
+ var r2 error
+ if rf, ok := ret.Get(0).(func(context.Context) (<-chan *types.Head, commontypes.Subscription, error)); ok {
+ return rf(ctx)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) <-chan *types.Head); ok {
+ r0 = rf(ctx)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(<-chan *types.Head)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) commontypes.Subscription); ok {
+ r1 = rf(ctx)
+ } else {
+ if ret.Get(1) != nil {
+ r1 = ret.Get(1).(commontypes.Subscription)
+ }
+ }
+
+ if rf, ok := ret.Get(2).(func(context.Context) error); ok {
+ r2 = rf(ctx)
+ } else {
+ r2 = ret.Error(2)
+ }
+
+ return r0, r1, r2
+}
+
+// RPCClient_SubscribeToHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SubscribeToHeads'
+type RPCClient_SubscribeToHeads_Call struct {
+ *mock.Call
+}
+
+// SubscribeToHeads is a helper method to define mock.On call
+// - ctx context.Context
+func (_e *RPCClient_Expecter) SubscribeToHeads(ctx interface{}) *RPCClient_SubscribeToHeads_Call {
+ return &RPCClient_SubscribeToHeads_Call{Call: _e.mock.On("SubscribeToHeads", ctx)}
+}
+
+func (_c *RPCClient_SubscribeToHeads_Call) Run(run func(ctx context.Context)) *RPCClient_SubscribeToHeads_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *RPCClient_SubscribeToHeads_Call) Return(ch <-chan *types.Head, sub commontypes.Subscription, err error) *RPCClient_SubscribeToHeads_Call {
+ _c.Call.Return(ch, sub, err)
+ return _c
+}
+
+func (_c *RPCClient_SubscribeToHeads_Call) RunAndReturn(run func(context.Context) (<-chan *types.Head, commontypes.Subscription, error)) *RPCClient_SubscribeToHeads_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// SubscribersCount provides a mock function with given fields:
func (_m *RPCClient) SubscribersCount() int32 {
ret := _m.Called()
diff --git a/core/chains/evm/client/rpc_client.go b/core/chains/evm/client/rpc_client.go
index 9ab5fd135b4..07aa86fc450 100644
--- a/core/chains/evm/client/rpc_client.go
+++ b/core/chains/evm/client/rpc_client.go
@@ -2,6 +2,8 @@ package client
import (
"context"
+ "encoding/json"
+ "errors"
"fmt"
"math/big"
"net/url"
@@ -27,6 +29,7 @@ import (
commonclient "github.com/smartcontractkit/chainlink/v2/common/client"
commontypes "github.com/smartcontractkit/chainlink/v2/common/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/chaintype"
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
ubig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
@@ -102,6 +105,8 @@ type RPCClient interface {
GetInterceptedChainInfo() (latest, highestUserObservations commonclient.ChainInfo)
}
+const rpcSubscriptionMethodNewHeads = "newHeads"
+
type rawclient struct {
rpc *rpc.Client
geth *ethclient.Client
@@ -109,11 +114,15 @@ type rawclient struct {
}
type rpcClient struct {
- rpcLog logger.SugaredLogger
- name string
- id int32
- chainID *big.Int
- tier commonclient.NodeTier
+ rpcLog logger.SugaredLogger
+ name string
+ id int32
+ chainID *big.Int
+ tier commonclient.NodeTier
+ largePayloadRpcTimeout time.Duration
+ rpcTimeout time.Duration
+ finalizedBlockPollInterval time.Duration
+ chainType chaintype.ChainType
ws rawclient
http *rawclient
@@ -147,13 +156,22 @@ func NewRPCClient(
id int32,
chainID *big.Int,
tier commonclient.NodeTier,
+ finalizedBlockPollInterval time.Duration,
+ largePayloadRpcTimeout time.Duration,
+ rpcTimeout time.Duration,
+ chainType chaintype.ChainType,
) RPCClient {
- r := new(rpcClient)
+ r := &rpcClient{
+ largePayloadRpcTimeout: largePayloadRpcTimeout,
+ rpcTimeout: rpcTimeout,
+ chainType: chainType,
+ }
r.name = name
r.id = id
r.chainID = chainID
r.tier = tier
r.ws.uri = wsuri
+ r.finalizedBlockPollInterval = finalizedBlockPollInterval
if httpuri != nil {
r.http = &rawclient{uri: *httpuri}
}
@@ -172,7 +190,7 @@ func NewRPCClient(
// Not thread-safe, pure dial.
func (r *rpcClient) Dial(callerCtx context.Context) error {
- ctx, cancel := r.makeQueryCtx(callerCtx)
+ ctx, cancel := r.makeQueryCtx(callerCtx, r.rpcTimeout)
defer cancel()
promEVMPoolRPCNodeDials.WithLabelValues(r.chainID.String(), r.name).Inc()
@@ -361,7 +379,7 @@ func (r *rpcClient) UnsubscribeAllExceptAliveLoop() {
// CallContext implementation
func (r *rpcClient) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.largePayloadRpcTimeout)
defer cancel()
lggr := r.newRqLggr().With(
"method", method,
@@ -383,8 +401,28 @@ func (r *rpcClient) CallContext(ctx context.Context, result interface{}, method
return err
}
-func (r *rpcClient) BatchCallContext(ctx context.Context, b []rpc.BatchElem) error {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+func (r *rpcClient) BatchCallContext(rootCtx context.Context, b []rpc.BatchElem) error {
+ // Astar's finality tags provide weaker finality guarantees than we require.
+ // Fetch latest finalized block using Astar's custom requests and populate it after batch request completes
+ var astarRawLatestFinalizedBlock json.RawMessage
+ var requestedFinalizedBlock bool
+ if r.chainType == chaintype.ChainAstar {
+ for _, el := range b {
+ if !isRequestingFinalizedBlock(el) {
+ continue
+ }
+
+ requestedFinalizedBlock = true
+ err := r.astarLatestFinalizedBlock(rootCtx, &astarRawLatestFinalizedBlock)
+ if err != nil {
+ return fmt.Errorf("failed to get astar latest finalized block: %w", err)
+ }
+
+ break
+ }
+ }
+
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(rootCtx, r.largePayloadRpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("nBatchElems", len(b), "batchElems", b)
@@ -399,12 +437,51 @@ func (r *rpcClient) BatchCallContext(ctx context.Context, b []rpc.BatchElem) err
duration := time.Since(start)
r.logResult(lggr, err, duration, r.getRPCDomain(), "BatchCallContext")
+ if err != nil {
+ return err
+ }
- return err
+ if r.chainType == chaintype.ChainAstar && requestedFinalizedBlock {
+ // populate requested finalized block with correct value
+ for _, el := range b {
+ if !isRequestingFinalizedBlock(el) {
+ continue
+ }
+
+ el.Error = nil
+ err = json.Unmarshal(astarRawLatestFinalizedBlock, el.Result)
+ if err != nil {
+ el.Error = fmt.Errorf("failed to unmarshal astar finalized block into provided struct: %w", err)
+ }
+ }
+ }
+
+ return nil
}
+func isRequestingFinalizedBlock(el rpc.BatchElem) bool {
+ isGetBlock := el.Method == "eth_getBlockByNumber" && len(el.Args) > 0
+ if !isGetBlock {
+ return false
+ }
+
+ if el.Args[0] == rpc.FinalizedBlockNumber {
+ return true
+ }
+
+ switch arg := el.Args[0].(type) {
+ case string:
+ return arg == rpc.FinalizedBlockNumber.String()
+ case fmt.Stringer:
+ return arg.String() == rpc.FinalizedBlockNumber.String()
+ default:
+ return false
+ }
+}
+
+// TODO: Full transition from SubscribeNewHead to SubscribeToHeads is done in BCI-2875
func (r *rpcClient) SubscribeNewHead(ctx context.Context, channel chan<- *evmtypes.Head) (_ commontypes.Subscription, err error) {
- ctx, cancel, chStopInFlight, ws, _ := r.acquireQueryCtx(ctx)
+ ctx, cancel, chStopInFlight, ws, _ := r.acquireQueryCtx(ctx, r.rpcTimeout)
defer cancel()
args := []interface{}{"newHeads"}
lggr := r.newRqLggr().With("args", args)
@@ -434,6 +511,54 @@ func (r *rpcClient) SubscribeNewHead(ctx context.Context, channel chan<- *evmtyp
return subForwarder, nil
}
+func (r *rpcClient) SubscribeToHeads(ctx context.Context) (ch <-chan *evmtypes.Head, sub commontypes.Subscription, err error) {
+ ctx, cancel, chStopInFlight, ws, _ := r.acquireQueryCtx(ctx, r.rpcTimeout)
+ defer cancel()
+
+ args := []interface{}{rpcSubscriptionMethodNewHeads}
+ start := time.Now()
+ lggr := r.newRqLggr().With("args", args)
+
+ lggr.Debug("RPC call: evmclient.Client#EthSubscribe")
+ defer func() {
+ duration := time.Since(start)
+ r.logResult(lggr, err, duration, r.getRPCDomain(), "EthSubscribe")
+ err = r.wrapWS(err)
+ }()
+
+ channel := make(chan *evmtypes.Head)
+ forwarder := newSubForwarder(channel, func(head *evmtypes.Head) *evmtypes.Head {
+ head.EVMChainID = ubig.New(r.chainID)
+ r.onNewHead(ctx, chStopInFlight, head)
+ return head
+ }, r.wrapRPCClientError)
+
+ err = forwarder.start(ws.rpc.EthSubscribe(ctx, forwarder.srcCh, args...))
+ if err != nil {
+ return nil, nil, err
+ }
+
+ err = r.registerSub(forwarder, chStopInFlight)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ return channel, forwarder, err
+}
+
+func (r *rpcClient) SubscribeToFinalizedHeads(_ context.Context) (<-chan *evmtypes.Head, commontypes.Subscription, error) {
+ interval := r.finalizedBlockPollInterval
+ if interval == 0 {
+ return nil, nil, errors.New("FinalizedBlockPollInterval is 0")
+ }
+ timeout := interval
+ poller, channel := commonclient.NewPoller[*evmtypes.Head](interval, r.LatestFinalizedBlock, timeout, r.rpcLog)
+ if err := poller.Start(); err != nil {
+ return nil, nil, err
+ }
+ return channel, &poller, nil
+}
+
// GethClient wrappers
func (r *rpcClient) TransactionReceipt(ctx context.Context, txHash common.Hash) (receipt *evmtypes.Receipt, err error) {
@@ -449,7 +574,7 @@ func (r *rpcClient) TransactionReceipt(ctx context.Context, txHash common.Hash)
}
func (r *rpcClient) TransactionReceiptGeth(ctx context.Context, txHash common.Hash) (receipt *types.Receipt, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("txHash", txHash)
@@ -472,7 +597,7 @@ func (r *rpcClient) TransactionReceiptGeth(ctx context.Context, txHash common.Ha
return
}
func (r *rpcClient) TransactionByHash(ctx context.Context, txHash common.Hash) (tx *types.Transaction, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("txHash", txHash)
@@ -496,7 +621,7 @@ func (r *rpcClient) TransactionByHash(ctx context.Context, txHash common.Hash) (
}
func (r *rpcClient) HeaderByNumber(ctx context.Context, number *big.Int) (header *types.Header, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("number", number)
@@ -517,7 +642,7 @@ func (r *rpcClient) HeaderByNumber(ctx context.Context, number *big.Int) (header
}
func (r *rpcClient) HeaderByHash(ctx context.Context, hash common.Hash) (header *types.Header, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("hash", hash)
@@ -539,17 +664,84 @@ func (r *rpcClient) HeaderByHash(ctx context.Context, hash common.Hash) (header
return
}
-func (r *rpcClient) LatestFinalizedBlock(ctx context.Context) (*evmtypes.Head, error) {
- return r.blockByNumber(ctx, rpc.FinalizedBlockNumber.String())
+func (r *rpcClient) LatestFinalizedBlock(ctx context.Context) (head *evmtypes.Head, err error) {
+ // capture chStopInFlight to ensure we are not updating chainInfo with observations related to previous life cycle
+ ctx, cancel, chStopInFlight, _, _ := r.acquireQueryCtx(ctx, r.rpcTimeout)
+ defer cancel()
+ if r.chainType == chaintype.ChainAstar {
+ // astar's finality tags provide weaker guarantee. Use their custom request to request latest finalized block
+ err = r.astarLatestFinalizedBlock(ctx, &head)
+ } else {
+ err = r.ethGetBlockByNumber(ctx, rpc.FinalizedBlockNumber.String(), &head)
+ }
+
+ if err != nil {
+ return
+ }
+
+ if head == nil {
+ err = r.wrapRPCClientError(ethereum.NotFound)
+ return
+ }
+
+ head.EVMChainID = ubig.New(r.chainID)
+
+ r.onNewFinalizedHead(ctx, chStopInFlight, head)
+ return
+}
+
+func (r *rpcClient) astarLatestFinalizedBlock(ctx context.Context, result interface{}) (err error) {
+ var hashResult string
+ err = r.CallContext(ctx, &hashResult, "chain_getFinalizedHead")
+ if err != nil {
+ return fmt.Errorf("failed to get astar latest finalized hash: %w", err)
+ }
+
+ var astarHead struct {
+ Number *hexutil.Big `json:"number"`
+ }
+ err = r.CallContext(ctx, &astarHead, "chain_getHeader", hashResult, false)
+ if err != nil {
+ return fmt.Errorf("failed to get astar head by hash: %w", err)
+ }
+
+ if astarHead.Number == nil {
+ return r.wrapRPCClientError(fmt.Errorf("expected non empty head number of finalized block"))
+ }
+
+ err = r.ethGetBlockByNumber(ctx, astarHead.Number.String(), result)
+ if err != nil {
+ return fmt.Errorf("failed to get astar finalized block: %w", err)
+ }
+
+ return nil
}
func (r *rpcClient) BlockByNumber(ctx context.Context, number *big.Int) (head *evmtypes.Head, err error) {
- hex := ToBlockNumArg(number)
- return r.blockByNumber(ctx, hex)
+ ctx, cancel, chStopInFlight, _, _ := r.acquireQueryCtx(ctx, r.rpcTimeout)
+ defer cancel()
+ hexNumber := ToBlockNumArg(number)
+ err = r.ethGetBlockByNumber(ctx, hexNumber, &head)
+ if err != nil {
+ return
+ }
+
+ if head == nil {
+ err = r.wrapRPCClientError(ethereum.NotFound)
+ return
+ }
+
+ head.EVMChainID = ubig.New(r.chainID)
+
+ if hexNumber == rpc.LatestBlockNumber.String() {
+ r.onNewHead(ctx, chStopInFlight, head)
+ }
+
+ return
}
-func (r *rpcClient) blockByNumber(ctx context.Context, number string) (head *evmtypes.Head, err error) {
- ctx, cancel, chStopInFlight, ws, http := r.acquireQueryCtx(ctx)
+func (r *rpcClient) ethGetBlockByNumber(ctx context.Context, number string, result interface{}) (err error) {
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
const method = "eth_getBlockByNumber"
args := []interface{}{number, false}
@@ -561,30 +753,14 @@ func (r *rpcClient) blockByNumber(ctx context.Context, number string) (head *evm
lggr.Debug("RPC call: evmclient.Client#CallContext")
start := time.Now()
if http != nil {
- err = r.wrapHTTP(http.rpc.CallContext(ctx, &head, method, args...))
+ err = r.wrapHTTP(http.rpc.CallContext(ctx, result, method, args...))
} else {
- err = r.wrapWS(ws.rpc.CallContext(ctx, &head, method, args...))
+ err = r.wrapWS(ws.rpc.CallContext(ctx, result, method, args...))
}
duration := time.Since(start)
r.logResult(lggr, err, duration, r.getRPCDomain(), "CallContext")
- if err != nil {
- return nil, err
- }
- if head == nil {
- err = r.wrapRPCClientError(ethereum.NotFound)
- return
- }
- head.EVMChainID = ubig.New(r.chainID)
-
- switch number {
- case rpc.FinalizedBlockNumber.String():
- r.onNewFinalizedHead(ctx, chStopInFlight, head)
- case rpc.LatestBlockNumber.String():
- r.onNewHead(ctx, chStopInFlight, head)
- }
-
- return
+ return err
}
func (r *rpcClient) BlockByHash(ctx context.Context, hash common.Hash) (head *evmtypes.Head, err error) {
@@ -601,7 +777,7 @@ func (r *rpcClient) BlockByHash(ctx context.Context, hash common.Hash) (head *ev
}
func (r *rpcClient) BlockByHashGeth(ctx context.Context, hash common.Hash) (block *types.Block, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("hash", hash)
@@ -624,7 +800,7 @@ func (r *rpcClient) BlockByHashGeth(ctx context.Context, hash common.Hash) (bloc
}
func (r *rpcClient) BlockByNumberGeth(ctx context.Context, number *big.Int) (block *types.Block, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("number", number)
@@ -647,7 +823,7 @@ func (r *rpcClient) BlockByNumberGeth(ctx context.Context, number *big.Int) (blo
}
func (r *rpcClient) SendTransaction(ctx context.Context, tx *types.Transaction) error {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.largePayloadRpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("tx", tx)
@@ -685,7 +861,7 @@ func (r *rpcClient) SendEmptyTransaction(
// PendingSequenceAt returns one higher than the highest nonce from both mempool and mined transactions
func (r *rpcClient) PendingSequenceAt(ctx context.Context, account common.Address) (nonce evmtypes.Nonce, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("account", account)
@@ -714,7 +890,7 @@ func (r *rpcClient) PendingSequenceAt(ctx context.Context, account common.Addres
// mined nonce at the given block number, but it actually returns the total
// transaction count which is the highest mined nonce + 1
func (r *rpcClient) SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (nonce evmtypes.Nonce, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("account", account, "blockNumber", blockNumber)
@@ -740,7 +916,7 @@ func (r *rpcClient) SequenceAt(ctx context.Context, account common.Address, bloc
}
func (r *rpcClient) PendingCodeAt(ctx context.Context, account common.Address) (code []byte, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("account", account)
@@ -763,7 +939,7 @@ func (r *rpcClient) PendingCodeAt(ctx context.Context, account common.Address) (
}
func (r *rpcClient) CodeAt(ctx context.Context, account common.Address, blockNumber *big.Int) (code []byte, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("account", account, "blockNumber", blockNumber)
@@ -786,7 +962,7 @@ func (r *rpcClient) CodeAt(ctx context.Context, account common.Address, blockNum
}
func (r *rpcClient) EstimateGas(ctx context.Context, c interface{}) (gas uint64, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.largePayloadRpcTimeout)
defer cancel()
call := c.(ethereum.CallMsg)
lggr := r.newRqLggr().With("call", call)
@@ -810,7 +986,7 @@ func (r *rpcClient) EstimateGas(ctx context.Context, c interface{}) (gas uint64,
}
func (r *rpcClient) SuggestGasPrice(ctx context.Context) (price *big.Int, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr()
@@ -833,7 +1009,7 @@ func (r *rpcClient) SuggestGasPrice(ctx context.Context) (price *big.Int, err er
}
func (r *rpcClient) CallContract(ctx context.Context, msg interface{}, blockNumber *big.Int) (val []byte, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.largePayloadRpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("callMsg", msg, "blockNumber", blockNumber)
message := msg.(ethereum.CallMsg)
@@ -861,7 +1037,7 @@ func (r *rpcClient) CallContract(ctx context.Context, msg interface{}, blockNumb
}
func (r *rpcClient) PendingCallContract(ctx context.Context, msg interface{}) (val []byte, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.largePayloadRpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("callMsg", msg)
message := msg.(ethereum.CallMsg)
@@ -895,7 +1071,7 @@ func (r *rpcClient) LatestBlockHeight(ctx context.Context) (*big.Int, error) {
}
func (r *rpcClient) BlockNumber(ctx context.Context) (height uint64, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr()
@@ -918,7 +1094,7 @@ func (r *rpcClient) BlockNumber(ctx context.Context) (height uint64, err error)
}
func (r *rpcClient) BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (balance *big.Int, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("account", account.Hex(), "blockNumber", blockNumber)
@@ -983,7 +1159,7 @@ func (r *rpcClient) FilterEvents(ctx context.Context, q ethereum.FilterQuery) ([
}
func (r *rpcClient) FilterLogs(ctx context.Context, q ethereum.FilterQuery) (l []types.Log, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("q", q)
@@ -1011,7 +1187,7 @@ func (r *rpcClient) ClientVersion(ctx context.Context) (version string, err erro
}
func (r *rpcClient) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (_ ethereum.Subscription, err error) {
- ctx, cancel, chStopInFlight, ws, _ := r.acquireQueryCtx(ctx)
+ ctx, cancel, chStopInFlight, ws, _ := r.acquireQueryCtx(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr().With("q", q)
@@ -1037,7 +1213,7 @@ func (r *rpcClient) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQu
}
func (r *rpcClient) SuggestGasTipCap(ctx context.Context) (tipCap *big.Int, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr()
@@ -1062,7 +1238,7 @@ func (r *rpcClient) SuggestGasTipCap(ctx context.Context) (tipCap *big.Int, err
// Returns the ChainID according to the geth client. This is useful for functions like verify()
// the common node.
func (r *rpcClient) ChainID(ctx context.Context) (chainID *big.Int, err error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
@@ -1117,12 +1293,12 @@ func (r *rpcClient) wrapHTTP(err error) error {
}
// makeLiveQueryCtxAndSafeGetClients wraps makeQueryCtx
-func (r *rpcClient) makeLiveQueryCtxAndSafeGetClients(parentCtx context.Context) (ctx context.Context, cancel context.CancelFunc, ws rawclient, http *rawclient) {
- ctx, cancel, _, ws, http = r.acquireQueryCtx(parentCtx)
+func (r *rpcClient) makeLiveQueryCtxAndSafeGetClients(parentCtx context.Context, timeout time.Duration) (ctx context.Context, cancel context.CancelFunc, ws rawclient, http *rawclient) {
+ ctx, cancel, _, ws, http = r.acquireQueryCtx(parentCtx, timeout)
return
}
-func (r *rpcClient) acquireQueryCtx(parentCtx context.Context) (ctx context.Context, cancel context.CancelFunc,
+func (r *rpcClient) acquireQueryCtx(parentCtx context.Context, timeout time.Duration) (ctx context.Context, cancel context.CancelFunc,
chStopInFlight chan struct{}, ws rawclient, http *rawclient) {
// Need to wrap in mutex because state transition can cancel and replace the
// context
@@ -1134,7 +1310,7 @@ func (r *rpcClient) acquireQueryCtx(parentCtx context.Context) (ctx context.Cont
http = &cp
}
r.stateMu.RUnlock()
- ctx, cancel = makeQueryCtx(parentCtx, chStopInFlight)
+ ctx, cancel = makeQueryCtx(parentCtx, chStopInFlight, timeout)
return
}
@@ -1142,10 +1318,10 @@ func (r *rpcClient) acquireQueryCtx(parentCtx context.Context) (ctx context.Cont
// 1. Passed in ctx cancels
// 2. Passed in channel is closed
// 3. Default timeout is reached (queryTimeout)
-func makeQueryCtx(ctx context.Context, ch services.StopChan) (context.Context, context.CancelFunc) {
+func makeQueryCtx(ctx context.Context, ch services.StopChan, timeout time.Duration) (context.Context, context.CancelFunc) {
var chCancel, timeoutCancel context.CancelFunc
ctx, chCancel = ch.Ctx(ctx)
- ctx, timeoutCancel = context.WithTimeout(ctx, queryTimeout)
+ ctx, timeoutCancel = context.WithTimeout(ctx, timeout)
cancel := func() {
chCancel()
timeoutCancel()
@@ -1153,12 +1329,12 @@ func makeQueryCtx(ctx context.Context, ch services.StopChan) (context.Context, c
return ctx, cancel
}
-func (r *rpcClient) makeQueryCtx(ctx context.Context) (context.Context, context.CancelFunc) {
- return makeQueryCtx(ctx, r.getChStopInflight())
+func (r *rpcClient) makeQueryCtx(ctx context.Context, timeout time.Duration) (context.Context, context.CancelFunc) {
+ return makeQueryCtx(ctx, r.getChStopInflight(), timeout)
}
func (r *rpcClient) IsSyncing(ctx context.Context) (bool, error) {
- ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx)
+ ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout)
defer cancel()
lggr := r.newRqLggr()
diff --git a/core/chains/evm/client/rpc_client_test.go b/core/chains/evm/client/rpc_client_test.go
index 682c4352457..12821880996 100644
--- a/core/chains/evm/client/rpc_client_test.go
+++ b/core/chains/evm/client/rpc_client_test.go
@@ -3,13 +3,16 @@ package client_test
import (
"context"
"encoding/json"
+ "errors"
"fmt"
"math/big"
"net/url"
"testing"
+ "time"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/rpc"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/tidwall/gjson"
@@ -21,6 +24,7 @@ import (
commonclient "github.com/smartcontractkit/chainlink/v2/common/client"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/chaintype"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/testutils"
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
)
@@ -56,7 +60,7 @@ func TestRPCClient_SubscribeNewHead(t *testing.T) {
server := testutils.NewWSServer(t, chainId, serverCallBack)
wsURL := server.WSURL()
- rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
defer rpc.Close()
require.NoError(t, rpc.Dial(ctx))
// set to default values
@@ -106,7 +110,7 @@ func TestRPCClient_SubscribeNewHead(t *testing.T) {
server := testutils.NewWSServer(t, chainId, serverCallBack)
wsURL := server.WSURL()
- rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
defer rpc.Close()
require.NoError(t, rpc.Dial(ctx))
ch := make(chan *evmtypes.Head)
@@ -129,7 +133,7 @@ func TestRPCClient_SubscribeNewHead(t *testing.T) {
t.Run("Block's chain ID matched configured", func(t *testing.T) {
server := testutils.NewWSServer(t, chainId, serverCallBack)
wsURL := server.WSURL()
- rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
defer rpc.Close()
require.NoError(t, rpc.Dial(ctx))
ch := make(chan *evmtypes.Head)
@@ -146,7 +150,7 @@ func TestRPCClient_SubscribeNewHead(t *testing.T) {
})
wsURL := server.WSURL()
observedLggr, observed := logger.TestObserved(t, zap.DebugLevel)
- rpc := client.NewRPCClient(observedLggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(observedLggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
require.NoError(t, rpc.Dial(ctx))
server.Close()
_, err := rpc.SubscribeNewHead(ctx, make(chan *evmtypes.Head))
@@ -156,7 +160,7 @@ func TestRPCClient_SubscribeNewHead(t *testing.T) {
t.Run("Subscription error is properly wrapper", func(t *testing.T) {
server := testutils.NewWSServer(t, chainId, serverCallBack)
wsURL := server.WSURL()
- rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
defer rpc.Close()
require.NoError(t, rpc.Dial(ctx))
sub, err := rpc.SubscribeNewHead(ctx, make(chan *evmtypes.Head))
@@ -184,7 +188,7 @@ func TestRPCClient_SubscribeFilterLogs(t *testing.T) {
})
wsURL := server.WSURL()
observedLggr, observed := logger.TestObserved(t, zap.DebugLevel)
- rpc := client.NewRPCClient(observedLggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(observedLggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
require.NoError(t, rpc.Dial(ctx))
server.Close()
_, err := rpc.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, make(chan types.Log))
@@ -201,7 +205,7 @@ func TestRPCClient_SubscribeFilterLogs(t *testing.T) {
return resp
})
wsURL := server.WSURL()
- rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(lggr, *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
defer rpc.Close()
require.NoError(t, rpc.Dial(ctx))
sub, err := rpc.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, make(chan types.Log))
@@ -250,7 +254,7 @@ func TestRPCClient_LatestFinalizedBlock(t *testing.T) {
}
server := createRPCServer()
- rpc := client.NewRPCClient(lggr, *server.URL, nil, "rpc", 1, chainId, commonclient.Primary)
+ rpc := client.NewRPCClient(lggr, *server.URL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, "")
require.NoError(t, rpc.Dial(ctx))
defer rpc.Close()
server.Head = &evmtypes.Head{Number: 128}
@@ -298,3 +302,168 @@ func TestRPCClient_LatestFinalizedBlock(t *testing.T) {
assert.Equal(t, int64(0), latest.BlockNumber)
assert.Equal(t, int64(0), latest.FinalizedBlockNumber)
}
+
+func TestRpcClientLargePayloadTimeout(t *testing.T) {
+ t.Parallel()
+
+ testCases := []struct {
+ Name string
+ Fn func(ctx context.Context, rpc client.RPCClient) error
+ }{
+ {
+ Name: "SendTransaction",
+ Fn: func(ctx context.Context, rpc client.RPCClient) error {
+ return rpc.SendTransaction(ctx, types.NewTx(&types.LegacyTx{}))
+ },
+ },
+ {
+ Name: "EstimateGas",
+ Fn: func(ctx context.Context, rpc client.RPCClient) error {
+ _, err := rpc.EstimateGas(ctx, ethereum.CallMsg{})
+ return err
+ },
+ },
+ {
+ Name: "CallContract",
+ Fn: func(ctx context.Context, rpc client.RPCClient) error {
+ _, err := rpc.CallContract(ctx, ethereum.CallMsg{}, nil)
+ return err
+ },
+ },
+ {
+ Name: "CallContext",
+ Fn: func(ctx context.Context, rpc client.RPCClient) error {
+ err := rpc.CallContext(ctx, nil, "rpc_call", nil)
+ return err
+ },
+ },
+ {
+ Name: "BatchCallContext",
+ Fn: func(ctx context.Context, rpc client.RPCClient) error {
+ err := rpc.BatchCallContext(ctx, nil)
+ return err
+ },
+ },
+ }
+ for _, testCase := range testCases {
+ testCase := testCase
+ t.Run(testCase.Name, func(t *testing.T) {
+ t.Parallel()
+ // use background context to ensure that the DeadlineExceeded is caused by timeout we've set on request
+ // level, instead of one that was set on test level.
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ chainId := big.NewInt(123456)
+ rpcURL := testutils.NewWSServer(t, chainId, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
+ // block until test is done
+ <-ctx.Done()
+ return
+ }).WSURL()
+
+ // use something unreasonably large for RPC timeout to ensure that we use largePayloadRPCTimeout
+ const rpcTimeout = time.Hour
+ const largePayloadRPCTimeout = tests.TestInterval
+ rpc := client.NewRPCClient(logger.Test(t), *rpcURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, largePayloadRPCTimeout, rpcTimeout, "")
+ require.NoError(t, rpc.Dial(ctx))
+ defer rpc.Close()
+ err := testCase.Fn(ctx, rpc)
+ assert.True(t, errors.Is(err, context.DeadlineExceeded), fmt.Sprintf("Expected DedlineExceeded error, but got: %v", err))
+ })
+ }
+}
+
+func TestAstarCustomFinality(t *testing.T) {
+ t.Parallel()
+
+ chainId := big.NewInt(123456)
+ // create new server that returns 4 block for Astar custom finality and 8 block for finality tag.
+ wsURL := testutils.NewWSServer(t, chainId, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
+ switch method {
+ case "chain_getFinalizedHead":
+ resp.Result = `"0xf14c499253fd7bbcba142e5dd77dad8b5ad598c1dc414a66bacdd8dae14a6759"`
+ case "chain_getHeader":
+ if assert.True(t, params.IsArray()) && assert.Equal(t, "0xf14c499253fd7bbcba142e5dd77dad8b5ad598c1dc414a66bacdd8dae14a6759", params.Array()[0].String()) {
+ resp.Result = `{"parentHash":"0x1311773bc6b4efc8f438ed1f094524b2a1233baf8a35396f641fcc42a378fc62","number":"0x4","stateRoot":"0x0e4920dc5516b587e1f74a0b65963134523a12cc11478bb314e52895758fbfa2","extrinsicsRoot":"0x5b02446dcab0659eb07d4a38f28f181c1b78a71b2aba207bb0ea1f0f3468e6bd","digest":{"logs":["0x066175726120ad678e0800000000","0x04525053529023158dc8e8fd0180bf26d88233a3d94eed2f4e43480395f0809f28791965e4d34e9b3905","0x0466726f6e88017441e97acf83f555e0deefef86db636bc8a37eb84747603412884e4df4d2280400","0x056175726101018a0a57edf70cc5474323114a47ee1e7f645b8beea5a1560a996416458e89f42bdf4955e24d32b5da54e1bf628aaa7ce4b8c0fa2b95c175a139d88786af12a88c"]}}`
+ }
+ case "eth_getBlockByNumber":
+ assert.True(t, params.IsArray())
+ switch params.Array()[0].String() {
+ case "0x4":
+ resp.Result = `{"author":"0x5accb3bf9194a5f81b2087d4bd6ac47c62775d49","baseFeePerGas":"0xb576270823","difficulty":"0x0","extraData":"0x","gasLimit":"0xe4e1c0","gasUsed":"0x0","hash":"0x7441e97acf83f555e0deefef86db636bc8a37eb84747603412884e4df4d22804","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x5accb3bf9194a5f81b2087d4bd6ac47c62775d49","nonce":"0x0000000000000000","number":"0x4","parentHash":"0x6ba069c318b692bf2cc0bd7ea070a9382a20c2f52413c10554b57c2e381bf2bb","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x201","stateRoot":"0x17c46d359b9af773312c747f1d20032c67658d9a2923799f00533b73789cf49b","timestamp":"0x66acdc22","totalDifficulty":"0x0","transactions":[],"transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","uncles":[]}`
+ case "finalized":
+ resp.Result = `{"author":"0x1687736326c9fea17e25fc5287613693c912909c","baseFeePerGas":"0x3b9aca00","difficulty":"0x0","extraData":"0x","gasLimit":"0xe4e1c0","gasUsed":"0x0","hash":"0x62f03413681948b06882e7d9f91c4949bc39ded98d36336ab03faea038ec8e3d","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x1687736326c9fea17e25fc5287613693c912909c","nonce":"0x0000000000000000","number":"0x8","parentHash":"0x43f504afdc639cbb8daf5fd5328a37762164b73f9c70ed54e1928c1fca6d8f23","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x200","stateRoot":"0x0cb938d51ad83bdf401e3f5f7f989e60df64fdea620d394af41a3e72629f7495","timestamp":"0x61bd8d1a","totalDifficulty":"0x0","transactions":[],"transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","uncles":[]}`
+ default:
+ assert.Fail(t, fmt.Sprintf("unexpected eth_getBlockByNumber param: %v", params.Array()))
+ }
+ default:
+ assert.Fail(t, fmt.Sprintf("unexpected method: %s", method))
+ }
+ return
+ }).WSURL()
+
+ const expectedFinalizedBlockNumber = int64(4)
+ const expectedFinalizedBlockHash = "0x7441e97acf83f555e0deefef86db636bc8a37eb84747603412884e4df4d22804"
+ rpcClient := client.NewRPCClient(logger.Test(t), *wsURL, nil, "rpc", 1, chainId, commonclient.Primary, 0, commonclient.QueryTimeout, commonclient.QueryTimeout, chaintype.ChainAstar)
+ defer rpcClient.Close()
+ err := rpcClient.Dial(tests.Context(t))
+ require.NoError(t, err)
+
+ testCases := []struct {
+ Name string
+ GetLatestFinalized func(ctx context.Context) (*evmtypes.Head, error)
+ }{
+ {
+ Name: "Direct LatestFinalized call",
+ GetLatestFinalized: func(ctx context.Context) (*evmtypes.Head, error) {
+ return rpcClient.LatestFinalizedBlock(ctx)
+ },
+ },
+ {
+ Name: "BatchCallContext with Finalized tag as string",
+ GetLatestFinalized: func(ctx context.Context) (*evmtypes.Head, error) {
+ result := &evmtypes.Head{}
+ req := rpc.BatchElem{
+ Method: "eth_getBlockByNumber",
+ Args: []interface{}{rpc.FinalizedBlockNumber.String(), false},
+ Result: result,
+ }
+ err := rpcClient.BatchCallContext(ctx, []rpc.BatchElem{
+ req,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ return result, req.Error
+ },
+ },
+ {
+ Name: "BatchCallContext with Finalized tag as BlockNumber",
+ GetLatestFinalized: func(ctx context.Context) (*evmtypes.Head, error) {
+ result := &evmtypes.Head{}
+ req := rpc.BatchElem{
+ Method: "eth_getBlockByNumber",
+ Args: []interface{}{rpc.FinalizedBlockNumber, false},
+ Result: result,
+ }
+ err := rpcClient.BatchCallContext(ctx, []rpc.BatchElem{req})
+ if err != nil {
+ return nil, err
+ }
+
+ return result, req.Error
+ },
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.Name, func(t *testing.T) {
+ lf, err := testCase.GetLatestFinalized(tests.Context(t))
+ require.NoError(t, err)
+ require.NotNil(t, lf)
+ assert.Equal(t, expectedFinalizedBlockHash, lf.Hash.String())
+ assert.Equal(t, expectedFinalizedBlockNumber, lf.Number)
+ })
+ }
+}
diff --git a/core/chains/evm/config/chain_scoped.go b/core/chains/evm/config/chain_scoped.go
index db598e3e82b..b9b19cdc2c0 100644
--- a/core/chains/evm/config/chain_scoped.go
+++ b/core/chains/evm/config/chain_scoped.go
@@ -183,3 +183,7 @@ func (e *EVMConfig) LogPrunePageSize() uint32 {
func (e *EVMConfig) FinalizedBlockOffset() uint32 {
return *e.C.FinalizedBlockOffset
}
+
+func (e *EVMConfig) NoNewFinalizedHeadsThreshold() time.Duration {
+ return e.C.NoNewFinalizedHeadsThreshold.Duration()
+}
diff --git a/core/chains/evm/config/chaintype/chaintype.go b/core/chains/evm/config/chaintype/chaintype.go
index 9b845969e4b..07ea6206241 100644
--- a/core/chains/evm/config/chaintype/chaintype.go
+++ b/core/chains/evm/config/chaintype/chaintype.go
@@ -9,8 +9,10 @@ type ChainType string
const (
ChainArbitrum ChainType = "arbitrum"
+ ChainAstar ChainType = "astar"
ChainCelo ChainType = "celo"
ChainGnosis ChainType = "gnosis"
+ ChainHedera ChainType = "hedera"
ChainKroma ChainType = "kroma"
ChainMetis ChainType = "metis"
ChainOptimismBedrock ChainType = "optimismBedrock"
@@ -35,7 +37,7 @@ func (c ChainType) IsL2() bool {
func (c ChainType) IsValid() bool {
switch c {
- case "", ChainArbitrum, ChainCelo, ChainGnosis, ChainKroma, ChainMetis, ChainOptimismBedrock, ChainScroll, ChainWeMix, ChainXLayer, ChainZkEvm, ChainZkSync:
+ case "", ChainArbitrum, ChainAstar, ChainCelo, ChainGnosis, ChainHedera, ChainKroma, ChainMetis, ChainOptimismBedrock, ChainScroll, ChainWeMix, ChainXLayer, ChainZkEvm, ChainZkSync:
return true
}
return false
@@ -45,10 +47,14 @@ func ChainTypeFromSlug(slug string) ChainType {
switch slug {
case "arbitrum":
return ChainArbitrum
+ case "astar":
+ return ChainAstar
case "celo":
return ChainCelo
case "gnosis":
return ChainGnosis
+ case "hedera":
+ return ChainHedera
case "kroma":
return ChainKroma
case "metis":
@@ -118,8 +124,10 @@ func (c *ChainTypeConfig) String() string {
var ErrInvalidChainType = fmt.Errorf("must be one of %s or omitted", strings.Join([]string{
string(ChainArbitrum),
+ string(ChainAstar),
string(ChainCelo),
string(ChainGnosis),
+ string(ChainHedera),
string(ChainKroma),
string(ChainMetis),
string(ChainOptimismBedrock),
diff --git a/core/chains/evm/config/config.go b/core/chains/evm/config/config.go
index 3ecdd9e4b1a..3ccdfeea8b8 100644
--- a/core/chains/evm/config/config.go
+++ b/core/chains/evm/config/config.go
@@ -46,6 +46,7 @@ type EVM interface {
RPCDefaultBatchSize() uint32
NodeNoNewHeadsThreshold() time.Duration
FinalizedBlockOffset() uint32
+ NoNewFinalizedHeadsThreshold() time.Duration
IsEnabled() bool
TOMLString() (string, error)
diff --git a/core/chains/evm/config/toml/config.go b/core/chains/evm/config/toml/config.go
index 3e35bb4b55c..ac7841ac497 100644
--- a/core/chains/evm/config/toml/config.go
+++ b/core/chains/evm/config/toml/config.go
@@ -338,27 +338,28 @@ func (c *EVMConfig) TOMLString() (string, error) {
}
type Chain struct {
- AutoCreateKey *bool
- BlockBackfillDepth *uint32
- BlockBackfillSkip *bool
- ChainType *chaintype.ChainTypeConfig
- FinalityDepth *uint32
- FinalityTagEnabled *bool
- FlagsContractAddress *types.EIP55Address
- LinkContractAddress *types.EIP55Address
- LogBackfillBatchSize *uint32
- LogPollInterval *commonconfig.Duration
- LogKeepBlocksDepth *uint32
- LogPrunePageSize *uint32
- BackupLogPollerBlockDelay *uint64
- MinIncomingConfirmations *uint32
- MinContractPayment *commonassets.Link
- NonceAutoSync *bool
- NoNewHeadsThreshold *commonconfig.Duration
- OperatorFactoryAddress *types.EIP55Address
- RPCDefaultBatchSize *uint32
- RPCBlockQueryDelay *uint16
- FinalizedBlockOffset *uint32
+ AutoCreateKey *bool
+ BlockBackfillDepth *uint32
+ BlockBackfillSkip *bool
+ ChainType *chaintype.ChainTypeConfig
+ FinalityDepth *uint32
+ FinalityTagEnabled *bool
+ FlagsContractAddress *types.EIP55Address
+ LinkContractAddress *types.EIP55Address
+ LogBackfillBatchSize *uint32
+ LogPollInterval *commonconfig.Duration
+ LogKeepBlocksDepth *uint32
+ LogPrunePageSize *uint32
+ BackupLogPollerBlockDelay *uint64
+ MinIncomingConfirmations *uint32
+ MinContractPayment *commonassets.Link
+ NonceAutoSync *bool
+ NoNewHeadsThreshold *commonconfig.Duration
+ OperatorFactoryAddress *types.EIP55Address
+ RPCDefaultBatchSize *uint32
+ RPCBlockQueryDelay *uint16
+ FinalizedBlockOffset *uint32
+ NoNewFinalizedHeadsThreshold *commonconfig.Duration
Transactions Transactions `toml:",omitempty"`
BalanceMonitor BalanceMonitor `toml:",omitempty"`
@@ -411,8 +412,16 @@ func (c *Chain) ValidateConfig() (err error) {
err = multierr.Append(err, commonconfig.ErrInvalid{Name: "Transactions.AutoPurge.DetectionApiUrl", Value: c.Transactions.AutoPurge.DetectionApiUrl.Scheme, Msg: "must be http or https"})
}
}
- case chaintype.ChainZkEvm:
- // No other configs are needed
+ case chaintype.ChainZkEvm, chaintype.ChainXLayer:
+ // MinAttempts is an optional config that can be used to delay the stuck tx detection for zkEVM or XLayer
+ // If MinAttempts is set, BumpThreshold cannot be 0
+ if c.Transactions.AutoPurge.MinAttempts != nil && *c.Transactions.AutoPurge.MinAttempts != 0 {
+ if c.GasEstimator.BumpThreshold == nil {
+ err = multierr.Append(err, commonconfig.ErrMissing{Name: "GasEstimator.BumpThreshold", Msg: fmt.Sprintf("must be set if Transactions.AutoPurge.MinAttempts is set for %s", chainType)})
+ } else if *c.GasEstimator.BumpThreshold == 0 {
+ err = multierr.Append(err, commonconfig.ErrInvalid{Name: "GasEstimator.BumpThreshold", Value: 0, Msg: fmt.Sprintf("cannot be 0 if Transactions.AutoPurge.MinAttempts is set for %s", chainType)})
+ }
+ }
default:
// Bump Threshold is required because the stuck tx heuristic relies on a minimum number of bump attempts to exist
if c.GasEstimator.BumpThreshold == nil {
diff --git a/core/chains/evm/config/toml/defaults.go b/core/chains/evm/config/toml/defaults.go
index 38eef40bf76..c3f087da8c5 100644
--- a/core/chains/evm/config/toml/defaults.go
+++ b/core/chains/evm/config/toml/defaults.go
@@ -165,6 +165,10 @@ func (c *Chain) SetFrom(f *Chain) {
c.FinalizedBlockOffset = v
}
+ if v := f.NoNewFinalizedHeadsThreshold; v != nil {
+ c.NoNewFinalizedHeadsThreshold = v
+ }
+
c.Transactions.setFrom(&f.Transactions)
c.BalanceMonitor.setFrom(&f.BalanceMonitor)
c.GasEstimator.setFrom(&f.GasEstimator)
diff --git a/core/chains/evm/config/toml/defaults/Avalanche_Fuji.toml b/core/chains/evm/config/toml/defaults/Avalanche_Fuji.toml
index b8e884a5a16..5ba2e3cdc70 100644
--- a/core/chains/evm/config/toml/defaults/Avalanche_Fuji.toml
+++ b/core/chains/evm/config/toml/defaults/Avalanche_Fuji.toml
@@ -7,6 +7,7 @@ MinIncomingConfirmations = 1
NoNewHeadsThreshold = '30s'
OCR.ContractConfirmations = 1
RPCBlockQueryDelay = 2
+NoNewFinalizedHeadsThreshold = '1m'
[GasEstimator]
PriceDefault = '25 gwei'
diff --git a/core/chains/evm/config/toml/defaults/Avalanche_Mainnet.toml b/core/chains/evm/config/toml/defaults/Avalanche_Mainnet.toml
index 183c6ecd638..e7813842b4b 100644
--- a/core/chains/evm/config/toml/defaults/Avalanche_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Avalanche_Mainnet.toml
@@ -7,6 +7,7 @@ MinIncomingConfirmations = 1
NoNewHeadsThreshold = '30s'
OCR.ContractConfirmations = 1
RPCBlockQueryDelay = 2
+NoNewFinalizedHeadsThreshold = '1m'
[GasEstimator]
PriceDefault = '25 gwei'
diff --git a/core/chains/evm/config/toml/defaults/BSC_Mainnet.toml b/core/chains/evm/config/toml/defaults/BSC_Mainnet.toml
index 29ca3ed384b..10f4c570bef 100644
--- a/core/chains/evm/config/toml/defaults/BSC_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/BSC_Mainnet.toml
@@ -9,6 +9,7 @@ LinkContractAddress = '0x404460C6A5EdE2D891e8297795264fDe62ADBB75'
LogPollInterval = '3s'
NoNewHeadsThreshold = '30s'
RPCBlockQueryDelay = 2
+NoNewFinalizedHeadsThreshold = '45s'
[GasEstimator]
PriceDefault = '5 gwei'
diff --git a/core/chains/evm/config/toml/defaults/BSC_Testnet.toml b/core/chains/evm/config/toml/defaults/BSC_Testnet.toml
index 2a074f08e13..b27a877812b 100644
--- a/core/chains/evm/config/toml/defaults/BSC_Testnet.toml
+++ b/core/chains/evm/config/toml/defaults/BSC_Testnet.toml
@@ -9,6 +9,7 @@ LinkContractAddress = '0x84b9B910527Ad5C03A9Ca831909E21e236EA7b06'
LogPollInterval = '3s'
NoNewHeadsThreshold = '30s'
RPCBlockQueryDelay = 2
+NoNewFinalizedHeadsThreshold = '40s'
[GasEstimator]
PriceDefault = '5 gwei'
diff --git a/core/chains/evm/config/toml/defaults/Base_Mainnet.toml b/core/chains/evm/config/toml/defaults/Base_Mainnet.toml
index d6233e655ae..da38182b194 100644
--- a/core/chains/evm/config/toml/defaults/Base_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Base_Mainnet.toml
@@ -5,6 +5,7 @@ FinalityTagEnabled = true
LogPollInterval = '2s'
NoNewHeadsThreshold = '40s'
MinIncomingConfirmations = 1
+NoNewFinalizedHeadsThreshold = '15m'
[GasEstimator]
EIP1559DynamicFees = true
diff --git a/core/chains/evm/config/toml/defaults/Base_Sepolia.toml b/core/chains/evm/config/toml/defaults/Base_Sepolia.toml
index 633a8380673..92f7717b27d 100644
--- a/core/chains/evm/config/toml/defaults/Base_Sepolia.toml
+++ b/core/chains/evm/config/toml/defaults/Base_Sepolia.toml
@@ -6,6 +6,7 @@ LinkContractAddress = '0xE4aB69C077896252FAFBD49EFD26B5D171A32410'
LogPollInterval = '2s'
NoNewHeadsThreshold = '40s'
MinIncomingConfirmations = 1
+NoNewFinalizedHeadsThreshold = '12m'
[GasEstimator]
EIP1559DynamicFees = true
diff --git a/core/chains/evm/config/toml/defaults/Celo_Mainnet.toml b/core/chains/evm/config/toml/defaults/Celo_Mainnet.toml
index b48cb25b325..a4948620370 100644
--- a/core/chains/evm/config/toml/defaults/Celo_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Celo_Mainnet.toml
@@ -5,6 +5,7 @@ LogPollInterval = '5s'
MinIncomingConfirmations = 1
NoNewHeadsThreshold = '1m'
OCR.ContractConfirmations = 1
+NoNewFinalizedHeadsThreshold = '1m'
[GasEstimator]
PriceDefault = '5 gwei'
diff --git a/core/chains/evm/config/toml/defaults/Celo_Testnet.toml b/core/chains/evm/config/toml/defaults/Celo_Testnet.toml
index d3f595baac6..eb43f080b7d 100644
--- a/core/chains/evm/config/toml/defaults/Celo_Testnet.toml
+++ b/core/chains/evm/config/toml/defaults/Celo_Testnet.toml
@@ -5,6 +5,7 @@ LogPollInterval = '5s'
MinIncomingConfirmations = 1
NoNewHeadsThreshold = '1m'
OCR.ContractConfirmations = 1
+NoNewFinalizedHeadsThreshold = '1m'
[GasEstimator]
PriceDefault = '5 gwei'
diff --git a/core/chains/evm/config/toml/defaults/Ethereum_Mainnet.toml b/core/chains/evm/config/toml/defaults/Ethereum_Mainnet.toml
index 3911fd25dfe..0bcaf35c648 100644
--- a/core/chains/evm/config/toml/defaults/Ethereum_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Ethereum_Mainnet.toml
@@ -3,6 +3,7 @@ LinkContractAddress = '0x514910771AF9Ca656af840dff83E8264EcF986CA'
MinContractPayment = '0.1 link'
OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
FinalityTagEnabled = true
+NoNewFinalizedHeadsThreshold = '9m'
[GasEstimator]
EIP1559DynamicFees = true
diff --git a/core/chains/evm/config/toml/defaults/Gnosis_Chiado.toml b/core/chains/evm/config/toml/defaults/Gnosis_Chiado.toml
index 1b14da2b540..379377a2266 100644
--- a/core/chains/evm/config/toml/defaults/Gnosis_Chiado.toml
+++ b/core/chains/evm/config/toml/defaults/Gnosis_Chiado.toml
@@ -3,6 +3,7 @@ ChainID = '10200'
FinalityDepth = 100
ChainType = 'gnosis'
LogPollInterval = '5s'
+NoNewFinalizedHeadsThreshold = '2m'
[GasEstimator]
EIP1559DynamicFees = true
diff --git a/core/chains/evm/config/toml/defaults/Gnosis_Mainnet.toml b/core/chains/evm/config/toml/defaults/Gnosis_Mainnet.toml
index 587f0083b70..628646364f5 100644
--- a/core/chains/evm/config/toml/defaults/Gnosis_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Gnosis_Mainnet.toml
@@ -9,6 +9,7 @@ ChainID = '100'
ChainType = 'gnosis'
LinkContractAddress = '0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2'
LogPollInterval = '5s'
+NoNewFinalizedHeadsThreshold = '2m'
[GasEstimator]
PriceDefault = '1 gwei'
diff --git a/core/chains/evm/config/toml/defaults/Optimism_Mainnet.toml b/core/chains/evm/config/toml/defaults/Optimism_Mainnet.toml
index 80702219ce5..b0f56a49d90 100644
--- a/core/chains/evm/config/toml/defaults/Optimism_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Optimism_Mainnet.toml
@@ -6,6 +6,7 @@ LinkContractAddress = '0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6'
LogPollInterval = '2s'
NoNewHeadsThreshold = '40s'
MinIncomingConfirmations = 1
+NoNewFinalizedHeadsThreshold = '13m'
[GasEstimator]
EIP1559DynamicFees = true
diff --git a/core/chains/evm/config/toml/defaults/Optimism_Sepolia.toml b/core/chains/evm/config/toml/defaults/Optimism_Sepolia.toml
index 31218d5d7f0..1c71aa5dd83 100644
--- a/core/chains/evm/config/toml/defaults/Optimism_Sepolia.toml
+++ b/core/chains/evm/config/toml/defaults/Optimism_Sepolia.toml
@@ -5,6 +5,7 @@ FinalityTagEnabled = true
LogPollInterval = '2s'
NoNewHeadsThreshold = '40s'
MinIncomingConfirmations = 1
+NoNewFinalizedHeadsThreshold = '15m'
[GasEstimator]
EIP1559DynamicFees = true
diff --git a/core/chains/evm/config/toml/defaults/Polygon_Amoy.toml b/core/chains/evm/config/toml/defaults/Polygon_Amoy.toml
index d2958bc9bdb..b05b3053a8e 100644
--- a/core/chains/evm/config/toml/defaults/Polygon_Amoy.toml
+++ b/core/chains/evm/config/toml/defaults/Polygon_Amoy.toml
@@ -5,6 +5,7 @@ MinIncomingConfirmations = 5
NoNewHeadsThreshold = '30s'
RPCBlockQueryDelay = 10
RPCDefaultBatchSize = 100
+NoNewFinalizedHeadsThreshold = '12m'
[Transactions]
MaxQueued = 5000
diff --git a/core/chains/evm/config/toml/defaults/Polygon_Mainnet.toml b/core/chains/evm/config/toml/defaults/Polygon_Mainnet.toml
index b8d68b7f829..bf605cab3c6 100644
--- a/core/chains/evm/config/toml/defaults/Polygon_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/Polygon_Mainnet.toml
@@ -10,6 +10,7 @@ NoNewHeadsThreshold = '30s'
# Must be set to something large here because Polygon has so many re-orgs that otherwise we are constantly refetching
RPCBlockQueryDelay = 10
RPCDefaultBatchSize = 100
+NoNewFinalizedHeadsThreshold = '6m'
[Transactions]
# Matic nodes under high mempool pressure are liable to drop txes, we need to ensure we keep sending them
diff --git a/core/chains/evm/config/toml/defaults/WeMix_Mainnet.toml b/core/chains/evm/config/toml/defaults/WeMix_Mainnet.toml
index 4322842abb7..7d3fcc6bc2b 100644
--- a/core/chains/evm/config/toml/defaults/WeMix_Mainnet.toml
+++ b/core/chains/evm/config/toml/defaults/WeMix_Mainnet.toml
@@ -6,6 +6,7 @@ MinIncomingConfirmations = 1
# WeMix emits a block every 1 second, regardless of transactions
LogPollInterval = '3s'
NoNewHeadsThreshold = '30s'
+NoNewFinalizedHeadsThreshold = '40s'
[OCR]
ContractConfirmations = 1
diff --git a/core/chains/evm/config/toml/defaults/WeMix_Testnet.toml b/core/chains/evm/config/toml/defaults/WeMix_Testnet.toml
index 2c3fc606a74..5775097967a 100644
--- a/core/chains/evm/config/toml/defaults/WeMix_Testnet.toml
+++ b/core/chains/evm/config/toml/defaults/WeMix_Testnet.toml
@@ -6,6 +6,7 @@ MinIncomingConfirmations = 1
# WeMix emits a block every 1 second, regardless of transactions
LogPollInterval = '3s'
NoNewHeadsThreshold = '30s'
+NoNewFinalizedHeadsThreshold = '40s'
[OCR]
ContractConfirmations = 1
diff --git a/core/chains/evm/config/toml/defaults/fallback.toml b/core/chains/evm/config/toml/defaults/fallback.toml
index 8bf3392210f..e3136323f6f 100644
--- a/core/chains/evm/config/toml/defaults/fallback.toml
+++ b/core/chains/evm/config/toml/defaults/fallback.toml
@@ -16,6 +16,7 @@ NoNewHeadsThreshold = '3m'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0'
[Transactions]
ForwardersEnabled = false
diff --git a/core/chains/evm/logpoller/log_poller_test.go b/core/chains/evm/logpoller/log_poller_test.go
index 860b588c771..548711c19bb 100644
--- a/core/chains/evm/logpoller/log_poller_test.go
+++ b/core/chains/evm/logpoller/log_poller_test.go
@@ -36,10 +36,10 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
ubig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/log_emitter"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func logRuntime(t testing.TB, start time.Time) {
diff --git a/core/chains/evm/logpoller/orm_test.go b/core/chains/evm/logpoller/orm_test.go
index ce56c799226..ed3f58504ae 100644
--- a/core/chains/evm/logpoller/orm_test.go
+++ b/core/chains/evm/logpoller/orm_test.go
@@ -27,8 +27,8 @@ import (
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
ubig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
type block struct {
diff --git a/core/chains/evm/testutils/client.go b/core/chains/evm/testutils/client.go
index 89c97b01e6d..1e5523fbff9 100644
--- a/core/chains/evm/testutils/client.go
+++ b/core/chains/evm/testutils/client.go
@@ -148,8 +148,12 @@ func (ts *testWSServer) newWSHandler(chainID *big.Int, callback JSONRPCHandler)
ts.t.Log("Received message", string(data))
req := gjson.ParseBytes(data)
if !req.IsObject() {
- ts.t.Logf("Request must be object: %v", req.Type)
- return
+ if isSingleObjectArray := req.IsArray() && len(req.Array()) == 1; !isSingleObjectArray {
+ ts.t.Logf("Request must be object: %v", req.Type)
+ return
+ }
+
+ req = req.Array()[0]
}
if e := req.Get("error"); e.Exists() {
ts.t.Logf("Received jsonrpc error: %v", e)
diff --git a/core/chains/evm/txmgr/broadcaster_test.go b/core/chains/evm/txmgr/broadcaster_test.go
index 85fffe42a84..cbbe522ba10 100644
--- a/core/chains/evm/txmgr/broadcaster_test.go
+++ b/core/chains/evm/txmgr/broadcaster_test.go
@@ -34,6 +34,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
evmconfig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/chaintype"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/gas"
gasmocks "github.com/smartcontractkit/chainlink/v2/core/chains/evm/gas/mocks"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/keystore"
@@ -42,11 +43,11 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/txmgr"
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
// NewEthBroadcaster creates a new txmgr.EthBroadcaster for use in testing.
@@ -70,7 +71,7 @@ func NewTestEthBroadcaster(
return gas.NewFixedPriceEstimator(config.EVM().GasEstimator(), nil, ge.BlockHistory(), lggr, nil)
}, ge.EIP1559DynamicFees(), ge)
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, keyStore, estimator)
- ethBroadcaster := txmgrcommon.NewBroadcaster(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(config.EVM()), txmgr.NewEvmTxmFeeConfig(config.EVM().GasEstimator()), config.EVM().Transactions(), gconfig.Database().Listener(), keyStore, txBuilder, nonceTracker, lggr, checkerFactory, nonceAutoSync)
+ ethBroadcaster := txmgrcommon.NewBroadcaster(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(config.EVM()), txmgr.NewEvmTxmFeeConfig(config.EVM().GasEstimator()), config.EVM().Transactions(), gconfig.Database().Listener(), keyStore, txBuilder, nonceTracker, lggr, checkerFactory, nonceAutoSync, "")
// Mark instance as test
ethBroadcaster.XXXTestDisableUnstartedTxAutoProcessing()
@@ -101,6 +102,7 @@ func TestEthBroadcaster_Lifecycle(t *testing.T) {
logger.Test(t),
&testCheckerFactory{},
false,
+ "",
)
// Can't close an unstarted instance
@@ -159,6 +161,7 @@ func TestEthBroadcaster_LoadNextSequenceMapFailure_StartupSuccess(t *testing.T)
logger.Test(t),
&testCheckerFactory{},
false,
+ "",
)
// Instance starts without error even if loading next sequence map fails
@@ -657,6 +660,7 @@ func TestEthBroadcaster_ProcessUnstartedEthTxs_OptimisticLockingOnEthTx(t *testi
logger.Test(t),
&testCheckerFactory{},
false,
+ "",
)
eb.XXXTestDisableUnstartedTxAutoProcessing()
@@ -1176,7 +1180,7 @@ func TestEthBroadcaster_ProcessUnstartedEthTxs_Errors(t *testing.T) {
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
- eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
+ eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false, "")
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
@@ -1772,7 +1776,7 @@ func TestEthBroadcaster_SyncNonce(t *testing.T) {
kst.On("EnabledAddressesForChain", mock.Anything, testutils.FixtureChainID).Return(addresses, nil).Once()
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
txmClient := txmgr.NewEvmTxmClient(ethClient, nil)
- eb := txmgr.NewEvmBroadcaster(txStore, txmClient, evmTxmCfg, txmgr.NewEvmTxmFeeConfig(ge), evmcfg.EVM().Transactions(), cfg.Database().Listener(), kst, txBuilder, lggr, checkerFactory, false)
+ eb := txmgr.NewEvmBroadcaster(txStore, txmClient, evmTxmCfg, txmgr.NewEvmTxmFeeConfig(ge), evmcfg.EVM().Transactions(), cfg.Database().Listener(), kst, txBuilder, lggr, checkerFactory, false, "")
err := eb.Start(ctx)
assert.NoError(t, err)
@@ -1821,6 +1825,94 @@ func TestEthBroadcaster_NonceTracker_InProgressTx(t *testing.T) {
})
}
+func TestEthBroadcaster_HederaBroadcastValidation(t *testing.T) {
+ t.Parallel()
+
+ db := pgtest.NewSqlxDB(t)
+ cfg := configtest.NewTestGeneralConfig(t)
+ txStore := cltest.NewTestTxStore(t, db)
+ ethKeyStore := cltest.NewKeyStore(t, db).Eth()
+ evmcfg := evmtest.NewChainScopedConfig(t, cfg)
+ ethClient := testutils.NewEthClientMockWithDefaultChain(t)
+ lggr, observed := logger.TestObserved(t, zapcore.DebugLevel)
+ ge := evmcfg.EVM().GasEstimator()
+ estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
+ return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, ge.BlockHistory(), lggr, nil)
+ }, ge.EIP1559DynamicFees(), ge)
+ txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, ethKeyStore, estimator)
+ checkerFactory := &txmgr.CheckerFactory{Client: ethClient}
+ ctx := tests.Context(t)
+
+ t.Run("transaction successfully broadcasted and increments on-chain nonce", func(t *testing.T) {
+ _, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
+ localNonce := uint64(0)
+ ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
+ return tx.Nonce() == localNonce
+ }), fromAddress).Return(commonclient.Successful, nil).Once()
+ ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(1), nil).Once()
+
+ mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(localNonce), fromAddress)
+ nonceTracker := txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))
+ eb := txmgrcommon.NewBroadcaster(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, nonceTracker, lggr, checkerFactory, false, string(chaintype.ChainHedera))
+ // Mark instance as test
+ eb.XXXTestDisableUnstartedTxAutoProcessing()
+ servicetest.Run(t, eb)
+
+ retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
+ require.NoError(t, err)
+ require.False(t, retryable)
+ })
+
+ t.Run("transaction successfully broadcasted, failed to increment on-chain nonce, succeeded on bumped retry attempt", func(t *testing.T) {
+ _, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
+ localNonce := uint64(0)
+ ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
+ return tx.Nonce() == localNonce
+ }), fromAddress).Return(commonclient.Successful, nil).Twice()
+ ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(0), nil).Once()
+ ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(1), nil).Once()
+
+ mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(localNonce), fromAddress)
+ nonceTracker := txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))
+ eb := txmgrcommon.NewBroadcaster(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, nonceTracker, lggr, checkerFactory, false, string(chaintype.ChainHedera))
+ // Mark instance as test
+ eb.XXXTestDisableUnstartedTxAutoProcessing()
+ servicetest.Run(t, eb)
+
+ retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
+ tests.AssertLogEventually(t, observed, "Bumped fee on initial send")
+ require.NoError(t, err)
+ require.False(t, retryable)
+ })
+
+ t.Run("transaction successfully broadcasted, failed to increment on-chain nonce on every retry", func(t *testing.T) {
+ _, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
+ localNonce := uint64(0)
+ ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
+ return tx.Nonce() == localNonce
+ }), fromAddress).Return(commonclient.Successful, nil).Times(4)
+ ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(0), nil).Times(4)
+
+ etx := mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(localNonce), fromAddress)
+ nonceTracker := txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))
+ eb := txmgrcommon.NewBroadcaster(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, nonceTracker, lggr, checkerFactory, false, string(chaintype.ChainHedera))
+ // Mark instance as test
+ eb.XXXTestDisableUnstartedTxAutoProcessing()
+ servicetest.Run(t, eb)
+
+ retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
+ tests.AssertLogEventually(t, observed, "Bumped fee on initial send")
+ require.NoError(t, err)
+ require.False(t, retryable)
+ tests.AssertLogEventually(t, observed, "failed to broadcast transaction on hedera after 3 retries")
+
+ etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
+ require.NoError(t, err)
+ require.Equal(t, txmgrcommon.TxFatalError, etx.State)
+ require.Error(t, etx.GetError(), "failed to broadcast transaction on hedera after 3 retries")
+ })
+}
+
type testCheckerFactory struct {
err error
}
diff --git a/core/chains/evm/txmgr/builder.go b/core/chains/evm/txmgr/builder.go
index dcf15a4fa23..8234d55b960 100644
--- a/core/chains/evm/txmgr/builder.go
+++ b/core/chains/evm/txmgr/builder.go
@@ -10,6 +10,7 @@ import (
txmgrtypes "github.com/smartcontractkit/chainlink/v2/common/txmgr/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/config"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/chaintype"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/forwarders"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/gas"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/keystore"
@@ -49,7 +50,7 @@ func NewTxm(
feeCfg := NewEvmTxmFeeConfig(fCfg) // wrap Evm specific config
txmClient := NewEvmTxmClient(client, clientErrors) // wrap Evm specific client
chainID := txmClient.ConfiguredChainID()
- evmBroadcaster := NewEvmBroadcaster(txStore, txmClient, txmCfg, feeCfg, txConfig, listenerConfig, keyStore, txAttemptBuilder, lggr, checker, chainConfig.NonceAutoSync())
+ evmBroadcaster := NewEvmBroadcaster(txStore, txmClient, txmCfg, feeCfg, txConfig, listenerConfig, keyStore, txAttemptBuilder, lggr, checker, chainConfig.NonceAutoSync(), chainConfig.ChainType())
evmTracker := NewEvmTracker(txStore, keyStore, chainID, lggr)
stuckTxDetector := NewStuckTxDetector(lggr, client.ConfiguredChainID(), chainConfig.ChainType(), fCfg.PriceMax(), txConfig.AutoPurge(), estimator, txStore, client)
evmConfirmer := NewEvmConfirmer(txStore, txmClient, txmCfg, feeCfg, txConfig, dbConfig, keyStore, txAttemptBuilder, lggr, stuckTxDetector)
@@ -138,7 +139,8 @@ func NewEvmBroadcaster(
logger logger.Logger,
checkerFactory TransmitCheckerFactory,
autoSyncNonce bool,
+ chainType chaintype.ChainType,
) *Broadcaster {
nonceTracker := NewNonceTracker(logger, txStore, client)
- return txmgr.NewBroadcaster(txStore, client, chainConfig, feeConfig, txConfig, listenerConfig, keystore, txAttemptBuilder, nonceTracker, logger, checkerFactory, autoSyncNonce)
+ return txmgr.NewBroadcaster(txStore, client, chainConfig, feeConfig, txConfig, listenerConfig, keystore, txAttemptBuilder, nonceTracker, logger, checkerFactory, autoSyncNonce, string(chainType))
}
diff --git a/core/chains/evm/txmgr/stuck_tx_detector.go b/core/chains/evm/txmgr/stuck_tx_detector.go
index 5901be0b02d..5d621dc0b20 100644
--- a/core/chains/evm/txmgr/stuck_tx_detector.go
+++ b/core/chains/evm/txmgr/stuck_tx_detector.go
@@ -44,7 +44,7 @@ type stuckTxDetectorConfig interface {
}
type stuckTxDetector struct {
- lggr logger.Logger
+ lggr logger.SugaredLogger
chainID *big.Int
chainType chaintype.ChainType
maxPrice *assets.Wei
@@ -64,7 +64,7 @@ func NewStuckTxDetector(lggr logger.Logger, chainID *big.Int, chainType chaintyp
t.DisableCompression = true
httpClient := &http.Client{Transport: t}
return &stuckTxDetector{
- lggr: lggr,
+ lggr: logger.Sugared(lggr),
chainID: chainID,
chainType: chainType,
maxPrice: maxPrice,
@@ -128,7 +128,7 @@ func (d *stuckTxDetector) DetectStuckTransactions(ctx context.Context, enabledAd
switch d.chainType {
case chaintype.ChainScroll:
return d.detectStuckTransactionsScroll(ctx, txs)
- case chaintype.ChainZkEvm:
+ case chaintype.ChainZkEvm, chaintype.ChainXLayer:
return d.detectStuckTransactionsZkEVM(ctx, txs)
default:
return d.detectStuckTransactionsHeuristic(ctx, txs, blockNum)
@@ -153,11 +153,28 @@ func (d *stuckTxDetector) FindUnconfirmedTxWithLowestNonce(ctx context.Context,
}
}
- // Build list of potentially stuck tx but exclude any that are already marked for purge
+ // Build list of potentially stuck tx but exclude any that are already marked for purge or have non-broadcasted attempts
var stuckTxs []Tx
for _, tx := range lowestNonceTxMap {
- // Attempts are loaded newest to oldest so one marked for purge will always be first
- if len(tx.TxAttempts) > 0 && !tx.TxAttempts[0].IsPurgeAttempt {
+ if len(tx.TxAttempts) == 0 {
+ d.lggr.AssumptionViolationw("encountered an unconfirmed transaction without an attempt", "tx", tx)
+ continue
+ }
+ // Check the transaction's attempts in case any are already marked for purge or if any are not broadcasted
+ // We can only have one non-broadcasted attempt for a transaction at a time
+ // Skip purge detection until all attempts are broadcasted to avoid conflicts with the purge attempt
+ var foundPurgeAttempt, foundNonBroadcastAttempt bool
+ for _, attempt := range tx.TxAttempts {
+ if attempt.IsPurgeAttempt {
+ foundPurgeAttempt = true
+ break
+ }
+ if attempt.State != types.TxAttemptBroadcast {
+ foundNonBroadcastAttempt = true
+ break
+ }
+ }
+ if !foundPurgeAttempt && !foundNonBroadcastAttempt {
stuckTxs = append(stuckTxs, tx)
}
}
@@ -322,14 +339,32 @@ func (d *stuckTxDetector) detectStuckTransactionsScroll(ctx context.Context, txs
// Uses eth_getTransactionByHash to detect that a transaction has been discarded due to overflow
// Currently only used by zkEVM but if other chains follow the same behavior in the future
func (d *stuckTxDetector) detectStuckTransactionsZkEVM(ctx context.Context, txs []Tx) ([]Tx, error) {
- txReqs := make([]rpc.BatchElem, len(txs))
+ minAttempts := 0
+ if d.cfg.MinAttempts() != nil {
+ minAttempts = int(*d.cfg.MinAttempts())
+ }
+ // Check transactions have MinAttempts to ensure it has enough time to return results for getTransactionByHash
+ // zkEVM has a significant delay between broadcasting a transaction and getting a proper result from the RPC
+ var filteredTx []Tx
+ for _, tx := range txs {
+ if len(tx.TxAttempts) >= minAttempts {
+ filteredTx = append(filteredTx, tx)
+ }
+ }
+
+ // No transactions to process
+ if len(filteredTx) == 0 {
+ return filteredTx, nil
+ }
+
+ txReqs := make([]rpc.BatchElem, len(filteredTx))
txHashMap := make(map[common.Hash]Tx)
- txRes := make([]*map[string]interface{}, len(txs))
+ txRes := make([]*map[string]interface{}, len(filteredTx))
// Build batch request elems to perform
// Does not need to be separated out into smaller batches
// Max number of transactions to check is equal to the number of enabled addresses which is a relatively small amount
- for i, tx := range txs {
+ for i, tx := range filteredTx {
latestAttemptHash := tx.TxAttempts[0].Hash
var result map[string]interface{}
txReqs[i] = rpc.BatchElem{
diff --git a/core/chains/evm/txmgr/stuck_tx_detector_test.go b/core/chains/evm/txmgr/stuck_tx_detector_test.go
index 5f0d73be184..def49f8e113 100644
--- a/core/chains/evm/txmgr/stuck_tx_detector_test.go
+++ b/core/chains/evm/txmgr/stuck_tx_detector_test.go
@@ -155,6 +155,30 @@ func TestStuckTxDetector_FindPotentialStuckTxs(t *testing.T) {
require.NoError(t, err)
require.Len(t, stuckTxs, 0)
})
+
+ t.Run("excludes transactions with a in-progress attempt", func(t *testing.T) {
+ _, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
+ etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
+ attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
+ attempt.TxFee.Legacy = assets.NewWeiI(2)
+ attempt.State = txmgrtypes.TxAttemptInProgress
+ require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
+ stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})
+ require.NoError(t, err)
+ require.Len(t, stuckTxs, 0)
+ })
+
+ t.Run("excludes transactions with an insufficient funds attempt", func(t *testing.T) {
+ _, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
+ etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
+ attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
+ attempt.TxFee.Legacy = assets.NewWeiI(2)
+ attempt.State = txmgrtypes.TxAttemptInsufficientFunds
+ require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
+ stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})
+ require.NoError(t, err)
+ require.Len(t, stuckTxs, 0)
+ })
}
func TestStuckTxDetector_DetectStuckTransactionsHeuristic(t *testing.T) {
@@ -271,8 +295,9 @@ func TestStuckTxDetector_DetectStuckTransactionsZkEVM(t *testing.T) {
enabled: true,
}
blockNum := int64(100)
- stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
+
t.Run("returns empty list if no stuck transactions identified", func(t *testing.T) {
+ stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
tx := mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, 1, blockNum, tenGwei)
attempts := tx.TxAttempts[0]
@@ -292,6 +317,7 @@ func TestStuckTxDetector_DetectStuckTransactionsZkEVM(t *testing.T) {
})
t.Run("returns stuck transactions discarded by chain", func(t *testing.T) {
+ stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
// Insert tx that will be mocked as stuck
_, fromAddress1 := cltest.MustInsertRandomKey(t, ethKeyStore)
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress1, 1, blockNum, tenGwei)
@@ -316,6 +342,34 @@ func TestStuckTxDetector_DetectStuckTransactionsZkEVM(t *testing.T) {
// Expect only 1 tx to return as stuck due to nil eth_getTransactionByHash response
require.Len(t, txs, 1)
})
+
+ t.Run("skips stuck tx detection for transactions that do not have enough attempts", func(t *testing.T) {
+ autoPurgeCfg.minAttempts = ptr(uint32(2))
+ stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)
+ // Insert tx with enough attempts for detection
+ _, fromAddress1 := cltest.MustInsertRandomKey(t, ethKeyStore)
+ etx1 := mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress1, 1, blockNum, tenGwei)
+ attempt := cltest.NewLegacyEthTxAttempt(t, etx1.ID)
+ attempt.TxFee.Legacy = assets.NewWeiI(2)
+ attempt.State = txmgrtypes.TxAttemptBroadcast
+ require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
+
+ // Insert tx that will be skipped for too few attempts
+ _, fromAddress2 := cltest.MustInsertRandomKey(t, ethKeyStore)
+ mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress2, 1, blockNum, tenGwei)
+
+ // Return nil response for a tx and a normal response for the other
+ ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
+ return len(b) == 1
+ })).Return(nil).Run(func(args mock.Arguments) {
+ elems := args.Get(1).([]rpc.BatchElem)
+ elems[0].Result = nil // Return nil to signal discarded tx
+ }).Once()
+
+ txs, err := stuckTxDetector.DetectStuckTransactions(ctx, []common.Address{fromAddress1, fromAddress2}, blockNum)
+ require.NoError(t, err)
+ require.Len(t, txs, 1)
+ })
}
func TestStuckTxDetector_DetectStuckTransactionsScroll(t *testing.T) {
diff --git a/core/chains/evm/txmgr/txmgr_test.go b/core/chains/evm/txmgr/txmgr_test.go
index e92acd8230a..2314225cb0b 100644
--- a/core/chains/evm/txmgr/txmgr_test.go
+++ b/core/chains/evm/txmgr/txmgr_test.go
@@ -765,7 +765,8 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.NoError(t, err)
state, err := txm.GetTransactionStatus(ctx, idempotencyKey)
require.Equal(t, commontypes.Fatal, state)
- require.Error(t, err, evmclient.TerminallyStuckMsg)
+ require.Error(t, err)
+ require.Equal(t, evmclient.TerminallyStuckMsg, err.Error())
// Test a terminally stuck client error returns Fatal
nonce = evmtypes.Nonce(1)
@@ -786,7 +787,8 @@ func TestTxm_GetTransactionStatus(t *testing.T) {
require.NoError(t, err)
state, err = txm.GetTransactionStatus(ctx, idempotencyKey)
require.Equal(t, commontypes.Fatal, state)
- require.Error(t, err, evmclient.TerminallyStuckMsg)
+ require.Error(t, err)
+ require.Equal(t, terminallyStuckClientError, err.Error())
})
t.Run("returns failed for fatal error state with other error", func(t *testing.T) {
diff --git a/core/chains/evm/types/types.go b/core/chains/evm/types/types.go
index 57a53bce67a..c834ffeb866 100644
--- a/core/chains/evm/types/types.go
+++ b/core/chains/evm/types/types.go
@@ -63,6 +63,7 @@ type Receipt struct {
BlockHash common.Hash `json:"blockHash,omitempty"`
BlockNumber *big.Int `json:"blockNumber,omitempty"`
TransactionIndex uint `json:"transactionIndex"`
+ RevertReason []byte `json:"revertReason,omitempty"` // Only provided by Hedera
}
// FromGethReceipt converts a gethTypes.Receipt to a Receipt
@@ -86,6 +87,7 @@ func FromGethReceipt(gr *gethTypes.Receipt) *Receipt {
gr.BlockHash,
gr.BlockNumber,
gr.TransactionIndex,
+ nil,
}
}
@@ -119,6 +121,7 @@ func (r Receipt) MarshalJSON() ([]byte, error) {
BlockHash common.Hash `json:"blockHash,omitempty"`
BlockNumber *hexutil.Big `json:"blockNumber,omitempty"`
TransactionIndex hexutil.Uint `json:"transactionIndex"`
+ RevertReason hexutil.Bytes `json:"revertReason,omitempty"` // Only provided by Hedera
}
var enc Receipt
enc.PostState = r.PostState
@@ -132,6 +135,7 @@ func (r Receipt) MarshalJSON() ([]byte, error) {
enc.BlockHash = r.BlockHash
enc.BlockNumber = (*hexutil.Big)(r.BlockNumber)
enc.TransactionIndex = hexutil.Uint(r.TransactionIndex)
+ enc.RevertReason = r.RevertReason
return json.Marshal(&enc)
}
@@ -149,6 +153,7 @@ func (r *Receipt) UnmarshalJSON(input []byte) error {
BlockHash *common.Hash `json:"blockHash,omitempty"`
BlockNumber *hexutil.Big `json:"blockNumber,omitempty"`
TransactionIndex *hexutil.Uint `json:"transactionIndex"`
+ RevertReason *hexutil.Bytes `json:"revertReason,omitempty"` // Only provided by Hedera
}
var dec Receipt
if err := json.Unmarshal(input, &dec); err != nil {
@@ -185,6 +190,9 @@ func (r *Receipt) UnmarshalJSON(input []byte) error {
if dec.TransactionIndex != nil {
r.TransactionIndex = uint(*dec.TransactionIndex)
}
+ if dec.RevertReason != nil {
+ r.RevertReason = *dec.RevertReason
+ }
return nil
}
@@ -225,6 +233,14 @@ func (r *Receipt) GetBlockHash() common.Hash {
return r.BlockHash
}
+func (r *Receipt) GetRevertReason() *string {
+ if len(r.RevertReason) == 0 {
+ return nil
+ }
+ revertReason := string(r.RevertReason)
+ return &revertReason
+}
+
type Confirmations int
const (
diff --git a/core/cmd/shell_local_test.go b/core/cmd/shell_local_test.go
index 5fbbff4260f..d1985c42875 100644
--- a/core/cmd/shell_local_test.go
+++ b/core/cmd/shell_local_test.go
@@ -17,7 +17,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/cmd"
cmdMocks "github.com/smartcontractkit/chainlink/v2/core/cmd/mocks"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/mocks"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
@@ -32,6 +31,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/store/dialects"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/plugins"
gethTypes "github.com/ethereum/go-ethereum/core/types"
diff --git a/core/config/docs/chains-evm.toml b/core/config/docs/chains-evm.toml
index f053be9fa62..73ea0ebb357 100644
--- a/core/config/docs/chains-evm.toml
+++ b/core/config/docs/chains-evm.toml
@@ -14,7 +14,7 @@ BlockBackfillDepth = 10 # Default
# BlockBackfillSkip enables skipping of very long backfills.
BlockBackfillSkip = false # Default
# ChainType is automatically detected from chain ID. Set this to force a certain chain type regardless of chain ID.
-# Available types: `arbitrum`, `celo`, `gnosis`, `kroma`, `metis`, `optimismBedrock`, `scroll`, `wemix`, `xlayer`, `zksync`
+# Available types: `arbitrum`, `celo`, `gnosis`, `hedera`, `kroma`, `metis`, `optimismBedrock`, `scroll`, `wemix`, `xlayer`, `zksync`
ChainType = 'arbitrum' # Example
# FinalityDepth is the number of blocks after which an ethereum transaction is considered "final". Note that the default is automatically set based on chain ID, so it should not be necessary to change this under normal operation.
# BlocksConsideredFinal determines how deeply we look back to ensure that transactions are confirmed onto the longest chain
@@ -98,6 +98,11 @@ RPCBlockQueryDelay = 1 # Default
# Block 64 will be treated as finalized by CL Node only when chain's latest finalized block is 65. As chain finalizes blocks in batches of 32,
# CL Node has to wait for a whole new batch to be finalized to treat block 64 as finalized.
FinalizedBlockOffset = 0 # Default
+# NoNewFinalizedHeadsThreshold controls how long to wait for new finalized block before `NodePool` marks rpc endpoints as
+# out-of-sync. Only applicable if `FinalityTagEnabled=true`
+#
+# Set to zero to disable.
+NoNewFinalizedHeadsThreshold = '0' # Default
[EVM.Transactions]
# ForwardersEnabled enables or disables sending transactions through forwarder contracts.
diff --git a/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go b/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go
index 0838134fdda..4797421171c 100644
--- a/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go
+++ b/core/gethwrappers/ccip/generated/burn_mint_token_pool_and_proxy/burn_mint_token_pool_and_proxy.go
@@ -82,8 +82,8 @@ type TokenPoolChainUpdate struct {
}
var BurnMintTokenPoolAndProxyMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x60e06040523480156200001157600080fd5b506040516200494a3803806200494a833981016040819052620000349162000554565b83838383838383833380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200017e565b5050506001600160a01b0384161580620000e757506001600160a01b038116155b80620000fa57506001600160a01b038216155b1562000119576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016c576040805160008152602081019091526200016c908462000229565b505050505050505050505050620006b2565b336001600160a01b03821603620001d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200024a576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002d55760008382815181106200026e576200026e62000664565b602090810291909101015190506200028860028262000386565b15620002cb576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200024d565b5060005b815181101562000381576000828281518110620002fa57620002fa62000664565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000326575062000378565b62000333600282620003a6565b1562000376576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d9565b505050565b60006200039d836001600160a01b038416620003bd565b90505b92915050565b60006200039d836001600160a01b038416620004c1565b60008181526001830160205260408120548015620004b6576000620003e46001836200067a565b8554909150600090620003fa906001906200067a565b9050808214620004665760008660000182815481106200041e576200041e62000664565b906000526020600020015490508087600001848154811062000444576200044462000664565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200047a576200047a6200069c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a0565b6000915050620003a0565b60008181526001830160205260408120546200050a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a0565b506000620003a0565b6001600160a01b03811681146200052957600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200054f8162000513565b919050565b600080600080608085870312156200056b57600080fd5b8451620005788162000513565b602086810151919550906001600160401b03808211156200059857600080fd5b818801915088601f830112620005ad57600080fd5b815181811115620005c257620005c26200052c565b8060051b604051601f19603f83011681018181108582111715620005ea57620005ea6200052c565b60405291825284820192508381018501918b8311156200060957600080fd5b938501935b828510156200063257620006228562000542565b845293850193928501926200060e565b809850505050505050620006496040860162000542565b9150620006596060860162000542565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051614214620007366000396000818161053701528181611abf0152612511015260008181610511015281816118520152611d7201526000818161025a015281816102af0152818161075701528181610ddd0152818161177201528181611c9201528181611e78015281816124a701526126fc01526142146000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639766b93211610104578063c0d78655116100a2578063db6327dc11610071578063db6327dc146104fc578063dc0bd9711461050f578063e0351e1314610535578063f2fde38b1461055b57600080fd5b8063c0d78655146104ae578063c4bffe2b146104c1578063c75eea9c146104d6578063cf7401f3146104e957600080fd5b8063a8d87a3b116100de578063a8d87a3b146103fb578063af58d59f1461040e578063b0f479a11461047d578063b79465801461049b57600080fd5b80639766b932146103b35780639a4575b9146103c6578063a7cd63b7146103e657600080fd5b80636d3d1a58116101715780637d54534e1161014b5780637d54534e1461035c57806383826b2b1461036f5780638926f54f146103825780638da5cb5b1461039557600080fd5b80636d3d1a581461032357806378a010b21461034157806379ba50971461035457600080fd5b806321df0da7116101ad57806321df0da714610258578063240028e81461029f57806339077537146102ec57806354c8a4f31461030e57600080fd5b806301ffc9a7146101d45780630a2fd493146101fc578063181f5a771461021c575b600080fd5b6101e76101e23660046131a9565b61056e565b60405190151581526020015b60405180910390f35b61020f61020a366004613208565b610653565b6040516101f39190613291565b61020f6040518060400160405280601f81526020017f4275726e4d696e74546f6b656e506f6f6c416e6450726f787920312e352e300081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e76102ad3660046132d1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102ff6102fa3660046132ee565b610703565b604051905181526020016101f3565b61032161031c366004613376565b6108bb565b005b60085473ffffffffffffffffffffffffffffffffffffffff1661027a565b61032161034f3660046133e2565b610936565b610321610aaa565b61032161036a3660046132d1565b610ba7565b6101e761037d366004613465565b610bf6565b6101e7610390366004613208565b610cc3565b60005473ffffffffffffffffffffffffffffffffffffffff1661027a565b6103216103c13660046132d1565b610cda565b6103d96103d436600461349c565b610d69565b6040516101f391906134d7565b6103ee610ed9565b6040516101f39190613537565b61027a610409366004613208565b503090565b61042161041c366004613208565b610eea565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff1661027a565b61020f6104a9366004613208565b610fbf565b6103216104bc3660046132d1565b610fea565b6104c96110be565b6040516101f39190613591565b6104216104e4366004613208565b611176565b6103216104f7366004613748565b611248565b61032161050a36600461378d565b6112d1565b7f000000000000000000000000000000000000000000000000000000000000000061027a565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b6103216105693660046132d1565b611757565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061060157507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061064d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061067e906137cf565b80601f01602080910402602001604051908101604052809291908181526020018280546106aa906137cf565b80156106f75780601f106106cc576101008083540402835291602001916106f7565b820191906000526020600020905b8154815290600101906020018083116106da57829003601f168201915b50505050509050919050565b60408051602081019091526000815261072361071e836138be565b61176b565b60095473ffffffffffffffffffffffffffffffffffffffff166108195773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f1961078c60608501604086016132d1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260608501356024820152604401600060405180830381600087803b1580156107fc57600080fd5b505af1158015610810573d6000803e3d6000fd5b5050505061082a565b61082a610825836138be565b61199c565b61083a60608301604084016132d1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161089c91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108c3611a3a565b61093084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611abd92505050565b50505050565b61093e611a3a565b61094783610cc3565b61098e576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546109b5906137cf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e1906137cf565b8015610a2e5780601f10610a0357610100808354040283529160200191610a2e565b820191906000526020600020905b815481529060010190602001808311610a1157829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a5d838583613a03565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a9c93929190613b1d565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610985565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610baf611a3a565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610cbc5750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190613b81565b9392505050565b600061064d600567ffffffffffffffff8416611c73565b610ce2611a3a565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610d8e610d8983613b9e565b611c8b565b60095473ffffffffffffffffffffffffffffffffffffffff16610e53576040517f42966c68000000000000000000000000000000000000000000000000000000008152606083013560048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015610e3657600080fd5b505af1158015610e4a573d6000803e3d6000fd5b50505050610e64565b610e64610e5f83613b9e565b611e55565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610ebe8460200160208101906104a99190613208565b81526040805160208181019092526000815291015292915050565b6060610ee56002611f6f565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261064d90611f7c565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061067e906137cf565b610ff2611a3a565b73ffffffffffffffffffffffffffffffffffffffff811661103f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610d5d565b606060006110cc6005611f6f565b90506000815167ffffffffffffffff8111156110ea576110ea6135d3565b604051908082528060200260200182016040528015611113578160200160208202803683370190505b50905060005b825181101561116f5782818151811061113457611134613c40565b602002602001015182828151811061114e5761114e613c40565b67ffffffffffffffff90921660209283029190910190910152600101611119565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261064d90611f7c565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611288575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156112c1576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610985565b6112cc83838361202e565b505050565b6112d9611a3a565b60005b818110156112cc5760008383838181106112f8576112f8613c40565b905060200281019061130a9190613c6f565b61131390613cad565b90506113288160800151826020015115612118565b61133b8160a00151826020015115612118565b80602001511561163757805161135d9060059067ffffffffffffffff16612251565b6113a25780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610985565b60408101515115806113b75750606081015151155b156113ee576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906115cf9082613d61565b50606082015160058201906115e49082613d61565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2955061162a9493929190613e7b565b60405180910390a161174e565b805161164f9060059067ffffffffffffffff1661225d565b6116945780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610985565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906116fd600483018261315b565b61170b60058301600061315b565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016112dc565b61175f611a3a565b61176881612269565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146118005760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610985565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d29190613b81565b15611909576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611916816020015161235e565b60006119258260200151610653565b9050805160001480611949575080805190602001208260a001518051906020012014155b15611986578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109859190613291565b61199882602001518360600151612484565b5050565b60095481516040808401516060850151602086015192517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694638627fad694611a059490939291600401613f14565b600060405180830381600087803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610985565b565b7f0000000000000000000000000000000000000000000000000000000000000000611b14576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611baa576000838281518110611b3457611b34613c40565b60200260200101519050611b528160026124cb90919063ffffffff16565b15611ba15760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611b17565b5060005b81518110156112cc576000828281518110611bcb57611bcb613c40565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c0f5750611c6b565b611c1a6002826124ed565b15611c695760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611bae565b60008181526001830160205260408120541515610cbc565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611d205760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610985565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df29190613b81565b15611e29576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e36816040015161250f565b611e43816020015161258e565b611768816020015182606001516126dc565b6009546060820151611ea29173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690612720565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694639687544594611f0a94939291600401613f75565b6000604051808303816000875af1158015611f29573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119989190810190613fd5565b60606000610cbc836127ad565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261200a82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611fee9190614072565b85608001516fffffffffffffffffffffffffffffffff16612808565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61203783610cc3565b612079576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610985565b612084826000612118565b67ffffffffffffffff831660009081526007602052604090206120a79083612832565b6120b2816000612118565b67ffffffffffffffff831660009081526007602052604090206120d89060020182612832565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161210b93929190614085565b60405180910390a1505050565b8151156121df5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff1610158061216e575060408201516fffffffffffffffffffffffffffffffff16155b156121a757816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016109859190614108565b8015611998576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612218575060208201516fffffffffffffffffffffffffffffffff1615155b1561199857816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016109859190614108565b6000610cbc83836129d4565b6000610cbc8383612a23565b3373ffffffffffffffffffffffffffffffffffffffff8216036122e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610985565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61236781610cc3565b6123a9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610985565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190613b81565b611768576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610985565b67ffffffffffffffff8216600090815260076020526040902061199890600201827f0000000000000000000000000000000000000000000000000000000000000000612b16565b6000610cbc8373ffffffffffffffffffffffffffffffffffffffff8416612a23565b6000610cbc8373ffffffffffffffffffffffffffffffffffffffff84166129d4565b7f00000000000000000000000000000000000000000000000000000000000000001561176857612540600282612e99565b611768576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610985565b61259781610cc3565b6125d9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610985565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126769190614144565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611768576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610985565b67ffffffffffffffff8216600090815260076020526040902061199890827f0000000000000000000000000000000000000000000000000000000000000000612b16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526112cc908490612ec8565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106f757602002820191906000526020600020905b8154815260200190600101908083116127e95750505050509050919050565b6000612827856128188486614161565b6128229087614178565b612fd4565b90505b949350505050565b815460009061285b90700100000000000000000000000000000000900463ffffffff1642614072565b905080156128fd57600183015483546128a3916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612808565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612923916fffffffffffffffffffffffffffffffff9081169116612fd4565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061210b908490614108565b6000818152600183016020526040812054612a1b5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561064d565b50600061064d565b60008181526001830160205260408120548015612b0c576000612a47600183614072565b8554909150600090612a5b90600190614072565b9050808214612ac0576000866000018281548110612a7b57612a7b613c40565b9060005260206000200154905080876000018481548110612a9e57612a9e613c40565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ad157612ad161418b565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061064d565b600091505061064d565b825474010000000000000000000000000000000000000000900460ff161580612b3d575081155b15612b4757505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612b8d90700100000000000000000000000000000000900463ffffffff1642614072565b90508015612c4d5781831115612bcf576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612c099083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612808565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612d045773ffffffffffffffffffffffffffffffffffffffff8416612cac576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610985565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610985565b84831015612e175760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612d489082614072565b612d52878a614072565b612d5c9190614178565b612d6691906141ba565b905073ffffffffffffffffffffffffffffffffffffffff8616612dbf576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610985565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610985565b612e218584614072565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610cbc565b6000612f2a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fea9092919063ffffffff16565b8051909150156112cc5780806020019051810190612f489190613b81565b6112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610985565b6000818310612fe35781610cbc565b5090919050565b606061282a8484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161301e91906141f5565b60006040518083038185875af1925050503d806000811461305b576040519150601f19603f3d011682016040523d82523d6000602084013e613060565b606091505b50915091506130718783838761307c565b979650505050505050565b6060831561311257825160000361310b5773ffffffffffffffffffffffffffffffffffffffff85163b61310b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610985565b508161282a565b61282a83838151156131275781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109859190613291565b508054613167906137cf565b6000825580601f10613177575050565b601f01602090049060005260206000209081019061176891905b808211156131a55760008155600101613191565b5090565b6000602082840312156131bb57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610cbc57600080fd5b803567ffffffffffffffff8116811461320357600080fd5b919050565b60006020828403121561321a57600080fd5b610cbc826131eb565b60005b8381101561323e578181015183820152602001613226565b50506000910152565b6000815180845261325f816020860160208601613223565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610cbc6020830184613247565b73ffffffffffffffffffffffffffffffffffffffff8116811461176857600080fd5b8035613203816132a4565b6000602082840312156132e357600080fd5b8135610cbc816132a4565b60006020828403121561330057600080fd5b813567ffffffffffffffff81111561331757600080fd5b82016101008185031215610cbc57600080fd5b60008083601f84011261333c57600080fd5b50813567ffffffffffffffff81111561335457600080fd5b6020830191508360208260051b850101111561336f57600080fd5b9250929050565b6000806000806040858703121561338c57600080fd5b843567ffffffffffffffff808211156133a457600080fd5b6133b08883890161332a565b909650945060208701359150808211156133c957600080fd5b506133d68782880161332a565b95989497509550505050565b6000806000604084860312156133f757600080fd5b613400846131eb565b9250602084013567ffffffffffffffff8082111561341d57600080fd5b818601915086601f83011261343157600080fd5b81358181111561344057600080fd5b87602082850101111561345257600080fd5b6020830194508093505050509250925092565b6000806040838503121561347857600080fd5b613481836131eb565b91506020830135613491816132a4565b809150509250929050565b6000602082840312156134ae57600080fd5b813567ffffffffffffffff8111156134c557600080fd5b820160a08185031215610cbc57600080fd5b6020815260008251604060208401526134f36060840182613247565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261352e8282613247565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358557835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613553565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358557835167ffffffffffffffff16835292840192918401916001016135ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613626576136266135d3565b60405290565b60405160c0810167ffffffffffffffff81118282101715613626576136266135d3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613696576136966135d3565b604052919050565b801515811461176857600080fd5b80356132038161369e565b80356fffffffffffffffffffffffffffffffff8116811461320357600080fd5b6000606082840312156136e957600080fd5b6040516060810181811067ffffffffffffffff8211171561370c5761370c6135d3565b604052905080823561371d8161369e565b815261372b602084016136b7565b602082015261373c604084016136b7565b60408201525092915050565b600080600060e0848603121561375d57600080fd5b613766846131eb565b925061377585602086016136d7565b915061378485608086016136d7565b90509250925092565b600080602083850312156137a057600080fd5b823567ffffffffffffffff8111156137b757600080fd5b6137c38582860161332a565b90969095509350505050565b600181811c908216806137e357607f821691505b60208210810361381c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600067ffffffffffffffff82111561383c5761383c6135d3565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261387957600080fd5b813561388c61388782613822565b61364f565b8181528460208386010111156138a157600080fd5b816020850160208301376000918101602001919091529392505050565b600061010082360312156138d157600080fd5b6138d9613602565b823567ffffffffffffffff808211156138f157600080fd5b6138fd36838701613868565b835261390b602086016131eb565b602084015261391c604086016132c6565b604084015260608501356060840152613937608086016132c6565b608084015260a085013591508082111561395057600080fd5b61395c36838701613868565b60a084015260c085013591508082111561397557600080fd5b61398136838701613868565b60c084015260e085013591508082111561399a57600080fd5b506139a736828601613868565b60e08301525092915050565b601f8211156112cc576000816000526020600020601f850160051c810160208610156139dc5750805b601f850160051c820191505b818110156139fb578281556001016139e8565b505050505050565b67ffffffffffffffff831115613a1b57613a1b6135d3565b613a2f83613a2983546137cf565b836139b3565b6000601f841160018114613a815760008515613a4b5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611a33565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613ad05786850135825560209485019460019092019101613ab0565b5086821015613b0b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000613b306040830186613247565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060208284031215613b9357600080fd5b8151610cbc8161369e565b600060a08236031215613bb057600080fd5b60405160a0810167ffffffffffffffff8282108183111715613bd457613bd46135d3565b816040528435915080821115613be957600080fd5b50613bf636828601613868565b825250613c05602084016131eb565b60208201526040830135613c18816132a4565b6040820152606083810135908201526080830135613c35816132a4565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613ca357600080fd5b9190910192915050565b60006101408236031215613cc057600080fd5b613cc861362c565b613cd1836131eb565b8152613cdf602084016136ac565b6020820152604083013567ffffffffffffffff80821115613cff57600080fd5b613d0b36838701613868565b60408401526060850135915080821115613d2457600080fd5b50613d3136828601613868565b606083015250613d4436608085016136d7565b6080820152613d563660e085016136d7565b60a082015292915050565b815167ffffffffffffffff811115613d7b57613d7b6135d3565b613d8f81613d8984546137cf565b846139b3565b602080601f831160018114613de25760008415613dac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556139fb565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e2f57888601518255948401946001909101908401613e10565b5085821015613e6b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613e9f81840187613247565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613edd9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e083015261352e565b60a081526000613f2760a0830187613247565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a060208201526000613fa460a0830186613247565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b600060208284031215613fe757600080fd5b815167ffffffffffffffff811115613ffe57600080fd5b8201601f8101841361400f57600080fd5b805161401d61388782613822565b81815285602083850101111561403257600080fd5b61352e826020830160208601613223565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561064d5761064d614043565b67ffffffffffffffff8416815260e081016140d160208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c083015261282a565b6060810161064d82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561415657600080fd5b8151610cbc816132a4565b808202811582820484141761064d5761064d614043565b8082018082111561064d5761064d614043565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000826141f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613ca381846020870161322356fea164736f6c6343000818000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreviousPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x60e06040523480156200001157600080fd5b506040516200497338038062004973833981016040819052620000349162000554565b83838383838383833380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200017e565b5050506001600160a01b0384161580620000e757506001600160a01b038116155b80620000fa57506001600160a01b038216155b1562000119576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016c576040805160008152602081019091526200016c908462000229565b505050505050505050505050620006b2565b336001600160a01b03821603620001d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c0516200024a576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002d55760008382815181106200026e576200026e62000664565b602090810291909101015190506200028860028262000386565b15620002cb576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200024d565b5060005b815181101562000381576000828281518110620002fa57620002fa62000664565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000326575062000378565b62000333600282620003a6565b1562000376576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002d9565b505050565b60006200039d836001600160a01b038416620003bd565b90505b92915050565b60006200039d836001600160a01b038416620004c1565b60008181526001830160205260408120548015620004b6576000620003e46001836200067a565b8554909150600090620003fa906001906200067a565b9050808214620004665760008660000182815481106200041e576200041e62000664565b906000526020600020015490508087600001848154811062000444576200044462000664565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200047a576200047a6200069c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a0565b6000915050620003a0565b60008181526001830160205260408120546200050a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a0565b506000620003a0565b6001600160a01b03811681146200052957600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200054f8162000513565b919050565b600080600080608085870312156200056b57600080fd5b8451620005788162000513565b602086810151919550906001600160401b03808211156200059857600080fd5b818801915088601f830112620005ad57600080fd5b815181811115620005c257620005c26200052c565b8060051b604051601f19603f83011681018181108582111715620005ea57620005ea6200052c565b60405291825284820192508381018501918b8311156200060957600080fd5b938501935b828510156200063257620006228562000542565b845293850193928501926200060e565b809850505050505050620006496040860162000542565b9150620006596060860162000542565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05161423d620007366000396000818161056001528181611ae8015261253a01526000818161053a0152818161187b0152611d9b015260008181610265015281816102ba0152818161078001528181610e060152818161179b01528181611cbb01528181611ea1015281816124d00152612725015261423d6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80639a4575b911610104578063c0d78655116100a2578063db6327dc11610071578063db6327dc14610525578063dc0bd97114610538578063e0351e131461055e578063f2fde38b1461058457600080fd5b8063c0d78655146104d7578063c4bffe2b146104ea578063c75eea9c146104ff578063cf7401f31461051257600080fd5b8063a8d87a3b116100de578063a8d87a3b14610424578063af58d59f14610437578063b0f479a1146104a6578063b7946580146104c457600080fd5b80639a4575b9146103d1578063a2b261d8146103f1578063a7cd63b71461040f57600080fd5b80636d3d1a581161017c57806383826b2b1161014b57806383826b2b1461037a5780638926f54f1461038d5780638da5cb5b146103a05780639766b932146103be57600080fd5b80636d3d1a581461032e57806378a010b21461034c57806379ba50971461035f5780637d54534e1461036757600080fd5b806321df0da7116101b857806321df0da714610263578063240028e8146102aa57806339077537146102f757806354c8a4f31461031957600080fd5b806301ffc9a7146101df5780630a2fd49314610207578063181f5a7714610227575b600080fd5b6101f26101ed3660046131d2565b610597565b60405190151581526020015b60405180910390f35b61021a610215366004613231565b61067c565b6040516101fe91906132ba565b61021a6040518060400160405280601f81526020017f4275726e4d696e74546f6b656e506f6f6c416e6450726f787920312e352e300081525081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b6101f26102b83660046132fa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61030a610305366004613317565b61072c565b604051905181526020016101fe565b61032c61032736600461339f565b6108e4565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610285565b61032c61035a36600461340b565b61095f565b61032c610ad3565b61032c6103753660046132fa565b610bd0565b6101f261038836600461348e565b610c1f565b6101f261039b366004613231565b610cec565b60005473ffffffffffffffffffffffffffffffffffffffff16610285565b61032c6103cc3660046132fa565b610d03565b6103e46103df3660046134c5565b610d92565b6040516101fe9190613500565b60095473ffffffffffffffffffffffffffffffffffffffff16610285565b610417610f02565b6040516101fe9190613560565b610285610432366004613231565b503090565b61044a610445366004613231565b610f13565b6040516101fe919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610285565b61021a6104d2366004613231565b610fe8565b61032c6104e53660046132fa565b611013565b6104f26110e7565b6040516101fe91906135ba565b61044a61050d366004613231565b61119f565b61032c610520366004613771565b611271565b61032c6105333660046137b6565b6112fa565b7f0000000000000000000000000000000000000000000000000000000000000000610285565b7f00000000000000000000000000000000000000000000000000000000000000006101f2565b61032c6105923660046132fa565b611780565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061062a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061067657507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106a7906137f8565b80601f01602080910402602001604051908101604052809291908181526020018280546106d3906137f8565b80156107205780601f106106f557610100808354040283529160200191610720565b820191906000526020600020905b81548152906001019060200180831161070357829003601f168201915b50505050509050919050565b60408051602081019091526000815261074c610747836138e7565b611794565b60095473ffffffffffffffffffffffffffffffffffffffff166108425773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f196107b560608501604086016132fa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260608501356024820152604401600060405180830381600087803b15801561082557600080fd5b505af1158015610839573d6000803e3d6000fd5b50505050610853565b61085361084e836138e7565b6119c5565b61086360608301604084016132fa565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f084606001356040516108c591815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108ec611a63565b61095984848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611ae692505050565b50505050565b610967611a63565b61097083610cec565b6109b7576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546109de906137f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0a906137f8565b8015610a575780601f10610a2c57610100808354040283529160200191610a57565b820191906000526020600020905b815481529060010190602001808311610a3a57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a86838583613a2c565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610ac593929190613b46565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016109ae565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610bd8611a63565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610ce55750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce59190613baa565b9392505050565b6000610676600567ffffffffffffffff8416611c9c565b610d0b611a63565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610db7610db283613bc7565b611cb4565b60095473ffffffffffffffffffffffffffffffffffffffff16610e7c576040517f42966c68000000000000000000000000000000000000000000000000000000008152606083013560048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b50505050610e8d565b610e8d610e8883613bc7565b611e7e565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610ee78460200160208101906104d29190613231565b81526040805160208181019092526000815291015292915050565b6060610f0e6002611f98565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261067690611fa5565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106a7906137f8565b61101b611a63565b73ffffffffffffffffffffffffffffffffffffffff8116611068576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610d86565b606060006110f56005611f98565b90506000815167ffffffffffffffff811115611113576111136135fc565b60405190808252806020026020018201604052801561113c578160200160208202803683370190505b50905060005b82518110156111985782818151811061115d5761115d613c69565b602002602001015182828151811061117757611177613c69565b67ffffffffffffffff90921660209283029190910190910152600101611142565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261067690611fa5565b60085473ffffffffffffffffffffffffffffffffffffffff1633148015906112b1575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156112ea576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016109ae565b6112f5838383612057565b505050565b611302611a63565b60005b818110156112f557600083838381811061132157611321613c69565b90506020028101906113339190613c98565b61133c90613cd6565b90506113518160800151826020015115612141565b6113648160a00151826020015115612141565b8060200151156116605780516113869060059067ffffffffffffffff1661227a565b6113cb5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016109ae565b60408101515115806113e05750606081015151155b15611417576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906115f89082613d8a565b506060820151600582019061160d9082613d8a565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506116539493929190613ea4565b60405180910390a1611777565b80516116789060059067ffffffffffffffff16612286565b6116bd5780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016109ae565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906117266004830182613184565b611734600583016000613184565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b50600101611305565b611788611a63565b61179181612292565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146118295760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109ae565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb9190613baa565b15611932576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61193f8160200151612387565b600061194e826020015161067c565b9050805160001480611972575080805190602001208260a001518051906020012014155b156119af578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109ae91906132ba565b6119c1826020015183606001516124ad565b5050565b60095481516040808401516060850151602086015192517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694638627fad694611a2e9490939291600401613f3d565b600060405180830381600087803b158015611a4857600080fd5b505af1158015611a5c573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016109ae565b565b7f0000000000000000000000000000000000000000000000000000000000000000611b3d576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611bd3576000838281518110611b5d57611b5d613c69565b60200260200101519050611b7b8160026124f490919063ffffffff16565b15611bca5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611b40565b5060005b81518110156112f5576000828281518110611bf457611bf4613c69565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c385750611c94565b611c43600282612516565b15611c925760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611bd7565b60008181526001830160205260408120541515610ce5565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611d495760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016109ae565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1b9190613baa565b15611e52576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e5f8160400151612538565b611e6c81602001516125b7565b61179181602001518260600151612705565b6009546060820151611ecb9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690612749565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694639687544594611f3394939291600401613f9e565b6000604051808303816000875af1158015611f52573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119c19190810190613ffe565b60606000610ce5836127d6565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261203382606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642612017919061409b565b85608001516fffffffffffffffffffffffffffffffff16612831565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61206083610cec565b6120a2576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016109ae565b6120ad826000612141565b67ffffffffffffffff831660009081526007602052604090206120d0908361285b565b6120db816000612141565b67ffffffffffffffff83166000908152600760205260409020612101906002018261285b565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051612134939291906140ae565b60405180910390a1505050565b8151156122085781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612197575060408201516fffffffffffffffffffffffffffffffff16155b156121d057816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016109ae9190614131565b80156119c1576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612241575060208201516fffffffffffffffffffffffffffffffff1615155b156119c157816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016109ae9190614131565b6000610ce583836129fd565b6000610ce58383612a4c565b3373ffffffffffffffffffffffffffffffffffffffff821603612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016109ae565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61239081610cec565b6123d2576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016109ae565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612451573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124759190613baa565b611791576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016109ae565b67ffffffffffffffff821660009081526007602052604090206119c190600201827f0000000000000000000000000000000000000000000000000000000000000000612b3f565b6000610ce58373ffffffffffffffffffffffffffffffffffffffff8416612a4c565b6000610ce58373ffffffffffffffffffffffffffffffffffffffff84166129fd565b7f00000000000000000000000000000000000000000000000000000000000000001561179157612569600282612ec2565b611791576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016109ae565b6125c081610cec565b612602576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016109ae565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f919061416d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611791576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016109ae565b67ffffffffffffffff821660009081526007602052604090206119c190827f0000000000000000000000000000000000000000000000000000000000000000612b3f565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526112f5908490612ef1565b60608160000180548060200260200160405190810160405280929190818152602001828054801561072057602002820191906000526020600020905b8154815260200190600101908083116128125750505050509050919050565b600061285085612841848661418a565b61284b90876141a1565b612ffd565b90505b949350505050565b815460009061288490700100000000000000000000000000000000900463ffffffff164261409b565b9050801561292657600183015483546128cc916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612831565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461294c916fffffffffffffffffffffffffffffffff9081169116612ffd565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612134908490614131565b6000818152600183016020526040812054612a4457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610676565b506000610676565b60008181526001830160205260408120548015612b35576000612a7060018361409b565b8554909150600090612a849060019061409b565b9050808214612ae9576000866000018281548110612aa457612aa4613c69565b9060005260206000200154905080876000018481548110612ac757612ac7613c69565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612afa57612afa6141b4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610676565b6000915050610676565b825474010000000000000000000000000000000000000000900460ff161580612b66575081155b15612b7057505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612bb690700100000000000000000000000000000000900463ffffffff164261409b565b90508015612c765781831115612bf8576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612c329083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612831565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612d2d5773ffffffffffffffffffffffffffffffffffffffff8416612cd5576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016109ae565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016109ae565b84831015612e405760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612d71908261409b565b612d7b878a61409b565b612d8591906141a1565b612d8f91906141e3565b905073ffffffffffffffffffffffffffffffffffffffff8616612de8576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016109ae565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016109ae565b612e4a858461409b565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610ce5565b6000612f53826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130139092919063ffffffff16565b8051909150156112f55780806020019051810190612f719190613baa565b6112f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109ae565b600081831061300c5781610ce5565b5090919050565b60606128538484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613047919061421e565b60006040518083038185875af1925050503d8060008114613084576040519150601f19603f3d011682016040523d82523d6000602084013e613089565b606091505b509150915061309a878383876130a5565b979650505050505050565b6060831561313b5782516000036131345773ffffffffffffffffffffffffffffffffffffffff85163b613134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ae565b5081612853565b61285383838151156131505781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae91906132ba565b508054613190906137f8565b6000825580601f106131a0575050565b601f01602090049060005260206000209081019061179191905b808211156131ce57600081556001016131ba565b5090565b6000602082840312156131e457600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ce557600080fd5b803567ffffffffffffffff8116811461322c57600080fd5b919050565b60006020828403121561324357600080fd5b610ce582613214565b60005b8381101561326757818101518382015260200161324f565b50506000910152565b6000815180845261328881602086016020860161324c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ce56020830184613270565b73ffffffffffffffffffffffffffffffffffffffff8116811461179157600080fd5b803561322c816132cd565b60006020828403121561330c57600080fd5b8135610ce5816132cd565b60006020828403121561332957600080fd5b813567ffffffffffffffff81111561334057600080fd5b82016101008185031215610ce557600080fd5b60008083601f84011261336557600080fd5b50813567ffffffffffffffff81111561337d57600080fd5b6020830191508360208260051b850101111561339857600080fd5b9250929050565b600080600080604085870312156133b557600080fd5b843567ffffffffffffffff808211156133cd57600080fd5b6133d988838901613353565b909650945060208701359150808211156133f257600080fd5b506133ff87828801613353565b95989497509550505050565b60008060006040848603121561342057600080fd5b61342984613214565b9250602084013567ffffffffffffffff8082111561344657600080fd5b818601915086601f83011261345a57600080fd5b81358181111561346957600080fd5b87602082850101111561347b57600080fd5b6020830194508093505050509250925092565b600080604083850312156134a157600080fd5b6134aa83613214565b915060208301356134ba816132cd565b809150509250929050565b6000602082840312156134d757600080fd5b813567ffffffffffffffff8111156134ee57600080fd5b820160a08185031215610ce557600080fd5b60208152600082516040602084015261351c6060840182613270565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160408501526135578282613270565b95945050505050565b6020808252825182820181905260009190848201906040850190845b818110156135ae57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161357c565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135ae57835167ffffffffffffffff16835292840192918401916001016135d6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561364f5761364f6135fc565b60405290565b60405160c0810167ffffffffffffffff8111828210171561364f5761364f6135fc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156136bf576136bf6135fc565b604052919050565b801515811461179157600080fd5b803561322c816136c7565b80356fffffffffffffffffffffffffffffffff8116811461322c57600080fd5b60006060828403121561371257600080fd5b6040516060810181811067ffffffffffffffff82111715613735576137356135fc565b6040529050808235613746816136c7565b8152613754602084016136e0565b6020820152613765604084016136e0565b60408201525092915050565b600080600060e0848603121561378657600080fd5b61378f84613214565b925061379e8560208601613700565b91506137ad8560808601613700565b90509250925092565b600080602083850312156137c957600080fd5b823567ffffffffffffffff8111156137e057600080fd5b6137ec85828601613353565b90969095509350505050565b600181811c9082168061380c57607f821691505b602082108103613845577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600067ffffffffffffffff821115613865576138656135fc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126138a257600080fd5b81356138b56138b08261384b565b613678565b8181528460208386010111156138ca57600080fd5b816020850160208301376000918101602001919091529392505050565b600061010082360312156138fa57600080fd5b61390261362b565b823567ffffffffffffffff8082111561391a57600080fd5b61392636838701613891565b835261393460208601613214565b6020840152613945604086016132ef565b604084015260608501356060840152613960608086016132ef565b608084015260a085013591508082111561397957600080fd5b61398536838701613891565b60a084015260c085013591508082111561399e57600080fd5b6139aa36838701613891565b60c084015260e08501359150808211156139c357600080fd5b506139d036828601613891565b60e08301525092915050565b601f8211156112f5576000816000526020600020601f850160051c81016020861015613a055750805b601f850160051c820191505b81811015613a2457828155600101613a11565b505050505050565b67ffffffffffffffff831115613a4457613a446135fc565b613a5883613a5283546137f8565b836139dc565b6000601f841160018114613aaa5760008515613a745750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611a5c565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613af95786850135825560209485019460019092019101613ad9565b5086821015613b34577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000613b596040830186613270565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060208284031215613bbc57600080fd5b8151610ce5816136c7565b600060a08236031215613bd957600080fd5b60405160a0810167ffffffffffffffff8282108183111715613bfd57613bfd6135fc565b816040528435915080821115613c1257600080fd5b50613c1f36828601613891565b825250613c2e60208401613214565b60208201526040830135613c41816132cd565b6040820152606083810135908201526080830135613c5e816132cd565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613ccc57600080fd5b9190910192915050565b60006101408236031215613ce957600080fd5b613cf1613655565b613cfa83613214565b8152613d08602084016136d5565b6020820152604083013567ffffffffffffffff80821115613d2857600080fd5b613d3436838701613891565b60408401526060850135915080821115613d4d57600080fd5b50613d5a36828601613891565b606083015250613d6d3660808501613700565b6080820152613d7f3660e08501613700565b60a082015292915050565b815167ffffffffffffffff811115613da457613da46135fc565b613db881613db284546137f8565b846139dc565b602080601f831160018114613e0b5760008415613dd55750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613a24565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e5857888601518255948401946001909101908401613e39565b5085821015613e9457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613ec881840187613270565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613f069050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613557565b60a081526000613f5060a0830187613270565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a060208201526000613fcd60a0830186613270565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b60006020828403121561401057600080fd5b815167ffffffffffffffff81111561402757600080fd5b8201601f8101841361403857600080fd5b80516140466138b08261384b565b81815285602083850101111561405b57600080fd5b61355782602083016020860161324c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156106765761067661406c565b67ffffffffffffffff8416815260e081016140fa60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612853565b6060810161067682848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561417f57600080fd5b8151610ce5816132cd565b80820281158282048414176106765761067661406c565b808201808211156106765761067661406c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614219577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613ccc81846020870161324c56fea164736f6c6343000818000a",
}
var BurnMintTokenPoolAndProxyABI = BurnMintTokenPoolAndProxyMetaData.ABI
@@ -332,6 +332,28 @@ func (_BurnMintTokenPoolAndProxy *BurnMintTokenPoolAndProxyCallerSession) GetOnR
return _BurnMintTokenPoolAndProxy.Contract.GetOnRamp(&_BurnMintTokenPoolAndProxy.CallOpts, arg0)
}
+func (_BurnMintTokenPoolAndProxy *BurnMintTokenPoolAndProxyCaller) GetPreviousPool(opts *bind.CallOpts) (common.Address, error) {
+ var out []interface{}
+ err := _BurnMintTokenPoolAndProxy.contract.Call(opts, &out, "getPreviousPool")
+
+ if err != nil {
+ return *new(common.Address), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+ return out0, err
+
+}
+
+func (_BurnMintTokenPoolAndProxy *BurnMintTokenPoolAndProxySession) GetPreviousPool() (common.Address, error) {
+ return _BurnMintTokenPoolAndProxy.Contract.GetPreviousPool(&_BurnMintTokenPoolAndProxy.CallOpts)
+}
+
+func (_BurnMintTokenPoolAndProxy *BurnMintTokenPoolAndProxyCallerSession) GetPreviousPool() (common.Address, error) {
+ return _BurnMintTokenPoolAndProxy.Contract.GetPreviousPool(&_BurnMintTokenPoolAndProxy.CallOpts)
+}
+
func (_BurnMintTokenPoolAndProxy *BurnMintTokenPoolAndProxyCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
err := _BurnMintTokenPoolAndProxy.contract.Call(opts, &out, "getRateLimitAdmin")
@@ -2860,6 +2882,8 @@ type BurnMintTokenPoolAndProxyInterface interface {
GetOnRamp(opts *bind.CallOpts, arg0 uint64) (common.Address, error)
+ GetPreviousPool(opts *bind.CallOpts) (common.Address, error)
+
GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error)
GetRemotePool(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error)
diff --git a/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool_and_proxy/burn_with_from_mint_token_pool_and_proxy.go b/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool_and_proxy/burn_with_from_mint_token_pool_and_proxy.go
index 19b596a01d5..60de3dcdac3 100644
--- a/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool_and_proxy/burn_with_from_mint_token_pool_and_proxy.go
+++ b/core/gethwrappers/ccip/generated/burn_with_from_mint_token_pool_and_proxy/burn_with_from_mint_token_pool_and_proxy.go
@@ -82,8 +82,8 @@ type TokenPoolChainUpdate struct {
}
var BurnWithFromMintTokenPoolAndProxyMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x60e06040523480156200001157600080fd5b5060405162004db138038062004db18339810160408190526200003491620008cc565b83838383838383833380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200019b565b5050506001600160a01b0384161580620000e757506001600160a01b038116155b80620000fa57506001600160a01b038216155b1562000119576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016c576040805160008152602081019091526200016c908462000246565b50620001919650506001600160a01b038a169450309350600019925050620003a39050565b5050505062000b08565b336001600160a01b03821603620001f55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000267576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002f25760008382815181106200028b576200028b620009dc565b60209081029190910101519050620002a560028262000489565b15620002e8576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200026a565b5060005b81518110156200039e576000828281518110620003175762000317620009dc565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000343575062000395565b62000350600282620004a9565b1562000393576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002f6565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620003f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041b9190620009f2565b62000427919062000a22565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200048391869190620004c016565b50505050565b6000620004a0836001600160a01b03841662000591565b90505b92915050565b6000620004a0836001600160a01b03841662000695565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200050f906001600160a01b038516908490620006e7565b8051909150156200039e578080602001905181019062000530919062000a38565b6200039e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b600081815260018301602052604081205480156200068a576000620005b860018362000a63565b8554909150600090620005ce9060019062000a63565b90508082146200063a576000866000018281548110620005f257620005f2620009dc565b9060005260206000200154905080876000018481548110620006185762000618620009dc565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200064e576200064e62000a79565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620004a3565b6000915050620004a3565b6000818152600183016020526040812054620006de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620004a3565b506000620004a3565b6060620006f8848460008562000700565b949350505050565b606082471015620007635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b0316858760405162000781919062000ab5565b60006040518083038185875af1925050503d8060008114620007c0576040519150601f19603f3d011682016040523d82523d6000602084013e620007c5565b606091505b509092509050620007d987838387620007e4565b979650505050505050565b606083156200085857825160000362000850576001600160a01b0385163b620008505760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b5081620006f8565b620006f883838151156200086f5781518083602001fd5b8060405162461bcd60e51b81526004016200008a919062000ad3565b6001600160a01b0381168114620008a157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620008c7816200088b565b919050565b60008060008060808587031215620008e357600080fd5b8451620008f0816200088b565b602086810151919550906001600160401b03808211156200091057600080fd5b818801915088601f8301126200092557600080fd5b8151818111156200093a576200093a620008a4565b8060051b604051601f19603f83011681018181108582111715620009625762000962620008a4565b60405291825284820192508381018501918b8311156200098157600080fd5b938501935b82851015620009aa576200099a85620008ba565b8452938501939285019262000986565b809850505050505050620009c160408601620008ba565b9150620009d160608601620008ba565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000a0557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004a357620004a362000a0c565b60006020828403121562000a4b57600080fd5b8151801515811462000a5c57600080fd5b9392505050565b81810381811115620004a357620004a362000a0c565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000aac57818101518382015260200162000a92565b50506000910152565b6000825162000ac981846020870162000a8f565b9190910192915050565b602081526000825180602084015262000af481604085016020870162000a8f565b601f01601f19169190910160400192915050565b60805160a05160c05161422562000b8c6000396000818161050301528181611aad01526124ff0152600081816104dd015281816118400152611d600152600081816102260152818161027b0152818161073f01528181610dcb0152818161176001528181611c8001528181611e660152818161249501526126ea01526142256000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639766b93211610104578063c0d78655116100a2578063db6327dc11610071578063db6327dc146104c8578063dc0bd971146104db578063e0351e1314610501578063f2fde38b1461052757600080fd5b8063c0d786551461047a578063c4bffe2b1461048d578063c75eea9c146104a2578063cf7401f3146104b557600080fd5b8063a8d87a3b116100de578063a8d87a3b146103c7578063af58d59f146103da578063b0f479a114610449578063b79465801461046757600080fd5b80639766b9321461037f5780639a4575b914610392578063a7cd63b7146103b257600080fd5b80636d3d1a58116101715780637d54534e1161014b5780637d54534e1461032857806383826b2b1461033b5780638926f54f1461034e5780638da5cb5b1461036157600080fd5b80636d3d1a58146102ef57806378a010b21461030d57806379ba50971461032057600080fd5b806321df0da7116101ad57806321df0da714610224578063240028e81461026b57806339077537146102b857806354c8a4f3146102da57600080fd5b806301ffc9a7146101d45780630a2fd493146101fc578063181f5a771461021c575b600080fd5b6101e76101e2366004613197565b61053a565b60405190151581526020015b60405180910390f35b61020f61020a3660046131f6565b61061f565b6040516101f3919061327f565b61020f6106cf565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e76102793660046132bf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102cb6102c63660046132dc565b6106eb565b604051905181526020016101f3565b6102ed6102e8366004613364565b6108a3565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610246565b6102ed61031b3660046133d0565b61091e565b6102ed610a92565b6102ed6103363660046132bf565b610b8f565b6101e7610349366004613453565b610bde565b6101e761035c3660046131f6565b610cab565b60005473ffffffffffffffffffffffffffffffffffffffff16610246565b6102ed61038d3660046132bf565b610cc2565b6103a56103a036600461348a565b610d51565b6040516101f391906134c5565b6103ba610ec7565b6040516101f39190613525565b6102466103d53660046131f6565b503090565b6103ed6103e83660046131f6565b610ed8565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610246565b61020f6104753660046131f6565b610fad565b6102ed6104883660046132bf565b610fd8565b6104956110ac565b6040516101f3919061357f565b6103ed6104b03660046131f6565b611164565b6102ed6104c3366004613736565b611236565b6102ed6104d636600461377b565b6112bf565b7f0000000000000000000000000000000000000000000000000000000000000000610246565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b6102ed6105353660046132bf565b611745565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061061957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061064a906137bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610676906137bd565b80156106c35780601f10610698576101008083540402835291602001916106c3565b820191906000526020600020905b8154815290600101906020018083116106a657829003601f168201915b50505050509050919050565b6040518060600160405280602381526020016141f66023913981565b60408051602081019091526000815261070b610706836138ac565b611759565b60095473ffffffffffffffffffffffffffffffffffffffff166108015773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f1961077460608501604086016132bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260608501356024820152604401600060405180830381600087803b1580156107e457600080fd5b505af11580156107f8573d6000803e3d6000fd5b50505050610812565b61081261080d836138ac565b61198a565b61082260608301604084016132bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846060013560405161088491815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108ab611a28565b61091884848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611aab92505050565b50505050565b610926611a28565b61092f83610cab565b610976576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff83166000908152600760205260408120600401805461099d906137bd565b80601f01602080910402602001604051908101604052809291908181526020018280546109c9906137bd565b8015610a165780601f106109eb57610100808354040283529160200191610a16565b820191906000526020600020905b8154815290600101906020018083116109f957829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a458385836139f1565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610a8493929190613b0b565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161096d565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b97611a28565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610ca45750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca49190613b6f565b9392505050565b6000610619600567ffffffffffffffff8416611c61565b610cca611a28565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610d76610d7183613b8c565b611c79565b60095473ffffffffffffffffffffffffffffffffffffffff16610e41576040517f79cc6790000000000000000000000000000000000000000000000000000000008152306004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50505050610e52565b610e52610e4d83613b8c565b611e43565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610eac84602001602081019061047591906131f6565b81526040805160208181019092526000815291015292915050565b6060610ed36002611f5d565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261061990611f6a565b67ffffffffffffffff8116600090815260076020526040902060050180546060919061064a906137bd565b610fe0611a28565b73ffffffffffffffffffffffffffffffffffffffff811661102d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610d45565b606060006110ba6005611f5d565b90506000815167ffffffffffffffff8111156110d8576110d86135c1565b604051908082528060200260200182016040528015611101578160200160208202803683370190505b50905060005b825181101561115d5782818151811061112257611122613c2e565b602002602001015182828151811061113c5761113c613c2e565b67ffffffffffffffff90921660209283029190910190910152600101611107565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261061990611f6a565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611276575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156112af576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815233600482015260240161096d565b6112ba83838361201c565b505050565b6112c7611a28565b60005b818110156112ba5760008383838181106112e6576112e6613c2e565b90506020028101906112f89190613c5d565b61130190613c9b565b90506113168160800151826020015115612106565b6113298160a00151826020015115612106565b80602001511561162557805161134b9060059067ffffffffffffffff1661223f565b6113905780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161096d565b60408101515115806113a55750606081015151155b156113dc576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906115bd9082613d4f565b50606082015160058201906115d29082613d4f565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506116189493929190613e69565b60405180910390a161173c565b805161163d9060059067ffffffffffffffff1661224b565b6116825780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161096d565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906116eb6004830182613149565b6116f9600583016000613149565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016112ca565b61174d611a28565b61175681612257565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146117ee5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161096d565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c09190613b6f565b156118f7576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611904816020015161234c565b6000611913826020015161061f565b9050805160001480611937575080805190602001208260a001518051906020012014155b15611974578160a001516040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161096d919061327f565b61198682602001518360600151612472565b5050565b60095481516040808401516060850151602086015192517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694638627fad6946119f39490939291600401613f02565b600060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611aa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161096d565b565b7f0000000000000000000000000000000000000000000000000000000000000000611b02576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611b98576000838281518110611b2257611b22613c2e565b60200260200101519050611b408160026124b990919063ffffffff16565b15611b8f5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611b05565b5060005b81518110156112ba576000828281518110611bb957611bb9613c2e565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfd5750611c59565b611c086002826124db565b15611c575760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611b9c565b60008181526001830160205260408120541515610ca4565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611d0e5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161096d565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190613b6f565b15611e17576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e2481604001516124fd565b611e31816020015161257c565b611756816020015182606001516126ca565b6009546060820151611e909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169291169061270e565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694639687544594611ef894939291600401613f63565b6000604051808303816000875af1158015611f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119869190810190613fc3565b60606000610ca48361279b565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611ff882606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642611fdc9190614060565b85608001516fffffffffffffffffffffffffffffffff166127f6565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61202583610cab565b612067576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161096d565b612072826000612106565b67ffffffffffffffff831660009081526007602052604090206120959083612820565b6120a0816000612106565b67ffffffffffffffff831660009081526007602052604090206120c69060020182612820565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516120f993929190614073565b60405180910390a1505050565b8151156121cd5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff1610158061215c575060408201516fffffffffffffffffffffffffffffffff16155b1561219557816040517f8020d12400000000000000000000000000000000000000000000000000000000815260040161096d91906140f6565b8015611986576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff16151580612206575060208201516fffffffffffffffffffffffffffffffff1615155b1561198657816040517fd68af9cc00000000000000000000000000000000000000000000000000000000815260040161096d91906140f6565b6000610ca483836129c2565b6000610ca48383612a11565b3373ffffffffffffffffffffffffffffffffffffffff8216036122d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161096d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61235581610cab565b612397576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161096d565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243a9190613b6f565b611756576040517f728fe07b00000000000000000000000000000000000000000000000000000000815233600482015260240161096d565b67ffffffffffffffff8216600090815260076020526040902061198690600201827f0000000000000000000000000000000000000000000000000000000000000000612b04565b6000610ca48373ffffffffffffffffffffffffffffffffffffffff8416612a11565b6000610ca48373ffffffffffffffffffffffffffffffffffffffff84166129c2565b7f0000000000000000000000000000000000000000000000000000000000000000156117565761252e600282612e87565b611756576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161096d565b61258581610cab565b6125c7576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161096d565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126649190614132565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611756576040517f728fe07b00000000000000000000000000000000000000000000000000000000815233600482015260240161096d565b67ffffffffffffffff8216600090815260076020526040902061198690827f0000000000000000000000000000000000000000000000000000000000000000612b04565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526112ba908490612eb6565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106c357602002820191906000526020600020905b8154815260200190600101908083116127d75750505050509050919050565b600061281585612806848661414f565b6128109087614166565b612fc2565b90505b949350505050565b815460009061284990700100000000000000000000000000000000900463ffffffff1642614060565b905080156128eb5760018301548354612891916fffffffffffffffffffffffffffffffff808216928116918591700100000000000000000000000000000000909104166127f6565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612911916fffffffffffffffffffffffffffffffff9081169116612fc2565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906120f99084906140f6565b6000818152600183016020526040812054612a0957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610619565b506000610619565b60008181526001830160205260408120548015612afa576000612a35600183614060565b8554909150600090612a4990600190614060565b9050808214612aae576000866000018281548110612a6957612a69613c2e565b9060005260206000200154905080876000018481548110612a8c57612a8c613c2e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612abf57612abf614179565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610619565b6000915050610619565b825474010000000000000000000000000000000000000000900460ff161580612b2b575081155b15612b3557505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612b7b90700100000000000000000000000000000000900463ffffffff1642614060565b90508015612c3b5781831115612bbd576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612bf79083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166127f6565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612cf25773ffffffffffffffffffffffffffffffffffffffff8416612c9a576040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600481018390526024810186905260440161096d565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff8516604482015260640161096d565b84831015612e055760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612d369082614060565b612d40878a614060565b612d4a9190614166565b612d5491906141a8565b905073ffffffffffffffffffffffffffffffffffffffff8616612dad576040517f15279c08000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260440161096d565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff8716604482015260640161096d565b612e0f8584614060565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610ca4565b6000612f18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612fd89092919063ffffffff16565b8051909150156112ba5780806020019051810190612f369190613b6f565b6112ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161096d565b6000818310612fd15781610ca4565b5090919050565b60606128188484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161300c91906141e3565b60006040518083038185875af1925050503d8060008114613049576040519150601f19603f3d011682016040523d82523d6000602084013e61304e565b606091505b509150915061305f8783838761306a565b979650505050505050565b606083156131005782516000036130f95773ffffffffffffffffffffffffffffffffffffffff85163b6130f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161096d565b5081612818565b61281883838151156131155781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d919061327f565b508054613155906137bd565b6000825580601f10613165575050565b601f01602090049060005260206000209081019061175691905b80821115613193576000815560010161317f565b5090565b6000602082840312156131a957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ca457600080fd5b803567ffffffffffffffff811681146131f157600080fd5b919050565b60006020828403121561320857600080fd5b610ca4826131d9565b60005b8381101561322c578181015183820152602001613214565b50506000910152565b6000815180845261324d816020860160208601613211565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ca46020830184613235565b73ffffffffffffffffffffffffffffffffffffffff8116811461175657600080fd5b80356131f181613292565b6000602082840312156132d157600080fd5b8135610ca481613292565b6000602082840312156132ee57600080fd5b813567ffffffffffffffff81111561330557600080fd5b82016101008185031215610ca457600080fd5b60008083601f84011261332a57600080fd5b50813567ffffffffffffffff81111561334257600080fd5b6020830191508360208260051b850101111561335d57600080fd5b9250929050565b6000806000806040858703121561337a57600080fd5b843567ffffffffffffffff8082111561339257600080fd5b61339e88838901613318565b909650945060208701359150808211156133b757600080fd5b506133c487828801613318565b95989497509550505050565b6000806000604084860312156133e557600080fd5b6133ee846131d9565b9250602084013567ffffffffffffffff8082111561340b57600080fd5b818601915086601f83011261341f57600080fd5b81358181111561342e57600080fd5b87602082850101111561344057600080fd5b6020830194508093505050509250925092565b6000806040838503121561346657600080fd5b61346f836131d9565b9150602083013561347f81613292565b809150509250929050565b60006020828403121561349c57600080fd5b813567ffffffffffffffff8111156134b357600080fd5b820160a08185031215610ca457600080fd5b6020815260008251604060208401526134e16060840182613235565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261351c8282613235565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561357357835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613541565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561357357835167ffffffffffffffff168352928401929184019160010161359b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613614576136146135c1565b60405290565b60405160c0810167ffffffffffffffff81118282101715613614576136146135c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613684576136846135c1565b604052919050565b801515811461175657600080fd5b80356131f18161368c565b80356fffffffffffffffffffffffffffffffff811681146131f157600080fd5b6000606082840312156136d757600080fd5b6040516060810181811067ffffffffffffffff821117156136fa576136fa6135c1565b604052905080823561370b8161368c565b8152613719602084016136a5565b602082015261372a604084016136a5565b60408201525092915050565b600080600060e0848603121561374b57600080fd5b613754846131d9565b925061376385602086016136c5565b915061377285608086016136c5565b90509250925092565b6000806020838503121561378e57600080fd5b823567ffffffffffffffff8111156137a557600080fd5b6137b185828601613318565b90969095509350505050565b600181811c908216806137d157607f821691505b60208210810361380a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600067ffffffffffffffff82111561382a5761382a6135c1565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261386757600080fd5b813561387a61387582613810565b61363d565b81815284602083860101111561388f57600080fd5b816020850160208301376000918101602001919091529392505050565b600061010082360312156138bf57600080fd5b6138c76135f0565b823567ffffffffffffffff808211156138df57600080fd5b6138eb36838701613856565b83526138f9602086016131d9565b602084015261390a604086016132b4565b604084015260608501356060840152613925608086016132b4565b608084015260a085013591508082111561393e57600080fd5b61394a36838701613856565b60a084015260c085013591508082111561396357600080fd5b61396f36838701613856565b60c084015260e085013591508082111561398857600080fd5b5061399536828601613856565b60e08301525092915050565b601f8211156112ba576000816000526020600020601f850160051c810160208610156139ca5750805b601f850160051c820191505b818110156139e9578281556001016139d6565b505050505050565b67ffffffffffffffff831115613a0957613a096135c1565b613a1d83613a1783546137bd565b836139a1565b6000601f841160018114613a6f5760008515613a395750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611a21565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613abe5786850135825560209485019460019092019101613a9e565b5086821015613af9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000613b1e6040830186613235565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060208284031215613b8157600080fd5b8151610ca48161368c565b600060a08236031215613b9e57600080fd5b60405160a0810167ffffffffffffffff8282108183111715613bc257613bc26135c1565b816040528435915080821115613bd757600080fd5b50613be436828601613856565b825250613bf3602084016131d9565b60208201526040830135613c0681613292565b6040820152606083810135908201526080830135613c2381613292565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613c9157600080fd5b9190910192915050565b60006101408236031215613cae57600080fd5b613cb661361a565b613cbf836131d9565b8152613ccd6020840161369a565b6020820152604083013567ffffffffffffffff80821115613ced57600080fd5b613cf936838701613856565b60408401526060850135915080821115613d1257600080fd5b50613d1f36828601613856565b606083015250613d3236608085016136c5565b6080820152613d443660e085016136c5565b60a082015292915050565b815167ffffffffffffffff811115613d6957613d696135c1565b613d7d81613d7784546137bd565b846139a1565b602080601f831160018114613dd05760008415613d9a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556139e9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e1d57888601518255948401946001909101908401613dfe565b5085821015613e5957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613e8d81840187613235565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613ecb9050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e083015261351c565b60a081526000613f1560a0830187613235565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a060208201526000613f9260a0830186613235565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b600060208284031215613fd557600080fd5b815167ffffffffffffffff811115613fec57600080fd5b8201601f81018413613ffd57600080fd5b805161400b61387582613810565b81815285602083850101111561402057600080fd5b61351c826020830160208601613211565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561061957610619614031565b67ffffffffffffffff8416815260e081016140bf60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612818565b6060810161061982848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561414457600080fd5b8151610ca481613292565b808202811582820484141761061957610619614031565b8082018082111561061957610619614031565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000826141de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613c9181846020870161321156fe4275726e46726f6d4d696e74546f6b656e506f6f6c416e6450726f787920312e352e30a164736f6c6343000818000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreviousPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x60e06040523480156200001157600080fd5b5060405162004dda38038062004dda8339810160408190526200003491620008cc565b83838383838383833380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c6816200019b565b5050506001600160a01b0384161580620000e757506001600160a01b038116155b80620000fa57506001600160a01b038216155b1562000119576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016c576040805160008152602081019091526200016c908462000246565b50620001919650506001600160a01b038a169450309350600019925050620003a39050565b5050505062000b08565b336001600160a01b03821603620001f55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000267576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002f25760008382815181106200028b576200028b620009dc565b60209081029190910101519050620002a560028262000489565b15620002e8576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506001016200026a565b5060005b81518110156200039e576000828281518110620003175762000317620009dc565b6020026020010151905060006001600160a01b0316816001600160a01b03160362000343575062000395565b62000350600282620004a9565b1562000393576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002f6565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620003f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041b9190620009f2565b62000427919062000a22565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200048391869190620004c016565b50505050565b6000620004a0836001600160a01b03841662000591565b90505b92915050565b6000620004a0836001600160a01b03841662000695565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200050f906001600160a01b038516908490620006e7565b8051909150156200039e578080602001905181019062000530919062000a38565b6200039e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b600081815260018301602052604081205480156200068a576000620005b860018362000a63565b8554909150600090620005ce9060019062000a63565b90508082146200063a576000866000018281548110620005f257620005f2620009dc565b9060005260206000200154905080876000018481548110620006185762000618620009dc565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200064e576200064e62000a79565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620004a3565b6000915050620004a3565b6000818152600183016020526040812054620006de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620004a3565b506000620004a3565b6060620006f8848460008562000700565b949350505050565b606082471015620007635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b0316858760405162000781919062000ab5565b60006040518083038185875af1925050503d8060008114620007c0576040519150601f19603f3d011682016040523d82523d6000602084013e620007c5565b606091505b509092509050620007d987838387620007e4565b979650505050505050565b606083156200085857825160000362000850576001600160a01b0385163b620008505760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b5081620006f8565b620006f883838151156200086f5781518083602001fd5b8060405162461bcd60e51b81526004016200008a919062000ad3565b6001600160a01b0381168114620008a157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b8051620008c7816200088b565b919050565b60008060008060808587031215620008e357600080fd5b8451620008f0816200088b565b602086810151919550906001600160401b03808211156200091057600080fd5b818801915088601f8301126200092557600080fd5b8151818111156200093a576200093a620008a4565b8060051b604051601f19603f83011681018181108582111715620009625762000962620008a4565b60405291825284820192508381018501918b8311156200098157600080fd5b938501935b82851015620009aa576200099a85620008ba565b8452938501939285019262000986565b809850505050505050620009c160408601620008ba565b9150620009d160608601620008ba565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000a0557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004a357620004a362000a0c565b60006020828403121562000a4b57600080fd5b8151801515811462000a5c57600080fd5b9392505050565b81810381811115620004a357620004a362000a0c565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000aac57818101518382015260200162000a92565b50506000910152565b6000825162000ac981846020870162000a8f565b9190910192915050565b602081526000825180602084015262000af481604085016020870162000a8f565b601f01601f19169190910160400192915050565b60805160a05160c05161424e62000b8c6000396000818161052c01528181611ad60152612528015260008181610506015281816118690152611d89015260008181610231015281816102860152818161076801528181610df40152818161178901528181611ca901528181611e8f015281816124be0152612713015261424e6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80639a4575b911610104578063c0d78655116100a2578063db6327dc11610071578063db6327dc146104f1578063dc0bd97114610504578063e0351e131461052a578063f2fde38b1461055057600080fd5b8063c0d78655146104a3578063c4bffe2b146104b6578063c75eea9c146104cb578063cf7401f3146104de57600080fd5b8063a8d87a3b116100de578063a8d87a3b146103f0578063af58d59f14610403578063b0f479a114610472578063b79465801461049057600080fd5b80639a4575b91461039d578063a2b261d8146103bd578063a7cd63b7146103db57600080fd5b80636d3d1a581161017c57806383826b2b1161014b57806383826b2b146103465780638926f54f146103595780638da5cb5b1461036c5780639766b9321461038a57600080fd5b80636d3d1a58146102fa57806378a010b21461031857806379ba50971461032b5780637d54534e1461033357600080fd5b806321df0da7116101b857806321df0da71461022f578063240028e81461027657806339077537146102c357806354c8a4f3146102e557600080fd5b806301ffc9a7146101df5780630a2fd49314610207578063181f5a7714610227575b600080fd5b6101f26101ed3660046131c0565b610563565b60405190151581526020015b60405180910390f35b61021a61021536600461321f565b610648565b6040516101fe91906132a8565b61021a6106f8565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b6101f26102843660046132e8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b6102d66102d1366004613305565b610714565b604051905181526020016101fe565b6102f86102f336600461338d565b6108cc565b005b60085473ffffffffffffffffffffffffffffffffffffffff16610251565b6102f86103263660046133f9565b610947565b6102f8610abb565b6102f86103413660046132e8565b610bb8565b6101f261035436600461347c565b610c07565b6101f261036736600461321f565b610cd4565b60005473ffffffffffffffffffffffffffffffffffffffff16610251565b6102f86103983660046132e8565b610ceb565b6103b06103ab3660046134b3565b610d7a565b6040516101fe91906134ee565b60095473ffffffffffffffffffffffffffffffffffffffff16610251565b6103e3610ef0565b6040516101fe919061354e565b6102516103fe36600461321f565b503090565b61041661041136600461321f565b610f01565b6040516101fe919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610251565b61021a61049e36600461321f565b610fd6565b6102f86104b13660046132e8565b611001565b6104be6110d5565b6040516101fe91906135a8565b6104166104d936600461321f565b61118d565b6102f86104ec36600461375f565b61125f565b6102f86104ff3660046137a4565b6112e8565b7f0000000000000000000000000000000000000000000000000000000000000000610251565b7f00000000000000000000000000000000000000000000000000000000000000006101f2565b6102f861055e3660046132e8565b61176e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf0000000000000000000000000000000000000000000000000000000014806105f657507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061064257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b67ffffffffffffffff81166000908152600760205260409020600401805460609190610673906137e6565b80601f016020809104026020016040519081016040528092919081815260200182805461069f906137e6565b80156106ec5780601f106106c1576101008083540402835291602001916106ec565b820191906000526020600020905b8154815290600101906020018083116106cf57829003601f168201915b50505050509050919050565b60405180606001604052806023815260200161421f6023913981565b60408051602081019091526000815261073461072f836138d5565b611782565b60095473ffffffffffffffffffffffffffffffffffffffff1661082a5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f1961079d60608501604086016132e8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260608501356024820152604401600060405180830381600087803b15801561080d57600080fd5b505af1158015610821573d6000803e3d6000fd5b5050505061083b565b61083b610836836138d5565b6119b3565b61084b60608301604084016132e8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f084606001356040516108ad91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b6108d4611a51565b61094184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611ad492505050565b50505050565b61094f611a51565b61095883610cd4565b61099f576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b67ffffffffffffffff8316600090815260076020526040812060040180546109c6906137e6565b80601f01602080910402602001604051908101604052809291908181526020018280546109f2906137e6565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610a6e838583613a1a565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610aad93929190613b34565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610996565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610bc0611a51565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610ccd5750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190613b98565b9392505050565b6000610642600567ffffffffffffffff8416611c8a565b610cf3611a51565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610d9f610d9a83613bb5565b611ca2565b60095473ffffffffffffffffffffffffffffffffffffffff16610e6a576040517f79cc6790000000000000000000000000000000000000000000000000000000008152306004820152606083013560248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b50505050610e7b565b610e7b610e7683613bb5565b611e6c565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610ed584602001602081019061049e919061321f565b81526040805160208181019092526000815291015292915050565b6060610efc6002611f86565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261064290611f93565b67ffffffffffffffff81166000908152600760205260409020600501805460609190610673906137e6565b611009611a51565b73ffffffffffffffffffffffffffffffffffffffff8116611056576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610d6e565b606060006110e36005611f86565b90506000815167ffffffffffffffff811115611101576111016135ea565b60405190808252806020026020018201604052801561112a578160200160208202803683370190505b50905060005b82518110156111865782818151811061114b5761114b613c57565b602002602001015182828151811061116557611165613c57565b67ffffffffffffffff90921660209283029190910190910152600101611130565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261064290611f93565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061129f575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156112d8576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610996565b6112e3838383612045565b505050565b6112f0611a51565b60005b818110156112e357600083838381811061130f5761130f613c57565b90506020028101906113219190613c86565b61132a90613cc4565b905061133f816080015182602001511561212f565b6113528160a0015182602001511561212f565b80602001511561164e5780516113749060059067ffffffffffffffff16612268565b6113b95780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610996565b60408101515115806113ce5750606081015151155b15611405576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906115e69082613d78565b50606082015160058201906115fb9082613d78565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506116419493929190613e92565b60405180910390a1611765565b80516116669060059067ffffffffffffffff16612274565b6116ab5780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610996565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906117146004830182613172565b611722600583016000613172565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016112f3565b611776611a51565b61177f81612280565b50565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146118175760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610996565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190613b98565b15611920576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192d8160200151612375565b600061193c8260200151610648565b9050805160001480611960575080805190602001208260a001518051906020012014155b1561199d578160a001516040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161099691906132a8565b6119af8260200151836060015161249b565b5050565b60095481516040808401516060850151602086015192517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694638627fad694611a1c9490939291600401613f2b565b600060405180830381600087803b158015611a3657600080fd5b505af1158015611a4a573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610996565b565b7f0000000000000000000000000000000000000000000000000000000000000000611b2b576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611bc1576000838281518110611b4b57611b4b613c57565b60200260200101519050611b698160026124e290919063ffffffff16565b15611bb85760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611b2e565b5060005b81518110156112e3576000828281518110611be257611be2613c57565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c265750611c82565b611c31600282612504565b15611c805760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611bc5565b60008181526001830160205260408120541515610ccd565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611d375760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610996565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e099190613b98565b15611e40576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e4d8160400151612526565b611e5a81602001516125a5565b61177f816020015182606001516126f3565b6009546060820151611eb99173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690612737565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694639687544594611f2194939291600401613f8c565b6000604051808303816000875af1158015611f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119af9190810190613fec565b60606000610ccd836127c4565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261202182606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426120059190614089565b85608001516fffffffffffffffffffffffffffffffff1661281f565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61204e83610cd4565b612090576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610996565b61209b82600061212f565b67ffffffffffffffff831660009081526007602052604090206120be9083612849565b6120c981600061212f565b67ffffffffffffffff831660009081526007602052604090206120ef9060020182612849565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516121229392919061409c565b60405180910390a1505050565b8151156121f65781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612185575060408201516fffffffffffffffffffffffffffffffff16155b156121be57816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610996919061411f565b80156119af576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff1615158061222f575060208201516fffffffffffffffffffffffffffffffff1615155b156119af57816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610996919061411f565b6000610ccd83836129eb565b6000610ccd8383612a3a565b3373ffffffffffffffffffffffffffffffffffffffff8216036122ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610996565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61237e81610cd4565b6123c0576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610996565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa15801561243f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124639190613b98565b61177f576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610996565b67ffffffffffffffff821660009081526007602052604090206119af90600201827f0000000000000000000000000000000000000000000000000000000000000000612b2d565b6000610ccd8373ffffffffffffffffffffffffffffffffffffffff8416612a3a565b6000610ccd8373ffffffffffffffffffffffffffffffffffffffff84166129eb565b7f00000000000000000000000000000000000000000000000000000000000000001561177f57612557600282612eb0565b61177f576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610996565b6125ae81610cd4565b6125f0576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610996565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268d919061415b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177f576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610996565b67ffffffffffffffff821660009081526007602052604090206119af90827f0000000000000000000000000000000000000000000000000000000000000000612b2d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526112e3908490612edf565b6060816000018054806020026020016040519081016040528092919081815260200182805480156106ec57602002820191906000526020600020905b8154815260200190600101908083116128005750505050509050919050565b600061283e8561282f8486614178565b612839908761418f565b612feb565b90505b949350505050565b815460009061287290700100000000000000000000000000000000900463ffffffff1642614089565b9050801561291457600183015483546128ba916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661281f565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461293a916fffffffffffffffffffffffffffffffff9081169116612feb565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061212290849061411f565b6000818152600183016020526040812054612a3257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610642565b506000610642565b60008181526001830160205260408120548015612b23576000612a5e600183614089565b8554909150600090612a7290600190614089565b9050808214612ad7576000866000018281548110612a9257612a92613c57565b9060005260206000200154905080876000018481548110612ab557612ab5613c57565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ae857612ae86141a2565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610642565b6000915050610642565b825474010000000000000000000000000000000000000000900460ff161580612b54575081155b15612b5e57505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612ba490700100000000000000000000000000000000900463ffffffff1642614089565b90508015612c645781831115612be6576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612c209083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661281f565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612d1b5773ffffffffffffffffffffffffffffffffffffffff8416612cc3576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610996565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610996565b84831015612e2e5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612d5f9082614089565b612d69878a614089565b612d73919061418f565b612d7d91906141d1565b905073ffffffffffffffffffffffffffffffffffffffff8616612dd6576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610996565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610996565b612e388584614089565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610ccd565b6000612f41826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130019092919063ffffffff16565b8051909150156112e35780806020019051810190612f5f9190613b98565b6112e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610996565b6000818310612ffa5781610ccd565b5090919050565b60606128418484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613035919061420c565b60006040518083038185875af1925050503d8060008114613072576040519150601f19603f3d011682016040523d82523d6000602084013e613077565b606091505b509150915061308887838387613093565b979650505050505050565b606083156131295782516000036131225773ffffffffffffffffffffffffffffffffffffffff85163b613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610996565b5081612841565b612841838381511561313e5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099691906132a8565b50805461317e906137e6565b6000825580601f1061318e575050565b601f01602090049060005260206000209081019061177f91905b808211156131bc57600081556001016131a8565b5090565b6000602082840312156131d257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ccd57600080fd5b803567ffffffffffffffff8116811461321a57600080fd5b919050565b60006020828403121561323157600080fd5b610ccd82613202565b60005b8381101561325557818101518382015260200161323d565b50506000910152565b6000815180845261327681602086016020860161323a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ccd602083018461325e565b73ffffffffffffffffffffffffffffffffffffffff8116811461177f57600080fd5b803561321a816132bb565b6000602082840312156132fa57600080fd5b8135610ccd816132bb565b60006020828403121561331757600080fd5b813567ffffffffffffffff81111561332e57600080fd5b82016101008185031215610ccd57600080fd5b60008083601f84011261335357600080fd5b50813567ffffffffffffffff81111561336b57600080fd5b6020830191508360208260051b850101111561338657600080fd5b9250929050565b600080600080604085870312156133a357600080fd5b843567ffffffffffffffff808211156133bb57600080fd5b6133c788838901613341565b909650945060208701359150808211156133e057600080fd5b506133ed87828801613341565b95989497509550505050565b60008060006040848603121561340e57600080fd5b61341784613202565b9250602084013567ffffffffffffffff8082111561343457600080fd5b818601915086601f83011261344857600080fd5b81358181111561345757600080fd5b87602082850101111561346957600080fd5b6020830194508093505050509250925092565b6000806040838503121561348f57600080fd5b61349883613202565b915060208301356134a8816132bb565b809150509250929050565b6000602082840312156134c557600080fd5b813567ffffffffffffffff8111156134dc57600080fd5b820160a08185031215610ccd57600080fd5b60208152600082516040602084015261350a606084018261325e565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613545828261325e565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561359c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161356a565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561359c57835167ffffffffffffffff16835292840192918401916001016135c4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561363d5761363d6135ea565b60405290565b60405160c0810167ffffffffffffffff8111828210171561363d5761363d6135ea565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156136ad576136ad6135ea565b604052919050565b801515811461177f57600080fd5b803561321a816136b5565b80356fffffffffffffffffffffffffffffffff8116811461321a57600080fd5b60006060828403121561370057600080fd5b6040516060810181811067ffffffffffffffff82111715613723576137236135ea565b6040529050808235613734816136b5565b8152613742602084016136ce565b6020820152613753604084016136ce565b60408201525092915050565b600080600060e0848603121561377457600080fd5b61377d84613202565b925061378c85602086016136ee565b915061379b85608086016136ee565b90509250925092565b600080602083850312156137b757600080fd5b823567ffffffffffffffff8111156137ce57600080fd5b6137da85828601613341565b90969095509350505050565b600181811c908216806137fa57607f821691505b602082108103613833577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600067ffffffffffffffff821115613853576138536135ea565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261389057600080fd5b81356138a361389e82613839565b613666565b8181528460208386010111156138b857600080fd5b816020850160208301376000918101602001919091529392505050565b600061010082360312156138e857600080fd5b6138f0613619565b823567ffffffffffffffff8082111561390857600080fd5b6139143683870161387f565b835261392260208601613202565b6020840152613933604086016132dd565b60408401526060850135606084015261394e608086016132dd565b608084015260a085013591508082111561396757600080fd5b6139733683870161387f565b60a084015260c085013591508082111561398c57600080fd5b6139983683870161387f565b60c084015260e08501359150808211156139b157600080fd5b506139be3682860161387f565b60e08301525092915050565b601f8211156112e3576000816000526020600020601f850160051c810160208610156139f35750805b601f850160051c820191505b81811015613a12578281556001016139ff565b505050505050565b67ffffffffffffffff831115613a3257613a326135ea565b613a4683613a4083546137e6565b836139ca565b6000601f841160018114613a985760008515613a625750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611a4a565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613ae75786850135825560209485019460019092019101613ac7565b5086821015613b22577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000613b47604083018661325e565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b600060208284031215613baa57600080fd5b8151610ccd816136b5565b600060a08236031215613bc757600080fd5b60405160a0810167ffffffffffffffff8282108183111715613beb57613beb6135ea565b816040528435915080821115613c0057600080fd5b50613c0d3682860161387f565b825250613c1c60208401613202565b60208201526040830135613c2f816132bb565b6040820152606083810135908201526080830135613c4c816132bb565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112613cba57600080fd5b9190910192915050565b60006101408236031215613cd757600080fd5b613cdf613643565b613ce883613202565b8152613cf6602084016136c3565b6020820152604083013567ffffffffffffffff80821115613d1657600080fd5b613d223683870161387f565b60408401526060850135915080821115613d3b57600080fd5b50613d483682860161387f565b606083015250613d5b36608085016136ee565b6080820152613d6d3660e085016136ee565b60a082015292915050565b815167ffffffffffffffff811115613d9257613d926135ea565b613da681613da084546137e6565b846139ca565b602080601f831160018114613df95760008415613dc35750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613a12565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e4657888601518255948401946001909101908401613e27565b5085821015613e8257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613eb68184018761325e565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613ef49050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613545565b60a081526000613f3e60a083018761325e565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a060208201526000613fbb60a083018661325e565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b600060208284031215613ffe57600080fd5b815167ffffffffffffffff81111561401557600080fd5b8201601f8101841361402657600080fd5b805161403461389e82613839565b81815285602083850101111561404957600080fd5b61354582602083016020860161323a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156106425761064261405a565b67ffffffffffffffff8416815260e081016140e860208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612841565b6060810161064282848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561416d57600080fd5b8151610ccd816132bb565b80820281158282048414176106425761064261405a565b808201808211156106425761064261405a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614207577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251613cba81846020870161323a56fe4275726e46726f6d4d696e74546f6b656e506f6f6c416e6450726f787920312e352e30a164736f6c6343000818000a",
}
var BurnWithFromMintTokenPoolAndProxyABI = BurnWithFromMintTokenPoolAndProxyMetaData.ABI
@@ -332,6 +332,28 @@ func (_BurnWithFromMintTokenPoolAndProxy *BurnWithFromMintTokenPoolAndProxyCalle
return _BurnWithFromMintTokenPoolAndProxy.Contract.GetOnRamp(&_BurnWithFromMintTokenPoolAndProxy.CallOpts, arg0)
}
+func (_BurnWithFromMintTokenPoolAndProxy *BurnWithFromMintTokenPoolAndProxyCaller) GetPreviousPool(opts *bind.CallOpts) (common.Address, error) {
+ var out []interface{}
+ err := _BurnWithFromMintTokenPoolAndProxy.contract.Call(opts, &out, "getPreviousPool")
+
+ if err != nil {
+ return *new(common.Address), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+ return out0, err
+
+}
+
+func (_BurnWithFromMintTokenPoolAndProxy *BurnWithFromMintTokenPoolAndProxySession) GetPreviousPool() (common.Address, error) {
+ return _BurnWithFromMintTokenPoolAndProxy.Contract.GetPreviousPool(&_BurnWithFromMintTokenPoolAndProxy.CallOpts)
+}
+
+func (_BurnWithFromMintTokenPoolAndProxy *BurnWithFromMintTokenPoolAndProxyCallerSession) GetPreviousPool() (common.Address, error) {
+ return _BurnWithFromMintTokenPoolAndProxy.Contract.GetPreviousPool(&_BurnWithFromMintTokenPoolAndProxy.CallOpts)
+}
+
func (_BurnWithFromMintTokenPoolAndProxy *BurnWithFromMintTokenPoolAndProxyCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
err := _BurnWithFromMintTokenPoolAndProxy.contract.Call(opts, &out, "getRateLimitAdmin")
@@ -2860,6 +2882,8 @@ type BurnWithFromMintTokenPoolAndProxyInterface interface {
GetOnRamp(opts *bind.CallOpts, arg0 uint64) (common.Address, error)
+ GetPreviousPool(opts *bind.CallOpts) (common.Address, error)
+
GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error)
GetRemotePool(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error)
diff --git a/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go b/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go
index 9e03f87fb0b..19588a8009c 100644
--- a/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go
+++ b/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go
@@ -61,8 +61,8 @@ type CCIPConfigTypesOCR3ConfigWithMeta struct {
}
var CCIPConfigMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidConfigLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"currentState\",\"type\":\"uint8\"},{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"proposedState\",\"type\":\"uint8\"}],\"name\":\"InvalidConfigStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentConfigTransition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"set\",\"type\":\"bytes32[]\"}],\"name\":\"NotASortedSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"subset\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"superset\",\"type\":\"bytes32[]\"}],\"name\":\"NotASubset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"p2pIdsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signersLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transmittersLength\",\"type\":\"uint256\"}],\"name\":\"P2PIdsLengthNotMatching\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyBootstrapP2PIds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOCR3Configs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTransmitters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"}],\"name\":\"WrongConfigCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigestBlueGreen\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getOCRConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"internalType\":\"structCCIPConfigTypes.OCR3ConfigWithMeta[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x60a06040523480156200001157600080fd5b50604051620043d7380380620043d78339810160408190526200003491620001a6565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fb565b5050506001600160a01b038116620000e9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001d8565b336001600160a01b03821603620001555760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001b957600080fd5b81516001600160a01b0381168114620001d157600080fd5b9392505050565b6080516141d6620002016000396000818160f801528181610e96015261112b01526141d66000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638318ed5d11610081578063f2fde38b1161005b578063f2fde38b14610204578063f442c89a14610217578063fba64a7c1461022a57600080fd5b80638318ed5d146101b05780638da5cb5b146101d1578063ddc042a8146101ef57600080fd5b8063181f5a77116100b2578063181f5a771461013d5780634bd0473f1461018657806379ba5097146101a657600080fd5b806301ffc9a7146100ce578063020330e6146100f6575b600080fd5b6100e16100dc366004612fbf565b61023d565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b6101796040518060400160405280601481526020017f43434950436f6e66696720312e362e302d64657600000000000000000000000081525081565b6040516100ed9190613065565b6101996101943660046130a9565b6102d6565b6040516100ed91906131d5565b6101ae6107a6565b005b6101796101be3660046133b2565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff16610118565b6101f76108a8565b6040516100ed9190613413565b6101ae6102123660046134a3565b610a9a565b6101ae610225366004613525565b610aae565b6101ae6102383660046135a9565b610e7e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea7210000000000000000000000000000000000000000000000000000000014806102d057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b63ffffffff82166000908152600560205260408120606091836001811115610300576103006130de565b6001811115610311576103116130de565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561079a57600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff166001811115610384576103846130de565b6001811115610395576103956130de565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916103ed90613666565b80601f016020809104026020016040519081016040528092919081815260200182805461041990613666565b80156104665780601f1061043b57610100808354040283529160200191610466565b820191906000526020600020905b81548152906001019060200180831161044957829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156104be57602002820191906000526020600020905b8154815260200190600101908083116104aa575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561051657602002820191906000526020600020905b815481526020019060010190808311610502575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156105f057838290600052602060002001805461056390613666565b80601f016020809104026020016040519081016040528092919081815260200182805461058f90613666565b80156105dc5780601f106105b1576101008083540402835291602001916105dc565b820191906000526020600020905b8154815290600101906020018083116105bf57829003601f168201915b505050505081526020019060010190610544565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156106c957838290600052602060002001805461063c90613666565b80601f016020809104026020016040519081016040528092919081815260200182805461066890613666565b80156106b55780601f1061068a576101008083540402835291602001916106b5565b820191906000526020600020905b81548152906001019060200180831161069857829003601f168201915b50505050508152602001906001019061061d565b5050505081526020016006820180546106e190613666565b80601f016020809104026020016040519081016040528092919081815260200182805461070d90613666565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b505050919092525050508152600782015467ffffffffffffffff16602080830191909152600890920154604090910152908252600192909201910161033f565b50505050905092915050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606060006108b66003610f3f565b905060006108c46003610f53565b67ffffffffffffffff8111156108dc576108dc6136b9565b60405190808252806020026020018201604052801561091557816020015b610902612d50565b8152602001906001900390816108fa5790505b50905060005b8251811015610a93576000838281518110610938576109386136e8565b60209081029190910181015160408051808201825267ffffffffffffffff8316808252600090815260028552829020825181546080818802830181019095526060820181815295975092958601949093919284928491908401828280156109be57602002820191906000526020600020905b8154815260200190600101908083116109aa575b5050509183525050600182015460ff1660208201526002820180546040909201916109e890613666565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613666565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b505050505081525050815250838381518110610a7f57610a7f6136e8565b60209081029190910101525060010161091b565b5092915050565b610aa2610f5d565b610aab81610fe0565b50565b610ab6610f5d565b60005b83811015610c9c57610afd858583818110610ad657610ad66136e8565b9050602002016020810190610aeb9190613717565b60039067ffffffffffffffff166110d5565b610b6757848482818110610b1357610b136136e8565b9050602002016020810190610b289190613717565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610823565b60026000868684818110610b7d57610b7d6136e8565b9050602002016020810190610b929190613717565b67ffffffffffffffff1681526020810191909152604001600090812090610bb98282612d98565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610bf1600283016000612db6565b5050610c2f858583818110610c0857610c086136e8565b9050602002016020810190610c1d9190613717565b60039067ffffffffffffffff166110ed565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110610c6357610c636136e8565b9050602002016020810190610c789190613717565b60405167ffffffffffffffff909116815260200160405180910390a1600101610ab9565b5060005b81811015610e77576000838383818110610cbc57610cbc6136e8565b9050602002810190610cce9190613732565b610cdc906020810190613770565b610ce590613972565b80519091506000858585818110610cfe57610cfe6136e8565b9050602002810190610d109190613732565b610d1e906020810190613717565b905060005b8251811015610d5657610d4e838281518110610d4157610d416136e8565b60200260200101516110f9565b600101610d23565b50826020015160ff16600003610d98576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600260209081526040909120845180518693610dc8928492910190612df0565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560408201516002820190610e159082613a59565b50610e2f91506003905067ffffffffffffffff8316611212565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08184604051610e61929190613b73565b60405180910390a1505050806001019050610ca0565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610eed576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610efb84860186613c1e565b9050600080610f098361121e565b8151919350915015610f2157610f2184600084611477565b805115610f3457610f3484600183611477565b505050505050505050565b60606000610f4c83611c58565b9392505050565b60006102d0825490565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610823565b565b3373ffffffffffffffffffffffffffffffffffffffff82160361105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610823565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120541515610f4c565b6000610f4c8383611cb4565b6040517f50c946fe000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906350c946fe90602401600060405180830381865afa158015611187573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111cd9190810190613e8f565b608081015190915061120e576040517f8907a4fa00000000000000000000000000000000000000000000000000000000815260048101839052602401610823565b5050565b6000610f4c8383611da7565b606080600460ff1683511115611260576040517f8854586400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160028082526060820190925290816020015b6112e46040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b81526020019060019003908161127657505060408051600280825260608201909252919350602082015b61137c6040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b81526020019060019003908161130e57905050905060008060005b855181101561146a5760008682815181106113b4576113b46136e8565b60200260200101516000015160018111156113d1576113d16130de565b0361141e578581815181106113e8576113e86136e8565b6020026020010151858481518110611402576114026136e8565b60200260200101819052508261141790613f96565b9250611462565b858181518110611430576114306136e8565b602002602001015184838151811061144a5761144a6136e8565b60200260200101819052508161145f90613f96565b91505b600101611397565b5090835281529092909150565b63ffffffff831660009081526005602052604081208184600181111561149f5761149f6130de565b60018111156114b0576114b06130de565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561193957600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff166001811115611523576115236130de565b6001811115611534576115346130de565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a010000000000000000000090910416606082015260018201805460809092019161158c90613666565b80601f01602080910402602001604051908101604052809291908181526020018280546115b890613666565b80156116055780601f106115da57610100808354040283529160200191611605565b820191906000526020600020905b8154815290600101906020018083116115e857829003601f168201915b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165d57602002820191906000526020600020905b815481526020019060010190808311611649575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156116b557602002820191906000526020600020905b8154815260200190600101908083116116a1575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561178f57838290600052602060002001805461170290613666565b80601f016020809104026020016040519081016040528092919081815260200182805461172e90613666565b801561177b5780601f106117505761010080835404028352916020019161177b565b820191906000526020600020905b81548152906001019060200180831161175e57829003601f168201915b5050505050815260200190600101906116e3565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156118685783829060005260206000200180546117db90613666565b80601f016020809104026020016040519081016040528092919081815260200182805461180790613666565b80156118545780601f1061182957610100808354040283529160200191611854565b820191906000526020600020905b81548152906001019060200180831161183757829003601f168201915b5050505050815260200190600101906117bc565b50505050815260200160068201805461188090613666565b80601f01602080910402602001604051908101604052809291908181526020018280546118ac90613666565b80156118f95780601f106118ce576101008083540402835291602001916118f9565b820191906000526020600020905b8154815290600101906020018083116118dc57829003601f168201915b505050919092525050508152600782015467ffffffffffffffff1660208083019190915260089092015460409091015290825260019290920191016114de565b505050509050600061194b8251611df6565b905060006119598451611df6565b90506119658282611e48565b60006119748785878686611f04565b905061198084826122f0565b63ffffffff87166000908152600560205260408120908760018111156119a8576119a86130de565b60018111156119b9576119b96130de565b815260200190815260200160002060006119d39190612e3b565b60005b8151811015611c4e5763ffffffff8816600090815260056020526040812090886001811115611a0757611a076130de565b6001811115611a1857611a186130de565b8152602001908152602001600020828281518110611a3857611a386136e8565b6020908102919091018101518254600181810185556000948552929093208151805160099095029091018054929490939192849283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908381811115611aa257611aa26130de565b021790555060208201518154604084015160608501517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90921661010067ffffffffffffffff948516027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000060ff90921691909102177fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff166a0100000000000000000000929091169190910217815560808201516001820190611b719082613a59565b5060a08201518051611b8d916002840191602090910190612df0565b5060c08201518051611ba9916003840191602090910190612df0565b5060e08201518051611bc5916004840191602090910190612e5c565b506101008201518051611be2916005840191602090910190612e5c565b506101208201516006820190611bf89082613a59565b50505060208201516007820180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9092169190911790556040909101516008909101556001016119d6565b5050505050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015611ca857602002820191906000526020600020905b815481526020019060010190808311611c94575b50505050509050919050565b60008181526001830160205260408120548015611d9d576000611cd8600183613fce565b8554909150600090611cec90600190613fce565b9050808214611d51576000866000018281548110611d0c57611d0c6136e8565b9060005260206000200154905080876000018481548110611d2f57611d2f6136e8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d6257611d62613fe1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102d0565b60009150506102d0565b6000818152600183016020526040812054611dee575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102d0565b5060006102d0565b60006002821115611e36576040517f3e47852600000000000000000000000000000000000000000000000000000000815260048101839052602401610823565b8160028111156102d0576102d06130de565b6000826002811115611e5c57611e5c6130de565b826002811115611e6e57611e6e6130de565b611e789190614010565b90508060011480611ec45750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff148015611ec457506002836002811115611ec257611ec26130de565b145b15611ece57505050565b82826040517f0a6b675b000000000000000000000000000000000000000000000000000000008152600401610823929190614040565b60606000845167ffffffffffffffff811115611f2257611f226136b9565b604051908082528060200260200182016040528015611f4b578160200160208202803683370190505b5090506000846002811115611f6257611f626130de565b148015611f8057506001836002811115611f7e57611f7e6130de565b145b15611fc157600181600081518110611f9a57611f9a6136e8565b602002602001019067ffffffffffffffff16908167ffffffffffffffff1681525050612129565b6001846002811115611fd557611fd56130de565b148015611ff357506002836002811115611ff157611ff16130de565b145b1561208a578560008151811061200b5761200b6136e8565b6020026020010151602001518160008151811061202a5761202a6136e8565b602002602001019067ffffffffffffffff16908167ffffffffffffffff16815250508560008151811061205f5761205f6136e8565b6020026020010151602001516001612077919061405b565b81600181518110611f9a57611f9a6136e8565b600284600281111561209e5761209e6130de565b1480156120bc575060018360028111156120ba576120ba6130de565b145b156120f357856001815181106120d4576120d46136e8565b60200260200101516020015181600081518110611f9a57611f9a6136e8565b83836040517f0a6b675b000000000000000000000000000000000000000000000000000000008152600401610823929190614040565b6000855167ffffffffffffffff811115612145576121456136b9565b6040519080825280602002602001820160405280156121fb57816020015b604080516101a081018252600060608083018281526080840183905260a0840183905260c0840183905260e084018290526101008401829052610120840182905261014084018290526101608401829052610180840191909152825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816121635790505b50905060005b82518110156122e45761222c87828151811061221f5761221f6136e8565b602002602001015161266f565b6040518060600160405280888381518110612249576122496136e8565b60200260200101518152602001848381518110612268576122686136e8565b602002602001015167ffffffffffffffff1681526020016122bc8b868581518110612295576122956136e8565b60200260200101518b86815181106122af576122af6136e8565b6020026020010151612a75565b8152508282815181106122d1576122d16136e8565b6020908102919091010152600101612201565b50979650505050505050565b81518151811580156123025750806001145b156123a4578260008151811061231a5761231a6136e8565b60200260200101516020015167ffffffffffffffff1660011461239e578260008151811061234a5761234a6136e8565b60209081029190910181015101516040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260016024820152604401610823565b50505050565b8160011480156123b45750806002145b1561256a57836000815181106123cc576123cc6136e8565b602002602001015160400151836000815181106123eb576123eb6136e8565b60200260200101516040015114612477578260008151811061240f5761240f6136e8565b6020026020010151604001518460008151811061242e5761242e6136e8565b6020026020010151604001516040517fc7ccdd7f000000000000000000000000000000000000000000000000000000008152600401610823929190918252602082015260400190565b8360008151811061248a5761248a6136e8565b60200260200101516020015160016124a2919061405b565b67ffffffffffffffff16836001815181106124bf576124bf6136e8565b60200260200101516020015167ffffffffffffffff161461239e57826001815181106124ed576124ed6136e8565b6020026020010151602001518460008151811061250c5761250c6136e8565b6020026020010151602001516001612524919061405b565b6040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff928316600482015291166024820152604401610823565b81600214801561257a5750806001145b1561263d5783600181518110612592576125926136e8565b602002602001015160400151836000815181106125b1576125b16136e8565b6020026020010151604001511461239e57826000815181106125d5576125d56136e8565b602002602001015160400151846001815181106125f4576125f46136e8565b6020026020010151604001516040517f9e975670000000000000000000000000000000000000000000000000000000008152600401610823929190918252602082015260400190565b6040517f1f1b2bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff166000036126b7576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815160018111156126cc576126cc6130de565b141580156126ed57506001815160018111156126ea576126ea6130de565b14155b15612724576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806080015151600003612763576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015161277e9060039067ffffffffffffffff166110d5565b6127c65760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610823565b60e081015151601f1015612806576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010081015151601f1015612847576040517f645960ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015167ffffffffffffffff166000908152600290915260408120600101546128779060ff16600361407c565b612882906001614098565b60ff169050808261010001515110156128d957610100820151516040517f548dd21f000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610823565b816040015160ff1660000361291a576040517f39d1a4d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604082015161292a90600361407c565b60ff168260e00151511161296a576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160e00151518260c001515114158061298e5750816101000151518260c001515114155b156129e95760c08201515160e083015151610100840151516040517fba900f6d000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610823565b8160c00151518260a00151511115612a2d576040517f8473d80700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a3f8260a001518360c00151612b4a565b60005b8260e0015151811015612a7057612a688360c001518281518110610d4157610d416136e8565b600101612a42565b505050565b60008082602001518584600001518560800151878760a001518860c001518960e001518a61010001518b604001518c606001518d6101200151604051602001612ac99c9b9a999897969594939291906140b1565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e0a000000000000000000000000000000000000000000000000000000000000179150509392505050565b81511580612b5757508051155b15612b8e576040517fe249684100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b9782612cc5565b612ba081612cc5565b6000805b835182108015612bb45750825181105b15612c8657828181518110612bcb57612bcb6136e8565b6020026020010151848381518110612be557612be56136e8565b60200260200101511115612c0357612bfc81613f96565b9050612ba4565b828181518110612c1557612c156136e8565b6020026020010151848381518110612c2f57612c2f6136e8565b602002602001015103612c5057612c4582613f96565b9150612bfc81613f96565b83836040517fd671700c000000000000000000000000000000000000000000000000000000008152600401610823929190614191565b835182101561239e5783836040517fd671700c000000000000000000000000000000000000000000000000000000008152600401610823929190614191565b60015b815181101561120e5781612cdd600183613fce565b81518110612ced57612ced6136e8565b6020026020010151828281518110612d0757612d076136e8565b602002602001015111612d4857816040517f1bc41b4200000000000000000000000000000000000000000000000000000000815260040161082391906141b6565b600101612cc8565b6040518060400160405280600067ffffffffffffffff168152602001612d93604051806060016040528060608152602001600060ff168152602001606081525090565b905290565b5080546000825590600052602060002090810190610aab9190612eae565b508054612dc290613666565b6000825580601f10612dd2575050565b601f016020900490600052602060002090810190610aab9190612eae565b828054828255906000526020600020908101928215612e2b579160200282015b82811115612e2b578251825591602001919060010190612e10565b50612e37929150612eae565b5090565b5080546000825560090290600052602060002090810190610aab9190612ec3565b828054828255906000526020600020908101928215612ea2579160200282015b82811115612ea25782518290612e929082613a59565b5091602001919060010190612e7c565b50612e37929150612f84565b5b80821115612e375760008155600101612eaf565b80821115612e375780547fffffffffffffffffffffffffffff00000000000000000000000000000000000016815560008181612f026001830182612db6565b612f10600283016000612d98565b612f1e600383016000612d98565b612f2c600483016000612fa1565b612f3a600583016000612fa1565b612f48600683016000612db6565b5050506007810180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905560006008820155600901612ec3565b80821115612e37576000612f988282612db6565b50600101612f84565b5080546000825590600052602060002090810190610aab9190612f84565b600060208284031215612fd157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4c57600080fd5b6000815180845260005b818110156130275760208185018101518683018201520161300b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610f4c6020830184613001565b63ffffffff81168114610aab57600080fd5b803561309581613078565b919050565b80356002811061309557600080fd5b600080604083850312156130bc57600080fd5b82356130c781613078565b91506130d56020840161309a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061311d5761311d6130de565b9052565b60008151808452602080850194506020840160005b8381101561315257815187529582019590820190600101613136565b509495945050505050565b60008282518085526020808601955060208260051b8401016020860160005b848110156131c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526131b6838351613001565b9884019892509083019060010161317c565b5090979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156133a4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160608151818652613243828701825161310d565b89810151608061325e8189018367ffffffffffffffff169052565b8a830151915060a0613274818a018460ff169052565b938301519360c092506132928984018667ffffffffffffffff169052565b818401519450610140915060e082818b01526132b26101a08b0187613001565b95508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0610100818c890301818d01526132f18885613121565b97508587015195506101209350818c890301848d01526133118887613121565b9750828701519550818c890301858d015261332c888761315d565b975080870151955050808b8803016101608c015261334a878661315d565b9650828601519550808b8803016101808c0152505050505061336c8282613001565b915050888201516133888a87018267ffffffffffffffff169052565b50908701519387019390935293860193908601906001016131fe565b509098975050505050505050565b6000602082840312156133c457600080fd5b8135610f4c81613078565b60008151606084526133e46060850182613121565b905060ff60208401511660208501526040830151848203604086015261340a8282613001565b95945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156133a4578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff168452870151878401879052613490878501826133cf565b958801959350509086019060010161343c565b6000602082840312156134b557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610f4c57600080fd5b60008083601f8401126134eb57600080fd5b50813567ffffffffffffffff81111561350357600080fd5b6020830191508360208260051b850101111561351e57600080fd5b9250929050565b6000806000806040858703121561353b57600080fd5b843567ffffffffffffffff8082111561355357600080fd5b61355f888389016134d9565b9096509450602087013591508082111561357857600080fd5b50613585878288016134d9565b95989497509550505050565b803567ffffffffffffffff8116811461309557600080fd5b600080600080600080608087890312156135c257600080fd5b863567ffffffffffffffff808211156135da57600080fd5b6135e68a838b016134d9565b909850965060208901359150808211156135ff57600080fd5b818901915089601f83011261361357600080fd5b81358181111561362257600080fd5b8a602082850101111561363457600080fd5b60208301965080955050505061364c60408801613591565b915061365a6060880161308a565b90509295509295509295565b600181811c9082168061367a57607f821691505b6020821081036136b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561372957600080fd5b610f4c82613591565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261376657600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261376657600080fd5b604051610140810167ffffffffffffffff811182821017156137c8576137c86136b9565b60405290565b60405160e0810167ffffffffffffffff811182821017156137c8576137c86136b9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613838576138386136b9565b604052919050565b600067ffffffffffffffff82111561385a5761385a6136b9565b5060051b60200190565b600082601f83011261387557600080fd5b8135602061388a61388583613840565b6137f1565b8083825260208201915060208460051b8701019350868411156138ac57600080fd5b602086015b848110156138c857803583529183019183016138b1565b509695505050505050565b803560ff8116811461309557600080fd5b600082601f8301126138f557600080fd5b813567ffffffffffffffff81111561390f5761390f6136b9565b61394060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016137f1565b81815284602083860101111561395557600080fd5b816020850160208301376000918101602001919091529392505050565b60006060823603121561398457600080fd5b6040516060810167ffffffffffffffff82821081831117156139a8576139a86136b9565b8160405284359150808211156139bd57600080fd5b6139c936838701613864565b83526139d7602086016138d3565b602084015260408501359150808211156139f057600080fd5b506139fd368286016138e4565b60408301525092915050565b601f821115612a70576000816000526020600020601f850160051c81016020861015613a325750805b601f850160051c820191505b81811015613a5157828155600101613a3e565b505050505050565b815167ffffffffffffffff811115613a7357613a736136b9565b613a8781613a818454613666565b84613a09565b602080601f831160018114613ada5760008415613aa45750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613a51565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613b2757888601518255948401946001909101908401613b08565b5085821015613b6357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83168152604060208201526000613b9660408301846133cf565b949350505050565b600082601f830112613baf57600080fd5b81356020613bbf61388583613840565b82815260059290921b84018101918181019086841115613bde57600080fd5b8286015b848110156138c857803567ffffffffffffffff811115613c025760008081fd5b613c108986838b01016138e4565b845250918301918301613be2565b60006020808385031215613c3157600080fd5b823567ffffffffffffffff80821115613c4957600080fd5b818501915085601f830112613c5d57600080fd5b8135613c6b61388582613840565b81815260059190911b83018401908481019088831115613c8a57600080fd5b8585015b83811015613e1857803585811115613ca557600080fd5b8601610140818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613cda57600080fd5b613ce26137a4565b613ced89830161309a565b8152613cfb60408301613591565b89820152613d0b606083016138d3565b6040820152613d1c60808301613591565b606082015260a082013587811115613d3357600080fd5b613d418d8b838601016138e4565b60808301525060c082013587811115613d5957600080fd5b613d678d8b83860101613864565b60a08301525060e082013587811115613d7f57600080fd5b613d8d8d8b83860101613864565b60c0830152506101008083013588811115613da757600080fd5b613db58e8c83870101613b9e565b60e0840152506101208084013589811115613dcf57600080fd5b613ddd8f8d83880101613b9e565b8385015250610140840135915088821115613df757600080fd5b613e058e8c848701016138e4565b9083015250845250918601918601613c8e565b5098975050505050505050565b805161309581613078565b600082601f830112613e4157600080fd5b81516020613e5161388583613840565b8083825260208201915060208460051b870101935086841115613e7357600080fd5b602086015b848110156138c85780518352918301918301613e78565b600060208284031215613ea157600080fd5b815167ffffffffffffffff80821115613eb957600080fd5b9083019060e08286031215613ecd57600080fd5b613ed56137ce565b613ede83613e25565b8152613eec60208401613e25565b6020820152613efd60408401613e25565b6040820152606083015160608201526080830151608082015260a083015182811115613f2857600080fd5b613f3487828601613e30565b60a08301525060c083015182811115613f4c57600080fd5b613f5887828601613e30565b60c08301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fc757613fc7613f67565b5060010190565b818103818111156102d0576102d0613f67565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8181036000831280158383131683831282161715610a9357610a93613f67565b6003811061311d5761311d6130de565b6040810161404e8285614030565b610f4c6020830184614030565b67ffffffffffffffff818116838216019080821115610a9357610a93613f67565b60ff8181168382160290811690818114610a9357610a93613f67565b60ff81811683821601908111156102d0576102d0613f67565b67ffffffffffffffff8d16815263ffffffff8c1660208201526140d7604082018c61310d565b610180606082015260006140ef61018083018c613001565b67ffffffffffffffff8b16608084015282810360a0840152614111818b613121565b905082810360c0840152614125818a613121565b905082810360e0840152614139818961315d565b905082810361010084015261414e818861315d565b60ff8716610120850152905067ffffffffffffffff851661014084015282810361016084015261417e8185613001565b9f9e505050505050505050505050505050565b6040815260006141a46040830185613121565b828103602084015261340a8185613121565b602081526000610f4c602083018461312156fea164736f6c6343000818000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidConfigLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"currentState\",\"type\":\"uint8\"},{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"proposedState\",\"type\":\"uint8\"}],\"name\":\"InvalidConfigStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentConfigTransition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"set\",\"type\":\"bytes32[]\"}],\"name\":\"NotASortedSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"subset\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"superset\",\"type\":\"bytes32[]\"}],\"name\":\"NotASubset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"p2pIdsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signersLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transmittersLength\",\"type\":\"uint256\"}],\"name\":\"P2PIdsLengthNotMatching\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyBootstrapP2PIds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOCR3Configs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTransmitters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"}],\"name\":\"WrongConfigCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigestBlueGreen\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getOCRConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"internalType\":\"structCCIPConfigTypes.OCR3ConfigWithMeta[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x60a06040523480156200001157600080fd5b50604051620044b7380380620044b78339810160408190526200003491620001a6565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fb565b5050506001600160a01b038116620000e9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001d8565b336001600160a01b03821603620001555760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001b957600080fd5b81516001600160a01b0381168114620001d157600080fd5b9392505050565b6080516142b6620002016000396000818160f801528181610f3001526111c501526142b66000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638318ed5d11610081578063f2fde38b1161005b578063f2fde38b1461020f578063f442c89a14610222578063fba64a7c1461023557600080fd5b80638318ed5d146101b05780638da5cb5b146101d1578063b74b2356146101ef57600080fd5b8063181f5a77116100b2578063181f5a771461013d5780634bd0473f1461018657806379ba5097146101a657600080fd5b806301ffc9a7146100ce578063020330e6146100f6575b600080fd5b6100e16100dc366004613060565b610248565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b6101796040518060400160405280601481526020017f43434950436f6e66696720312e362e302d64657600000000000000000000000081525081565b6040516100ed9190613106565b61019961019436600461314a565b6102e1565b6040516100ed9190613269565b6101ae6107b1565b005b6101796101be366004613446565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff16610118565b6102026101fd366004613463565b6108b3565b6040516100ed91906134c9565b6101ae61021d366004613559565b610b34565b6101ae6102303660046135db565b610b48565b6101ae61024336600461365f565b610f18565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea7210000000000000000000000000000000000000000000000000000000014806102db57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b63ffffffff8216600090815260056020526040812060609183600181111561030b5761030b61317f565b600181111561031c5761031c61317f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156107a557600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff16600181111561038f5761038f61317f565b60018111156103a0576103a061317f565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916103f89061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546104249061371c565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156104c957602002820191906000526020600020905b8154815260200190600101908083116104b5575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561052157602002820191906000526020600020905b81548152602001906001019080831161050d575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156105fb57838290600052602060002001805461056e9061371c565b80601f016020809104026020016040519081016040528092919081815260200182805461059a9061371c565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b50505050508152602001906001019061054f565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156106d45783829060005260206000200180546106479061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546106739061371c565b80156106c05780601f10610695576101008083540402835291602001916106c0565b820191906000526020600020905b8154815290600101906020018083116106a357829003601f168201915b505050505081526020019060010190610628565b5050505081526020016006820180546106ec9061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546107189061371c565b80156107655780601f1061073a57610100808354040283529160200191610765565b820191906000526020600020905b81548152906001019060200180831161074857829003601f168201915b505050919092525050508152600782015467ffffffffffffffff16602080830191909152600890920154604090910152908252600192909201910161034a565b50505050905092915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606060006108c16003610fd9565b905060006108cf848661379e565b90508315806108de5750818110155b1561091e576040805160008082526020820190925290610914565b610901612df1565b8152602001906001900390816108f95790505b50925050506102db565b600061092a85836137e4565b9050828111156109375750815b600061094383836137f7565b67ffffffffffffffff81111561095b5761095b6137b5565b60405190808252806020026020018201604052801561099457816020015b610981612df1565b8152602001906001900390816109795790505b50905060006109a36003610fe3565b9050835b83811015610b275760008282815181106109c3576109c361380a565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015610a4957602002820191906000526020600020905b815481526020019060010190808311610a35575b5050509183525050600182015460ff166020820152600282018054604090920191610a739061371c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f9061371c565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b50505091909252505050905284610b0388856137f7565b81518110610b1357610b1361380a565b6020908102919091010152506001016109a7565b5090979650505050505050565b610b3c610ff7565b610b458161107a565b50565b610b50610ff7565b60005b83811015610d3657610b97858583818110610b7057610b7061380a565b9050602002016020810190610b859190613839565b60039067ffffffffffffffff1661116f565b610c0157848482818110610bad57610bad61380a565b9050602002016020810190610bc29190613839565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161082e565b60026000868684818110610c1757610c1761380a565b9050602002016020810190610c2c9190613839565b67ffffffffffffffff1681526020810191909152604001600090812090610c538282612e39565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c8b600283016000612e57565b5050610cc9858583818110610ca257610ca261380a565b9050602002016020810190610cb79190613839565b60039067ffffffffffffffff16611187565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110610cfd57610cfd61380a565b9050602002016020810190610d129190613839565b60405167ffffffffffffffff909116815260200160405180910390a1600101610b53565b5060005b81811015610f11576000838383818110610d5657610d5661380a565b9050602002810190610d689190613854565b610d76906020810190613892565b610d7f90613a94565b80519091506000858585818110610d9857610d9861380a565b9050602002810190610daa9190613854565b610db8906020810190613839565b905060005b8251811015610df057610de8838281518110610ddb57610ddb61380a565b6020026020010151611193565b600101610dbd565b50826020015160ff16600003610e32576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600260209081526040909120845180518693610e62928492910190612e91565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560408201516002820190610eaf9082613b7b565b50610ec991506003905067ffffffffffffffff83166112ac565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08184604051610efb929190613c95565b60405180910390a1505050806001019050610d3a565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610f87576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f9584860186613d40565b9050600080610fa3836112b8565b8151919350915015610fbb57610fbb84600084611511565b805115610fce57610fce84600183611511565b505050505050505050565b60006102db825490565b60606000610ff083611cf2565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161082e565b565b3373ffffffffffffffffffffffffffffffffffffffff8216036110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161082e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120541515610ff0565b6000610ff08383611d4e565b6040517f50c946fe000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906350c946fe90602401600060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112679190810190613fb1565b60808101519091506112a8576040517f8907a4fa0000000000000000000000000000000000000000000000000000000081526004810183905260240161082e565b5050565b6000610ff08383611e48565b606080600460ff16835111156112fa576040517f8854586400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160028082526060820190925290816020015b61137e6040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b81526020019060019003908161131057505060408051600280825260608201909252919350602082015b6114166040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816113a857905050905060008060005b855181101561150457600086828151811061144e5761144e61380a565b602002602001015160000151600181111561146b5761146b61317f565b036114b8578581815181106114825761148261380a565b602002602001015185848151811061149c5761149c61380a565b6020026020010181905250826114b190614089565b92506114fc565b8581815181106114ca576114ca61380a565b60200260200101518483815181106114e4576114e461380a565b6020026020010181905250816114f990614089565b91505b600101611431565b5090835281529092909150565b63ffffffff83166000908152600560205260408120818460018111156115395761153961317f565b600181111561154a5761154a61317f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156119d357600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff1660018111156115bd576115bd61317f565b60018111156115ce576115ce61317f565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916116269061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546116529061371c565b801561169f5780601f106116745761010080835404028352916020019161169f565b820191906000526020600020905b81548152906001019060200180831161168257829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156116f757602002820191906000526020600020905b8154815260200190600101908083116116e3575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561174f57602002820191906000526020600020905b81548152602001906001019080831161173b575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561182957838290600052602060002001805461179c9061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546117c89061371c565b80156118155780601f106117ea57610100808354040283529160200191611815565b820191906000526020600020905b8154815290600101906020018083116117f857829003601f168201915b50505050508152602001906001019061177d565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156119025783829060005260206000200180546118759061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a19061371c565b80156118ee5780601f106118c3576101008083540402835291602001916118ee565b820191906000526020600020905b8154815290600101906020018083116118d157829003601f168201915b505050505081526020019060010190611856565b50505050815260200160068201805461191a9061371c565b80601f01602080910402602001604051908101604052809291908181526020018280546119469061371c565b80156119935780601f1061196857610100808354040283529160200191611993565b820191906000526020600020905b81548152906001019060200180831161197657829003601f168201915b505050919092525050508152600782015467ffffffffffffffff166020808301919091526008909201546040909101529082526001929092019101611578565b50505050905060006119e58251611e97565b905060006119f38451611e97565b90506119ff8282611ee9565b6000611a0e8785878686611fa5565b9050611a1a8482612391565b63ffffffff8716600090815260056020526040812090876001811115611a4257611a4261317f565b6001811115611a5357611a5361317f565b81526020019081526020016000206000611a6d9190612edc565b60005b8151811015611ce85763ffffffff8816600090815260056020526040812090886001811115611aa157611aa161317f565b6001811115611ab257611ab261317f565b8152602001908152602001600020828281518110611ad257611ad261380a565b6020908102919091018101518254600181810185556000948552929093208151805160099095029091018054929490939192849283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908381811115611b3c57611b3c61317f565b021790555060208201518154604084015160608501517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90921661010067ffffffffffffffff948516027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000060ff90921691909102177fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff166a0100000000000000000000929091169190910217815560808201516001820190611c0b9082613b7b565b5060a08201518051611c27916002840191602090910190612e91565b5060c08201518051611c43916003840191602090910190612e91565b5060e08201518051611c5f916004840191602090910190612efd565b506101008201518051611c7c916005840191602090910190612efd565b506101208201516006820190611c929082613b7b565b50505060208201516007820180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff909216919091179055604090910151600890910155600101611a70565b5050505050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015611d4257602002820191906000526020600020905b815481526020019060010190808311611d2e575b50505050509050919050565b60008181526001830160205260408120548015611e37576000611d726001836137f7565b8554909150600090611d86906001906137f7565b9050808214611deb576000866000018281548110611da657611da661380a565b9060005260206000200154905080876000018481548110611dc957611dc961380a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611dfc57611dfc6140c1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102db565b60009150506102db565b5092915050565b6000818152600183016020526040812054611e8f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102db565b5060006102db565b60006002821115611ed7576040517f3e4785260000000000000000000000000000000000000000000000000000000081526004810183905260240161082e565b8160028111156102db576102db61317f565b6000826002811115611efd57611efd61317f565b826002811115611f0f57611f0f61317f565b611f1991906140f0565b90508060011480611f655750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff148015611f6557506002836002811115611f6357611f6361317f565b145b15611f6f57505050565b82826040517f0a6b675b00000000000000000000000000000000000000000000000000000000815260040161082e929190614120565b60606000845167ffffffffffffffff811115611fc357611fc36137b5565b604051908082528060200260200182016040528015611fec578160200160208202803683370190505b50905060008460028111156120035761200361317f565b1480156120215750600183600281111561201f5761201f61317f565b145b156120625760018160008151811061203b5761203b61380a565b602002602001019067ffffffffffffffff16908167ffffffffffffffff16815250506121ca565b60018460028111156120765761207661317f565b148015612094575060028360028111156120925761209261317f565b145b1561212b57856000815181106120ac576120ac61380a565b602002602001015160200151816000815181106120cb576120cb61380a565b602002602001019067ffffffffffffffff16908167ffffffffffffffff1681525050856000815181106121005761210061380a565b6020026020010151602001516001612118919061413b565b8160018151811061203b5761203b61380a565b600284600281111561213f5761213f61317f565b14801561215d5750600183600281111561215b5761215b61317f565b145b1561219457856001815181106121755761217561380a565b6020026020010151602001518160008151811061203b5761203b61380a565b83836040517f0a6b675b00000000000000000000000000000000000000000000000000000000815260040161082e929190614120565b6000855167ffffffffffffffff8111156121e6576121e66137b5565b60405190808252806020026020018201604052801561229c57816020015b604080516101a081018252600060608083018281526080840183905260a0840183905260c0840183905260e084018290526101008401829052610120840182905261014084018290526101608401829052610180840191909152825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816122045790505b50905060005b8251811015612385576122cd8782815181106122c0576122c061380a565b6020026020010151612710565b60405180606001604052808883815181106122ea576122ea61380a565b602002602001015181526020018483815181106123095761230961380a565b602002602001015167ffffffffffffffff16815260200161235d8b8685815181106123365761233661380a565b60200260200101518b86815181106123505761235061380a565b6020026020010151612b16565b8152508282815181106123725761237261380a565b60209081029190910101526001016122a2565b50979650505050505050565b81518151811580156123a35750806001145b1561244557826000815181106123bb576123bb61380a565b60200260200101516020015167ffffffffffffffff1660011461243f57826000815181106123eb576123eb61380a565b60209081029190910181015101516040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001602482015260440161082e565b50505050565b8160011480156124555750806002145b1561260b578360008151811061246d5761246d61380a565b6020026020010151604001518360008151811061248c5761248c61380a565b6020026020010151604001511461251857826000815181106124b0576124b061380a565b602002602001015160400151846000815181106124cf576124cf61380a565b6020026020010151604001516040517fc7ccdd7f00000000000000000000000000000000000000000000000000000000815260040161082e929190918252602082015260400190565b8360008151811061252b5761252b61380a565b6020026020010151602001516001612543919061413b565b67ffffffffffffffff16836001815181106125605761256061380a565b60200260200101516020015167ffffffffffffffff161461243f578260018151811061258e5761258e61380a565b602002602001015160200151846000815181106125ad576125ad61380a565b60200260200101516020015160016125c5919061413b565b6040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff92831660048201529116602482015260440161082e565b81600214801561261b5750806001145b156126de57836001815181106126335761263361380a565b602002602001015160400151836000815181106126525761265261380a565b6020026020010151604001511461243f57826000815181106126765761267661380a565b602002602001015160400151846001815181106126955761269561380a565b6020026020010151604001516040517f9e97567000000000000000000000000000000000000000000000000000000000815260040161082e929190918252602082015260400190565b6040517f1f1b2bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff16600003612758576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561276d5761276d61317f565b1415801561278e575060018151600181111561278b5761278b61317f565b14155b156127c5576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806080015151600003612804576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015161281f9060039067ffffffffffffffff1661116f565b6128675760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161082e565b60e081015151601f10156128a7576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010081015151601f10156128e8576040517f645960ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015167ffffffffffffffff166000908152600290915260408120600101546129189060ff16600361415c565b612923906001614178565b60ff1690508082610100015151101561297a57610100820151516040517f548dd21f00000000000000000000000000000000000000000000000000000000815260048101919091526024810182905260440161082e565b816040015160ff166000036129bb576040517f39d1a4d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516129cb90600361415c565b60ff168260e001515111612a0b576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160e00151518260c0015151141580612a2f5750816101000151518260c001515114155b15612a8a5760c08201515160e083015151610100840151516040517fba900f6d00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640161082e565b8160c00151518260a00151511115612ace576040517f8473d80700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ae08260a001518360c00151612beb565b60005b8260e0015151811015612b1157612b098360c001518281518110610ddb57610ddb61380a565b600101612ae3565b505050565b60008082602001518584600001518560800151878760a001518860c001518960e001518a61010001518b604001518c606001518d6101200151604051602001612b6a9c9b9a99989796959493929190614191565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e0a000000000000000000000000000000000000000000000000000000000000179150509392505050565b81511580612bf857508051155b15612c2f576040517fe249684100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3882612d66565b612c4181612d66565b6000805b835182108015612c555750825181105b15612d2757828181518110612c6c57612c6c61380a565b6020026020010151848381518110612c8657612c8661380a565b60200260200101511115612ca457612c9d81614089565b9050612c45565b828181518110612cb657612cb661380a565b6020026020010151848381518110612cd057612cd061380a565b602002602001015103612cf157612ce682614089565b9150612c9d81614089565b83836040517fd671700c00000000000000000000000000000000000000000000000000000000815260040161082e929190614271565b835182101561243f5783836040517fd671700c00000000000000000000000000000000000000000000000000000000815260040161082e929190614271565b60015b81518110156112a85781612d7e6001836137f7565b81518110612d8e57612d8e61380a565b6020026020010151828281518110612da857612da861380a565b602002602001015111612de957816040517f1bc41b4200000000000000000000000000000000000000000000000000000000815260040161082e9190614296565b600101612d69565b6040518060400160405280600067ffffffffffffffff168152602001612e34604051806060016040528060608152602001600060ff168152602001606081525090565b905290565b5080546000825590600052602060002090810190610b459190612f4f565b508054612e639061371c565b6000825580601f10612e73575050565b601f016020900490600052602060002090810190610b459190612f4f565b828054828255906000526020600020908101928215612ecc579160200282015b82811115612ecc578251825591602001919060010190612eb1565b50612ed8929150612f4f565b5090565b5080546000825560090290600052602060002090810190610b459190612f64565b828054828255906000526020600020908101928215612f43579160200282015b82811115612f435782518290612f339082613b7b565b5091602001919060010190612f1d565b50612ed8929150613025565b5b80821115612ed85760008155600101612f50565b80821115612ed85780547fffffffffffffffffffffffffffff00000000000000000000000000000000000016815560008181612fa36001830182612e57565b612fb1600283016000612e39565b612fbf600383016000612e39565b612fcd600483016000613042565b612fdb600583016000613042565b612fe9600683016000612e57565b5050506007810180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905560006008820155600901612f64565b80821115612ed85760006130398282612e57565b50600101613025565b5080546000825590600052602060002090810190610b459190613025565b60006020828403121561307257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ff057600080fd5b6000815180845260005b818110156130c8576020818501810151868301820152016130ac565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610ff060208301846130a2565b63ffffffff81168114610b4557600080fd5b803561313681613119565b919050565b80356002811061313657600080fd5b6000806040838503121561315d57600080fd5b823561316881613119565b91506131766020840161313b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106131be576131be61317f565b9052565b60008151808452602080850194506020840160005b838110156131f3578151875295820195908201906001016131d7565b509495945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015610b27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526132578383516130a2565b9884019892509083019060010161321d565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015613438577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151606081518186526132d782870182516131ae565b8981015160806132f28189018367ffffffffffffffff169052565b8a830151915060a0613308818a018460ff169052565b938301519360c092506133268984018667ffffffffffffffff169052565b818401519450610140915060e082818b01526133466101a08b01876130a2565b95508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0610100818c890301818d015261338588856131c2565b97508587015195506101209350818c890301848d01526133a588876131c2565b9750828701519550818c890301858d01526133c088876131fe565b975080870151955050808b8803016101608c01526133de87866131fe565b9650828601519550808b8803016101808c0152505050505061340082826130a2565b9150508882015161341c8a87018267ffffffffffffffff169052565b5090870151938701939093529386019390860190600101613292565b509098975050505050505050565b60006020828403121561345857600080fd5b8135610ff081613119565b6000806040838503121561347657600080fd5b50508035926020909101359150565b600081516060845261349a60608501826131c2565b905060ff6020840151166020850152604083015184820360408601526134c082826130a2565b95945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015613438578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff16845287015187840187905261354687850182613485565b95880195935050908601906001016134f2565b60006020828403121561356b57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ff057600080fd5b60008083601f8401126135a157600080fd5b50813567ffffffffffffffff8111156135b957600080fd5b6020830191508360208260051b85010111156135d457600080fd5b9250929050565b600080600080604085870312156135f157600080fd5b843567ffffffffffffffff8082111561360957600080fd5b6136158883890161358f565b9096509450602087013591508082111561362e57600080fd5b5061363b8782880161358f565b95989497509550505050565b803567ffffffffffffffff8116811461313657600080fd5b6000806000806000806080878903121561367857600080fd5b863567ffffffffffffffff8082111561369057600080fd5b61369c8a838b0161358f565b909850965060208901359150808211156136b557600080fd5b818901915089601f8301126136c957600080fd5b8135818111156136d857600080fd5b8a60208285010111156136ea57600080fd5b60208301965080955050505061370260408801613647565b91506137106060880161312b565b90509295509295509295565b600181811c9082168061373057607f821691505b602082108103613769577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176102db576102db61376f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b808201808211156102db576102db61376f565b818103818111156102db576102db61376f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561384b57600080fd5b610ff082613647565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261388857600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261388857600080fd5b604051610140810167ffffffffffffffff811182821017156138ea576138ea6137b5565b60405290565b60405160e0810167ffffffffffffffff811182821017156138ea576138ea6137b5565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561395a5761395a6137b5565b604052919050565b600067ffffffffffffffff82111561397c5761397c6137b5565b5060051b60200190565b600082601f83011261399757600080fd5b813560206139ac6139a783613962565b613913565b8083825260208201915060208460051b8701019350868411156139ce57600080fd5b602086015b848110156139ea57803583529183019183016139d3565b509695505050505050565b803560ff8116811461313657600080fd5b600082601f830112613a1757600080fd5b813567ffffffffffffffff811115613a3157613a316137b5565b613a6260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613913565b818152846020838601011115613a7757600080fd5b816020850160208301376000918101602001919091529392505050565b600060608236031215613aa657600080fd5b6040516060810167ffffffffffffffff8282108183111715613aca57613aca6137b5565b816040528435915080821115613adf57600080fd5b613aeb36838701613986565b8352613af9602086016139f5565b60208401526040850135915080821115613b1257600080fd5b50613b1f36828601613a06565b60408301525092915050565b601f821115612b11576000816000526020600020601f850160051c81016020861015613b545750805b601f850160051c820191505b81811015613b7357828155600101613b60565b505050505050565b815167ffffffffffffffff811115613b9557613b956137b5565b613ba981613ba3845461371c565b84613b2b565b602080601f831160018114613bfc5760008415613bc65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b73565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613c4957888601518255948401946001909101908401613c2a565b5085821015613c8557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83168152604060208201526000613cb86040830184613485565b949350505050565b600082601f830112613cd157600080fd5b81356020613ce16139a783613962565b82815260059290921b84018101918181019086841115613d0057600080fd5b8286015b848110156139ea57803567ffffffffffffffff811115613d245760008081fd5b613d328986838b0101613a06565b845250918301918301613d04565b60006020808385031215613d5357600080fd5b823567ffffffffffffffff80821115613d6b57600080fd5b818501915085601f830112613d7f57600080fd5b8135613d8d6139a782613962565b81815260059190911b83018401908481019088831115613dac57600080fd5b8585015b83811015613f3a57803585811115613dc757600080fd5b8601610140818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613dfc57600080fd5b613e046138c6565b613e0f89830161313b565b8152613e1d60408301613647565b89820152613e2d606083016139f5565b6040820152613e3e60808301613647565b606082015260a082013587811115613e5557600080fd5b613e638d8b83860101613a06565b60808301525060c082013587811115613e7b57600080fd5b613e898d8b83860101613986565b60a08301525060e082013587811115613ea157600080fd5b613eaf8d8b83860101613986565b60c0830152506101008083013588811115613ec957600080fd5b613ed78e8c83870101613cc0565b60e0840152506101208084013589811115613ef157600080fd5b613eff8f8d83880101613cc0565b8385015250610140840135915088821115613f1957600080fd5b613f278e8c84870101613a06565b9083015250845250918601918601613db0565b5098975050505050505050565b805161313681613119565b600082601f830112613f6357600080fd5b81516020613f736139a783613962565b8083825260208201915060208460051b870101935086841115613f9557600080fd5b602086015b848110156139ea5780518352918301918301613f9a565b600060208284031215613fc357600080fd5b815167ffffffffffffffff80821115613fdb57600080fd5b9083019060e08286031215613fef57600080fd5b613ff76138f0565b61400083613f47565b815261400e60208401613f47565b602082015261401f60408401613f47565b6040820152606083015160608201526080830151608082015260a08301518281111561404a57600080fd5b61405687828601613f52565b60a08301525060c08301518281111561406e57600080fd5b61407a87828601613f52565b60c08301525095945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140ba576140ba61376f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8181036000831280158383131683831282161715611e4157611e4161376f565b600381106131be576131be61317f565b6040810161412e8285614110565b610ff06020830184614110565b67ffffffffffffffff818116838216019080821115611e4157611e4161376f565b60ff8181168382160290811690818114611e4157611e4161376f565b60ff81811683821601908111156102db576102db61376f565b67ffffffffffffffff8d16815263ffffffff8c1660208201526141b7604082018c6131ae565b610180606082015260006141cf61018083018c6130a2565b67ffffffffffffffff8b16608084015282810360a08401526141f1818b6131c2565b905082810360c0840152614205818a6131c2565b905082810360e084015261421981896131fe565b905082810361010084015261422e81886131fe565b60ff8716610120850152905067ffffffffffffffff851661014084015282810361016084015261425e81856130a2565b9f9e505050505050505050505050505050565b60408152600061428460408301856131c2565b82810360208401526134c081856131c2565b602081526000610ff060208301846131c256fea164736f6c6343000818000a",
}
var CCIPConfigABI = CCIPConfigMetaData.ABI
@@ -201,9 +201,9 @@ func (_CCIPConfig *CCIPConfigTransactorRaw) Transact(opts *bind.TransactOpts, me
return _CCIPConfig.Contract.contract.Transact(opts, method, params...)
}
-func (_CCIPConfig *CCIPConfigCaller) GetAllChainConfigs(opts *bind.CallOpts) ([]CCIPConfigTypesChainConfigInfo, error) {
+func (_CCIPConfig *CCIPConfigCaller) GetAllChainConfigs(opts *bind.CallOpts, pageIndex *big.Int, pageSize *big.Int) ([]CCIPConfigTypesChainConfigInfo, error) {
var out []interface{}
- err := _CCIPConfig.contract.Call(opts, &out, "getAllChainConfigs")
+ err := _CCIPConfig.contract.Call(opts, &out, "getAllChainConfigs", pageIndex, pageSize)
if err != nil {
return *new([]CCIPConfigTypesChainConfigInfo), err
@@ -215,12 +215,12 @@ func (_CCIPConfig *CCIPConfigCaller) GetAllChainConfigs(opts *bind.CallOpts) ([]
}
-func (_CCIPConfig *CCIPConfigSession) GetAllChainConfigs() ([]CCIPConfigTypesChainConfigInfo, error) {
- return _CCIPConfig.Contract.GetAllChainConfigs(&_CCIPConfig.CallOpts)
+func (_CCIPConfig *CCIPConfigSession) GetAllChainConfigs(pageIndex *big.Int, pageSize *big.Int) ([]CCIPConfigTypesChainConfigInfo, error) {
+ return _CCIPConfig.Contract.GetAllChainConfigs(&_CCIPConfig.CallOpts, pageIndex, pageSize)
}
-func (_CCIPConfig *CCIPConfigCallerSession) GetAllChainConfigs() ([]CCIPConfigTypesChainConfigInfo, error) {
- return _CCIPConfig.Contract.GetAllChainConfigs(&_CCIPConfig.CallOpts)
+func (_CCIPConfig *CCIPConfigCallerSession) GetAllChainConfigs(pageIndex *big.Int, pageSize *big.Int) ([]CCIPConfigTypesChainConfigInfo, error) {
+ return _CCIPConfig.Contract.GetAllChainConfigs(&_CCIPConfig.CallOpts, pageIndex, pageSize)
}
func (_CCIPConfig *CCIPConfigCaller) GetCapabilityConfiguration(opts *bind.CallOpts, arg0 uint32) ([]byte, error) {
@@ -1069,7 +1069,7 @@ func (_CCIPConfig *CCIPConfig) Address() common.Address {
}
type CCIPConfigInterface interface {
- GetAllChainConfigs(opts *bind.CallOpts) ([]CCIPConfigTypesChainConfigInfo, error)
+ GetAllChainConfigs(opts *bind.CallOpts, pageIndex *big.Int, pageSize *big.Int) ([]CCIPConfigTypesChainConfigInfo, error)
GetCapabilityConfiguration(opts *bind.CallOpts, arg0 uint32) ([]byte, error)
diff --git a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go
index 9c49b3f882e..164c066e239 100644
--- a/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go
+++ b/core/gethwrappers/ccip/generated/ccip_reader_tester/ccip_reader_tester.go
@@ -30,29 +30,6 @@ var (
_ = abi.ConvertType
)
-type EVM2EVMMultiOffRampCommitReport struct {
- PriceUpdates InternalPriceUpdates
- MerkleRoots []EVM2EVMMultiOffRampMerkleRoot
-}
-
-type EVM2EVMMultiOffRampInterval struct {
- Min uint64
- Max uint64
-}
-
-type EVM2EVMMultiOffRampMerkleRoot struct {
- SourceChainSelector uint64
- Interval EVM2EVMMultiOffRampInterval
- MerkleRoot [32]byte
-}
-
-type EVM2EVMMultiOffRampSourceChainConfig struct {
- Router common.Address
- IsEnabled bool
- MinSeqNr uint64
- OnRamp []byte
-}
-
type InternalEVM2AnyRampMessage struct {
Header InternalRampMessageHeader
Sender common.Address
@@ -94,8 +71,31 @@ type InternalTokenPriceUpdate struct {
UsdPerToken *big.Int
}
+type OffRampCommitReport struct {
+ PriceUpdates InternalPriceUpdates
+ MerkleRoots []OffRampMerkleRoot
+}
+
+type OffRampInterval struct {
+ Min uint64
+ Max uint64
+}
+
+type OffRampMerkleRoot struct {
+ SourceChainSelector uint64
+ Interval OffRampInterval
+ MerkleRoot [32]byte
+}
+
+type OffRampSourceChainConfig struct {
+ Router common.Address
+ IsEnabled bool
+ MinSeqNr uint64
+ OnRamp []byte
+}
+
var CCIPReaderTesterMetaData = &bind.MetaData{
- ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPSendRequested\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPSendRequested\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b50611149806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80634cf66e361461005c578063a65558f614610071578063e44302b714610084578063e83eabba14610097578063e9d68a8e146100aa575b600080fd5b61006f61006a3660046104a7565b6100d3565b005b61006f61007f366004610718565b610128565b61006f6100923660046109b6565b61016d565b61006f6100a5366004610b20565b6101a7565b6100bd6100b8366004610bdb565b610233565b6040516100ca9190610c43565b60405180910390f35b82846001600160401b0316866001600160401b03167f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df28585604051610119929190610c9b565b60405180910390a45050505050565b816001600160401b03167f0f07cd31e53232da9125e517f09550fdde74bf43d6a0a76ebd41674dafe2ab29826040516101619190610d83565b60405180910390a25050565b7f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d8160405161019c9190610f3d565b60405180910390a150565b6001600160401b0380831660009081526020818152604091829020845181549286015193860151909416600160a81b02600160a81b600160e81b0319931515600160a01b026001600160a81b03199093166001600160a01b039095169490941791909117919091169190911781556060820151829190600182019061022c908261107d565b5050505050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b038781168452838352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916102be90610ff2565b80601f01602080910402602001604051908101604052809291908181526020018280546102ea90610ff2565b80156103375780601f1061030c57610100808354040283529160200191610337565b820191906000526020600020905b81548152906001019060200180831161031a57829003601f168201915b5050505050815250509050919050565b80356001600160401b038116811461035e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561039b5761039b610363565b60405290565b60405161010081016001600160401b038111828210171561039b5761039b610363565b604080519081016001600160401b038111828210171561039b5761039b610363565b604051606081016001600160401b038111828210171561039b5761039b610363565b604051601f8201601f191681016001600160401b038111828210171561043057610430610363565b604052919050565b600082601f83011261044957600080fd5b81356001600160401b0381111561046257610462610363565b610475601f8201601f1916602001610408565b81815284602083860101111561048a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156104bf57600080fd5b6104c886610347565b94506104d660208701610347565b9350604086013592506060860135600481106104f157600080fd5b915060808601356001600160401b0381111561050c57600080fd5b61051888828901610438565b9150509295509295909350565b600060a0828403121561053757600080fd5b60405160a081016001600160401b038111828210171561055957610559610363565b6040528235815290508061056f60208401610347565b602082015261058060408401610347565b604082015261059160608401610347565b60608201526105a260808401610347565b60808201525092915050565b6001600160a01b03811681146105c357600080fd5b50565b803561035e816105ae565b60006001600160401b038211156105ea576105ea610363565b5060051b60200190565b600082601f83011261060557600080fd5b8135602061061a610615836105d1565b610408565b82815260059290921b8401810191818101908684111561063957600080fd5b8286015b8481101561070d5780356001600160401b038082111561065d5760008081fd5b908801906080828b03601f19018113156106775760008081fd5b61067f610379565b87840135838111156106915760008081fd5b61069f8d8a83880101610438565b825250604080850135848111156106b65760008081fd5b6106c48e8b83890101610438565b8a84015250606080860135858111156106dd5760008081fd5b6106eb8f8c838a0101610438565b928401929092529490920135938101939093525050835291830191830161063d565b509695505050505050565b6000806040838503121561072b57600080fd5b61073483610347565b915060208301356001600160401b038082111561075057600080fd5b90840190610180828703121561076557600080fd5b61076d6103a1565b6107778784610525565b815261078560a084016105c6565b602082015260c08301358281111561079c57600080fd5b6107a888828601610438565b60408301525060e0830135828111156107c057600080fd5b6107cc88828601610438565b606083015250610100830135828111156107e557600080fd5b6107f188828601610438565b60808301525061080461012084016105c6565b60a082015261014083013560c08201526101608301358281111561082757600080fd5b610833888286016105f4565b60e0830152508093505050509250929050565b80356001600160e01b038116811461035e57600080fd5b600082601f83011261086e57600080fd5b8135602061087e610615836105d1565b82815260069290921b8401810191818101908684111561089d57600080fd5b8286015b8481101561070d57604081890312156108ba5760008081fd5b6108c26103c4565b6108cb82610347565b81526108d8858301610846565b818601528352918301916040016108a1565b600082601f8301126108fb57600080fd5b8135602061090b610615836105d1565b82815260079290921b8401810191818101908684111561092a57600080fd5b8286015b8481101561070d5780880360808112156109485760008081fd5b6109506103e6565b61095983610347565b8152604080601f198401121561096f5760008081fd5b6109776103c4565b9250610984878501610347565b8352610991818501610347565b838801528187019290925260608301359181019190915283529183019160800161092e565b600060208083850312156109c957600080fd5b82356001600160401b03808211156109e057600080fd5b818501915060408083880312156109f657600080fd5b6109fe6103c4565b833583811115610a0d57600080fd5b84016040818a031215610a1f57600080fd5b610a276103c4565b813585811115610a3657600080fd5b8201601f81018b13610a4757600080fd5b8035610a55610615826105d1565b81815260069190911b8201890190898101908d831115610a7457600080fd5b928a01925b82841015610ac45787848f031215610a915760008081fd5b610a996103c4565b8435610aa4816105ae565b8152610ab1858d01610846565b818d0152825292870192908a0190610a79565b845250505081870135935084841115610adc57600080fd5b610ae88a85840161085d565b8188015282525083850135915082821115610b0257600080fd5b610b0e888386016108ea565b85820152809550505050505092915050565b60008060408385031215610b3357600080fd5b610b3c83610347565b915060208301356001600160401b0380821115610b5857600080fd5b9084019060808287031215610b6c57600080fd5b610b74610379565b8235610b7f816105ae565b815260208301358015158114610b9457600080fd5b6020820152610ba560408401610347565b6040820152606083013582811115610bbc57600080fd5b610bc888828601610438565b6060830152508093505050509250929050565b600060208284031215610bed57600080fd5b610bf682610347565b9392505050565b6000815180845260005b81811015610c2357602081850181015186830182015201610c07565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282516001600160a01b03168282015282015115156040808301919091528201516001600160401b0316606080830191909152820151608080830152600090610c9360a0840182610bfd565b949350505050565b600060048410610cbb57634e487b7160e01b600052602160045260246000fd5b83825260406020830152610c936040830184610bfd565b6001600160a01b03169052565b600082825180855260208086019550808260051b84010181860160005b84811015610d7657601f19868403018952815160808151818652610d2282870182610bfd565b9150508582015185820387870152610d3a8282610bfd565b91505060408083015186830382880152610d548382610bfd565b6060948501519790940196909652505098840198925090830190600101610cfc565b5090979650505050505050565b60208152610dd0602082018351805182526020808201516001600160401b039081169184019190915260408083015182169084015260608083015182169084015260809182015116910152565b60006020830151610de460c0840182610cd2565b5060408301516101808060e0850152610e016101a0850183610bfd565b91506060850151601f198086850301610100870152610e208483610bfd565b9350608087015191508086850301610120870152610e3e8483610bfd565b935060a08701519150610e55610140870183610cd2565b60c087015161016087015260e0870151915080868503018387015250610e7b8382610cdf565b9695505050505050565b60008151808452602080850194506020840160005b83811015610ed357815180516001600160401b031688528301516001600160e01b03168388015260409096019590820190600101610e9a565b509495945050505050565b600081518084526020808501945080840160005b83811015610ed357815180516001600160401b0390811689528482015180518216868b0152850151166040898101919091520151606088015260809096019590820190600101610ef2565b6000602080835283516040808386015260a0850182516040606088015281815180845260c0890191508683019350600092505b80831015610fab57835180516001600160a01b031683528701516001600160e01b031687830152928601926001929092019190840190610f70565b5093850151878503605f1901608089015293610fc78186610e85565b945050505050818501519150601f19848203016040850152610fe98183610ede565b95945050505050565b600181811c9082168061100657607f821691505b60208210810361102657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611078576000816000526020600020601f850160051c810160208610156110555750805b601f850160051c820191505b8181101561107457828155600101611061565b5050505b505050565b81516001600160401b0381111561109657611096610363565b6110aa816110a48454610ff2565b8461102c565b602080601f8311600181146110df57600084156110c75750858301515b600019600386901b1c1916600185901b178555611074565b600085815260208120601f198616915b8281101561110e578886015182559484019460019091019084016110ef565b508582101561112c5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a",
}
@@ -235,25 +235,25 @@ func (_CCIPReaderTester *CCIPReaderTesterTransactorRaw) Transact(opts *bind.Tran
return _CCIPReaderTester.Contract.contract.Transact(opts, method, params...)
}
-func (_CCIPReaderTester *CCIPReaderTesterCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error) {
+func (_CCIPReaderTester *CCIPReaderTesterCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) {
var out []interface{}
err := _CCIPReaderTester.contract.Call(opts, &out, "getSourceChainConfig", sourceChainSelector)
if err != nil {
- return *new(EVM2EVMMultiOffRampSourceChainConfig), err
+ return *new(OffRampSourceChainConfig), err
}
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOffRampSourceChainConfig)).(*EVM2EVMMultiOffRampSourceChainConfig)
+ out0 := *abi.ConvertType(out[0], new(OffRampSourceChainConfig)).(*OffRampSourceChainConfig)
return out0, err
}
-func (_CCIPReaderTester *CCIPReaderTesterSession) GetSourceChainConfig(sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error) {
+func (_CCIPReaderTester *CCIPReaderTesterSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) {
return _CCIPReaderTester.Contract.GetSourceChainConfig(&_CCIPReaderTester.CallOpts, sourceChainSelector)
}
-func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error) {
+func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) {
return _CCIPReaderTester.Contract.GetSourceChainConfig(&_CCIPReaderTester.CallOpts, sourceChainSelector)
}
@@ -269,15 +269,15 @@ func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitCCIPSendRequeste
return _CCIPReaderTester.Contract.EmitCCIPSendRequested(&_CCIPReaderTester.TransactOpts, destChainSelector, message)
}
-func (_CCIPReaderTester *CCIPReaderTesterTransactor) EmitCommitReportAccepted(opts *bind.TransactOpts, report EVM2EVMMultiOffRampCommitReport) (*types.Transaction, error) {
+func (_CCIPReaderTester *CCIPReaderTesterTransactor) EmitCommitReportAccepted(opts *bind.TransactOpts, report OffRampCommitReport) (*types.Transaction, error) {
return _CCIPReaderTester.contract.Transact(opts, "emitCommitReportAccepted", report)
}
-func (_CCIPReaderTester *CCIPReaderTesterSession) EmitCommitReportAccepted(report EVM2EVMMultiOffRampCommitReport) (*types.Transaction, error) {
+func (_CCIPReaderTester *CCIPReaderTesterSession) EmitCommitReportAccepted(report OffRampCommitReport) (*types.Transaction, error) {
return _CCIPReaderTester.Contract.EmitCommitReportAccepted(&_CCIPReaderTester.TransactOpts, report)
}
-func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitCommitReportAccepted(report EVM2EVMMultiOffRampCommitReport) (*types.Transaction, error) {
+func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitCommitReportAccepted(report OffRampCommitReport) (*types.Transaction, error) {
return _CCIPReaderTester.Contract.EmitCommitReportAccepted(&_CCIPReaderTester.TransactOpts, report)
}
@@ -293,15 +293,15 @@ func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitExecutionStateCh
return _CCIPReaderTester.Contract.EmitExecutionStateChanged(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sequenceNumber, messageId, state, returnData)
}
-func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig EVM2EVMMultiOffRampSourceChainConfig) (*types.Transaction, error) {
+func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) {
return _CCIPReaderTester.contract.Transact(opts, "setSourceChainConfig", sourceChainSelector, sourceChainConfig)
}
-func (_CCIPReaderTester *CCIPReaderTesterSession) SetSourceChainConfig(sourceChainSelector uint64, sourceChainConfig EVM2EVMMultiOffRampSourceChainConfig) (*types.Transaction, error) {
+func (_CCIPReaderTester *CCIPReaderTesterSession) SetSourceChainConfig(sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) {
return _CCIPReaderTester.Contract.SetSourceChainConfig(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sourceChainConfig)
}
-func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetSourceChainConfig(sourceChainSelector uint64, sourceChainConfig EVM2EVMMultiOffRampSourceChainConfig) (*types.Transaction, error) {
+func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetSourceChainConfig(sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) {
return _CCIPReaderTester.Contract.SetSourceChainConfig(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sourceChainConfig)
}
@@ -494,7 +494,7 @@ func (it *CCIPReaderTesterCommitReportAcceptedIterator) Close() error {
}
type CCIPReaderTesterCommitReportAccepted struct {
- Report EVM2EVMMultiOffRampCommitReport
+ Report OffRampCommitReport
Raw types.Log
}
@@ -728,15 +728,15 @@ func (_CCIPReaderTester *CCIPReaderTester) Address() common.Address {
}
type CCIPReaderTesterInterface interface {
- GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error)
+ GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error)
EmitCCIPSendRequested(opts *bind.TransactOpts, destChainSelector uint64, message InternalEVM2AnyRampMessage) (*types.Transaction, error)
- EmitCommitReportAccepted(opts *bind.TransactOpts, report EVM2EVMMultiOffRampCommitReport) (*types.Transaction, error)
+ EmitCommitReportAccepted(opts *bind.TransactOpts, report OffRampCommitReport) (*types.Transaction, error)
EmitExecutionStateChanged(opts *bind.TransactOpts, sourceChainSelector uint64, sequenceNumber uint64, messageId [32]byte, state uint8, returnData []byte) (*types.Transaction, error)
- SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig EVM2EVMMultiOffRampSourceChainConfig) (*types.Transaction, error)
+ SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error)
FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*CCIPReaderTesterCCIPSendRequestedIterator, error)
diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go b/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go
deleted file mode 100644
index 2b7571d55e3..00000000000
--- a/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp/evm_2_evm_multi_offramp.go
+++ /dev/null
@@ -1,2498 +0,0 @@
-// Code generated - DO NOT EDIT.
-// This file is a generated binding and any manual changes will be lost.
-
-package evm_2_evm_multi_offramp
-
-import (
- "errors"
- "fmt"
- "math/big"
- "strings"
-
- ethereum "github.com/ethereum/go-ethereum"
- "github.com/ethereum/go-ethereum/accounts/abi"
- "github.com/ethereum/go-ethereum/accounts/abi/bind"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/event"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated"
-)
-
-var (
- _ = errors.New
- _ = big.NewInt
- _ = strings.NewReader
- _ = ethereum.NotFound
- _ = bind.Bind
- _ = common.Big1
- _ = types.BloomLookup
- _ = event.NewSubscription
- _ = abi.ConvertType
-)
-
-type ClientAny2EVMMessage struct {
- MessageId [32]byte
- SourceChainSelector uint64
- Sender []byte
- Data []byte
- DestTokenAmounts []ClientEVMTokenAmount
-}
-
-type ClientEVMTokenAmount struct {
- Token common.Address
- Amount *big.Int
-}
-
-type EVM2EVMMultiOffRampCommitReport struct {
- PriceUpdates InternalPriceUpdates
- MerkleRoots []EVM2EVMMultiOffRampMerkleRoot
-}
-
-type EVM2EVMMultiOffRampDynamicConfig struct {
- PriceRegistry common.Address
- PermissionLessExecutionThresholdSeconds uint32
- MaxTokenTransferGas uint32
- MaxPoolReleaseOrMintGas uint32
- MessageValidator common.Address
-}
-
-type EVM2EVMMultiOffRampInterval struct {
- Min uint64
- Max uint64
-}
-
-type EVM2EVMMultiOffRampMerkleRoot struct {
- SourceChainSelector uint64
- Interval EVM2EVMMultiOffRampInterval
- MerkleRoot [32]byte
-}
-
-type EVM2EVMMultiOffRampSourceChainConfig struct {
- Router common.Address
- IsEnabled bool
- MinSeqNr uint64
- OnRamp []byte
-}
-
-type EVM2EVMMultiOffRampSourceChainConfigArgs struct {
- Router common.Address
- SourceChainSelector uint64
- IsEnabled bool
- OnRamp []byte
-}
-
-type EVM2EVMMultiOffRampStaticConfig struct {
- ChainSelector uint64
- RmnProxy common.Address
- TokenAdminRegistry common.Address
- NonceManager common.Address
-}
-
-type EVM2EVMMultiOffRampUnblessedRoot struct {
- SourceChainSelector uint64
- MerkleRoot [32]byte
-}
-
-type InternalAny2EVMRampMessage struct {
- Header InternalRampMessageHeader
- Sender []byte
- Data []byte
- Receiver common.Address
- GasLimit *big.Int
- TokenAmounts []InternalRampTokenAmount
-}
-
-type InternalExecutionReportSingleChain struct {
- SourceChainSelector uint64
- Messages []InternalAny2EVMRampMessage
- OffchainTokenData [][][]byte
- Proofs [][32]byte
- ProofFlagBits *big.Int
-}
-
-type InternalGasPriceUpdate struct {
- DestChainSelector uint64
- UsdPerUnitGas *big.Int
-}
-
-type InternalPriceUpdates struct {
- TokenPriceUpdates []InternalTokenPriceUpdate
- GasPriceUpdates []InternalGasPriceUpdate
-}
-
-type InternalRampMessageHeader struct {
- MessageId [32]byte
- SourceChainSelector uint64
- DestChainSelector uint64
- SequenceNumber uint64
- Nonce uint64
-}
-
-type InternalRampTokenAmount struct {
- SourcePoolAddress []byte
- DestTokenAddress []byte
- ExtraData []byte
- Amount *big.Int
-}
-
-type InternalTokenPriceUpdate struct {
- SourceToken common.Address
- UsdPerToken *big.Int
-}
-
-type MultiOCR3BaseConfigInfo struct {
- ConfigDigest [32]byte
- F uint8
- N uint8
- IsSignatureVerificationEnabled bool
-}
-
-type MultiOCR3BaseOCRConfig struct {
- ConfigInfo MultiOCR3BaseConfigInfo
- Signers []common.Address
- Transmitters []common.Address
-}
-
-type MultiOCR3BaseOCRConfigArgs struct {
- ConfigDigest [32]byte
- OcrPluginType uint8
- F uint8
- IsSignatureVerificationEnabled bool
- Signers []common.Address
- Transmitters []common.Address
-}
-
-var EVM2EVMMultiOffRampMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x6101206040523480156200001257600080fd5b5060405162006bbb38038062006bbb8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ee562000cd6600039600081816102530152612c0c0152600081816102240152612ee60152600081816101f50152818161142f01526118400152600081816101c50152612801015260008181611dce0152611e1a0152615ee56000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063d2a15d351161008c578063f2fde38b11610066578063f2fde38b14610583578063f716f99f14610596578063ff888fb1146105a957600080fd5b8063d2a15d351461053d578063e9d68a8e14610550578063ece670b61461057057600080fd5b8063991a5018116100bd578063991a5018146104c5578063c673e584146104d8578063ccd37ba3146104f857600080fd5b806385572ffb1461049c5780638da5cb5b146104aa57600080fd5b80633f4b04aa1161012f5780637437ff9f116101145780637437ff9f1461038557806379ba5097146104815780637d4eef601461048957600080fd5b80633f4b04aa146103495780635e36480c1461036557600080fd5b8063181f5a7711610160578063181f5a77146102da5780632d04ab7614610323578063311cd5131461033657600080fd5b806304666f9c1461017c57806306285c6914610191575b600080fd5b61018f61018a3660046140a1565b6105cc565b005b61028360408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102d19190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103166040518060400160405280601d81526020017f45564d3245564d4d756c74694f666652616d7020312e362e302d64657600000081525081565b6040516102d19190614210565b61018f6103313660046142bb565b6105e0565b61018f61034436600461436e565b6109c0565b60095460405167ffffffffffffffff90911681526020016102d1565b6103786103733660046143c2565b610a29565b6040516102d1919061441f565b6104246040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102d19190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610a7f565b61018f610497366004614974565b610b3d565b61018f610177366004614a9f565b6000546040516001600160a01b0390911681526020016102d1565b61018f6104d3366004614aee565b610cdd565b6104eb6104e6366004614b73565b610cee565b6040516102d19190614bd3565b61052f610506366004614c48565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102d1565b61018f61054b366004614c72565b610e4c565b61056361055e366004614ce7565b610f06565b6040516102d19190614d02565b61018f61057e366004614d50565b611013565b61018f610591366004614dac565b611386565b61018f6105a4366004614e31565b611397565b6105bc6105b7366004614f6f565b6113d9565b60405190151581526020016102d1565b6105d461149a565b6105dd816114f6565b50565b60006105ee878901896150f8565b8051515190915015158061060757508051602001515115155b156107075760095460208a01359067ffffffffffffffff808316911610156106c6576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f9261068f929101615336565b600060405180830381600087803b1580156106a957600080fd5b505af11580156106bd573d6000803e3d6000fd5b50505050610705565b816020015151600003610705576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b8160200151518110156109095760008260200151828151811061072f5761072f615263565b6020026020010151905060008160000151905061074b816117f4565b6000610756826118f6565b602084015151815491925067ffffffffffffffff908116600160a81b9092041614158061079a575060208084015190810151905167ffffffffffffffff9182169116115b156107e357825160208401516040517feefb0cac0000000000000000000000000000000000000000000000000000000081526107da929190600401615349565b60405180910390fd5b60408301518061081f576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff166000908152600860209081526040808320848452909152902054156108925783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602481018290526044016107da565b60208085015101516108a5906001615394565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff92831602179092559251166000908152600860209081526040808320948352939052919091204290555060010161070a565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d8160405161093991906153bc565b60405180910390a16109b560008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061195d915050565b505050505050505050565b610a006109cf82840184615459565b60408051600080825260208201909252906109fa565b60608152602001906001900390816109e55790505b50611cd4565b604080516000808252602082019092529050610a2360018585858586600061195d565b50505050565b6000610a376001600461548e565b6002610a446080856154b7565b67ffffffffffffffff16610a5891906154de565b610a628585611d84565b901c166003811115610a7657610a766143f5565b90505b92915050565b6001546001600160a01b03163314610ad95760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107da565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b45611dcb565b815181518114610b81576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ccd576000848281518110610ba057610ba0615263565b60200260200101519050600081602001515190506000858481518110610bc857610bc8615263565b6020026020010151905080518214610c0c576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82811015610cbe576000828281518110610c2b57610c2b615263565b6020026020010151905080600014610cb55784602001518281518110610c5357610c53615263565b602002602001015160800151811015610cb55784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064016107da565b50600101610c0f565b50505050806001019050610b84565b50610cd88383611cd4565b505050565b610ce561149a565b6105dd81611e4c565b610d316040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610dda57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dbc575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e3c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e1e575b5050505050815250509050919050565b610e5461149a565b60005b81811015610cd8576000838383818110610e7357610e73615263565b905060400201803603810190610e8991906154f5565b9050610e9881602001516113d9565b610efd57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b50600101610e57565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191610f939061552e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbf9061552e565b8015610e3c5780601f10610fe157610100808354040283529160200191610e3c565b820191906000526020600020905b815481529060010190602001808311610fef57505050919092525091949350505050565b33301461104c576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611089565b60408051808201909152600080825260208201528152602001906001900390816110625790505b5060a085015151909150156110bd576110ba8460a00151856020015186606001518760000151602001518787611fb2565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff16818301528087015183516000948401926110f9929101614210565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015611206576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a19061117390859060040161560a565b600060405180830381600087803b15801561118d57600080fd5b505af192505050801561119e575060015b611206573d8080156111cc576040519150601f19603f3d011682016040523d82523d6000602084013e6111d1565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107da9190614210565b60408601515115801561121b57506080860151155b80611232575060608601516001600160a01b03163b155b8061127257506060860151611270906001600160a01b03167f85572ffb000000000000000000000000000000000000000000000000000000006120d1565b155b1561127f57505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf97983926112f7928992611388929160040161561d565b6000604051808303816000875af1158015611316573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261133e9190810190615659565b50915091508161137c57806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107da9190614210565b5050505050505050565b61138e61149a565b6105dd816120ed565b61139f61149a565b60005b81518110156113d5576113cd8282815181106113c0576113c0615263565b60200260200101516121a3565b6001016113a2565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7991906156ef565b6000546001600160a01b031633146114f45760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107da565b565b60005b81518110156113d557600082828151811061151657611516615263565b602002602001015190506000816020015190508067ffffffffffffffff1660000361156d576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b0316611595576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916115c09061552e565b80601f01602080910402602001604051908101604052809291908181526020018280546115ec9061552e565b80156116395780601f1061160e57610100808354040283529160200191611639565b820191906000526020600020905b81548152906001019060200180831161161c57829003601f168201915b5050505050905060008460600151905081516000036116f1578051600003611674576040516342bcdf7f60e11b815260040160405180910390fd5b600183016116828282615754565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611744565b8080519060200120828051906020012014611744576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016107da565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906117dc908690615814565b60405180910390a250505050508060010190506114f9565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b391906156ef565b156105dd576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016107da565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610a79576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016107da565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119bc8760a46158e2565b9050826060015115611a045784516119d59060206154de565b86516119e29060206154de565b6119ed9060a06158e2565b6119f791906158e2565b611a0190826158e2565b90505b368114611a46576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016107da565b5081518114611a8e5781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016107da565b611a96611dcb565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ae457611ae46143f5565b6002811115611af557611af56143f5565b9052509050600281602001516002811115611b1257611b126143f5565b148015611b665750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b4e57611b4e615263565b6000918252602090912001546001600160a01b031633145b611b9c576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611c7e576020820151611bb79060016158f5565b60ff16855114611bf3576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611c2e576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611c4092919061590e565b604051908190038120611c57918b9060200161591e565b604051602081830303815290604052805190602001209050611c7c8a828888886124e7565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611d0e576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611d7d57611d75858281518110611d4357611d43615263565b602002602001015184611d6f57858381518110611d6257611d62615263565b60200260200101516126f4565b836126f4565b600101611d25565b5050505050565b67ffffffffffffffff8216600090815260076020526040812081611da9608085615932565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146114f4576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107da565b80516001600160a01b0316611e74576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611fce57611fce613eb8565b60405190808252806020026020018201604052801561201357816020015b6040805180820190915260008082526020820152815260200190600190039081611fec5790505b50905060005b87518110156120c5576120a088828151811061203757612037615263565b602002602001015188888888888781811061205457612054615263565b90506020028101906120669190615959565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8592505050565b8282815181106120b2576120b2615263565b6020908102919091010152600101612019565b505b9695505050505050565b60006120dc8361322a565b8015610a765750610a76838361328e565b336001600160a01b038216036121455760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107da565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036121ce576000604051631b3fab5160e11b81526004016107da91906159be565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361223b57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612290565b6060840151600182015460ff6201000090910416151590151514612290576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016107da565b60a08401518051601f60ff821611156122bf576001604051631b3fab5160e11b81526004016107da91906159be565b612325858560030180548060200260200160405190810160405280929190818152602001828054801561231b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122fd575b5050505050613349565b85606001511561245457612393858560020180548060200260200160405190810160405280929190818152602001828054801561231b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122fd575050505050613349565b608086015180516123ad9060028701906020840190613e12565b5080516001850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f101561240d576002604051631b3fab5160e11b81526004016107da91906159be565b604088015161241d9060036159d8565b60ff168160ff1611612445576003604051631b3fab5160e11b81526004016107da91906159be565b612451878360016133b2565b50505b612460858360026133b2565b81516124759060038601906020850190613e12565b5060408681015160018501805460ff191660ff8316179055875180865560a089015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124ce938a939260028b019291906159f4565b60405180910390a16124df85613532565b505050505050565b6124ef613e84565b835160005b8181101561137c57600060018886846020811061251357612513615263565b61252091901a601b6158f5565b89858151811061253257612532615263565b602002602001015189868151811061254c5761254c615263565b60200260200101516040516000815260200160405260405161258a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156125ac573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561260d5761260d6143f5565b600281111561261e5761261e6143f5565b905250905060018160200151600281111561263b5761263b6143f5565b14612672576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051859060ff16601f811061268957612689615263565b6020020151156126c5576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600185826000015160ff16601f81106126e0576126e0615263565b9115156020909202015250506001016124f4565b81516126ff816117f4565b600061270a826118f6565b602085015151909150600081900361274d576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015151811461278b576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff8111156127a6576127a6613eb8565b6040519080825280602002602001820160405280156127cf578160200160208202803683370190505b50905060005b82811015612944576000876020015182815181106127f5576127f5615263565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461288857805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107da565b61291e8186600101805461289b9061552e565b80601f01602080910402602001604051908101604052809291908181526020018280546128c79061552e565b80156129145780601f106128e957610100808354040283529160200191612914565b820191906000526020600020905b8154815290600101906020018083116128f757829003601f168201915b505050505061354e565b83838151811061293057612930615263565b6020908102919091010152506001016127d5565b50600061295b858389606001518a60800151613670565b9050806000036129a3576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016107da565b8551151560005b848110156109b5576000896020015182815181106129ca576129ca615263565b6020026020010151905060006129e889836000015160600151610a29565b905060008160038111156129fe576129fe6143f5565b1480612a1b57506003816003811115612a1957612a196143f5565b145b612a72578151606001516040805167ffffffffffffffff808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a15050612e7d565b8315612b4257600454600090600160a01b900463ffffffff16612a95874261548e565b1190508080612ab557506003826003811115612ab357612ab36143f5565b145b612af7576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8b1660048201526024016107da565b8a8481518110612b0957612b09615263565b6020026020010151600014612b3c578a8481518110612b2a57612b2a615263565b60200260200101518360800181815250505b50612ba3565b6000816003811115612b5657612b566143f5565b14612ba3578151606001516040805167ffffffffffffffff808d16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612a63565b81516080015167ffffffffffffffff1615612c91576000816003811115612bcc57612bcc6143f5565b03612c915781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612c43928e929190600401615aa0565b6020604051808303816000875af1158015612c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8691906156ef565b612c91575050612e7d565b60008b604001518481518110612ca957612ca9615263565b6020026020010151905080518360a001515114612d0d578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808d16600483015290911660248201526044016107da565b612d218a84600001516060015160016136c6565b600080612d2e858461376e565b91509150612d458c866000015160600151846136c6565b8615612db5576003826003811115612d5f57612d5f6143f5565b03612db5576000846003811115612d7857612d786143f5565b14612db5578451516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526107da91908390600401615acd565b6002826003811115612dc957612dc96143f5565b14612e23576003826003811115612de257612de26143f5565b14612e23578451606001516040517f926c5a3e0000000000000000000000000000000000000000000000000000000081526107da918e918590600401615ae6565b8451805160609091015160405167ffffffffffffffff918216918f16907f8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df290612e6f9087908790615b0c565b60405180910390a450505050505b6001016129aa565b60408051808201909152600080825260208201526000612ea88760200151613838565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f519190615b2c565b90506001600160a01b0381161580612f995750612f976001600160a01b0382167faff2afbf000000000000000000000000000000000000000000000000000000006120d1565b155b15612fdb576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016107da565b6004546000908190612ffd9089908690600160e01b900463ffffffff166138de565b9150915060008060006130ca6040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b81525060405160240161307b9190615b49565b60408051601f198184030181529190526020810180516001600160e01b03167f390775370000000000000000000000000000000000000000000000000000000017905287866113886084613a0c565b9250925092508261310957816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107da9190614210565b81516020146131515781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016107da565b6000828060200190518101906131679190615c16565b9050866001600160a01b03168c6001600160a01b0316146131fc5760006131988d8a613193868a61548e565b6138de565b509050868110806131b25750816131af888361548e565b14155b156131fa576040517fa966e21f0000000000000000000000000000000000000000000000000000000081526004810183905260248101889052604481018290526064016107da565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613256827f01ffc9a70000000000000000000000000000000000000000000000000000000061328e565b8015610a795750613287827fffffffff0000000000000000000000000000000000000000000000000000000061328e565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613332575060208210155b801561333e5750600081115b979650505050505050565b60005b8151811015610cd85760ff83166000908152600360205260408120835190919084908490811061337e5761337e615263565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161334c565b60005b82518160ff161015610a23576000838260ff16815181106133d8576133d8615263565b60200260200101519050600060028111156133f5576133f56143f5565b60ff80871660009081526003602090815260408083206001600160a01b03871684529091529020546101009004166002811115613434576134346143f5565b14613455576004604051631b3fab5160e11b81526004016107da91906159be565b6001600160a01b038116613495576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134bb576134bb6143f5565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff191617610100836002811115613518576135186143f5565b0217905550905050508061352b90615c2f565b90506133b5565b60ff81166105dd576009805467ffffffffffffffff1916905550565b815160208082015160409283015192516000938493613594937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c4e565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135dd9794969395929491939101615c81565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016136149190615d78565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b60008061367e858585613b32565b9050613689816113d9565b6136975760009150506136be565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026136d56080856154b7565b67ffffffffffffffff166136e991906154de565b905060006136f78585611d84565b9050816137066001600461548e565b901b19168183600381111561371d5761371d6143f5565b67ffffffffffffffff871660009081526007602052604081209190921b9290921791829161374c608088615932565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fece670b6000000000000000000000000000000000000000000000000000000008152600090606090309063ece670b6906137b29087908790600401615dd8565b600060405180830381600087803b1580156137cc57600080fd5b505af19250505080156137dd575060015b61381c573d80801561380b576040519150601f19603f3d011682016040523d82523d6000602084013e613810565b606091505b50600392509050613831565b50506040805160208101909152600081526002905b9250929050565b6000815160201461387757816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107da9190614210565b60008280602001905181019061388d9190615c16565b90506001600160a01b038111806138a5575061040081105b15610a7957826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107da9190614210565b60008060008060006139588860405160240161390991906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a082310000000000000000000000000000000000000000000000000000000017905288886113886084613a0c565b9250925092508261399757816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107da9190614210565b60208251146139df5781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016107da565b818060200190518101906139f39190615c16565b6139fd828861548e565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613a2f57613a2f613eb8565b6040519080825280601f01601f191660200182016040528015613a59576020820181803683370190505b509150863b613a8c577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613abf577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613af8577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b1b5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b73576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b8757506101018111155b613ba4576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613bce576040516309bde33960e01b815260040160405180910390fd5b80600003613bfb5786600081518110613be957613be9615263565b60200260200101519350505050613dca565b60008167ffffffffffffffff811115613c1657613c16613eb8565b604051908082528060200260200182016040528015613c3f578160200160208202803683370190505b50905060008080805b85811015613d695760006001821b8b811603613ca35788851015613c8c578c5160018601958e918110613c7d57613c7d615263565b60200260200101519050613cc5565b8551600185019487918110613c7d57613c7d615263565b8b5160018401938d918110613cba57613cba615263565b602002602001015190505b600089861015613cf5578d5160018701968f918110613ce657613ce6615263565b60200260200101519050613d17565b8651600186019588918110613d0c57613d0c615263565b602002602001015190505b82851115613d38576040516309bde33960e01b815260040160405180910390fd5b613d428282613dd1565b878481518110613d5457613d54615263565b60209081029190910101525050600101613c48565b506001850382148015613d7b57508683145b8015613d8657508581145b613da3576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613db857613db8615263565b60200260200101519750505050505050505b9392505050565b6000818310613de957613de48284613def565b610a76565b610a7683835b604080516001602082015290810183905260608101829052600090608001613652565b828054828255906000526020600020908101928215613e74579160200282015b82811115613e74578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e32565b50613e80929150613ea3565b5090565b604051806103e00160405280601f906020820280368337509192915050565b5b80821115613e805760008155600101613ea4565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ef157613ef1613eb8565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ef157613ef1613eb8565b60405160c0810167ffffffffffffffff81118282101715613ef157613ef1613eb8565b6040805190810167ffffffffffffffff81118282101715613ef157613ef1613eb8565b6040516060810167ffffffffffffffff81118282101715613ef157613ef1613eb8565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fac57613fac613eb8565b604052919050565b600067ffffffffffffffff821115613fce57613fce613eb8565b5060051b60200190565b6001600160a01b03811681146105dd57600080fd5b803567ffffffffffffffff8116811461400557600080fd5b919050565b80151581146105dd57600080fd5b80356140058161400a565b600067ffffffffffffffff82111561403d5761403d613eb8565b50601f01601f191660200190565b600082601f83011261405c57600080fd5b813561406f61406a82614023565b613f83565b81815284602083860101111561408457600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156140b457600080fd5b823567ffffffffffffffff808211156140cc57600080fd5b818501915085601f8301126140e057600080fd5b81356140ee61406a82613fb4565b81815260059190911b8301840190848101908883111561410d57600080fd5b8585015b838110156141b3578035858111156141295760008081fd5b86016080818c03601f19018113156141415760008081fd5b614149613ece565b8983013561415681613fd8565b81526040614165848201613fed565b8b8301526060808501356141788161400a565b8383015292840135928984111561419157600091508182fd5b61419f8f8d8688010161404b565b908301525085525050918601918601614111565b5098975050505050505050565b60005b838110156141db5781810151838201526020016141c3565b50506000910152565b600081518084526141fc8160208601602086016141c0565b601f01601f19169290920160200192915050565b602081526000610a7660208301846141e4565b8060608101831015610a7957600080fd5b60008083601f84011261424657600080fd5b50813567ffffffffffffffff81111561425e57600080fd5b60208301915083602082850101111561383157600080fd5b60008083601f84011261428857600080fd5b50813567ffffffffffffffff8111156142a057600080fd5b6020830191508360208260051b850101111561383157600080fd5b60008060008060008060008060e0898b0312156142d757600080fd5b6142e18a8a614223565b9750606089013567ffffffffffffffff808211156142fe57600080fd5b61430a8c838d01614234565b909950975060808b013591508082111561432357600080fd5b61432f8c838d01614276565b909750955060a08b013591508082111561434857600080fd5b506143558b828c01614276565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561438357600080fd5b61438d8585614223565b9250606084013567ffffffffffffffff8111156143a957600080fd5b6143b586828701614234565b9497909650939450505050565b600080604083850312156143d557600080fd5b6143de83613fed565b91506143ec60208401613fed565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061441b5761441b6143f5565b9052565b60208101610a79828461440b565b600060a0828403121561443f57600080fd5b614447613ef7565b90508135815261445960208301613fed565b602082015261446a60408301613fed565b604082015261447b60608301613fed565b606082015261448c60808301613fed565b608082015292915050565b803561400581613fd8565b600082601f8301126144b357600080fd5b813560206144c361406a83613fb4565b82815260059290921b840181019181810190868411156144e257600080fd5b8286015b848110156120c557803567ffffffffffffffff808211156145075760008081fd5b8189019150608080601f19848d030112156145225760008081fd5b61452a613ece565b878401358381111561453c5760008081fd5b61454a8d8a8388010161404b565b825250604080850135848111156145615760008081fd5b61456f8e8b8389010161404b565b8a84015250606080860135858111156145885760008081fd5b6145968f8c838a010161404b565b92840192909252949092013593810193909352505083529183019183016144e6565b600061014082840312156145cb57600080fd5b6145d3613f1a565b90506145df838361442d565b815260a082013567ffffffffffffffff808211156145fc57600080fd5b6146088583860161404b565b602084015260c084013591508082111561462157600080fd5b61462d8583860161404b565b604084015261463e60e08501614497565b6060840152610100840135608084015261012084013591508082111561466357600080fd5b50614670848285016144a2565b60a08301525092915050565b600082601f83011261468d57600080fd5b8135602061469d61406a83613fb4565b82815260059290921b840181019181810190868411156146bc57600080fd5b8286015b848110156120c557803567ffffffffffffffff8111156146e05760008081fd5b6146ee8986838b01016145b8565b8452509183019183016146c0565b600082601f83011261470d57600080fd5b8135602061471d61406a83613fb4565b82815260059290921b8401810191818101908684111561473c57600080fd5b8286015b848110156120c557803567ffffffffffffffff8082111561476057600080fd5b818901915089603f83011261477457600080fd5b8582013561478461406a82613fb4565b81815260059190911b830160400190878101908c8311156147a457600080fd5b604085015b838110156147dd578035858111156147c057600080fd5b6147cf8f6040838a010161404b565b8452509189019189016147a9565b50875250505092840192508301614740565b600082601f83011261480057600080fd5b8135602061481061406a83613fb4565b8083825260208201915060208460051b87010193508684111561483257600080fd5b602086015b848110156120c55780358352918301918301614837565b600082601f83011261485f57600080fd5b8135602061486f61406a83613fb4565b82815260059290921b8401810191818101908684111561488e57600080fd5b8286015b848110156120c557803567ffffffffffffffff808211156148b35760008081fd5b818901915060a080601f19848d030112156148ce5760008081fd5b6148d6613ef7565b6148e1888501613fed565b8152604080850135848111156148f75760008081fd5b6149058e8b8389010161467c565b8a840152506060808601358581111561491e5760008081fd5b61492c8f8c838a01016146fc565b83850152506080915081860135858111156149475760008081fd5b6149558f8c838a01016147ef565b9184019190915250919093013590830152508352918301918301614892565b600080604080848603121561498857600080fd5b833567ffffffffffffffff808211156149a057600080fd5b6149ac8783880161484e565b94506020915081860135818111156149c357600080fd5b8601601f810188136149d457600080fd5b80356149e261406a82613fb4565b81815260059190911b8201840190848101908a831115614a0157600080fd5b8584015b83811015614a8d57803586811115614a1d5760008081fd5b8501603f81018d13614a2f5760008081fd5b87810135614a3f61406a82613fb4565b81815260059190911b82018a0190898101908f831115614a5f5760008081fd5b928b01925b82841015614a7d5783358252928a0192908a0190614a64565b8652505050918601918601614a05565b50809750505050505050509250929050565b600060208284031215614ab157600080fd5b813567ffffffffffffffff811115614ac857600080fd5b820160a08185031215613dca57600080fd5b803563ffffffff8116811461400557600080fd5b600060a08284031215614b0057600080fd5b614b08613ef7565b8235614b1381613fd8565b8152614b2160208401614ada565b6020820152614b3260408401614ada565b6040820152614b4360608401614ada565b60608201526080830135614b5681613fd8565b60808201529392505050565b803560ff8116811461400557600080fd5b600060208284031215614b8557600080fd5b610a7682614b62565b60008151808452602080850194506020840160005b83811015614bc85781516001600160a01b031687529582019590820190600101614ba3565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c2260e0840182614b8e565b90506040840151601f198483030160c0850152614c3f8282614b8e565b95945050505050565b60008060408385031215614c5b57600080fd5b614c6483613fed565b946020939093013593505050565b60008060208385031215614c8557600080fd5b823567ffffffffffffffff80821115614c9d57600080fd5b818501915085601f830112614cb157600080fd5b813581811115614cc057600080fd5b8660208260061b8501011115614cd557600080fd5b60209290920196919550909350505050565b600060208284031215614cf957600080fd5b610a7682613fed565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526136be60a08401826141e4565b600080600060408486031215614d6557600080fd5b833567ffffffffffffffff80821115614d7d57600080fd5b614d89878388016145b8565b94506020860135915080821115614d9f57600080fd5b506143b586828701614276565b600060208284031215614dbe57600080fd5b8135613dca81613fd8565b600082601f830112614dda57600080fd5b81356020614dea61406a83613fb4565b8083825260208201915060208460051b870101935086841115614e0c57600080fd5b602086015b848110156120c5578035614e2481613fd8565b8352918301918301614e11565b60006020808385031215614e4457600080fd5b823567ffffffffffffffff80821115614e5c57600080fd5b818501915085601f830112614e7057600080fd5b8135614e7e61406a82613fb4565b81815260059190911b83018401908481019088831115614e9d57600080fd5b8585015b838110156141b357803585811115614eb857600080fd5b860160c0818c03601f19011215614ecf5760008081fd5b614ed7613f1a565b8882013581526040614eea818401614b62565b8a8301526060614efb818501614b62565b8284015260809150614f0e828501614018565b9083015260a08381013589811115614f265760008081fd5b614f348f8d83880101614dc9565b838501525060c0840135915088821115614f4e5760008081fd5b614f5c8e8c84870101614dc9565b9083015250845250918601918601614ea1565b600060208284031215614f8157600080fd5b5035919050565b80356001600160e01b038116811461400557600080fd5b600082601f830112614fb057600080fd5b81356020614fc061406a83613fb4565b82815260069290921b84018101918181019086841115614fdf57600080fd5b8286015b848110156120c55760408189031215614ffc5760008081fd5b615004613f3d565b61500d82613fed565b815261501a858301614f88565b81860152835291830191604001614fe3565b600082601f83011261503d57600080fd5b8135602061504d61406a83613fb4565b82815260079290921b8401810191818101908684111561506c57600080fd5b8286015b848110156120c557808803608081121561508a5760008081fd5b615092613f60565b61509b83613fed565b8152604080601f19840112156150b15760008081fd5b6150b9613f3d565b92506150c6878501613fed565b83526150d3818501613fed565b8388015281870192909252606083013591810191909152835291830191608001615070565b6000602080838503121561510b57600080fd5b823567ffffffffffffffff8082111561512357600080fd5b8185019150604080838803121561513957600080fd5b615141613f3d565b83358381111561515057600080fd5b84016040818a03121561516257600080fd5b61516a613f3d565b81358581111561517957600080fd5b8201601f81018b1361518a57600080fd5b803561519861406a82613fb4565b81815260069190911b8201890190898101908d8311156151b757600080fd5b928a01925b828410156152075787848f0312156151d45760008081fd5b6151dc613f3d565b84356151e781613fd8565b81526151f4858d01614f88565b818d0152825292870192908a01906151bc565b84525050508187013593508484111561521f57600080fd5b61522b8a858401614f9f565b818801528252508385013591508282111561524557600080fd5b6152518883860161502c565b85820152809550505050505092915050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b818110156152d057835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615299565b50508583015187820388850152805180835290840192506000918401905b8083101561532a578351805167ffffffffffffffff1683528501516001600160e01b0316858301529284019260019290920191908501906152ee565b50979650505050505050565b602081526000610a766020830184615279565b67ffffffffffffffff8316815260608101613dca6020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153b5576153b561537e565b5092915050565b6000602080835260608451604080848701526153db6060870183615279565b87850151878203601f19016040890152805180835290860193506000918601905b808310156141b357845167ffffffffffffffff81511683528781015161543b89850182805167ffffffffffffffff908116835260209182015116910152565b508401518287015293860193600192909201916080909101906153fc565b60006020828403121561546b57600080fd5b813567ffffffffffffffff81111561548257600080fd5b6136be8482850161484e565b81810381811115610a7957610a7961537e565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154d2576154d26154a1565b92169190910692915050565b8082028115828204841417610a7957610a7961537e565b60006040828403121561550757600080fd5b61550f613f3d565b61551883613fed565b8152602083013560208201528091505092915050565b600181811c9082168061554257607f821691505b60208210810361556257634e487b7160e01b600052602260045260246000fd5b50919050565b805182526000602067ffffffffffffffff81840151168185015260408084015160a0604087015261559c60a08701826141e4565b9050606085015186820360608801526155b582826141e4565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561532a57835180516001600160a01b03168352860151868301529285019260019290920191908401906155d8565b602081526000610a766020830184615568565b6080815260006156306080830187615568565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561566e57600080fd5b83516156798161400a565b602085015190935067ffffffffffffffff81111561569657600080fd5b8401601f810186136156a757600080fd5b80516156b561406a82614023565b8181528760208385010111156156ca57600080fd5b6156db8260208301602086016141c0565b809450505050604084015190509250925092565b60006020828403121561570157600080fd5b8151613dca8161400a565b601f821115610cd8576000816000526020600020601f850160051c810160208610156157355750805b601f850160051c820191505b818110156124df57828155600101615741565b815167ffffffffffffffff81111561576e5761576e613eb8565b6157828161577c845461552e565b8461570c565b602080601f8311600181146157b7576000841561579f5750858301515b600019600386901b1c1916600185901b1785556124df565b600085815260208120601f198616915b828110156157e6578886015182559484019460019091019084016157c7565b50858210156158045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c166060850152506001808501608080860152600081546158668161552e565b8060a089015260c0600183166000811461588757600181146158a3576158d3565b60ff19841660c08b015260c083151560051b8b010194506158d3565b85600052602060002060005b848110156158ca5781548c82018501529088019089016158af565b8b0160c0019550505b50929998505050505050505050565b80820180821115610a7957610a7961537e565b60ff8181168382160190811115610a7957610a7961537e565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff8084168061594d5761594d6154a1565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261598e57600080fd5b83018035915067ffffffffffffffff8211156159a957600080fd5b60200191503681900382131561383157600080fd5b60208101600583106159d2576159d26143f5565b91905290565b60ff81811683821602908116908181146153b5576153b561537e565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a4c5784546001600160a01b031683526001948501949284019201615a27565b50508481036060860152865180825290820192508187019060005b81811015615a8c5782516001600160a01b031685529383019391830191600101615a67565b50505060ff851660808501525090506120c7565b600067ffffffffffffffff808616835280851660208401525060606040830152614c3f60608301846141e4565b8281526040602082015260006136be60408301846141e4565b67ffffffffffffffff848116825283166020820152606081016136be604083018461440b565b615b16818461440b565b6040602082015260006136be60408301846141e4565b600060208284031215615b3e57600080fd5b8151613dca81613fd8565b6020815260008251610100806020850152615b686101208501836141e4565b91506020850151615b85604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615bbf60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bdc84836141e4565b935060c08701519150808685030160e0870152615bf984836141e4565b935060e08701519150808685030183870152506120c783826141e4565b600060208284031215615c2857600080fd5b5051919050565b600060ff821660ff8103615c4557615c4561537e565b60010192915050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526120c760808301846141e4565b86815260c060208201526000615c9a60c08301886141e4565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d6b57601f19868403018952815160808151818652615d17828701826141e4565b9150508582015185820387870152615d2f82826141e4565b91505060408083015186830382880152615d4983826141e4565b6060948501519790940196909652505098840198925090830190600101615cf1565b5090979650505050505050565b602081526000610a766020830184615cd4565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d6b57601f19868403018952615dc68383516141e4565b98840198925090830190600101615daa565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e406101808501836141e4565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e7d84836141e4565b935060608801519150615e9c6101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615ec38282615cd4565b9150508281036020840152614c3f8185615d8b56fea164736f6c6343000818000a",
-}
-
-var EVM2EVMMultiOffRampABI = EVM2EVMMultiOffRampMetaData.ABI
-
-var EVM2EVMMultiOffRampBin = EVM2EVMMultiOffRampMetaData.Bin
-
-func DeployEVM2EVMMultiOffRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig EVM2EVMMultiOffRampStaticConfig, dynamicConfig EVM2EVMMultiOffRampDynamicConfig, sourceChainConfigs []EVM2EVMMultiOffRampSourceChainConfigArgs) (common.Address, *types.Transaction, *EVM2EVMMultiOffRamp, error) {
- parsed, err := EVM2EVMMultiOffRampMetaData.GetAbi()
- if err != nil {
- return common.Address{}, nil, nil, err
- }
- if parsed == nil {
- return common.Address{}, nil, nil, errors.New("GetABI returned nil")
- }
-
- address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EVM2EVMMultiOffRampBin), backend, staticConfig, dynamicConfig, sourceChainConfigs)
- if err != nil {
- return common.Address{}, nil, nil, err
- }
- return address, tx, &EVM2EVMMultiOffRamp{address: address, abi: *parsed, EVM2EVMMultiOffRampCaller: EVM2EVMMultiOffRampCaller{contract: contract}, EVM2EVMMultiOffRampTransactor: EVM2EVMMultiOffRampTransactor{contract: contract}, EVM2EVMMultiOffRampFilterer: EVM2EVMMultiOffRampFilterer{contract: contract}}, nil
-}
-
-type EVM2EVMMultiOffRamp struct {
- address common.Address
- abi abi.ABI
- EVM2EVMMultiOffRampCaller
- EVM2EVMMultiOffRampTransactor
- EVM2EVMMultiOffRampFilterer
-}
-
-type EVM2EVMMultiOffRampCaller struct {
- contract *bind.BoundContract
-}
-
-type EVM2EVMMultiOffRampTransactor struct {
- contract *bind.BoundContract
-}
-
-type EVM2EVMMultiOffRampFilterer struct {
- contract *bind.BoundContract
-}
-
-type EVM2EVMMultiOffRampSession struct {
- Contract *EVM2EVMMultiOffRamp
- CallOpts bind.CallOpts
- TransactOpts bind.TransactOpts
-}
-
-type EVM2EVMMultiOffRampCallerSession struct {
- Contract *EVM2EVMMultiOffRampCaller
- CallOpts bind.CallOpts
-}
-
-type EVM2EVMMultiOffRampTransactorSession struct {
- Contract *EVM2EVMMultiOffRampTransactor
- TransactOpts bind.TransactOpts
-}
-
-type EVM2EVMMultiOffRampRaw struct {
- Contract *EVM2EVMMultiOffRamp
-}
-
-type EVM2EVMMultiOffRampCallerRaw struct {
- Contract *EVM2EVMMultiOffRampCaller
-}
-
-type EVM2EVMMultiOffRampTransactorRaw struct {
- Contract *EVM2EVMMultiOffRampTransactor
-}
-
-func NewEVM2EVMMultiOffRamp(address common.Address, backend bind.ContractBackend) (*EVM2EVMMultiOffRamp, error) {
- abi, err := abi.JSON(strings.NewReader(EVM2EVMMultiOffRampABI))
- if err != nil {
- return nil, err
- }
- contract, err := bindEVM2EVMMultiOffRamp(address, backend, backend, backend)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRamp{address: address, abi: abi, EVM2EVMMultiOffRampCaller: EVM2EVMMultiOffRampCaller{contract: contract}, EVM2EVMMultiOffRampTransactor: EVM2EVMMultiOffRampTransactor{contract: contract}, EVM2EVMMultiOffRampFilterer: EVM2EVMMultiOffRampFilterer{contract: contract}}, nil
-}
-
-func NewEVM2EVMMultiOffRampCaller(address common.Address, caller bind.ContractCaller) (*EVM2EVMMultiOffRampCaller, error) {
- contract, err := bindEVM2EVMMultiOffRamp(address, caller, nil, nil)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampCaller{contract: contract}, nil
-}
-
-func NewEVM2EVMMultiOffRampTransactor(address common.Address, transactor bind.ContractTransactor) (*EVM2EVMMultiOffRampTransactor, error) {
- contract, err := bindEVM2EVMMultiOffRamp(address, nil, transactor, nil)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampTransactor{contract: contract}, nil
-}
-
-func NewEVM2EVMMultiOffRampFilterer(address common.Address, filterer bind.ContractFilterer) (*EVM2EVMMultiOffRampFilterer, error) {
- contract, err := bindEVM2EVMMultiOffRamp(address, nil, nil, filterer)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampFilterer{contract: contract}, nil
-}
-
-func bindEVM2EVMMultiOffRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
- parsed, err := EVM2EVMMultiOffRampMetaData.GetAbi()
- if err != nil {
- return nil, err
- }
- return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _EVM2EVMMultiOffRamp.Contract.EVM2EVMMultiOffRampCaller.contract.Call(opts, result, method, params...)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.EVM2EVMMultiOffRampTransactor.contract.Transfer(opts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.EVM2EVMMultiOffRampTransactor.contract.Transact(opts, method, params...)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _EVM2EVMMultiOffRamp.Contract.contract.Call(opts, result, method, params...)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.contract.Transfer(opts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.contract.Transact(opts, method, params...)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "ccipReceive", arg0)
-
- if err != nil {
- return err
- }
-
- return err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) CcipReceive(arg0 ClientAny2EVMMessage) error {
- return _EVM2EVMMultiOffRamp.Contract.CcipReceive(&_EVM2EVMMultiOffRamp.CallOpts, arg0)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) error {
- return _EVM2EVMMultiOffRamp.Contract.CcipReceive(&_EVM2EVMMultiOffRamp.CallOpts, arg0)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) GetDynamicConfig(opts *bind.CallOpts) (EVM2EVMMultiOffRampDynamicConfig, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "getDynamicConfig")
-
- if err != nil {
- return *new(EVM2EVMMultiOffRampDynamicConfig), err
- }
-
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOffRampDynamicConfig)).(*EVM2EVMMultiOffRampDynamicConfig)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) GetDynamicConfig() (EVM2EVMMultiOffRampDynamicConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetDynamicConfig(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) GetDynamicConfig() (EVM2EVMMultiOffRampDynamicConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetDynamicConfig(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "getExecutionState", sourceChainSelector, sequenceNumber)
-
- if err != nil {
- return *new(uint8), err
- }
-
- out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetExecutionState(&_EVM2EVMMultiOffRamp.CallOpts, sourceChainSelector, sequenceNumber)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetExecutionState(&_EVM2EVMMultiOffRamp.CallOpts, sourceChainSelector, sequenceNumber)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "getLatestPriceSequenceNumber")
-
- if err != nil {
- return *new(uint64), err
- }
-
- out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) GetLatestPriceSequenceNumber() (uint64, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetLatestPriceSequenceNumber(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) GetLatestPriceSequenceNumber() (uint64, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetLatestPriceSequenceNumber(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "getMerkleRoot", sourceChainSelector, root)
-
- if err != nil {
- return *new(*big.Int), err
- }
-
- out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetMerkleRoot(&_EVM2EVMMultiOffRamp.CallOpts, sourceChainSelector, root)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetMerkleRoot(&_EVM2EVMMultiOffRamp.CallOpts, sourceChainSelector, root)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "getSourceChainConfig", sourceChainSelector)
-
- if err != nil {
- return *new(EVM2EVMMultiOffRampSourceChainConfig), err
- }
-
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOffRampSourceChainConfig)).(*EVM2EVMMultiOffRampSourceChainConfig)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) GetSourceChainConfig(sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetSourceChainConfig(&_EVM2EVMMultiOffRamp.CallOpts, sourceChainSelector)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetSourceChainConfig(&_EVM2EVMMultiOffRamp.CallOpts, sourceChainSelector)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) GetStaticConfig(opts *bind.CallOpts) (EVM2EVMMultiOffRampStaticConfig, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "getStaticConfig")
-
- if err != nil {
- return *new(EVM2EVMMultiOffRampStaticConfig), err
- }
-
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOffRampStaticConfig)).(*EVM2EVMMultiOffRampStaticConfig)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) GetStaticConfig() (EVM2EVMMultiOffRampStaticConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetStaticConfig(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) GetStaticConfig() (EVM2EVMMultiOffRampStaticConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.GetStaticConfig(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) IsBlessed(opts *bind.CallOpts, root [32]byte) (bool, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "isBlessed", root)
-
- if err != nil {
- return *new(bool), err
- }
-
- out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) IsBlessed(root [32]byte) (bool, error) {
- return _EVM2EVMMultiOffRamp.Contract.IsBlessed(&_EVM2EVMMultiOffRamp.CallOpts, root)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) IsBlessed(root [32]byte) (bool, error) {
- return _EVM2EVMMultiOffRamp.Contract.IsBlessed(&_EVM2EVMMultiOffRamp.CallOpts, root)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "latestConfigDetails", ocrPluginType)
-
- if err != nil {
- return *new(MultiOCR3BaseOCRConfig), err
- }
-
- out0 := *abi.ConvertType(out[0], new(MultiOCR3BaseOCRConfig)).(*MultiOCR3BaseOCRConfig)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.LatestConfigDetails(&_EVM2EVMMultiOffRamp.CallOpts, ocrPluginType)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) {
- return _EVM2EVMMultiOffRamp.Contract.LatestConfigDetails(&_EVM2EVMMultiOffRamp.CallOpts, ocrPluginType)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "owner")
-
- if err != nil {
- return *new(common.Address), err
- }
-
- out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) Owner() (common.Address, error) {
- return _EVM2EVMMultiOffRamp.Contract.Owner(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) Owner() (common.Address, error) {
- return _EVM2EVMMultiOffRamp.Contract.Owner(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
- var out []interface{}
- err := _EVM2EVMMultiOffRamp.contract.Call(opts, &out, "typeAndVersion")
-
- if err != nil {
- return *new(string), err
- }
-
- out0 := *abi.ConvertType(out[0], new(string)).(*string)
-
- return out0, err
-
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) TypeAndVersion() (string, error) {
- return _EVM2EVMMultiOffRamp.Contract.TypeAndVersion(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampCallerSession) TypeAndVersion() (string, error) {
- return _EVM2EVMMultiOffRamp.Contract.TypeAndVersion(&_EVM2EVMMultiOffRamp.CallOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "acceptOwnership")
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) AcceptOwnership() (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.AcceptOwnership(&_EVM2EVMMultiOffRamp.TransactOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) AcceptOwnership() (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.AcceptOwnership(&_EVM2EVMMultiOffRamp.TransactOpts)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []EVM2EVMMultiOffRampSourceChainConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "applySourceChainConfigUpdates", sourceChainConfigUpdates)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []EVM2EVMMultiOffRampSourceChainConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ApplySourceChainConfigUpdates(&_EVM2EVMMultiOffRamp.TransactOpts, sourceChainConfigUpdates)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []EVM2EVMMultiOffRampSourceChainConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ApplySourceChainConfigUpdates(&_EVM2EVMMultiOffRamp.TransactOpts, sourceChainConfigUpdates)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) Commit(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "commit", reportContext, report, rs, ss, rawVs)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) Commit(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.Commit(&_EVM2EVMMultiOffRamp.TransactOpts, reportContext, report, rs, ss, rawVs)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) Commit(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.Commit(&_EVM2EVMMultiOffRamp.TransactOpts, reportContext, report, rs, ss, rawVs)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) Execute(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "execute", reportContext, report)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) Execute(reportContext [3][32]byte, report []byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.Execute(&_EVM2EVMMultiOffRamp.TransactOpts, reportContext, report)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) Execute(reportContext [3][32]byte, report []byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.Execute(&_EVM2EVMMultiOffRamp.TransactOpts, reportContext, report)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "executeSingleMessage", message, offchainTokenData)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ExecuteSingleMessage(&_EVM2EVMMultiOffRamp.TransactOpts, message, offchainTokenData)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ExecuteSingleMessage(&_EVM2EVMMultiOffRamp.TransactOpts, message, offchainTokenData)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "manuallyExecute", reports, gasLimitOverrides)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) ManuallyExecute(reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ManuallyExecute(&_EVM2EVMMultiOffRamp.TransactOpts, reports, gasLimitOverrides)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) ManuallyExecute(reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ManuallyExecute(&_EVM2EVMMultiOffRamp.TransactOpts, reports, gasLimitOverrides)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) ResetUnblessedRoots(opts *bind.TransactOpts, rootToReset []EVM2EVMMultiOffRampUnblessedRoot) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "resetUnblessedRoots", rootToReset)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) ResetUnblessedRoots(rootToReset []EVM2EVMMultiOffRampUnblessedRoot) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ResetUnblessedRoots(&_EVM2EVMMultiOffRamp.TransactOpts, rootToReset)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) ResetUnblessedRoots(rootToReset []EVM2EVMMultiOffRampUnblessedRoot) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.ResetUnblessedRoots(&_EVM2EVMMultiOffRamp.TransactOpts, rootToReset)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig EVM2EVMMultiOffRampDynamicConfig) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) SetDynamicConfig(dynamicConfig EVM2EVMMultiOffRampDynamicConfig) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.SetDynamicConfig(&_EVM2EVMMultiOffRamp.TransactOpts, dynamicConfig)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) SetDynamicConfig(dynamicConfig EVM2EVMMultiOffRampDynamicConfig) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.SetDynamicConfig(&_EVM2EVMMultiOffRamp.TransactOpts, dynamicConfig)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "setOCR3Configs", ocrConfigArgs)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.SetOCR3Configs(&_EVM2EVMMultiOffRamp.TransactOpts, ocrConfigArgs)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.SetOCR3Configs(&_EVM2EVMMultiOffRamp.TransactOpts, ocrConfigArgs)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.contract.Transact(opts, "transferOwnership", to)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.TransferOwnership(&_EVM2EVMMultiOffRamp.TransactOpts, to)
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOffRamp.Contract.TransferOwnership(&_EVM2EVMMultiOffRamp.TransactOpts, to)
-}
-
-type EVM2EVMMultiOffRampAlreadyAttemptedIterator struct {
- Event *EVM2EVMMultiOffRampAlreadyAttempted
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampAlreadyAttemptedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampAlreadyAttempted)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampAlreadyAttempted)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampAlreadyAttemptedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampAlreadyAttemptedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampAlreadyAttempted struct {
- SourceChainSelector uint64
- SequenceNumber uint64
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterAlreadyAttempted(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampAlreadyAttemptedIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "AlreadyAttempted")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampAlreadyAttemptedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "AlreadyAttempted", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampAlreadyAttempted) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "AlreadyAttempted")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampAlreadyAttempted)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseAlreadyAttempted(log types.Log) (*EVM2EVMMultiOffRampAlreadyAttempted, error) {
- event := new(EVM2EVMMultiOffRampAlreadyAttempted)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampCommitReportAcceptedIterator struct {
- Event *EVM2EVMMultiOffRampCommitReportAccepted
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampCommitReportAcceptedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampCommitReportAccepted)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampCommitReportAccepted)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampCommitReportAcceptedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampCommitReportAcceptedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampCommitReportAccepted struct {
- Report EVM2EVMMultiOffRampCommitReport
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterCommitReportAccepted(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampCommitReportAcceptedIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "CommitReportAccepted")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampCommitReportAcceptedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "CommitReportAccepted", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampCommitReportAccepted) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "CommitReportAccepted")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampCommitReportAccepted)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseCommitReportAccepted(log types.Log) (*EVM2EVMMultiOffRampCommitReportAccepted, error) {
- event := new(EVM2EVMMultiOffRampCommitReportAccepted)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampConfigSetIterator struct {
- Event *EVM2EVMMultiOffRampConfigSet
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampConfigSetIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampConfigSetIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampConfigSetIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampConfigSet struct {
- OcrPluginType uint8
- ConfigDigest [32]byte
- Signers []common.Address
- Transmitters []common.Address
- F uint8
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampConfigSetIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "ConfigSet")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampConfigSetIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampConfigSet) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "ConfigSet")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseConfigSet(log types.Log) (*EVM2EVMMultiOffRampConfigSet, error) {
- event := new(EVM2EVMMultiOffRampConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampDynamicConfigSetIterator struct {
- Event *EVM2EVMMultiOffRampDynamicConfigSet
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampDynamicConfigSetIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampDynamicConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampDynamicConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampDynamicConfigSetIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampDynamicConfigSetIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampDynamicConfigSet struct {
- DynamicConfig EVM2EVMMultiOffRampDynamicConfig
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterDynamicConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampDynamicConfigSetIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "DynamicConfigSet")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampDynamicConfigSetIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "DynamicConfigSet", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampDynamicConfigSet) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "DynamicConfigSet")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampDynamicConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseDynamicConfigSet(log types.Log) (*EVM2EVMMultiOffRampDynamicConfigSet, error) {
- event := new(EVM2EVMMultiOffRampDynamicConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampExecutionStateChangedIterator struct {
- Event *EVM2EVMMultiOffRampExecutionStateChanged
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampExecutionStateChangedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampExecutionStateChanged)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampExecutionStateChanged)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampExecutionStateChangedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampExecutionStateChangedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampExecutionStateChanged struct {
- SourceChainSelector uint64
- SequenceNumber uint64
- MessageId [32]byte
- State uint8
- ReturnData []byte
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*EVM2EVMMultiOffRampExecutionStateChangedIterator, error) {
-
- var sourceChainSelectorRule []interface{}
- for _, sourceChainSelectorItem := range sourceChainSelector {
- sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
- }
- var sequenceNumberRule []interface{}
- for _, sequenceNumberItem := range sequenceNumber {
- sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem)
- }
- var messageIdRule []interface{}
- for _, messageIdItem := range messageId {
- messageIdRule = append(messageIdRule, messageIdItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampExecutionStateChangedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "ExecutionStateChanged", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) {
-
- var sourceChainSelectorRule []interface{}
- for _, sourceChainSelectorItem := range sourceChainSelector {
- sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
- }
- var sequenceNumberRule []interface{}
- for _, sequenceNumberItem := range sequenceNumber {
- sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem)
- }
- var messageIdRule []interface{}
- for _, messageIdItem := range messageId {
- messageIdRule = append(messageIdRule, messageIdItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule)
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampExecutionStateChanged)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseExecutionStateChanged(log types.Log) (*EVM2EVMMultiOffRampExecutionStateChanged, error) {
- event := new(EVM2EVMMultiOffRampExecutionStateChanged)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampOwnershipTransferRequestedIterator struct {
- Event *EVM2EVMMultiOffRampOwnershipTransferRequested
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampOwnershipTransferRequestedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampOwnershipTransferRequested)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampOwnershipTransferRequested)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampOwnershipTransferRequestedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampOwnershipTransferRequestedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampOwnershipTransferRequested struct {
- From common.Address
- To common.Address
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOffRampOwnershipTransferRequestedIterator, error) {
-
- var fromRule []interface{}
- for _, fromItem := range from {
- fromRule = append(fromRule, fromItem)
- }
- var toRule []interface{}
- for _, toItem := range to {
- toRule = append(toRule, toItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampOwnershipTransferRequestedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
-
- var fromRule []interface{}
- for _, fromItem := range from {
- fromRule = append(fromRule, fromItem)
- }
- var toRule []interface{}
- for _, toItem := range to {
- toRule = append(toRule, toItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampOwnershipTransferRequested)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*EVM2EVMMultiOffRampOwnershipTransferRequested, error) {
- event := new(EVM2EVMMultiOffRampOwnershipTransferRequested)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampOwnershipTransferredIterator struct {
- Event *EVM2EVMMultiOffRampOwnershipTransferred
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampOwnershipTransferredIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampOwnershipTransferred)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampOwnershipTransferred)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampOwnershipTransferredIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampOwnershipTransferredIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampOwnershipTransferred struct {
- From common.Address
- To common.Address
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOffRampOwnershipTransferredIterator, error) {
-
- var fromRule []interface{}
- for _, fromItem := range from {
- fromRule = append(fromRule, fromItem)
- }
- var toRule []interface{}
- for _, toItem := range to {
- toRule = append(toRule, toItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampOwnershipTransferredIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
-
- var fromRule []interface{}
- for _, fromItem := range from {
- fromRule = append(fromRule, fromItem)
- }
- var toRule []interface{}
- for _, toItem := range to {
- toRule = append(toRule, toItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampOwnershipTransferred)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseOwnershipTransferred(log types.Log) (*EVM2EVMMultiOffRampOwnershipTransferred, error) {
- event := new(EVM2EVMMultiOffRampOwnershipTransferred)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampRootRemovedIterator struct {
- Event *EVM2EVMMultiOffRampRootRemoved
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampRootRemovedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampRootRemoved)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampRootRemoved)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampRootRemovedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampRootRemovedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampRootRemoved struct {
- Root [32]byte
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterRootRemoved(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampRootRemovedIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "RootRemoved")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampRootRemovedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "RootRemoved", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampRootRemoved) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "RootRemoved")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampRootRemoved)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseRootRemoved(log types.Log) (*EVM2EVMMultiOffRampRootRemoved, error) {
- event := new(EVM2EVMMultiOffRampRootRemoved)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator struct {
- Event *EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage struct {
- SourceChainSelector uint64
- SequenceNumber uint64
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "SkippedAlreadyExecutedMessage")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "SkippedAlreadyExecutedMessage", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "SkippedAlreadyExecutedMessage")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseSkippedAlreadyExecutedMessage(log types.Log) (*EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage, error) {
- event := new(EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampSourceChainConfigSetIterator struct {
- Event *EVM2EVMMultiOffRampSourceChainConfigSet
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampSourceChainConfigSetIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampSourceChainConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampSourceChainConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampSourceChainConfigSetIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampSourceChainConfigSetIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampSourceChainConfigSet struct {
- SourceChainSelector uint64
- SourceConfig EVM2EVMMultiOffRampSourceChainConfig
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*EVM2EVMMultiOffRampSourceChainConfigSetIterator, error) {
-
- var sourceChainSelectorRule []interface{}
- for _, sourceChainSelectorItem := range sourceChainSelector {
- sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampSourceChainConfigSetIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "SourceChainConfigSet", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error) {
-
- var sourceChainSelectorRule []interface{}
- for _, sourceChainSelectorItem := range sourceChainSelector {
- sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule)
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampSourceChainConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseSourceChainConfigSet(log types.Log) (*EVM2EVMMultiOffRampSourceChainConfigSet, error) {
- event := new(EVM2EVMMultiOffRampSourceChainConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampSourceChainSelectorAddedIterator struct {
- Event *EVM2EVMMultiOffRampSourceChainSelectorAdded
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampSourceChainSelectorAddedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampSourceChainSelectorAdded)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampSourceChainSelectorAdded)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampSourceChainSelectorAddedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampSourceChainSelectorAddedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampSourceChainSelectorAdded struct {
- SourceChainSelector uint64
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampSourceChainSelectorAddedIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "SourceChainSelectorAdded")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampSourceChainSelectorAddedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "SourceChainSelectorAdded", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampSourceChainSelectorAdded) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "SourceChainSelectorAdded")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampSourceChainSelectorAdded)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseSourceChainSelectorAdded(log types.Log) (*EVM2EVMMultiOffRampSourceChainSelectorAdded, error) {
- event := new(EVM2EVMMultiOffRampSourceChainSelectorAdded)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampStaticConfigSetIterator struct {
- Event *EVM2EVMMultiOffRampStaticConfigSet
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampStaticConfigSetIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampStaticConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampStaticConfigSet)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampStaticConfigSetIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampStaticConfigSetIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampStaticConfigSet struct {
- StaticConfig EVM2EVMMultiOffRampStaticConfig
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterStaticConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampStaticConfigSetIterator, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "StaticConfigSet")
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampStaticConfigSetIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "StaticConfigSet", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampStaticConfigSet) (event.Subscription, error) {
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "StaticConfigSet")
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampStaticConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseStaticConfigSet(log types.Log) (*EVM2EVMMultiOffRampStaticConfigSet, error) {
- event := new(EVM2EVMMultiOffRampStaticConfigSet)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-type EVM2EVMMultiOffRampTransmittedIterator struct {
- Event *EVM2EVMMultiOffRampTransmitted
-
- contract *bind.BoundContract
- event string
-
- logs chan types.Log
- sub ethereum.Subscription
- done bool
- fail error
-}
-
-func (it *EVM2EVMMultiOffRampTransmittedIterator) Next() bool {
-
- if it.fail != nil {
- return false
- }
-
- if it.done {
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampTransmitted)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- default:
- return false
- }
- }
-
- select {
- case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOffRampTransmitted)
- if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
- it.fail = err
- return false
- }
- it.Event.Raw = log
- return true
-
- case err := <-it.sub.Err():
- it.done = true
- it.fail = err
- return it.Next()
- }
-}
-
-func (it *EVM2EVMMultiOffRampTransmittedIterator) Error() error {
- return it.fail
-}
-
-func (it *EVM2EVMMultiOffRampTransmittedIterator) Close() error {
- it.sub.Unsubscribe()
- return nil
-}
-
-type EVM2EVMMultiOffRampTransmitted struct {
- OcrPluginType uint8
- ConfigDigest [32]byte
- SequenceNumber uint64
- Raw types.Log
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*EVM2EVMMultiOffRampTransmittedIterator, error) {
-
- var ocrPluginTypeRule []interface{}
- for _, ocrPluginTypeItem := range ocrPluginType {
- ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.FilterLogs(opts, "Transmitted", ocrPluginTypeRule)
- if err != nil {
- return nil, err
- }
- return &EVM2EVMMultiOffRampTransmittedIterator{contract: _EVM2EVMMultiOffRamp.contract, event: "Transmitted", logs: logs, sub: sub}, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) WatchTransmitted(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error) {
-
- var ocrPluginTypeRule []interface{}
- for _, ocrPluginTypeItem := range ocrPluginType {
- ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem)
- }
-
- logs, sub, err := _EVM2EVMMultiOffRamp.contract.WatchLogs(opts, "Transmitted", ocrPluginTypeRule)
- if err != nil {
- return nil, err
- }
- return event.NewSubscription(func(quit <-chan struct{}) error {
- defer sub.Unsubscribe()
- for {
- select {
- case log := <-logs:
-
- event := new(EVM2EVMMultiOffRampTransmitted)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil {
- return err
- }
- event.Raw = log
-
- select {
- case sink <- event:
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- case err := <-sub.Err():
- return err
- case <-quit:
- return nil
- }
- }
- }), nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRampFilterer) ParseTransmitted(log types.Log) (*EVM2EVMMultiOffRampTransmitted, error) {
- event := new(EVM2EVMMultiOffRampTransmitted)
- if err := _EVM2EVMMultiOffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil {
- return nil, err
- }
- event.Raw = log
- return event, nil
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRamp) ParseLog(log types.Log) (generated.AbigenLog, error) {
- switch log.Topics[0] {
- case _EVM2EVMMultiOffRamp.abi.Events["AlreadyAttempted"].ID:
- return _EVM2EVMMultiOffRamp.ParseAlreadyAttempted(log)
- case _EVM2EVMMultiOffRamp.abi.Events["CommitReportAccepted"].ID:
- return _EVM2EVMMultiOffRamp.ParseCommitReportAccepted(log)
- case _EVM2EVMMultiOffRamp.abi.Events["ConfigSet"].ID:
- return _EVM2EVMMultiOffRamp.ParseConfigSet(log)
- case _EVM2EVMMultiOffRamp.abi.Events["DynamicConfigSet"].ID:
- return _EVM2EVMMultiOffRamp.ParseDynamicConfigSet(log)
- case _EVM2EVMMultiOffRamp.abi.Events["ExecutionStateChanged"].ID:
- return _EVM2EVMMultiOffRamp.ParseExecutionStateChanged(log)
- case _EVM2EVMMultiOffRamp.abi.Events["OwnershipTransferRequested"].ID:
- return _EVM2EVMMultiOffRamp.ParseOwnershipTransferRequested(log)
- case _EVM2EVMMultiOffRamp.abi.Events["OwnershipTransferred"].ID:
- return _EVM2EVMMultiOffRamp.ParseOwnershipTransferred(log)
- case _EVM2EVMMultiOffRamp.abi.Events["RootRemoved"].ID:
- return _EVM2EVMMultiOffRamp.ParseRootRemoved(log)
- case _EVM2EVMMultiOffRamp.abi.Events["SkippedAlreadyExecutedMessage"].ID:
- return _EVM2EVMMultiOffRamp.ParseSkippedAlreadyExecutedMessage(log)
- case _EVM2EVMMultiOffRamp.abi.Events["SourceChainConfigSet"].ID:
- return _EVM2EVMMultiOffRamp.ParseSourceChainConfigSet(log)
- case _EVM2EVMMultiOffRamp.abi.Events["SourceChainSelectorAdded"].ID:
- return _EVM2EVMMultiOffRamp.ParseSourceChainSelectorAdded(log)
- case _EVM2EVMMultiOffRamp.abi.Events["StaticConfigSet"].ID:
- return _EVM2EVMMultiOffRamp.ParseStaticConfigSet(log)
- case _EVM2EVMMultiOffRamp.abi.Events["Transmitted"].ID:
- return _EVM2EVMMultiOffRamp.ParseTransmitted(log)
-
- default:
- return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
- }
-}
-
-func (EVM2EVMMultiOffRampAlreadyAttempted) Topic() common.Hash {
- return common.HexToHash("0x3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120")
-}
-
-func (EVM2EVMMultiOffRampCommitReportAccepted) Topic() common.Hash {
- return common.HexToHash("0x3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d")
-}
-
-func (EVM2EVMMultiOffRampConfigSet) Topic() common.Hash {
- return common.HexToHash("0xab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547")
-}
-
-func (EVM2EVMMultiOffRampDynamicConfigSet) Topic() common.Hash {
- return common.HexToHash("0xa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d")
-}
-
-func (EVM2EVMMultiOffRampExecutionStateChanged) Topic() common.Hash {
- return common.HexToHash("0x8c324ce1367b83031769f6a813e3bb4c117aba2185789d66b98b791405be6df2")
-}
-
-func (EVM2EVMMultiOffRampOwnershipTransferRequested) Topic() common.Hash {
- return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
-}
-
-func (EVM2EVMMultiOffRampOwnershipTransferred) Topic() common.Hash {
- return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
-}
-
-func (EVM2EVMMultiOffRampRootRemoved) Topic() common.Hash {
- return common.HexToHash("0x202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12")
-}
-
-func (EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage) Topic() common.Hash {
- return common.HexToHash("0x3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c")
-}
-
-func (EVM2EVMMultiOffRampSourceChainConfigSet) Topic() common.Hash {
- return common.HexToHash("0x49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b")
-}
-
-func (EVM2EVMMultiOffRampSourceChainSelectorAdded) Topic() common.Hash {
- return common.HexToHash("0xf4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb9")
-}
-
-func (EVM2EVMMultiOffRampStaticConfigSet) Topic() common.Hash {
- return common.HexToHash("0x683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d8")
-}
-
-func (EVM2EVMMultiOffRampTransmitted) Topic() common.Hash {
- return common.HexToHash("0x198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0")
-}
-
-func (_EVM2EVMMultiOffRamp *EVM2EVMMultiOffRamp) Address() common.Address {
- return _EVM2EVMMultiOffRamp.address
-}
-
-type EVM2EVMMultiOffRampInterface interface {
- CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error
-
- GetDynamicConfig(opts *bind.CallOpts) (EVM2EVMMultiOffRampDynamicConfig, error)
-
- GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error)
-
- GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error)
-
- GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error)
-
- GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (EVM2EVMMultiOffRampSourceChainConfig, error)
-
- GetStaticConfig(opts *bind.CallOpts) (EVM2EVMMultiOffRampStaticConfig, error)
-
- IsBlessed(opts *bind.CallOpts, root [32]byte) (bool, error)
-
- LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error)
-
- Owner(opts *bind.CallOpts) (common.Address, error)
-
- TypeAndVersion(opts *bind.CallOpts) (string, error)
-
- AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error)
-
- ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []EVM2EVMMultiOffRampSourceChainConfigArgs) (*types.Transaction, error)
-
- Commit(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error)
-
- Execute(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error)
-
- ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error)
-
- ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error)
-
- ResetUnblessedRoots(opts *bind.TransactOpts, rootToReset []EVM2EVMMultiOffRampUnblessedRoot) (*types.Transaction, error)
-
- SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig EVM2EVMMultiOffRampDynamicConfig) (*types.Transaction, error)
-
- SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error)
-
- TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error)
-
- FilterAlreadyAttempted(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampAlreadyAttemptedIterator, error)
-
- WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampAlreadyAttempted) (event.Subscription, error)
-
- ParseAlreadyAttempted(log types.Log) (*EVM2EVMMultiOffRampAlreadyAttempted, error)
-
- FilterCommitReportAccepted(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampCommitReportAcceptedIterator, error)
-
- WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampCommitReportAccepted) (event.Subscription, error)
-
- ParseCommitReportAccepted(log types.Log) (*EVM2EVMMultiOffRampCommitReportAccepted, error)
-
- FilterConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampConfigSetIterator, error)
-
- WatchConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampConfigSet) (event.Subscription, error)
-
- ParseConfigSet(log types.Log) (*EVM2EVMMultiOffRampConfigSet, error)
-
- FilterDynamicConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampDynamicConfigSetIterator, error)
-
- WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampDynamicConfigSet) (event.Subscription, error)
-
- ParseDynamicConfigSet(log types.Log) (*EVM2EVMMultiOffRampDynamicConfigSet, error)
-
- FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*EVM2EVMMultiOffRampExecutionStateChangedIterator, error)
-
- WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error)
-
- ParseExecutionStateChanged(log types.Log) (*EVM2EVMMultiOffRampExecutionStateChanged, error)
-
- FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOffRampOwnershipTransferRequestedIterator, error)
-
- WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
-
- ParseOwnershipTransferRequested(log types.Log) (*EVM2EVMMultiOffRampOwnershipTransferRequested, error)
-
- FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOffRampOwnershipTransferredIterator, error)
-
- WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
-
- ParseOwnershipTransferred(log types.Log) (*EVM2EVMMultiOffRampOwnershipTransferred, error)
-
- FilterRootRemoved(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampRootRemovedIterator, error)
-
- WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampRootRemoved) (event.Subscription, error)
-
- ParseRootRemoved(log types.Log) (*EVM2EVMMultiOffRampRootRemoved, error)
-
- FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampSkippedAlreadyExecutedMessageIterator, error)
-
- WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage) (event.Subscription, error)
-
- ParseSkippedAlreadyExecutedMessage(log types.Log) (*EVM2EVMMultiOffRampSkippedAlreadyExecutedMessage, error)
-
- FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*EVM2EVMMultiOffRampSourceChainConfigSetIterator, error)
-
- WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error)
-
- ParseSourceChainConfigSet(log types.Log) (*EVM2EVMMultiOffRampSourceChainConfigSet, error)
-
- FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampSourceChainSelectorAddedIterator, error)
-
- WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampSourceChainSelectorAdded) (event.Subscription, error)
-
- ParseSourceChainSelectorAdded(log types.Log) (*EVM2EVMMultiOffRampSourceChainSelectorAdded, error)
-
- FilterStaticConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOffRampStaticConfigSetIterator, error)
-
- WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampStaticConfigSet) (event.Subscription, error)
-
- ParseStaticConfigSet(log types.Log) (*EVM2EVMMultiOffRampStaticConfigSet, error)
-
- FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*EVM2EVMMultiOffRampTransmittedIterator, error)
-
- WatchTransmitted(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error)
-
- ParseTransmitted(log types.Log) (*EVM2EVMMultiOffRampTransmitted, error)
-
- ParseLog(log types.Log) (generated.AbigenLog, error)
-
- Address() common.Address
-}
diff --git a/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go b/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go
index 6a0a3ac4d8b..94c80882d4e 100644
--- a/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go
+++ b/core/gethwrappers/ccip/generated/lock_release_token_pool_and_proxy/lock_release_token_pool_and_proxy.go
@@ -82,8 +82,8 @@ type TokenPoolChainUpdate struct {
}
var LockReleaseTokenPoolAndProxyMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityNotAccepted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canAcceptLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRebalancer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"provideLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rebalancer\",\"type\":\"address\"}],\"name\":\"setRebalancer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x6101006040523480156200001257600080fd5b5060405162004f0a38038062004f0a83398101604081905262000035916200056d565b84848483838383833380600081620000945760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c757620000c78162000186565b5050506001600160a01b0384161580620000e857506001600160a01b038116155b80620000fb57506001600160a01b038216155b156200011a576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016d576040805160008152602081019091526200016d908462000231565b5050505094151560e05250620006de9650505050505050565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008b565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000252576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002dd57600083828151811062000276576200027662000690565b60209081029190910101519050620002906002826200038e565b15620002d3576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000255565b5060005b81518110156200038957600082828151811062000302576200030262000690565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200032e575062000380565b6200033b600282620003ae565b156200037e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002e1565b505050565b6000620003a5836001600160a01b038416620003c5565b90505b92915050565b6000620003a5836001600160a01b038416620004c9565b60008181526001830160205260408120548015620004be576000620003ec600183620006a6565b85549091506000906200040290600190620006a6565b90508082146200046e57600086600001828154811062000426576200042662000690565b90600052602060002001549050808760000184815481106200044c576200044c62000690565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004825762000482620006c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a8565b6000915050620003a8565b60008181526001830160205260408120546200051257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a8565b506000620003a8565b6001600160a01b03811681146200053157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000557816200051b565b919050565b805180151581146200055757600080fd5b600080600080600060a086880312156200058657600080fd5b855162000593816200051b565b602087810151919650906001600160401b0380821115620005b357600080fd5b818901915089601f830112620005c857600080fd5b815181811115620005dd57620005dd62000534565b8060051b604051601f19603f8301168101818110858211171562000605576200060562000534565b60405291825284820192508381018501918c8311156200062457600080fd5b938501935b828510156200064d576200063d856200054a565b8452938501939285019262000629565b80995050505050505062000664604087016200054a565b925062000674606087016200055c565b915062000684608087016200054a565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e0516147896200078160003960008181610545015261191b0152600081816105f201528181611f550152612b110152600081816105cc01528181611ce801526122080152600081816102ad01528181610302015281816107d0015281816108a20152818161097c015281816119dd01528181611c08015281816121280152818161230e01528181612aa70152612cfc01526147896000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638da5cb5b11610145578063c0d78655116100bd578063db6327dc1161008c578063e0351e1311610071578063e0351e13146105f0578063eb521a4c14610616578063f2fde38b1461062957600080fd5b8063db6327dc146105b7578063dc0bd971146105ca57600080fd5b8063c0d7865514610569578063c4bffe2b1461057c578063c75eea9c14610591578063cf7401f3146105a457600080fd5b8063a8d87a3b11610114578063b0f479a1116100f9578063b0f479a114610512578063b794658014610530578063bb98546b1461054357600080fd5b8063a8d87a3b14610490578063af58d59f146104a357600080fd5b80638da5cb5b1461042a5780639766b932146104485780639a4575b91461045b578063a7cd63b71461047b57600080fd5b806354c8a4f3116101d857806378a010b2116101a75780637d54534e1161018c5780637d54534e146103f157806383826b2b146104045780638926f54f1461041757600080fd5b806378a010b2146103d657806379ba5097146103e957600080fd5b806354c8a4f31461037f57806366320087146103925780636cfd1553146103a55780636d3d1a58146103b857600080fd5b806321df0da71161021457806321df0da7146102ab578063240028e8146102f2578063390775371461033f578063432a6ba31461036157600080fd5b806301ffc9a7146102465780630a2fd4931461026e5780630a861f2a1461028e578063181f5a77146102a3575b600080fd5b6102596102543660046136a6565b61063c565b60405190151581526020015b60405180910390f35b61028161027c366004613705565b610698565b604051610265919061378e565b6102a161029c3660046137a1565b610748565b005b6102816108f9565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610265565b6102596103003660046137e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61035261034d366004613804565b610915565b60405190518152602001610265565b600a5473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a161038d36600461388c565b610a4e565b6102a16103a03660046138f8565b610ac9565b6102a16103b33660046137e7565b610b55565b60085473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a16103e4366004613924565b610ba4565b6102a1610d13565b6102a16103ff3660046137e7565b610e10565b6102596104123660046139a7565b610e5f565b610259610425366004613705565b610f2c565b60005473ffffffffffffffffffffffffffffffffffffffff166102cd565b6102a16104563660046137e7565b610f43565b61046e6104693660046139de565b610fd2565b6040516102659190613a19565b61048361109b565b6040516102659190613a79565b6102cd61049e366004613705565b503090565b6104b66104b1366004613705565b6110ac565b604051610265919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102cd565b61028161053e366004613705565b611181565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102a16105773660046137e7565b6111ac565b610584611280565b6040516102659190613ad3565b6104b661059f366004613705565b611338565b6102a16105b2366004613c8a565b61140a565b6102a16105c5366004613ccf565b611493565b7f00000000000000000000000000000000000000000000000000000000000000006102cd565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102a16106243660046137a1565b611919565b6102a16106373660046137e7565b611a35565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d40566000000000000000000000000000000000000000000000000000000001480610692575061069282611a49565b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106c390613d11565b80601f01602080910402602001604051908101604052809291908181526020018280546106ef90613d11565b801561073c5780601f106107115761010080835404028352916020019161073c565b820191906000526020600020905b81548152906001019060200180831161071f57829003601f168201915b50505050509050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146107a0576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561082c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108509190613d64565b1015610888576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c973ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163383611b2d565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b60405180606001604052806022815260200161475b6022913981565b60408051602081019091526000815261093561093083613e19565b611c01565b60095473ffffffffffffffffffffffffffffffffffffffff166109ac576109a761096560608401604085016137e7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906060850135611b2d565b6109bd565b6109bd6109b883613e19565b611e32565b6109cd60608301604084016137e7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f528460600135604051610a2f91815260200190565b60405180910390a3506040805160208101909152606090910135815290565b610a56611ed0565b610ac384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611f5392505050565b50505050565b610ad1611ed0565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050505050565b610b5d611ed0565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610bac611ed0565b610bb583610f2c565b610bf7576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610797565b67ffffffffffffffff831660009081526007602052604081206004018054610c1e90613d11565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90613d11565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610cc6838583613f56565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610d0593929190614070565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610797565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e18611ed0565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610f255750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2591906140d4565b9392505050565b6000610692600567ffffffffffffffff8416612109565b610f4b611ed0565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b6040805180820190915260608082526020820152610ff7610ff2836140f1565b612121565b60095473ffffffffffffffffffffffffffffffffffffffff161561102657611026611021836140f1565b6122eb565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a2604051806040016040528061108084602001602081019061053e9190613705565b81526040805160208181019092526000815291015292915050565b60606110a76002612405565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261069290612412565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106c390613d11565b6111b4611ed0565b73ffffffffffffffffffffffffffffffffffffffff8116611201576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610fc6565b6060600061128e6005612405565b90506000815167ffffffffffffffff8111156112ac576112ac613b15565b6040519080825280602002602001820160405280156112d5578160200160208202803683370190505b50905060005b8251811015611331578281815181106112f6576112f6614193565b602002602001015182828151811061131057611310614193565b67ffffffffffffffff909216602092830291909101909101526001016112db565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261069290612412565b60085473ffffffffffffffffffffffffffffffffffffffff16331480159061144a575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15611483576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b61148e8383836124c4565b505050565b61149b611ed0565b60005b8181101561148e5760008383838181106114ba576114ba614193565b90506020028101906114cc91906141c2565b6114d590614200565b90506114ea81608001518260200151156125ae565b6114fd8160a001518260200151156125ae565b8060200151156117f957805161151f9060059067ffffffffffffffff166126e7565b6115645780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610797565b60408101515115806115795750606081015151155b156115b0576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c1790911696151502959095179098559081015194015193811693169091029190911760038201559151909190600482019061179190826142b4565b50606082015160058201906117a690826142b4565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506117ec94939291906143ce565b60405180910390a1611910565b80516118119060059067ffffffffffffffff166126f3565b6118565780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610797565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906118bf6004830182613658565b6118cd600583016000613658565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b5060010161149e565b7f0000000000000000000000000000000000000000000000000000000000000000611970576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119c3576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b611a0573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846126ff565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611a3d611ed0565b611a468161275d565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf000000000000000000000000000000000000000000000000000000001480611adc57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061069257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261148e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612852565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611c965760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610797565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6891906140d4565b15611d9f576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dac816020015161295e565b6000611dbb8260200151610698565b9050805160001480611ddf575080805190602001208260a001518051906020012014155b15611e1c578160a001516040517f24eb47e5000000000000000000000000000000000000000000000000000000008152600401610797919061378e565b611e2e82602001518360600151612a84565b5050565b60095481516040808401516060850151602086015192517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694638627fad694611e9b9490939291600401614467565b600060405180830381600087803b158015611eb557600080fd5b505af1158015611ec9573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610797565b565b7f0000000000000000000000000000000000000000000000000000000000000000611faa576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015612040576000838281518110611fca57611fca614193565b60200260200101519050611fe8816002612acb90919063ffffffff16565b156120375760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611fad565b5060005b815181101561148e57600082828151811061206157612061614193565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120a55750612101565b6120b0600282612aed565b156120ff5760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101612044565b60008181526001830160205260408120541515610f25565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146121b65760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610797565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015612264573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228891906140d4565b156122bf576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122cc8160400151612b0f565b6122d98160200151612b8e565b611a4681602001518260600151612cdc565b60095460608201516123389173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690611b2d565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909516946396875445946123a0949392916004016144c8565b6000604051808303816000875af11580156123bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e2e9190810190614528565b60606000610f2583612d20565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526124a082606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261248491906145c5565b85608001516fffffffffffffffffffffffffffffffff16612d7b565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6124cd83610f2c565b61250f576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610797565b61251a8260006125ae565b67ffffffffffffffff8316600090815260076020526040902061253d9083612da5565b6125488160006125ae565b67ffffffffffffffff8316600090815260076020526040902061256e9060020182612da5565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516125a1939291906145d8565b60405180910390a1505050565b8151156126755781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612604575060408201516fffffffffffffffffffffffffffffffff16155b1561263d57816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610797919061465b565b8015611e2e576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff161515806126ae575060208201516fffffffffffffffffffffffffffffffff1615155b15611e2e57816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610797919061465b565b6000610f258383612f47565b6000610f258383612f96565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610ac39085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611b7f565b3373ffffffffffffffffffffffffffffffffffffffff8216036127dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610797565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006128b4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130899092919063ffffffff16565b80519091501561148e57808060200190518101906128d291906140d4565b61148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610797565b61296781610f2c565b6129a9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610797565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4c91906140d4565b611a46576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b67ffffffffffffffff82166000908152600760205260409020611e2e90600201827f0000000000000000000000000000000000000000000000000000000000000000613098565b6000610f258373ffffffffffffffffffffffffffffffffffffffff8416612f96565b6000610f258373ffffffffffffffffffffffffffffffffffffffff8416612f47565b7f000000000000000000000000000000000000000000000000000000000000000015611a4657612b4060028261341b565b611a46576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610797565b612b9781610f2c565b612bd9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610797565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c769190614697565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610797565b67ffffffffffffffff82166000908152600760205260409020611e2e90827f0000000000000000000000000000000000000000000000000000000000000000613098565b60608160000180548060200260200160405190810160405280929190818152602001828054801561073c57602002820191906000526020600020905b815481526020019060010190808311612d5c5750505050509050919050565b6000612d9a85612d8b84866146b4565b612d9590876146cb565b61344a565b90505b949350505050565b8154600090612dce90700100000000000000000000000000000000900463ffffffff16426145c5565b90508015612e705760018301548354612e16916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612d7b565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612e96916fffffffffffffffffffffffffffffffff908116911661344a565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906125a190849061465b565b6000818152600183016020526040812054612f8e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610692565b506000610692565b6000818152600183016020526040812054801561307f576000612fba6001836145c5565b8554909150600090612fce906001906145c5565b9050808214613033576000866000018281548110612fee57612fee614193565b906000526020600020015490508087600001848154811061301157613011614193565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613044576130446146de565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610692565b6000915050610692565b6060612d9d8484600085613460565b825474010000000000000000000000000000000000000000900460ff1615806130bf575081155b156130c957505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061310f90700100000000000000000000000000000000900463ffffffff16426145c5565b905080156131cf5781831115613151576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461318b9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612d7b565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156132865773ffffffffffffffffffffffffffffffffffffffff841661322e576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610797565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610797565b848310156133995760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906132ca90826145c5565b6132d4878a6145c5565b6132de91906146cb565b6132e8919061470d565b905073ffffffffffffffffffffffffffffffffffffffff8616613341576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610797565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610797565b6133a385846145c5565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610f25565b60008183106134595781610f25565b5090919050565b6060824710156134f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610797565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161351b9190614748565b60006040518083038185875af1925050503d8060008114613558576040519150601f19603f3d011682016040523d82523d6000602084013e61355d565b606091505b509150915061356e87838387613579565b979650505050505050565b6060831561360f5782516000036136085773ffffffffffffffffffffffffffffffffffffffff85163b613608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610797565b5081612d9d565b612d9d83838151156136245781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610797919061378e565b50805461366490613d11565b6000825580601f10613674575050565b601f016020900490600052602060002090810190611a4691905b808211156136a2576000815560010161368e565b5090565b6000602082840312156136b857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f2557600080fd5b803567ffffffffffffffff8116811461370057600080fd5b919050565b60006020828403121561371757600080fd5b610f25826136e8565b60005b8381101561373b578181015183820152602001613723565b50506000910152565b6000815180845261375c816020860160208601613720565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f256020830184613744565b6000602082840312156137b357600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611a4657600080fd5b8035613700816137ba565b6000602082840312156137f957600080fd5b8135610f25816137ba565b60006020828403121561381657600080fd5b813567ffffffffffffffff81111561382d57600080fd5b82016101008185031215610f2557600080fd5b60008083601f84011261385257600080fd5b50813567ffffffffffffffff81111561386a57600080fd5b6020830191508360208260051b850101111561388557600080fd5b9250929050565b600080600080604085870312156138a257600080fd5b843567ffffffffffffffff808211156138ba57600080fd5b6138c688838901613840565b909650945060208701359150808211156138df57600080fd5b506138ec87828801613840565b95989497509550505050565b6000806040838503121561390b57600080fd5b8235613916816137ba565b946020939093013593505050565b60008060006040848603121561393957600080fd5b613942846136e8565b9250602084013567ffffffffffffffff8082111561395f57600080fd5b818601915086601f83011261397357600080fd5b81358181111561398257600080fd5b87602082850101111561399457600080fd5b6020830194508093505050509250925092565b600080604083850312156139ba57600080fd5b6139c3836136e8565b915060208301356139d3816137ba565b809150509250929050565b6000602082840312156139f057600080fd5b813567ffffffffffffffff811115613a0757600080fd5b820160a08185031215610f2557600080fd5b602081526000825160406020840152613a356060840182613744565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613a708282613744565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac757835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613a95565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac757835167ffffffffffffffff1683529284019291840191600101613aef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613b6857613b68613b15565b60405290565b60405160c0810167ffffffffffffffff81118282101715613b6857613b68613b15565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613bd857613bd8613b15565b604052919050565b8015158114611a4657600080fd5b803561370081613be0565b80356fffffffffffffffffffffffffffffffff8116811461370057600080fd5b600060608284031215613c2b57600080fd5b6040516060810181811067ffffffffffffffff82111715613c4e57613c4e613b15565b6040529050808235613c5f81613be0565b8152613c6d60208401613bf9565b6020820152613c7e60408401613bf9565b60408201525092915050565b600080600060e08486031215613c9f57600080fd5b613ca8846136e8565b9250613cb78560208601613c19565b9150613cc68560808601613c19565b90509250925092565b60008060208385031215613ce257600080fd5b823567ffffffffffffffff811115613cf957600080fd5b613d0585828601613840565b90969095509350505050565b600181811c90821680613d2557607f821691505b602082108103613d5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613d7657600080fd5b5051919050565b600067ffffffffffffffff821115613d9757613d97613b15565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613dd457600080fd5b8135613de7613de282613d7d565b613b91565b818152846020838601011115613dfc57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101008236031215613e2c57600080fd5b613e34613b44565b823567ffffffffffffffff80821115613e4c57600080fd5b613e5836838701613dc3565b8352613e66602086016136e8565b6020840152613e77604086016137dc565b604084015260608501356060840152613e92608086016137dc565b608084015260a0850135915080821115613eab57600080fd5b613eb736838701613dc3565b60a084015260c0850135915080821115613ed057600080fd5b613edc36838701613dc3565b60c084015260e0850135915080821115613ef557600080fd5b50613f0236828601613dc3565b60e08301525092915050565b601f82111561148e576000816000526020600020601f850160051c81016020861015613f375750805b601f850160051c820191505b81811015610b4d57828155600101613f43565b67ffffffffffffffff831115613f6e57613f6e613b15565b613f8283613f7c8354613d11565b83613f0e565b6000601f841160018114613fd45760008515613f9e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611ec9565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140235786850135825560209485019460019092019101614003565b508682101561405e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006140836040830186613744565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b6000602082840312156140e657600080fd5b8151610f2581613be0565b600060a0823603121561410357600080fd5b60405160a0810167ffffffffffffffff828210818311171561412757614127613b15565b81604052843591508082111561413c57600080fd5b5061414936828601613dc3565b825250614158602084016136e8565b6020820152604083013561416b816137ba565b6040820152606083810135908201526080830135614188816137ba565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18336030181126141f657600080fd5b9190910192915050565b6000610140823603121561421357600080fd5b61421b613b6e565b614224836136e8565b815261423260208401613bee565b6020820152604083013567ffffffffffffffff8082111561425257600080fd5b61425e36838701613dc3565b6040840152606085013591508082111561427757600080fd5b5061428436828601613dc3565b6060830152506142973660808501613c19565b60808201526142a93660e08501613c19565b60a082015292915050565b815167ffffffffffffffff8111156142ce576142ce613b15565b6142e2816142dc8454613d11565b84613f0e565b602080601f83116001811461433557600084156142ff5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610b4d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561438257888601518255948401946001909101908401614363565b50858210156143be57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526143f281840187613744565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506144309050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613a70565b60a08152600061447a60a0830187613744565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a0602082015260006144f760a0830186613744565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b60006020828403121561453a57600080fd5b815167ffffffffffffffff81111561455157600080fd5b8201601f8101841361456257600080fd5b8051614570613de282613d7d565b81815285602083850101111561458557600080fd5b613a70826020830160208601613720565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561069257610692614596565b67ffffffffffffffff8416815260e0810161462460208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612d9d565b6060810161069282848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156146a957600080fd5b8151610f25816137ba565b808202811582820484141761069257610692614596565b8082018082111561069257610692614596565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082614743577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082516141f681846020870161372056fe4c6f636b52656c65617365546f6b656e506f6f6c416e6450726f787920312e352e30a164736f6c6343000818000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityNotAccepted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"oldPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"LegacyPoolChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"previousPoolAddress\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canAcceptLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"onRampAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreviousPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRebalancer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePool\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"provideLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPoolPriorTo1_5\",\"name\":\"prevPool\",\"type\":\"address\"}],\"name\":\"setPreviousPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rebalancer\",\"type\":\"address\"}],\"name\":\"setRebalancer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"setRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ Bin: "0x6101006040523480156200001257600080fd5b5060405162004f4338038062004f4383398101604081905262000035916200056d565b84848483838383833380600081620000945760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c757620000c78162000186565b5050506001600160a01b0384161580620000e857506001600160a01b038116155b80620000fb57506001600160a01b038216155b156200011a576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0384811660805282811660a052600480546001600160a01b031916918316919091179055825115801560c0526200016d576040805160008152602081019091526200016d908462000231565b5050505094151560e05250620006de9650505050505050565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008b565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60c05162000252576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620002dd57600083828151811062000276576200027662000690565b60209081029190910101519050620002906002826200038e565b15620002d3576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000255565b5060005b81518110156200038957600082828151811062000302576200030262000690565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200032e575062000380565b6200033b600282620003ae565b156200037e576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620002e1565b505050565b6000620003a5836001600160a01b038416620003c5565b90505b92915050565b6000620003a5836001600160a01b038416620004c9565b60008181526001830160205260408120548015620004be576000620003ec600183620006a6565b85549091506000906200040290600190620006a6565b90508082146200046e57600086600001828154811062000426576200042662000690565b90600052602060002001549050808760000184815481106200044c576200044c62000690565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004825762000482620006c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003a8565b6000915050620003a8565b60008181526001830160205260408120546200051257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003a8565b506000620003a8565b6001600160a01b03811681146200053157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000557816200051b565b919050565b805180151581146200055757600080fd5b600080600080600060a086880312156200058657600080fd5b855162000593816200051b565b602087810151919650906001600160401b0380821115620005b357600080fd5b818901915089601f830112620005c857600080fd5b815181811115620005dd57620005dd62000534565b8060051b604051601f19603f8301168101818110858211171562000605576200060562000534565b60405291825284820192508381018501918c8311156200062457600080fd5b938501935b828510156200064d576200063d856200054a565b8452938501939285019262000629565b80995050505050505062000664604087016200054a565b925062000674606087016200055c565b915062000684608087016200054a565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003a857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e0516147c2620007816000396000818161057e015261195401526000818161062b01528181611f8e0152612b4a01526000818161060501528181611d2101526122410152600081816102c80152818161031d01528181610809015281816108db015281816109b501528181611a1601528181611c41015281816121610152818161234701528181612ae00152612d3501526147c26000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80639766b93211610145578063c0d78655116100bd578063db6327dc1161008c578063e0351e1311610071578063e0351e1314610629578063eb521a4c1461064f578063f2fde38b1461066257600080fd5b8063db6327dc146105f0578063dc0bd9711461060357600080fd5b8063c0d78655146105a2578063c4bffe2b146105b5578063c75eea9c146105ca578063cf7401f3146105dd57600080fd5b8063a8d87a3b11610114578063b0f479a1116100f9578063b0f479a11461054b578063b794658014610569578063bb98546b1461057c57600080fd5b8063a8d87a3b146104c9578063af58d59f146104dc57600080fd5b80639766b932146104635780639a4575b914610476578063a2b261d814610496578063a7cd63b7146104b457600080fd5b806366320087116101d857806379ba5097116101a757806383826b2b1161018c57806383826b2b1461041f5780638926f54f146104325780638da5cb5b1461044557600080fd5b806379ba5097146104045780637d54534e1461040c57600080fd5b806366320087146103ad5780636cfd1553146103c05780636d3d1a58146103d357806378a010b2146103f157600080fd5b806321df0da71161022f5780633907753711610214578063390775371461035a578063432a6ba31461037c57806354c8a4f31461039a57600080fd5b806321df0da7146102c6578063240028e81461030d57600080fd5b806301ffc9a7146102615780630a2fd493146102895780630a861f2a146102a9578063181f5a77146102be575b600080fd5b61027461026f3660046136df565b610675565b60405190151581526020015b60405180910390f35b61029c61029736600461373e565b6106d1565b60405161028091906137c7565b6102bc6102b73660046137da565b610781565b005b61029c610932565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610280565b61027461031b366004613820565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61036d61036836600461383d565b61094e565b60405190518152602001610280565b600a5473ffffffffffffffffffffffffffffffffffffffff166102e8565b6102bc6103a83660046138c5565b610a87565b6102bc6103bb366004613931565b610b02565b6102bc6103ce366004613820565b610b8e565b60085473ffffffffffffffffffffffffffffffffffffffff166102e8565b6102bc6103ff36600461395d565b610bdd565b6102bc610d4c565b6102bc61041a366004613820565b610e49565b61027461042d3660046139e0565b610e98565b61027461044036600461373e565b610f65565b60005473ffffffffffffffffffffffffffffffffffffffff166102e8565b6102bc610471366004613820565b610f7c565b610489610484366004613a17565b61100b565b6040516102809190613a52565b60095473ffffffffffffffffffffffffffffffffffffffff166102e8565b6104bc6110d4565b6040516102809190613ab2565b6102e86104d736600461373e565b503090565b6104ef6104ea36600461373e565b6110e5565b604051610280919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102e8565b61029c61057736600461373e565b6111ba565b7f0000000000000000000000000000000000000000000000000000000000000000610274565b6102bc6105b0366004613820565b6111e5565b6105bd6112b9565b6040516102809190613b0c565b6104ef6105d836600461373e565b611371565b6102bc6105eb366004613cc3565b611443565b6102bc6105fe366004613d08565b6114cc565b7f00000000000000000000000000000000000000000000000000000000000000006102e8565b7f0000000000000000000000000000000000000000000000000000000000000000610274565b6102bc61065d3660046137da565b611952565b6102bc610670366004613820565b611a6e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d405660000000000000000000000000000000000000000000000000000000014806106cb57506106cb82611a82565b92915050565b67ffffffffffffffff811660009081526007602052604090206004018054606091906106fc90613d4a565b80601f016020809104026020016040519081016040528092919081815260200182805461072890613d4a565b80156107755780601f1061074a57610100808354040283529160200191610775565b820191906000526020600020905b81548152906001019060200180831161075857829003601f168201915b50505050509050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108899190613d9d565b10156108c1576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61090273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163383611b66565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b6040518060600160405280602281526020016147946022913981565b60408051602081019091526000815261096e61096983613e52565b611c3a565b60095473ffffffffffffffffffffffffffffffffffffffff166109e5576109e061099e6060840160408501613820565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906060850135611b66565b6109f6565b6109f66109f183613e52565b611e6b565b610a066060830160408401613820565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f528460600135604051610a6891815260200190565b60405180910390a3506040805160208101909152606090910135815290565b610a8f611f09565b610afc84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611f8c92505050565b50505050565b610b0a611f09565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610b7257600080fd5b505af1158015610b86573d6000803e3d6000fd5b505050505050565b610b96611f09565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610be5611f09565b610bee83610f65565b610c30576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016107d0565b67ffffffffffffffff831660009081526007602052604081206004018054610c5790613d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8390613d4a565b8015610cd05780601f10610ca557610100808354040283529160200191610cd0565b820191906000526020600020905b815481529060010190602001808311610cb357829003601f168201915b5050505067ffffffffffffffff8616600090815260076020526040902091925050600401610cff838583613f8f565b508367ffffffffffffffff167fdb4d6220746a38cbc5335f7e108f7de80f482f4d23350253dfd0917df75a14bf828585604051610d3e939291906140a9565b60405180910390a250505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107d0565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e51611f09565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8216301480610f5e5750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86169281019290925273ffffffffffffffffffffffffffffffffffffffff848116602484015216906383826b2b90604401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e919061410d565b9392505050565b60006106cb600567ffffffffffffffff8416612142565b610f84611f09565b6009805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f81accd0a7023865eaa51b3399dd0eafc488bf3ba238402911e1659cfe860f22891015b60405180910390a15050565b604080518082019091526060808252602082015261103061102b8361412a565b61215a565b60095473ffffffffffffffffffffffffffffffffffffffff161561105f5761105f61105a8361412a565b612324565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a260405180604001604052806110b9846020016020810190610577919061373e565b81526040805160208181019092526000815291015292915050565b60606110e0600261243e565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526106cb9061244b565b67ffffffffffffffff811660009081526007602052604090206005018054606091906106fc90613d4a565b6111ed611f09565b73ffffffffffffffffffffffffffffffffffffffff811661123a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f16849101610fff565b606060006112c7600561243e565b90506000815167ffffffffffffffff8111156112e5576112e5613b4e565b60405190808252806020026020018201604052801561130e578160200160208202803683370190505b50905060005b825181101561136a5782818151811061132f5761132f6141cc565b6020026020010151828281518110611349576113496141cc565b67ffffffffffffffff90921660209283029190910190910152600101611314565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526106cb9061244b565b60085473ffffffffffffffffffffffffffffffffffffffff163314801590611483575060005473ffffffffffffffffffffffffffffffffffffffff163314155b156114bc576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016107d0565b6114c78383836124fd565b505050565b6114d4611f09565b60005b818110156114c75760008383838181106114f3576114f36141cc565b905060200281019061150591906141fb565b61150e90614239565b905061152381608001518260200151156125e7565b6115368160a001518260200151156125e7565b8060200151156118325780516115589060059067ffffffffffffffff16612720565b61159d5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b60408101515115806115b25750606081015151155b156115e9576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161012081018252608083810180516020908101516fffffffffffffffffffffffffffffffff9081168486019081524263ffffffff90811660a0808901829052865151151560c08a01528651860151851660e08a015295518901518416610100890152918752875180860189529489018051850151841686528585019290925281515115158589015281518401518316606080870191909152915188015183168587015283870194855288880151878901908152828a015183890152895167ffffffffffffffff1660009081526007865289902088518051825482890151838e01519289167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316177001000000000000000000000000000000009188168202177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90811674010000000000000000000000000000000000000000941515850217865584890151948d0151948a16948a168202949094176001860155995180516002860180549b8301519f830151918b169b9093169a909a179d9096168a029c909c179091169615150295909517909855908101519401519381169316909102919091176003820155915190919060048201906117ca90826142ed565b50606082015160058201906117df90826142ed565b505081516060830151608084015160a08501516040517f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c295506118259493929190614407565b60405180910390a1611949565b805161184a9060059067ffffffffffffffff1661272c565b61188f5780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b805167ffffffffffffffff16600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906118f86004830182613691565b611906600583016000613691565b5050805160405167ffffffffffffffff90911681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599169060200160405180910390a15b506001016114d7565b7f00000000000000000000000000000000000000000000000000000000000000006119a9576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119fc576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024016107d0565b611a3e73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084612738565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611a76611f09565b611a7f81612796565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf000000000000000000000000000000000000000000000000000000001480611b1557507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806106cb57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261288b565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614611ccf5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107d0565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da1919061410d565b15611dd8576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de58160200151612997565b6000611df482602001516106d1565b9050805160001480611e18575080805190602001208260a001518051906020012014155b15611e55578160a001516040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016107d091906137c7565b611e6782602001518360600151612abd565b5050565b60095481516040808401516060850151602086015192517f8627fad600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90951694638627fad694611ed494909392916004016144a0565b600060405180830381600087803b158015611eee57600080fd5b505af1158015611f02573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611f8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107d0565b565b7f0000000000000000000000000000000000000000000000000000000000000000611fe3576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015612079576000838281518110612003576120036141cc565b60200260200101519050612021816002612b0490919063ffffffff16565b156120705760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611fe6565b5060005b81518110156114c757600082828151811061209a5761209a6141cc565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120de575061213a565b6120e9600282612b26565b156121385760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010161207d565b60008181526001830160205260408120541515610f5e565b60808101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146121ef5760808101516040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107d0565b60208101516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815260809190911b77ffffffffffffffff000000000000000000000000000000001660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa15801561229d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c1919061410d565b156122f8576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123058160400151612b48565b6123128160200151612bc7565b611a7f81602001518260600151612d15565b60095460608201516123719173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692911690611b66565b60095460408083015183516060850151602086015193517f9687544500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909516946396875445946123d994939291600401614501565b6000604051808303816000875af11580156123f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e679190810190614561565b60606000610f5e83612d59565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526124d982606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426124bd91906145fe565b85608001516fffffffffffffffffffffffffffffffff16612db4565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61250683610f65565b612548576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016107d0565b6125538260006125e7565b67ffffffffffffffff831660009081526007602052604090206125769083612dde565b6125818160006125e7565b67ffffffffffffffff831660009081526007602052604090206125a79060020182612dde565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516125da93929190614611565b60405180910390a1505050565b8151156126ae5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff1610158061263d575060408201516fffffffffffffffffffffffffffffffff16155b1561267657816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016107d09190614694565b8015611e67576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff161515806126e7575060208201516fffffffffffffffffffffffffffffffff1615155b15611e6757816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107d09190614694565b6000610f5e8383612f80565b6000610f5e8383612fcf565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610afc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bb8565b3373ffffffffffffffffffffffffffffffffffffffff821603612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107d0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006128ed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130c29092919063ffffffff16565b8051909150156114c7578080602001905181019061290b919061410d565b6114c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d0565b6129a081610f65565b6129e2576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016107d0565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a85919061410d565b611a7f576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016107d0565b67ffffffffffffffff82166000908152600760205260409020611e6790600201827f00000000000000000000000000000000000000000000000000000000000000006130d1565b6000610f5e8373ffffffffffffffffffffffffffffffffffffffff8416612fcf565b6000610f5e8373ffffffffffffffffffffffffffffffffffffffff8416612f80565b7f000000000000000000000000000000000000000000000000000000000000000015611a7f57612b79600282613454565b611a7f576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016107d0565b612bd081610f65565b612c12576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016107d0565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612caf91906146d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7f576040517f728fe07b0000000000000000000000000000000000000000000000000000000081523360048201526024016107d0565b67ffffffffffffffff82166000908152600760205260409020611e6790827f00000000000000000000000000000000000000000000000000000000000000006130d1565b60608160000180548060200260200160405190810160405280929190818152602001828054801561077557602002820191906000526020600020905b815481526020019060010190808311612d955750505050509050919050565b6000612dd385612dc484866146ed565b612dce9087614704565b613483565b90505b949350505050565b8154600090612e0790700100000000000000000000000000000000900463ffffffff16426145fe565b90508015612ea95760018301548354612e4f916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612db4565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612ecf916fffffffffffffffffffffffffffffffff9081169116613483565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906125da908490614694565b6000818152600183016020526040812054612fc7575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106cb565b5060006106cb565b600081815260018301602052604081205480156130b8576000612ff36001836145fe565b8554909150600090613007906001906145fe565b905080821461306c576000866000018281548110613027576130276141cc565b906000526020600020015490508087600001848154811061304a5761304a6141cc565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061307d5761307d614717565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106cb565b60009150506106cb565b6060612dd68484600085613499565b825474010000000000000000000000000000000000000000900460ff1615806130f8575081155b1561310257505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061314890700100000000000000000000000000000000900463ffffffff16426145fe565b90508015613208578183111561318a576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546131c49083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612db4565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156132bf5773ffffffffffffffffffffffffffffffffffffffff8416613267576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016107d0565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016107d0565b848310156133d25760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061330390826145fe565b61330d878a6145fe565b6133179190614704565b6133219190614746565b905073ffffffffffffffffffffffffffffffffffffffff861661337a576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016107d0565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016107d0565b6133dc85846145fe565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610f5e565b60008183106134925781610f5e565b5090919050565b60608247101561352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516135549190614781565b60006040518083038185875af1925050503d8060008114613591576040519150601f19603f3d011682016040523d82523d6000602084013e613596565b606091505b50915091506135a7878383876135b2565b979650505050505050565b606083156136485782516000036136415773ffffffffffffffffffffffffffffffffffffffff85163b613641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d0565b5081612dd6565b612dd6838381511561365d5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d091906137c7565b50805461369d90613d4a565b6000825580601f106136ad575050565b601f016020900490600052602060002090810190611a7f91905b808211156136db57600081556001016136c7565b5090565b6000602082840312156136f157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f5e57600080fd5b803567ffffffffffffffff8116811461373957600080fd5b919050565b60006020828403121561375057600080fd5b610f5e82613721565b60005b8381101561377457818101518382015260200161375c565b50506000910152565b60008151808452613795816020860160208601613759565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f5e602083018461377d565b6000602082840312156137ec57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611a7f57600080fd5b8035613739816137f3565b60006020828403121561383257600080fd5b8135610f5e816137f3565b60006020828403121561384f57600080fd5b813567ffffffffffffffff81111561386657600080fd5b82016101008185031215610f5e57600080fd5b60008083601f84011261388b57600080fd5b50813567ffffffffffffffff8111156138a357600080fd5b6020830191508360208260051b85010111156138be57600080fd5b9250929050565b600080600080604085870312156138db57600080fd5b843567ffffffffffffffff808211156138f357600080fd5b6138ff88838901613879565b9096509450602087013591508082111561391857600080fd5b5061392587828801613879565b95989497509550505050565b6000806040838503121561394457600080fd5b823561394f816137f3565b946020939093013593505050565b60008060006040848603121561397257600080fd5b61397b84613721565b9250602084013567ffffffffffffffff8082111561399857600080fd5b818601915086601f8301126139ac57600080fd5b8135818111156139bb57600080fd5b8760208285010111156139cd57600080fd5b6020830194508093505050509250925092565b600080604083850312156139f357600080fd5b6139fc83613721565b91506020830135613a0c816137f3565b809150509250929050565b600060208284031215613a2957600080fd5b813567ffffffffffffffff811115613a4057600080fd5b820160a08185031215610f5e57600080fd5b602081526000825160406020840152613a6e606084018261377d565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152613aa9828261377d565b95945050505050565b6020808252825182820181905260009190848201906040850190845b81811015613b0057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613ace565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613b0057835167ffffffffffffffff1683529284019291840191600101613b28565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715613ba157613ba1613b4e565b60405290565b60405160c0810167ffffffffffffffff81118282101715613ba157613ba1613b4e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613c1157613c11613b4e565b604052919050565b8015158114611a7f57600080fd5b803561373981613c19565b80356fffffffffffffffffffffffffffffffff8116811461373957600080fd5b600060608284031215613c6457600080fd5b6040516060810181811067ffffffffffffffff82111715613c8757613c87613b4e565b6040529050808235613c9881613c19565b8152613ca660208401613c32565b6020820152613cb760408401613c32565b60408201525092915050565b600080600060e08486031215613cd857600080fd5b613ce184613721565b9250613cf08560208601613c52565b9150613cff8560808601613c52565b90509250925092565b60008060208385031215613d1b57600080fd5b823567ffffffffffffffff811115613d3257600080fd5b613d3e85828601613879565b90969095509350505050565b600181811c90821680613d5e57607f821691505b602082108103613d97577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215613daf57600080fd5b5051919050565b600067ffffffffffffffff821115613dd057613dd0613b4e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613e0d57600080fd5b8135613e20613e1b82613db6565b613bca565b818152846020838601011115613e3557600080fd5b816020850160208301376000918101602001919091529392505050565b60006101008236031215613e6557600080fd5b613e6d613b7d565b823567ffffffffffffffff80821115613e8557600080fd5b613e9136838701613dfc565b8352613e9f60208601613721565b6020840152613eb060408601613815565b604084015260608501356060840152613ecb60808601613815565b608084015260a0850135915080821115613ee457600080fd5b613ef036838701613dfc565b60a084015260c0850135915080821115613f0957600080fd5b613f1536838701613dfc565b60c084015260e0850135915080821115613f2e57600080fd5b50613f3b36828601613dfc565b60e08301525092915050565b601f8211156114c7576000816000526020600020601f850160051c81016020861015613f705750805b601f850160051c820191505b81811015610b8657828155600101613f7c565b67ffffffffffffffff831115613fa757613fa7613b4e565b613fbb83613fb58354613d4a565b83613f47565b6000601f84116001811461400d5760008515613fd75750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611f02565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561405c578685013582556020948501946001909201910161403c565b5086821015614097577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040815260006140bc604083018661377d565b82810360208401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b60006020828403121561411f57600080fd5b8151610f5e81613c19565b600060a0823603121561413c57600080fd5b60405160a0810167ffffffffffffffff828210818311171561416057614160613b4e565b81604052843591508082111561417557600080fd5b5061418236828601613dfc565b82525061419160208401613721565b602082015260408301356141a4816137f3565b60408201526060838101359082015260808301356141c1816137f3565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261422f57600080fd5b9190910192915050565b6000610140823603121561424c57600080fd5b614254613ba7565b61425d83613721565b815261426b60208401613c27565b6020820152604083013567ffffffffffffffff8082111561428b57600080fd5b61429736838701613dfc565b604084015260608501359150808211156142b057600080fd5b506142bd36828601613dfc565b6060830152506142d03660808501613c52565b60808201526142e23660e08501613c52565b60a082015292915050565b815167ffffffffffffffff81111561430757614307613b4e565b61431b816143158454613d4a565b84613f47565b602080601f83116001811461436e57600084156143385750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610b86565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156143bb5788860151825594840194600190910190840161439c565b50858210156143f757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff8716835280602084015261442b8184018761377d565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506144699050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152613aa9565b60a0815260006144b360a083018761377d565b73ffffffffffffffffffffffffffffffffffffffff8616602084015284604084015267ffffffffffffffff841660608401528281036080840152600081526020810191505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815260a06020820152600061453060a083018661377d565b60408301949094525067ffffffffffffffff9190911660608201528082036080909101526000815260200192915050565b60006020828403121561457357600080fd5b815167ffffffffffffffff81111561458a57600080fd5b8201601f8101841361459b57600080fd5b80516145a9613e1b82613db6565b8181528560208385010111156145be57600080fd5b613aa9826020830160208601613759565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156106cb576106cb6145cf565b67ffffffffffffffff8416815260e0810161465d60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612dd6565b606081016106cb82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b6000602082840312156146e257600080fd5b8151610f5e816137f3565b80820281158282048414176106cb576106cb6145cf565b808201808211156106cb576106cb6145cf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008261477c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000825161422f81846020870161375956fe4c6f636b52656c65617365546f6b656e506f6f6c416e6450726f787920312e352e30a164736f6c6343000818000a",
}
var LockReleaseTokenPoolAndProxyABI = LockReleaseTokenPoolAndProxyMetaData.ABI
@@ -354,6 +354,28 @@ func (_LockReleaseTokenPoolAndProxy *LockReleaseTokenPoolAndProxyCallerSession)
return _LockReleaseTokenPoolAndProxy.Contract.GetOnRamp(&_LockReleaseTokenPoolAndProxy.CallOpts, arg0)
}
+func (_LockReleaseTokenPoolAndProxy *LockReleaseTokenPoolAndProxyCaller) GetPreviousPool(opts *bind.CallOpts) (common.Address, error) {
+ var out []interface{}
+ err := _LockReleaseTokenPoolAndProxy.contract.Call(opts, &out, "getPreviousPool")
+
+ if err != nil {
+ return *new(common.Address), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+ return out0, err
+
+}
+
+func (_LockReleaseTokenPoolAndProxy *LockReleaseTokenPoolAndProxySession) GetPreviousPool() (common.Address, error) {
+ return _LockReleaseTokenPoolAndProxy.Contract.GetPreviousPool(&_LockReleaseTokenPoolAndProxy.CallOpts)
+}
+
+func (_LockReleaseTokenPoolAndProxy *LockReleaseTokenPoolAndProxyCallerSession) GetPreviousPool() (common.Address, error) {
+ return _LockReleaseTokenPoolAndProxy.Contract.GetPreviousPool(&_LockReleaseTokenPoolAndProxy.CallOpts)
+}
+
func (_LockReleaseTokenPoolAndProxy *LockReleaseTokenPoolAndProxyCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
err := _LockReleaseTokenPoolAndProxy.contract.Call(opts, &out, "getRateLimitAdmin")
@@ -3238,6 +3260,8 @@ type LockReleaseTokenPoolAndProxyInterface interface {
GetOnRamp(opts *bind.CallOpts, arg0 uint64) (common.Address, error)
+ GetPreviousPool(opts *bind.CallOpts) (common.Address, error)
+
GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error)
GetRebalancer(opts *bind.CallOpts) (common.Address, error)
diff --git a/core/gethwrappers/ccip/generated/mock_arm_contract/mock_arm_contract.go b/core/gethwrappers/ccip/generated/mock_rmn_contract/mock_rmn_contract.go
similarity index 68%
rename from core/gethwrappers/ccip/generated/mock_arm_contract/mock_arm_contract.go
rename to core/gethwrappers/ccip/generated/mock_rmn_contract/mock_rmn_contract.go
index fff63bef801..21aa223e75d 100644
--- a/core/gethwrappers/ccip/generated/mock_arm_contract/mock_arm_contract.go
+++ b/core/gethwrappers/ccip/generated/mock_rmn_contract/mock_rmn_contract.go
@@ -1,7 +1,7 @@
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
-package mock_arm_contract
+package mock_rmn_contract
import (
"errors"
@@ -55,17 +55,17 @@ type RMNVoter struct {
CurseWeight uint8
}
-var MockARMContractMetaData = &bind.MetaData{
+var MockRMNContractMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"CustomError\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"blessVoteAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curseUnvoteAddr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"blessWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"curseWeight\",\"type\":\"uint8\"}],\"internalType\":\"structRMN.Voter[]\",\"name\":\"voters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"blessWeightThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"curseWeightThreshold\",\"type\":\"uint16\"}],\"internalType\":\"structRMN.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"cursesHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"forceUnvote\",\"type\":\"bool\"}],\"internalType\":\"structRMN.UnvoteToCurseRecord[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"ownerUnvoteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"cursesHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"forceUnvote\",\"type\":\"bool\"}],\"internalType\":\"structRMN.UnvoteToCurseRecord[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"ownerUnvoteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"setRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"voteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"voteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b5033806000816100675760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615610097576100978161009f565b505050610148565b336001600160a01b038216036100f75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161005e565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b610ed7806101576000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063618af128116100815780637a7c27491161005b5780637a7c2749146102b55780638da5cb5b146102c8578063f2fde38b146102f057600080fd5b8063618af1281461020a578063794860871461024357806379ba5097146102ad57600080fd5b8063397796f7116100b2578063397796f7146101ba5780633f42ab73146101c25780634d616771146101d957600080fd5b8063119a3527146100d9578063257174dc1461012b5780632cbc26bb14610192575b600080fd5b6101296100e73660046107fe565b50600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b005b6101296101393660046109db565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550565b6101a56101a0366004610a29565b610303565b60405190151581526020015b60405180910390f35b6101a56103b7565b6101ca610424565b6040516101b193929190610a4b565b6101a56101e7366004610b1e565b5060015474010000000000000000000000000000000000000000900460ff161590565b610129610218366004610b36565b50600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b610129610251366004610b73565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b610129610565565b6101296102c3366004610b96565b610662565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b1565b6101296102fe366004610c49565b610672565b60006002805461031290610c64565b1590506103575760026040517f5a4ff67100000000000000000000000000000000000000000000000000000000815260040161034e9190610cb1565b60405180910390fd5b60015474010000000000000000000000000000000000000000900460ff16806103b157507fffffffffffffffffffffffffffffffff00000000000000000000000000000000821660009081526006602052604090205460ff165b92915050565b6000600280546103c690610c64565b1590506104025760026040517f5a4ff67100000000000000000000000000000000000000000000000000000000815260040161034e9190610cb1565b5060015474010000000000000000000000000000000000000000900460ff1690565b6040805160608082018352815260006020820181905291810182905281906005546040805160038054608060208202840181019094526060830181815263ffffffff8087169664010000000090041694929392849284929184919060009085015b828210156105315760008481526020908190206040805160a08101825260038602909201805473ffffffffffffffffffffffffffffffffffffffff90811684526001808301548216858701526002909201549081169284019290925260ff74010000000000000000000000000000000000000000830481166060850152750100000000000000000000000000000000000000000090920490911660808301529083529092019101610485565b505050908252506001919091015461ffff808216602084015262010000909104166040909101529296919550919350915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161034e565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600261066e8282610db0565b5050565b61067a610686565b61068381610709565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610707576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161034e565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161034e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006020828403121561081057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561086957610869610817565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108b6576108b6610817565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108e257600080fd5b919050565b600082601f8301126108f857600080fd5b8135602067ffffffffffffffff82111561091457610914610817565b610922818360051b0161086f565b8281526060928302850182019282820191908785111561094157600080fd5b8387015b8581101561099e5781818a03121561095d5760008081fd5b610965610846565b61096e826108be565b81528582013586820152604080830135801515811461098d5760008081fd5b908201528452928401928101610945565b5090979650505050505050565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146108e257600080fd5b600080604083850312156109ee57600080fd5b823567ffffffffffffffff811115610a0557600080fd5b610a11858286016108e7565b925050610a20602084016109ab565b90509250929050565b600060208284031215610a3b57600080fd5b610a44826109ab565b9392505050565b63ffffffff84811682528316602080830191909152606060408084018290528451848301839052805160c0860181905260009491820190859060e08801905b80831015610af1578351805173ffffffffffffffffffffffffffffffffffffffff9081168452868201518116878501528782015116878401528781015160ff908116898501526080918201511690830152928401926001929092019160a090910190610a8a565b509288015161ffff908116608089015260409098015190971660a090960195909552979650505050505050565b600060408284031215610b3057600080fd5b50919050565b600060208284031215610b4857600080fd5b813567ffffffffffffffff811115610b5f57600080fd5b610b6b848285016108e7565b949350505050565b60008060408385031215610b8657600080fd5b82359150610a20602084016109ab565b60006020808385031215610ba957600080fd5b823567ffffffffffffffff80821115610bc157600080fd5b818501915085601f830112610bd557600080fd5b813581811115610be757610be7610817565b610c17847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161086f565b91508082528684828501011115610c2d57600080fd5b8084840185840137600090820190930192909252509392505050565b600060208284031215610c5b57600080fd5b610a44826108be565b600181811c90821680610c7857607f821691505b602082108103610b30577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454610cc581610c64565b8060208701526040600180841660008114610ce75760018114610d2157610d51565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550610d51565b89600052602060002060005b85811015610d485781548b8201860152908301908801610d2d565b8a016040019650505b509398975050505050505050565b601f821115610dab576000816000526020600020601f850160051c81016020861015610d885750805b601f850160051c820191505b81811015610da757828155600101610d94565b5050505b505050565b815167ffffffffffffffff811115610dca57610dca610817565b610dde81610dd88454610c64565b84610d5f565b602080601f831160018114610e315760008415610dfb5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610da7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015610e7e57888601518255948401946001909101908401610e5f565b5085821015610eba57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a",
}
-var MockARMContractABI = MockARMContractMetaData.ABI
+var MockRMNContractABI = MockRMNContractMetaData.ABI
-var MockARMContractBin = MockARMContractMetaData.Bin
+var MockRMNContractBin = MockRMNContractMetaData.Bin
-func DeployMockARMContract(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *MockARMContract, error) {
- parsed, err := MockARMContractMetaData.GetAbi()
+func DeployMockRMNContract(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *MockRMNContract, error) {
+ parsed, err := MockRMNContractMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
@@ -73,134 +73,134 @@ func DeployMockARMContract(auth *bind.TransactOpts, backend bind.ContractBackend
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
- address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockARMContractBin), backend)
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockRMNContractBin), backend)
if err != nil {
return common.Address{}, nil, nil, err
}
- return address, tx, &MockARMContract{address: address, abi: *parsed, MockARMContractCaller: MockARMContractCaller{contract: contract}, MockARMContractTransactor: MockARMContractTransactor{contract: contract}, MockARMContractFilterer: MockARMContractFilterer{contract: contract}}, nil
+ return address, tx, &MockRMNContract{address: address, abi: *parsed, MockRMNContractCaller: MockRMNContractCaller{contract: contract}, MockRMNContractTransactor: MockRMNContractTransactor{contract: contract}, MockRMNContractFilterer: MockRMNContractFilterer{contract: contract}}, nil
}
-type MockARMContract struct {
+type MockRMNContract struct {
address common.Address
abi abi.ABI
- MockARMContractCaller
- MockARMContractTransactor
- MockARMContractFilterer
+ MockRMNContractCaller
+ MockRMNContractTransactor
+ MockRMNContractFilterer
}
-type MockARMContractCaller struct {
+type MockRMNContractCaller struct {
contract *bind.BoundContract
}
-type MockARMContractTransactor struct {
+type MockRMNContractTransactor struct {
contract *bind.BoundContract
}
-type MockARMContractFilterer struct {
+type MockRMNContractFilterer struct {
contract *bind.BoundContract
}
-type MockARMContractSession struct {
- Contract *MockARMContract
+type MockRMNContractSession struct {
+ Contract *MockRMNContract
CallOpts bind.CallOpts
TransactOpts bind.TransactOpts
}
-type MockARMContractCallerSession struct {
- Contract *MockARMContractCaller
+type MockRMNContractCallerSession struct {
+ Contract *MockRMNContractCaller
CallOpts bind.CallOpts
}
-type MockARMContractTransactorSession struct {
- Contract *MockARMContractTransactor
+type MockRMNContractTransactorSession struct {
+ Contract *MockRMNContractTransactor
TransactOpts bind.TransactOpts
}
-type MockARMContractRaw struct {
- Contract *MockARMContract
+type MockRMNContractRaw struct {
+ Contract *MockRMNContract
}
-type MockARMContractCallerRaw struct {
- Contract *MockARMContractCaller
+type MockRMNContractCallerRaw struct {
+ Contract *MockRMNContractCaller
}
-type MockARMContractTransactorRaw struct {
- Contract *MockARMContractTransactor
+type MockRMNContractTransactorRaw struct {
+ Contract *MockRMNContractTransactor
}
-func NewMockARMContract(address common.Address, backend bind.ContractBackend) (*MockARMContract, error) {
- abi, err := abi.JSON(strings.NewReader(MockARMContractABI))
+func NewMockRMNContract(address common.Address, backend bind.ContractBackend) (*MockRMNContract, error) {
+ abi, err := abi.JSON(strings.NewReader(MockRMNContractABI))
if err != nil {
return nil, err
}
- contract, err := bindMockARMContract(address, backend, backend, backend)
+ contract, err := bindMockRMNContract(address, backend, backend, backend)
if err != nil {
return nil, err
}
- return &MockARMContract{address: address, abi: abi, MockARMContractCaller: MockARMContractCaller{contract: contract}, MockARMContractTransactor: MockARMContractTransactor{contract: contract}, MockARMContractFilterer: MockARMContractFilterer{contract: contract}}, nil
+ return &MockRMNContract{address: address, abi: abi, MockRMNContractCaller: MockRMNContractCaller{contract: contract}, MockRMNContractTransactor: MockRMNContractTransactor{contract: contract}, MockRMNContractFilterer: MockRMNContractFilterer{contract: contract}}, nil
}
-func NewMockARMContractCaller(address common.Address, caller bind.ContractCaller) (*MockARMContractCaller, error) {
- contract, err := bindMockARMContract(address, caller, nil, nil)
+func NewMockRMNContractCaller(address common.Address, caller bind.ContractCaller) (*MockRMNContractCaller, error) {
+ contract, err := bindMockRMNContract(address, caller, nil, nil)
if err != nil {
return nil, err
}
- return &MockARMContractCaller{contract: contract}, nil
+ return &MockRMNContractCaller{contract: contract}, nil
}
-func NewMockARMContractTransactor(address common.Address, transactor bind.ContractTransactor) (*MockARMContractTransactor, error) {
- contract, err := bindMockARMContract(address, nil, transactor, nil)
+func NewMockRMNContractTransactor(address common.Address, transactor bind.ContractTransactor) (*MockRMNContractTransactor, error) {
+ contract, err := bindMockRMNContract(address, nil, transactor, nil)
if err != nil {
return nil, err
}
- return &MockARMContractTransactor{contract: contract}, nil
+ return &MockRMNContractTransactor{contract: contract}, nil
}
-func NewMockARMContractFilterer(address common.Address, filterer bind.ContractFilterer) (*MockARMContractFilterer, error) {
- contract, err := bindMockARMContract(address, nil, nil, filterer)
+func NewMockRMNContractFilterer(address common.Address, filterer bind.ContractFilterer) (*MockRMNContractFilterer, error) {
+ contract, err := bindMockRMNContract(address, nil, nil, filterer)
if err != nil {
return nil, err
}
- return &MockARMContractFilterer{contract: contract}, nil
+ return &MockRMNContractFilterer{contract: contract}, nil
}
-func bindMockARMContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
- parsed, err := MockARMContractMetaData.GetAbi()
+func bindMockRMNContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+ parsed, err := MockRMNContractMetaData.GetAbi()
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}
-func (_MockARMContract *MockARMContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _MockARMContract.Contract.MockARMContractCaller.contract.Call(opts, result, method, params...)
+func (_MockRMNContract *MockRMNContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _MockRMNContract.Contract.MockRMNContractCaller.contract.Call(opts, result, method, params...)
}
-func (_MockARMContract *MockARMContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _MockARMContract.Contract.MockARMContractTransactor.contract.Transfer(opts)
+func (_MockRMNContract *MockRMNContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.MockRMNContractTransactor.contract.Transfer(opts)
}
-func (_MockARMContract *MockARMContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _MockARMContract.Contract.MockARMContractTransactor.contract.Transact(opts, method, params...)
+func (_MockRMNContract *MockRMNContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.MockRMNContractTransactor.contract.Transact(opts, method, params...)
}
-func (_MockARMContract *MockARMContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _MockARMContract.Contract.contract.Call(opts, result, method, params...)
+func (_MockRMNContract *MockRMNContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _MockRMNContract.Contract.contract.Call(opts, result, method, params...)
}
-func (_MockARMContract *MockARMContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _MockARMContract.Contract.contract.Transfer(opts)
+func (_MockRMNContract *MockRMNContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.contract.Transfer(opts)
}
-func (_MockARMContract *MockARMContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _MockARMContract.Contract.contract.Transact(opts, method, params...)
+func (_MockRMNContract *MockRMNContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.contract.Transact(opts, method, params...)
}
-func (_MockARMContract *MockARMContractCaller) GetConfigDetails(opts *bind.CallOpts) (GetConfigDetails,
+func (_MockRMNContract *MockRMNContractCaller) GetConfigDetails(opts *bind.CallOpts) (GetConfigDetails,
error) {
var out []interface{}
- err := _MockARMContract.contract.Call(opts, &out, "getConfigDetails")
+ err := _MockRMNContract.contract.Call(opts, &out, "getConfigDetails")
outstruct := new(GetConfigDetails)
if err != nil {
@@ -215,21 +215,21 @@ func (_MockARMContract *MockARMContractCaller) GetConfigDetails(opts *bind.CallO
}
-func (_MockARMContract *MockARMContractSession) GetConfigDetails() (GetConfigDetails,
+func (_MockRMNContract *MockRMNContractSession) GetConfigDetails() (GetConfigDetails,
error) {
- return _MockARMContract.Contract.GetConfigDetails(&_MockARMContract.CallOpts)
+ return _MockRMNContract.Contract.GetConfigDetails(&_MockRMNContract.CallOpts)
}
-func (_MockARMContract *MockARMContractCallerSession) GetConfigDetails() (GetConfigDetails,
+func (_MockRMNContract *MockRMNContractCallerSession) GetConfigDetails() (GetConfigDetails,
error) {
- return _MockARMContract.Contract.GetConfigDetails(&_MockARMContract.CallOpts)
+ return _MockRMNContract.Contract.GetConfigDetails(&_MockRMNContract.CallOpts)
}
-func (_MockARMContract *MockARMContractCaller) IsBlessed(opts *bind.CallOpts, arg0 IRMNTaggedRoot) (bool, error) {
+func (_MockRMNContract *MockRMNContractCaller) IsBlessed(opts *bind.CallOpts, arg0 IRMNTaggedRoot) (bool, error) {
var out []interface{}
- err := _MockARMContract.contract.Call(opts, &out, "isBlessed", arg0)
+ err := _MockRMNContract.contract.Call(opts, &out, "isBlessed", arg0)
if err != nil {
return *new(bool), err
@@ -241,17 +241,17 @@ func (_MockARMContract *MockARMContractCaller) IsBlessed(opts *bind.CallOpts, ar
}
-func (_MockARMContract *MockARMContractSession) IsBlessed(arg0 IRMNTaggedRoot) (bool, error) {
- return _MockARMContract.Contract.IsBlessed(&_MockARMContract.CallOpts, arg0)
+func (_MockRMNContract *MockRMNContractSession) IsBlessed(arg0 IRMNTaggedRoot) (bool, error) {
+ return _MockRMNContract.Contract.IsBlessed(&_MockRMNContract.CallOpts, arg0)
}
-func (_MockARMContract *MockARMContractCallerSession) IsBlessed(arg0 IRMNTaggedRoot) (bool, error) {
- return _MockARMContract.Contract.IsBlessed(&_MockARMContract.CallOpts, arg0)
+func (_MockRMNContract *MockRMNContractCallerSession) IsBlessed(arg0 IRMNTaggedRoot) (bool, error) {
+ return _MockRMNContract.Contract.IsBlessed(&_MockRMNContract.CallOpts, arg0)
}
-func (_MockARMContract *MockARMContractCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) {
+func (_MockRMNContract *MockRMNContractCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) {
var out []interface{}
- err := _MockARMContract.contract.Call(opts, &out, "isCursed", subject)
+ err := _MockRMNContract.contract.Call(opts, &out, "isCursed", subject)
if err != nil {
return *new(bool), err
@@ -263,17 +263,17 @@ func (_MockARMContract *MockARMContractCaller) IsCursed(opts *bind.CallOpts, sub
}
-func (_MockARMContract *MockARMContractSession) IsCursed(subject [16]byte) (bool, error) {
- return _MockARMContract.Contract.IsCursed(&_MockARMContract.CallOpts, subject)
+func (_MockRMNContract *MockRMNContractSession) IsCursed(subject [16]byte) (bool, error) {
+ return _MockRMNContract.Contract.IsCursed(&_MockRMNContract.CallOpts, subject)
}
-func (_MockARMContract *MockARMContractCallerSession) IsCursed(subject [16]byte) (bool, error) {
- return _MockARMContract.Contract.IsCursed(&_MockARMContract.CallOpts, subject)
+func (_MockRMNContract *MockRMNContractCallerSession) IsCursed(subject [16]byte) (bool, error) {
+ return _MockRMNContract.Contract.IsCursed(&_MockRMNContract.CallOpts, subject)
}
-func (_MockARMContract *MockARMContractCaller) IsCursed0(opts *bind.CallOpts) (bool, error) {
+func (_MockRMNContract *MockRMNContractCaller) IsCursed0(opts *bind.CallOpts) (bool, error) {
var out []interface{}
- err := _MockARMContract.contract.Call(opts, &out, "isCursed0")
+ err := _MockRMNContract.contract.Call(opts, &out, "isCursed0")
if err != nil {
return *new(bool), err
@@ -285,17 +285,17 @@ func (_MockARMContract *MockARMContractCaller) IsCursed0(opts *bind.CallOpts) (b
}
-func (_MockARMContract *MockARMContractSession) IsCursed0() (bool, error) {
- return _MockARMContract.Contract.IsCursed0(&_MockARMContract.CallOpts)
+func (_MockRMNContract *MockRMNContractSession) IsCursed0() (bool, error) {
+ return _MockRMNContract.Contract.IsCursed0(&_MockRMNContract.CallOpts)
}
-func (_MockARMContract *MockARMContractCallerSession) IsCursed0() (bool, error) {
- return _MockARMContract.Contract.IsCursed0(&_MockARMContract.CallOpts)
+func (_MockRMNContract *MockRMNContractCallerSession) IsCursed0() (bool, error) {
+ return _MockRMNContract.Contract.IsCursed0(&_MockRMNContract.CallOpts)
}
-func (_MockARMContract *MockARMContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
+func (_MockRMNContract *MockRMNContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
- err := _MockARMContract.contract.Call(opts, &out, "owner")
+ err := _MockRMNContract.contract.Call(opts, &out, "owner")
if err != nil {
return *new(common.Address), err
@@ -307,100 +307,100 @@ func (_MockARMContract *MockARMContractCaller) Owner(opts *bind.CallOpts) (commo
}
-func (_MockARMContract *MockARMContractSession) Owner() (common.Address, error) {
- return _MockARMContract.Contract.Owner(&_MockARMContract.CallOpts)
+func (_MockRMNContract *MockRMNContractSession) Owner() (common.Address, error) {
+ return _MockRMNContract.Contract.Owner(&_MockRMNContract.CallOpts)
}
-func (_MockARMContract *MockARMContractCallerSession) Owner() (common.Address, error) {
- return _MockARMContract.Contract.Owner(&_MockARMContract.CallOpts)
+func (_MockRMNContract *MockRMNContractCallerSession) Owner() (common.Address, error) {
+ return _MockRMNContract.Contract.Owner(&_MockRMNContract.CallOpts)
}
-func (_MockARMContract *MockARMContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "acceptOwnership")
+func (_MockRMNContract *MockRMNContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "acceptOwnership")
}
-func (_MockARMContract *MockARMContractSession) AcceptOwnership() (*types.Transaction, error) {
- return _MockARMContract.Contract.AcceptOwnership(&_MockARMContract.TransactOpts)
+func (_MockRMNContract *MockRMNContractSession) AcceptOwnership() (*types.Transaction, error) {
+ return _MockRMNContract.Contract.AcceptOwnership(&_MockRMNContract.TransactOpts)
}
-func (_MockARMContract *MockARMContractTransactorSession) AcceptOwnership() (*types.Transaction, error) {
- return _MockARMContract.Contract.AcceptOwnership(&_MockARMContract.TransactOpts)
+func (_MockRMNContract *MockRMNContractTransactorSession) AcceptOwnership() (*types.Transaction, error) {
+ return _MockRMNContract.Contract.AcceptOwnership(&_MockRMNContract.TransactOpts)
}
-func (_MockARMContract *MockARMContractTransactor) OwnerUnvoteToCurse(opts *bind.TransactOpts, arg0 []RMNUnvoteToCurseRecord, subject [16]byte) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "ownerUnvoteToCurse", arg0, subject)
+func (_MockRMNContract *MockRMNContractTransactor) OwnerUnvoteToCurse(opts *bind.TransactOpts, arg0 []RMNUnvoteToCurseRecord, subject [16]byte) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "ownerUnvoteToCurse", arg0, subject)
}
-func (_MockARMContract *MockARMContractSession) OwnerUnvoteToCurse(arg0 []RMNUnvoteToCurseRecord, subject [16]byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.OwnerUnvoteToCurse(&_MockARMContract.TransactOpts, arg0, subject)
+func (_MockRMNContract *MockRMNContractSession) OwnerUnvoteToCurse(arg0 []RMNUnvoteToCurseRecord, subject [16]byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.OwnerUnvoteToCurse(&_MockRMNContract.TransactOpts, arg0, subject)
}
-func (_MockARMContract *MockARMContractTransactorSession) OwnerUnvoteToCurse(arg0 []RMNUnvoteToCurseRecord, subject [16]byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.OwnerUnvoteToCurse(&_MockARMContract.TransactOpts, arg0, subject)
+func (_MockRMNContract *MockRMNContractTransactorSession) OwnerUnvoteToCurse(arg0 []RMNUnvoteToCurseRecord, subject [16]byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.OwnerUnvoteToCurse(&_MockRMNContract.TransactOpts, arg0, subject)
}
-func (_MockARMContract *MockARMContractTransactor) OwnerUnvoteToCurse0(opts *bind.TransactOpts, arg0 []RMNUnvoteToCurseRecord) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "ownerUnvoteToCurse0", arg0)
+func (_MockRMNContract *MockRMNContractTransactor) OwnerUnvoteToCurse0(opts *bind.TransactOpts, arg0 []RMNUnvoteToCurseRecord) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "ownerUnvoteToCurse0", arg0)
}
-func (_MockARMContract *MockARMContractSession) OwnerUnvoteToCurse0(arg0 []RMNUnvoteToCurseRecord) (*types.Transaction, error) {
- return _MockARMContract.Contract.OwnerUnvoteToCurse0(&_MockARMContract.TransactOpts, arg0)
+func (_MockRMNContract *MockRMNContractSession) OwnerUnvoteToCurse0(arg0 []RMNUnvoteToCurseRecord) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.OwnerUnvoteToCurse0(&_MockRMNContract.TransactOpts, arg0)
}
-func (_MockARMContract *MockARMContractTransactorSession) OwnerUnvoteToCurse0(arg0 []RMNUnvoteToCurseRecord) (*types.Transaction, error) {
- return _MockARMContract.Contract.OwnerUnvoteToCurse0(&_MockARMContract.TransactOpts, arg0)
+func (_MockRMNContract *MockRMNContractTransactorSession) OwnerUnvoteToCurse0(arg0 []RMNUnvoteToCurseRecord) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.OwnerUnvoteToCurse0(&_MockRMNContract.TransactOpts, arg0)
}
-func (_MockARMContract *MockARMContractTransactor) SetRevert(opts *bind.TransactOpts, err []byte) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "setRevert", err)
+func (_MockRMNContract *MockRMNContractTransactor) SetRevert(opts *bind.TransactOpts, err []byte) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "setRevert", err)
}
-func (_MockARMContract *MockARMContractSession) SetRevert(err []byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.SetRevert(&_MockARMContract.TransactOpts, err)
+func (_MockRMNContract *MockRMNContractSession) SetRevert(err []byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.SetRevert(&_MockRMNContract.TransactOpts, err)
}
-func (_MockARMContract *MockARMContractTransactorSession) SetRevert(err []byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.SetRevert(&_MockARMContract.TransactOpts, err)
+func (_MockRMNContract *MockRMNContractTransactorSession) SetRevert(err []byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.SetRevert(&_MockRMNContract.TransactOpts, err)
}
-func (_MockARMContract *MockARMContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "transferOwnership", to)
+func (_MockRMNContract *MockRMNContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "transferOwnership", to)
}
-func (_MockARMContract *MockARMContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _MockARMContract.Contract.TransferOwnership(&_MockARMContract.TransactOpts, to)
+func (_MockRMNContract *MockRMNContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.TransferOwnership(&_MockRMNContract.TransactOpts, to)
}
-func (_MockARMContract *MockARMContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _MockARMContract.Contract.TransferOwnership(&_MockARMContract.TransactOpts, to)
+func (_MockRMNContract *MockRMNContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.TransferOwnership(&_MockRMNContract.TransactOpts, to)
}
-func (_MockARMContract *MockARMContractTransactor) VoteToCurse(opts *bind.TransactOpts, arg0 [32]byte) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "voteToCurse", arg0)
+func (_MockRMNContract *MockRMNContractTransactor) VoteToCurse(opts *bind.TransactOpts, arg0 [32]byte) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "voteToCurse", arg0)
}
-func (_MockARMContract *MockARMContractSession) VoteToCurse(arg0 [32]byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.VoteToCurse(&_MockARMContract.TransactOpts, arg0)
+func (_MockRMNContract *MockRMNContractSession) VoteToCurse(arg0 [32]byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.VoteToCurse(&_MockRMNContract.TransactOpts, arg0)
}
-func (_MockARMContract *MockARMContractTransactorSession) VoteToCurse(arg0 [32]byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.VoteToCurse(&_MockARMContract.TransactOpts, arg0)
+func (_MockRMNContract *MockRMNContractTransactorSession) VoteToCurse(arg0 [32]byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.VoteToCurse(&_MockRMNContract.TransactOpts, arg0)
}
-func (_MockARMContract *MockARMContractTransactor) VoteToCurse0(opts *bind.TransactOpts, arg0 [32]byte, subject [16]byte) (*types.Transaction, error) {
- return _MockARMContract.contract.Transact(opts, "voteToCurse0", arg0, subject)
+func (_MockRMNContract *MockRMNContractTransactor) VoteToCurse0(opts *bind.TransactOpts, arg0 [32]byte, subject [16]byte) (*types.Transaction, error) {
+ return _MockRMNContract.contract.Transact(opts, "voteToCurse0", arg0, subject)
}
-func (_MockARMContract *MockARMContractSession) VoteToCurse0(arg0 [32]byte, subject [16]byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.VoteToCurse0(&_MockARMContract.TransactOpts, arg0, subject)
+func (_MockRMNContract *MockRMNContractSession) VoteToCurse0(arg0 [32]byte, subject [16]byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.VoteToCurse0(&_MockRMNContract.TransactOpts, arg0, subject)
}
-func (_MockARMContract *MockARMContractTransactorSession) VoteToCurse0(arg0 [32]byte, subject [16]byte) (*types.Transaction, error) {
- return _MockARMContract.Contract.VoteToCurse0(&_MockARMContract.TransactOpts, arg0, subject)
+func (_MockRMNContract *MockRMNContractTransactorSession) VoteToCurse0(arg0 [32]byte, subject [16]byte) (*types.Transaction, error) {
+ return _MockRMNContract.Contract.VoteToCurse0(&_MockRMNContract.TransactOpts, arg0, subject)
}
-type MockARMContractOwnershipTransferRequestedIterator struct {
- Event *MockARMContractOwnershipTransferRequested
+type MockRMNContractOwnershipTransferRequestedIterator struct {
+ Event *MockRMNContractOwnershipTransferRequested
contract *bind.BoundContract
event string
@@ -411,7 +411,7 @@ type MockARMContractOwnershipTransferRequestedIterator struct {
fail error
}
-func (it *MockARMContractOwnershipTransferRequestedIterator) Next() bool {
+func (it *MockRMNContractOwnershipTransferRequestedIterator) Next() bool {
if it.fail != nil {
return false
@@ -420,7 +420,7 @@ func (it *MockARMContractOwnershipTransferRequestedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(MockARMContractOwnershipTransferRequested)
+ it.Event = new(MockRMNContractOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -435,7 +435,7 @@ func (it *MockARMContractOwnershipTransferRequestedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(MockARMContractOwnershipTransferRequested)
+ it.Event = new(MockRMNContractOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -450,22 +450,22 @@ func (it *MockARMContractOwnershipTransferRequestedIterator) Next() bool {
}
}
-func (it *MockARMContractOwnershipTransferRequestedIterator) Error() error {
+func (it *MockRMNContractOwnershipTransferRequestedIterator) Error() error {
return it.fail
}
-func (it *MockARMContractOwnershipTransferRequestedIterator) Close() error {
+func (it *MockRMNContractOwnershipTransferRequestedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type MockARMContractOwnershipTransferRequested struct {
+type MockRMNContractOwnershipTransferRequested struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_MockARMContract *MockARMContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockARMContractOwnershipTransferRequestedIterator, error) {
+func (_MockRMNContract *MockRMNContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockRMNContractOwnershipTransferRequestedIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -476,14 +476,14 @@ func (_MockARMContract *MockARMContractFilterer) FilterOwnershipTransferRequeste
toRule = append(toRule, toItem)
}
- logs, sub, err := _MockARMContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _MockRMNContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
- return &MockARMContractOwnershipTransferRequestedIterator{contract: _MockARMContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
+ return &MockRMNContractOwnershipTransferRequestedIterator{contract: _MockRMNContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
}
-func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MockARMContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_MockRMNContract *MockRMNContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MockRMNContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -494,7 +494,7 @@ func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferRequested
toRule = append(toRule, toItem)
}
- logs, sub, err := _MockARMContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _MockRMNContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -504,8 +504,8 @@ func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferRequested
select {
case log := <-logs:
- event := new(MockARMContractOwnershipTransferRequested)
- if err := _MockARMContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+ event := new(MockRMNContractOwnershipTransferRequested)
+ if err := _MockRMNContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return err
}
event.Raw = log
@@ -526,17 +526,17 @@ func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferRequested
}), nil
}
-func (_MockARMContract *MockARMContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*MockARMContractOwnershipTransferRequested, error) {
- event := new(MockARMContractOwnershipTransferRequested)
- if err := _MockARMContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+func (_MockRMNContract *MockRMNContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*MockRMNContractOwnershipTransferRequested, error) {
+ event := new(MockRMNContractOwnershipTransferRequested)
+ if err := _MockRMNContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type MockARMContractOwnershipTransferredIterator struct {
- Event *MockARMContractOwnershipTransferred
+type MockRMNContractOwnershipTransferredIterator struct {
+ Event *MockRMNContractOwnershipTransferred
contract *bind.BoundContract
event string
@@ -547,7 +547,7 @@ type MockARMContractOwnershipTransferredIterator struct {
fail error
}
-func (it *MockARMContractOwnershipTransferredIterator) Next() bool {
+func (it *MockRMNContractOwnershipTransferredIterator) Next() bool {
if it.fail != nil {
return false
@@ -556,7 +556,7 @@ func (it *MockARMContractOwnershipTransferredIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(MockARMContractOwnershipTransferred)
+ it.Event = new(MockRMNContractOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -571,7 +571,7 @@ func (it *MockARMContractOwnershipTransferredIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(MockARMContractOwnershipTransferred)
+ it.Event = new(MockRMNContractOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -586,22 +586,22 @@ func (it *MockARMContractOwnershipTransferredIterator) Next() bool {
}
}
-func (it *MockARMContractOwnershipTransferredIterator) Error() error {
+func (it *MockRMNContractOwnershipTransferredIterator) Error() error {
return it.fail
}
-func (it *MockARMContractOwnershipTransferredIterator) Close() error {
+func (it *MockRMNContractOwnershipTransferredIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type MockARMContractOwnershipTransferred struct {
+type MockRMNContractOwnershipTransferred struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_MockARMContract *MockARMContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockARMContractOwnershipTransferredIterator, error) {
+func (_MockRMNContract *MockRMNContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockRMNContractOwnershipTransferredIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -612,14 +612,14 @@ func (_MockARMContract *MockARMContractFilterer) FilterOwnershipTransferred(opts
toRule = append(toRule, toItem)
}
- logs, sub, err := _MockARMContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _MockRMNContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
- return &MockARMContractOwnershipTransferredIterator{contract: _MockARMContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+ return &MockRMNContractOwnershipTransferredIterator{contract: _MockRMNContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}
-func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MockARMContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_MockRMNContract *MockRMNContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MockRMNContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -630,7 +630,7 @@ func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferred(opts
toRule = append(toRule, toItem)
}
- logs, sub, err := _MockARMContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _MockRMNContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -640,8 +640,8 @@ func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferred(opts
select {
case log := <-logs:
- event := new(MockARMContractOwnershipTransferred)
- if err := _MockARMContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ event := new(MockRMNContractOwnershipTransferred)
+ if err := _MockRMNContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return err
}
event.Raw = log
@@ -662,9 +662,9 @@ func (_MockARMContract *MockARMContractFilterer) WatchOwnershipTransferred(opts
}), nil
}
-func (_MockARMContract *MockARMContractFilterer) ParseOwnershipTransferred(log types.Log) (*MockARMContractOwnershipTransferred, error) {
- event := new(MockARMContractOwnershipTransferred)
- if err := _MockARMContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+func (_MockRMNContract *MockRMNContractFilterer) ParseOwnershipTransferred(log types.Log) (*MockRMNContractOwnershipTransferred, error) {
+ event := new(MockRMNContractOwnershipTransferred)
+ if err := _MockRMNContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return nil, err
}
event.Raw = log
@@ -677,31 +677,31 @@ type GetConfigDetails struct {
Config RMNConfig
}
-func (_MockARMContract *MockARMContract) ParseLog(log types.Log) (generated.AbigenLog, error) {
+func (_MockRMNContract *MockRMNContract) ParseLog(log types.Log) (generated.AbigenLog, error) {
switch log.Topics[0] {
- case _MockARMContract.abi.Events["OwnershipTransferRequested"].ID:
- return _MockARMContract.ParseOwnershipTransferRequested(log)
- case _MockARMContract.abi.Events["OwnershipTransferred"].ID:
- return _MockARMContract.ParseOwnershipTransferred(log)
+ case _MockRMNContract.abi.Events["OwnershipTransferRequested"].ID:
+ return _MockRMNContract.ParseOwnershipTransferRequested(log)
+ case _MockRMNContract.abi.Events["OwnershipTransferred"].ID:
+ return _MockRMNContract.ParseOwnershipTransferred(log)
default:
return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
}
}
-func (MockARMContractOwnershipTransferRequested) Topic() common.Hash {
+func (MockRMNContractOwnershipTransferRequested) Topic() common.Hash {
return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
}
-func (MockARMContractOwnershipTransferred) Topic() common.Hash {
+func (MockRMNContractOwnershipTransferred) Topic() common.Hash {
return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
}
-func (_MockARMContract *MockARMContract) Address() common.Address {
- return _MockARMContract.address
+func (_MockRMNContract *MockRMNContract) Address() common.Address {
+ return _MockRMNContract.address
}
-type MockARMContractInterface interface {
+type MockRMNContractInterface interface {
GetConfigDetails(opts *bind.CallOpts) (GetConfigDetails,
error)
@@ -728,17 +728,17 @@ type MockARMContractInterface interface {
VoteToCurse0(opts *bind.TransactOpts, arg0 [32]byte, subject [16]byte) (*types.Transaction, error)
- FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockARMContractOwnershipTransferRequestedIterator, error)
+ FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockRMNContractOwnershipTransferRequestedIterator, error)
- WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MockARMContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MockRMNContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferRequested(log types.Log) (*MockARMContractOwnershipTransferRequested, error)
+ ParseOwnershipTransferRequested(log types.Log) (*MockRMNContractOwnershipTransferRequested, error)
- FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockARMContractOwnershipTransferredIterator, error)
+ FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MockRMNContractOwnershipTransferredIterator, error)
- WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MockARMContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MockRMNContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferred(log types.Log) (*MockARMContractOwnershipTransferred, error)
+ ParseOwnershipTransferred(log types.Log) (*MockRMNContractOwnershipTransferred, error)
ParseLog(log types.Log) (generated.AbigenLog, error)
diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go
new file mode 100644
index 00000000000..72917cf9438
--- /dev/null
+++ b/core/gethwrappers/ccip/generated/offramp/offramp.go
@@ -0,0 +1,2499 @@
+// Code generated - DO NOT EDIT.
+// This file is a generated binding and any manual changes will be lost.
+
+package offramp
+
+import (
+ "errors"
+ "fmt"
+ "math/big"
+ "strings"
+
+ ethereum "github.com/ethereum/go-ethereum"
+ "github.com/ethereum/go-ethereum/accounts/abi"
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/event"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated"
+)
+
+var (
+ _ = errors.New
+ _ = big.NewInt
+ _ = strings.NewReader
+ _ = ethereum.NotFound
+ _ = bind.Bind
+ _ = common.Big1
+ _ = types.BloomLookup
+ _ = event.NewSubscription
+ _ = abi.ConvertType
+)
+
+type ClientAny2EVMMessage struct {
+ MessageId [32]byte
+ SourceChainSelector uint64
+ Sender []byte
+ Data []byte
+ DestTokenAmounts []ClientEVMTokenAmount
+}
+
+type ClientEVMTokenAmount struct {
+ Token common.Address
+ Amount *big.Int
+}
+
+type InternalAny2EVMRampMessage struct {
+ Header InternalRampMessageHeader
+ Sender []byte
+ Data []byte
+ Receiver common.Address
+ GasLimit *big.Int
+ TokenAmounts []InternalRampTokenAmount
+}
+
+type InternalExecutionReportSingleChain struct {
+ SourceChainSelector uint64
+ Messages []InternalAny2EVMRampMessage
+ OffchainTokenData [][][]byte
+ Proofs [][32]byte
+ ProofFlagBits *big.Int
+}
+
+type InternalGasPriceUpdate struct {
+ DestChainSelector uint64
+ UsdPerUnitGas *big.Int
+}
+
+type InternalPriceUpdates struct {
+ TokenPriceUpdates []InternalTokenPriceUpdate
+ GasPriceUpdates []InternalGasPriceUpdate
+}
+
+type InternalRampMessageHeader struct {
+ MessageId [32]byte
+ SourceChainSelector uint64
+ DestChainSelector uint64
+ SequenceNumber uint64
+ Nonce uint64
+}
+
+type InternalRampTokenAmount struct {
+ SourcePoolAddress []byte
+ DestTokenAddress []byte
+ ExtraData []byte
+ Amount *big.Int
+}
+
+type InternalTokenPriceUpdate struct {
+ SourceToken common.Address
+ UsdPerToken *big.Int
+}
+
+type MultiOCR3BaseConfigInfo struct {
+ ConfigDigest [32]byte
+ F uint8
+ N uint8
+ IsSignatureVerificationEnabled bool
+}
+
+type MultiOCR3BaseOCRConfig struct {
+ ConfigInfo MultiOCR3BaseConfigInfo
+ Signers []common.Address
+ Transmitters []common.Address
+}
+
+type MultiOCR3BaseOCRConfigArgs struct {
+ ConfigDigest [32]byte
+ OcrPluginType uint8
+ F uint8
+ IsSignatureVerificationEnabled bool
+ Signers []common.Address
+ Transmitters []common.Address
+}
+
+type OffRampCommitReport struct {
+ PriceUpdates InternalPriceUpdates
+ MerkleRoots []OffRampMerkleRoot
+}
+
+type OffRampDynamicConfig struct {
+ PriceRegistry common.Address
+ PermissionLessExecutionThresholdSeconds uint32
+ MaxTokenTransferGas uint32
+ MaxPoolReleaseOrMintGas uint32
+ MessageValidator common.Address
+}
+
+type OffRampInterval struct {
+ Min uint64
+ Max uint64
+}
+
+type OffRampMerkleRoot struct {
+ SourceChainSelector uint64
+ Interval OffRampInterval
+ MerkleRoot [32]byte
+}
+
+type OffRampSourceChainConfig struct {
+ Router common.Address
+ IsEnabled bool
+ MinSeqNr uint64
+ OnRamp []byte
+}
+
+type OffRampSourceChainConfigArgs struct {
+ Router common.Address
+ SourceChainSelector uint64
+ IsEnabled bool
+ OnRamp []byte
+}
+
+type OffRampStaticConfig struct {
+ ChainSelector uint64
+ RmnProxy common.Address
+ TokenAdminRegistry common.Address
+ NonceManager common.Address
+}
+
+type OffRampUnblessedRoot struct {
+ SourceChainSelector uint64
+ MerkleRoot [32]byte
+}
+
+var OffRampMetaData = &bind.MetaData{
+ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x6101206040523480156200001257600080fd5b5060405162006bdd38038062006bdd8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615f0762000cd6600039600081816102530152612c120152600081816102240152612ef80152600081816101f50152818161142f01526118400152600081816101c50152612801015260008181611dce0152611e1a0152615f076000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063d2a15d351161008c578063f2fde38b11610066578063f2fde38b14610583578063f716f99f14610596578063ff888fb1146105a957600080fd5b8063d2a15d351461053d578063e9d68a8e14610550578063ece670b61461057057600080fd5b8063991a5018116100bd578063991a5018146104c5578063c673e584146104d8578063ccd37ba3146104f857600080fd5b806385572ffb1461049c5780638da5cb5b146104aa57600080fd5b80633f4b04aa1161012f5780637437ff9f116101145780637437ff9f1461038557806379ba5097146104815780637d4eef601461048957600080fd5b80633f4b04aa146103495780635e36480c1461036557600080fd5b8063181f5a7711610160578063181f5a77146102da5780632d04ab7614610323578063311cd5131461033657600080fd5b806304666f9c1461017c57806306285c6914610191575b600080fd5b61018f61018a3660046140b3565b6105cc565b005b61028360408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102d19190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103166040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102d19190614222565b61018f6103313660046142cd565b6105e0565b61018f610344366004614380565b6109c0565b60095460405167ffffffffffffffff90911681526020016102d1565b6103786103733660046143d4565b610a29565b6040516102d19190614431565b6104246040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102d19190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610a7f565b61018f610497366004614986565b610b3d565b61018f610177366004614ab1565b6000546040516001600160a01b0390911681526020016102d1565b61018f6104d3366004614b00565b610cdd565b6104eb6104e6366004614b85565b610cee565b6040516102d19190614be5565b61052f610506366004614c5a565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102d1565b61018f61054b366004614c84565b610e4c565b61056361055e366004614cf9565b610f06565b6040516102d19190614d14565b61018f61057e366004614d62565b611013565b61018f610591366004614dbe565b611386565b61018f6105a4366004614e43565b611397565b6105bc6105b7366004614f81565b6113d9565b60405190151581526020016102d1565b6105d461149a565b6105dd816114f6565b50565b60006105ee8789018961510a565b8051515190915015158061060757508051602001515115155b156107075760095460208a01359067ffffffffffffffff808316911610156106c6576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f9261068f929101615348565b600060405180830381600087803b1580156106a957600080fd5b505af11580156106bd573d6000803e3d6000fd5b50505050610705565b816020015151600003610705576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b8160200151518110156109095760008260200151828151811061072f5761072f615275565b6020026020010151905060008160000151905061074b816117f4565b6000610756826118f6565b602084015151815491925067ffffffffffffffff908116600160a81b9092041614158061079a575060208084015190810151905167ffffffffffffffff9182169116115b156107e357825160208401516040517feefb0cac0000000000000000000000000000000000000000000000000000000081526107da92919060040161535b565b60405180910390fd5b60408301518061081f576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff166000908152600860209081526040808320848452909152902054156108925783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602481018290526044016107da565b60208085015101516108a59060016153a6565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff92831602179092559251166000908152600860209081526040808320948352939052919091204290555060010161070a565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d8160405161093991906153ce565b60405180910390a16109b560008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b925061195d915050565b505050505050505050565b610a006109cf8284018461546b565b60408051600080825260208201909252906109fa565b60608152602001906001900390816109e55790505b50611cd4565b604080516000808252602082019092529050610a2360018585858586600061195d565b50505050565b6000610a37600160046154a0565b6002610a446080856154c9565b67ffffffffffffffff16610a5891906154f0565b610a628585611d84565b901c166003811115610a7657610a76614407565b90505b92915050565b6001546001600160a01b03163314610ad95760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107da565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610b45611dcb565b815181518114610b81576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610ccd576000848281518110610ba057610ba0615275565b60200260200101519050600081602001515190506000858481518110610bc857610bc8615275565b6020026020010151905080518214610c0c576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82811015610cbe576000828281518110610c2b57610c2b615275565b6020026020010151905080600014610cb55784602001518281518110610c5357610c53615275565b602002602001015160800151811015610cb55784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064016107da565b50600101610c0f565b50505050806001019050610b84565b50610cd88383611cd4565b505050565b610ce561149a565b6105dd81611e4c565b610d316040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c082015294855291820180548451818402810184019095528085529293858301939092830182828015610dda57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dbc575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e3c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e1e575b5050505050815250509050919050565b610e5461149a565b60005b81811015610cd8576000838383818110610e7357610e73615275565b905060400201803603810190610e899190615507565b9050610e9881602001516113d9565b610efd57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b50600101610e57565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191610f9390615540565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbf90615540565b8015610e3c5780601f10610fe157610100808354040283529160200191610e3c565b820191906000526020600020905b815481529060010190602001808311610fef57505050919092525091949350505050565b33301461104c576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611089565b60408051808201909152600080825260208201528152602001906001900390816110625790505b5060a085015151909150156110bd576110ba8460a00151856020015186606001518760000151602001518787611fb2565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff16818301528087015183516000948401926110f9929101614222565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015611206576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a19061117390859060040161561c565b600060405180830381600087803b15801561118d57600080fd5b505af192505050801561119e575060015b611206573d8080156111cc576040519150601f19603f3d011682016040523d82523d6000602084013e6111d1565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107da9190614222565b60408601515115801561121b57506080860151155b80611232575060608601516001600160a01b03163b155b8061127257506060860151611270906001600160a01b03167f85572ffb000000000000000000000000000000000000000000000000000000006120d1565b155b1561127f57505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf97983926112f7928992611388929160040161562f565b6000604051808303816000875af1158015611316573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261133e919081019061566b565b50915091508161137c57806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107da9190614222565b5050505050505050565b61138e61149a565b6105dd816120ed565b61139f61149a565b60005b81518110156113d5576113cd8282815181106113c0576113c0615275565b60200260200101516121a3565b6001016113a2565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190615701565b6000546001600160a01b031633146114f45760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107da565b565b60005b81518110156113d557600082828151811061151657611516615275565b602002602001015190506000816020015190508067ffffffffffffffff1660000361156d576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b0316611595576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916115c090615540565b80601f01602080910402602001604051908101604052809291908181526020018280546115ec90615540565b80156116395780601f1061160e57610100808354040283529160200191611639565b820191906000526020600020905b81548152906001019060200180831161161c57829003601f168201915b5050505050905060008460600151905081516000036116f1578051600003611674576040516342bcdf7f60e11b815260040160405180910390fd5b600183016116828282615766565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611744565b8080519060200120828051906020012014611744576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016107da565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906117dc908690615826565b60405180910390a250505050508060010190506114f9565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190615701565b156105dd576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016107da565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610a79576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016107da565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119bc8760a46158f4565b9050826060015115611a045784516119d59060206154f0565b86516119e29060206154f0565b6119ed9060a06158f4565b6119f791906158f4565b611a0190826158f4565b90505b368114611a46576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016107da565b5081518114611a8e5781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016107da565b611a96611dcb565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611ae457611ae4614407565b6002811115611af557611af5614407565b9052509050600281602001516002811115611b1257611b12614407565b148015611b665750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b4e57611b4e615275565b6000918252602090912001546001600160a01b031633145b611b9c576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611c7e576020820151611bb7906001615907565b60ff16855114611bf3576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611c2e576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611c40929190615920565b604051908190038120611c57918b90602001615930565b604051602081830303815290604052805190602001209050611c7c8a828888886124e7565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611d0e576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611d7d57611d75858281518110611d4357611d43615275565b602002602001015184611d6f57858381518110611d6257611d62615275565b60200260200101516126f4565b836126f4565b600101611d25565b5050505050565b67ffffffffffffffff8216600090815260076020526040812081611da9608085615944565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b467f0000000000000000000000000000000000000000000000000000000000000000146114f4576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107da565b80516001600160a01b0316611e74576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611fce57611fce613eca565b60405190808252806020026020018201604052801561201357816020015b6040805180820190915260008082526020820152815260200190600190039081611fec5790505b50905060005b87518110156120c5576120a088828151811061203757612037615275565b602002602001015188888888888781811061205457612054615275565b9050602002810190612066919061596b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e9792505050565b8282815181106120b2576120b2615275565b6020908102919091010152600101612019565b505b9695505050505050565b60006120dc8361323c565b8015610a765750610a7683836132a0565b336001600160a01b038216036121455760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107da565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036121ce576000604051631b3fab5160e11b81526004016107da91906159d0565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361223b57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612290565b6060840151600182015460ff6201000090910416151590151514612290576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016107da565b60a08401518051601f60ff821611156122bf576001604051631b3fab5160e11b81526004016107da91906159d0565b612325858560030180548060200260200160405190810160405280929190818152602001828054801561231b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122fd575b505050505061335b565b85606001511561245457612393858560020180548060200260200160405190810160405280929190818152602001828054801561231b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122fd57505050505061335b565b608086015180516123ad9060028701906020840190613e24565b5080516001850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f101561240d576002604051631b3fab5160e11b81526004016107da91906159d0565b604088015161241d9060036159ea565b60ff168160ff1611612445576003604051631b3fab5160e11b81526004016107da91906159d0565b612451878360016133c4565b50505b612460858360026133c4565b81516124759060038601906020850190613e24565b5060408681015160018501805460ff191660ff8316179055875180865560a089015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124ce938a939260028b01929190615a06565b60405180910390a16124df85613544565b505050505050565b6124ef613e96565b835160005b8181101561137c57600060018886846020811061251357612513615275565b61252091901a601b615907565b89858151811061253257612532615275565b602002602001015189868151811061254c5761254c615275565b60200260200101516040516000815260200160405260405161258a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156125ac573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561260d5761260d614407565b600281111561261e5761261e614407565b905250905060018160200151600281111561263b5761263b614407565b14612672576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051859060ff16601f811061268957612689615275565b6020020151156126c5576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600185826000015160ff16601f81106126e0576126e0615275565b9115156020909202015250506001016124f4565b81516126ff816117f4565b600061270a826118f6565b602085015151909150600081900361274d576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846040015151811461278b576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff8111156127a6576127a6613eca565b6040519080825280602002602001820160405280156127cf578160200160208202803683370190505b50905060005b82811015612944576000876020015182815181106127f5576127f5615275565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461288857805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107da565b61291e8186600101805461289b90615540565b80601f01602080910402602001604051908101604052809291908181526020018280546128c790615540565b80156129145780601f106128e957610100808354040283529160200191612914565b820191906000526020600020905b8154815290600101906020018083116128f757829003601f168201915b5050505050613560565b83838151811061293057612930615275565b6020908102919091010152506001016127d5565b50600061295b858389606001518a60800151613682565b9050806000036129a3576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff861660048201526024016107da565b8551151560005b848110156109b55760005a905060008a6020015183815181106129cf576129cf615275565b6020026020010151905060006129ed8a836000015160600151610a29565b90506000816003811115612a0357612a03614407565b1480612a2057506003816003811115612a1e57612a1e614407565b145b612a78578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050612e8f565b8415612b4857600454600090600160a01b900463ffffffff16612a9b88426154a0565b1190508080612abb57506003826003811115612ab957612ab9614407565b145b612afd576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c1660048201526024016107da565b8b8581518110612b0f57612b0f615275565b6020026020010151600014612b42578b8581518110612b3057612b30615275565b60200260200101518360800181815250505b50612ba9565b6000816003811115612b5c57612b5c614407565b14612ba9578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612a68565b81516080015167ffffffffffffffff1615612c98576000816003811115612bd257612bd2614407565b03612c985781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612c49928f929190600401615ab2565b6020604051808303816000875af1158015612c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8c9190615701565b612c9857505050612e8f565b60008c604001518581518110612cb057612cb0615275565b6020026020010151905080518360a001515114612d14578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e16600483015290911660248201526044016107da565b612d288b84600001516060015160016136d8565b600080612d358584613780565b91509150612d4c8d866000015160600151846136d8565b8715612dbc576003826003811115612d6657612d66614407565b03612dbc576000846003811115612d7f57612d7f614407565b14612dbc578451516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526107da91908390600401615adf565b6002826003811115612dd057612dd0614407565b14612e2a576003826003811115612de957612de9614407565b14612e2a578451606001516040517f926c5a3e0000000000000000000000000000000000000000000000000000000081526107da918f918590600401615af8565b8451805160609091015167ffffffffffffffff908116908f167fdc8ccbc35e0eebd81239bcd1971fcd53c7eb34034880142a0f43c809a458732f85855a612e71908d6154a0565b604051612e8093929190615b1e565b60405180910390a45050505050505b6001016129aa565b60408051808201909152600080825260208201526000612eba876020015161384a565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190615b4e565b90506001600160a01b0381161580612fab5750612fa96001600160a01b0382167faff2afbf000000000000000000000000000000000000000000000000000000006120d1565b155b15612fed576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016107da565b600454600090819061300f9089908690600160e01b900463ffffffff166138f0565b9150915060008060006130dc6040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b81525060405160240161308d9190615b6b565b60408051601f198184030181529190526020810180516001600160e01b03167f390775370000000000000000000000000000000000000000000000000000000017905287866113886084613a1e565b9250925092508261311b57816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107da9190614222565b81516020146131635781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016107da565b6000828060200190518101906131799190615c38565b9050866001600160a01b03168c6001600160a01b03161461320e5760006131aa8d8a6131a5868a6154a0565b6138f0565b509050868110806131c45750816131c188836154a0565b14155b1561320c576040517fa966e21f0000000000000000000000000000000000000000000000000000000081526004810183905260248101889052604481018290526064016107da565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613268827f01ffc9a7000000000000000000000000000000000000000000000000000000006132a0565b8015610a795750613299827fffffffff000000000000000000000000000000000000000000000000000000006132a0565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613344575060208210155b80156133505750600081115b979650505050505050565b60005b8151811015610cd85760ff83166000908152600360205260408120835190919084908490811061339057613390615275565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161335e565b60005b82518160ff161015610a23576000838260ff16815181106133ea576133ea615275565b602002602001015190506000600281111561340757613407614407565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561344657613446614407565b14613467576004604051631b3fab5160e11b81526004016107da91906159d0565b6001600160a01b0381166134a7576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134cd576134cd614407565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561352a5761352a614407565b0217905550905050508061353d90615c51565b90506133c7565b60ff81166105dd576009805467ffffffffffffffff1916905550565b8151602080820151604092830151925160009384936135a6937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c70565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135ef9794969395929491939101615ca3565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016136269190615d9a565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b600080613690858585613b44565b905061369b816113d9565b6136a95760009150506136d0565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026136e76080856154c9565b67ffffffffffffffff166136fb91906154f0565b905060006137098585611d84565b905081613718600160046154a0565b901b19168183600381111561372f5761372f614407565b67ffffffffffffffff871660009081526007602052604081209190921b9290921791829161375e608088615944565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fece670b6000000000000000000000000000000000000000000000000000000008152600090606090309063ece670b6906137c49087908790600401615dfa565b600060405180830381600087803b1580156137de57600080fd5b505af19250505080156137ef575060015b61382e573d80801561381d576040519150601f19603f3d011682016040523d82523d6000602084013e613822565b606091505b50600392509050613843565b50506040805160208101909152600081526002905b9250929050565b6000815160201461388957816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107da9190614222565b60008280602001905181019061389f9190615c38565b90506001600160a01b038111806138b7575061040081105b15610a7957826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107da9190614222565b600080600080600061396a8860405160240161391b91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a082310000000000000000000000000000000000000000000000000000000017905288886113886084613a1e565b925092509250826139a957816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107da9190614222565b60208251146139f15781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016107da565b81806020019051810190613a059190615c38565b613a0f82886154a0565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613a4157613a41613eca565b6040519080825280601f01601f191660200182016040528015613a6b576020820181803683370190505b509150863b613a9e577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613ad1577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613b0a577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b2d5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b85576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b9957506101018111155b613bb6576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613be0576040516309bde33960e01b815260040160405180910390fd5b80600003613c0d5786600081518110613bfb57613bfb615275565b60200260200101519350505050613ddc565b60008167ffffffffffffffff811115613c2857613c28613eca565b604051908082528060200260200182016040528015613c51578160200160208202803683370190505b50905060008080805b85811015613d7b5760006001821b8b811603613cb55788851015613c9e578c5160018601958e918110613c8f57613c8f615275565b60200260200101519050613cd7565b8551600185019487918110613c8f57613c8f615275565b8b5160018401938d918110613ccc57613ccc615275565b602002602001015190505b600089861015613d07578d5160018701968f918110613cf857613cf8615275565b60200260200101519050613d29565b8651600186019588918110613d1e57613d1e615275565b602002602001015190505b82851115613d4a576040516309bde33960e01b815260040160405180910390fd5b613d548282613de3565b878481518110613d6657613d66615275565b60209081029190910101525050600101613c5a565b506001850382148015613d8d57508683145b8015613d9857508581145b613db5576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613dca57613dca615275565b60200260200101519750505050505050505b9392505050565b6000818310613dfb57613df68284613e01565b610a76565b610a7683835b604080516001602082015290810183905260608101829052600090608001613664565b828054828255906000526020600020908101928215613e86579160200282015b82811115613e86578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e44565b50613e92929150613eb5565b5090565b604051806103e00160405280601f906020820280368337509192915050565b5b80821115613e925760008155600101613eb6565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f0357613f03613eca565b60405290565b60405160a0810167ffffffffffffffff81118282101715613f0357613f03613eca565b60405160c0810167ffffffffffffffff81118282101715613f0357613f03613eca565b6040805190810167ffffffffffffffff81118282101715613f0357613f03613eca565b6040516060810167ffffffffffffffff81118282101715613f0357613f03613eca565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fbe57613fbe613eca565b604052919050565b600067ffffffffffffffff821115613fe057613fe0613eca565b5060051b60200190565b6001600160a01b03811681146105dd57600080fd5b803567ffffffffffffffff8116811461401757600080fd5b919050565b80151581146105dd57600080fd5b80356140178161401c565b600067ffffffffffffffff82111561404f5761404f613eca565b50601f01601f191660200190565b600082601f83011261406e57600080fd5b813561408161407c82614035565b613f95565b81815284602083860101111561409657600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156140c657600080fd5b823567ffffffffffffffff808211156140de57600080fd5b818501915085601f8301126140f257600080fd5b813561410061407c82613fc6565b81815260059190911b8301840190848101908883111561411f57600080fd5b8585015b838110156141c55780358581111561413b5760008081fd5b86016080818c03601f19018113156141535760008081fd5b61415b613ee0565b8983013561416881613fea565b81526040614177848201613fff565b8b83015260608085013561418a8161401c565b838301529284013592898411156141a357600091508182fd5b6141b18f8d8688010161405d565b908301525085525050918601918601614123565b5098975050505050505050565b60005b838110156141ed5781810151838201526020016141d5565b50506000910152565b6000815180845261420e8160208601602086016141d2565b601f01601f19169290920160200192915050565b602081526000610a7660208301846141f6565b8060608101831015610a7957600080fd5b60008083601f84011261425857600080fd5b50813567ffffffffffffffff81111561427057600080fd5b60208301915083602082850101111561384357600080fd5b60008083601f84011261429a57600080fd5b50813567ffffffffffffffff8111156142b257600080fd5b6020830191508360208260051b850101111561384357600080fd5b60008060008060008060008060e0898b0312156142e957600080fd5b6142f38a8a614235565b9750606089013567ffffffffffffffff8082111561431057600080fd5b61431c8c838d01614246565b909950975060808b013591508082111561433557600080fd5b6143418c838d01614288565b909750955060a08b013591508082111561435a57600080fd5b506143678b828c01614288565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561439557600080fd5b61439f8585614235565b9250606084013567ffffffffffffffff8111156143bb57600080fd5b6143c786828701614246565b9497909650939450505050565b600080604083850312156143e757600080fd5b6143f083613fff565b91506143fe60208401613fff565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061442d5761442d614407565b9052565b60208101610a79828461441d565b600060a0828403121561445157600080fd5b614459613f09565b90508135815261446b60208301613fff565b602082015261447c60408301613fff565b604082015261448d60608301613fff565b606082015261449e60808301613fff565b608082015292915050565b803561401781613fea565b600082601f8301126144c557600080fd5b813560206144d561407c83613fc6565b82815260059290921b840181019181810190868411156144f457600080fd5b8286015b848110156120c557803567ffffffffffffffff808211156145195760008081fd5b8189019150608080601f19848d030112156145345760008081fd5b61453c613ee0565b878401358381111561454e5760008081fd5b61455c8d8a8388010161405d565b825250604080850135848111156145735760008081fd5b6145818e8b8389010161405d565b8a840152506060808601358581111561459a5760008081fd5b6145a88f8c838a010161405d565b92840192909252949092013593810193909352505083529183019183016144f8565b600061014082840312156145dd57600080fd5b6145e5613f2c565b90506145f1838361443f565b815260a082013567ffffffffffffffff8082111561460e57600080fd5b61461a8583860161405d565b602084015260c084013591508082111561463357600080fd5b61463f8583860161405d565b604084015261465060e085016144a9565b6060840152610100840135608084015261012084013591508082111561467557600080fd5b50614682848285016144b4565b60a08301525092915050565b600082601f83011261469f57600080fd5b813560206146af61407c83613fc6565b82815260059290921b840181019181810190868411156146ce57600080fd5b8286015b848110156120c557803567ffffffffffffffff8111156146f25760008081fd5b6147008986838b01016145ca565b8452509183019183016146d2565b600082601f83011261471f57600080fd5b8135602061472f61407c83613fc6565b82815260059290921b8401810191818101908684111561474e57600080fd5b8286015b848110156120c557803567ffffffffffffffff8082111561477257600080fd5b818901915089603f83011261478657600080fd5b8582013561479661407c82613fc6565b81815260059190911b830160400190878101908c8311156147b657600080fd5b604085015b838110156147ef578035858111156147d257600080fd5b6147e18f6040838a010161405d565b8452509189019189016147bb565b50875250505092840192508301614752565b600082601f83011261481257600080fd5b8135602061482261407c83613fc6565b8083825260208201915060208460051b87010193508684111561484457600080fd5b602086015b848110156120c55780358352918301918301614849565b600082601f83011261487157600080fd5b8135602061488161407c83613fc6565b82815260059290921b840181019181810190868411156148a057600080fd5b8286015b848110156120c557803567ffffffffffffffff808211156148c55760008081fd5b818901915060a080601f19848d030112156148e05760008081fd5b6148e8613f09565b6148f3888501613fff565b8152604080850135848111156149095760008081fd5b6149178e8b8389010161468e565b8a84015250606080860135858111156149305760008081fd5b61493e8f8c838a010161470e565b83850152506080915081860135858111156149595760008081fd5b6149678f8c838a0101614801565b91840191909152509190930135908301525083529183019183016148a4565b600080604080848603121561499a57600080fd5b833567ffffffffffffffff808211156149b257600080fd5b6149be87838801614860565b94506020915081860135818111156149d557600080fd5b8601601f810188136149e657600080fd5b80356149f461407c82613fc6565b81815260059190911b8201840190848101908a831115614a1357600080fd5b8584015b83811015614a9f57803586811115614a2f5760008081fd5b8501603f81018d13614a415760008081fd5b87810135614a5161407c82613fc6565b81815260059190911b82018a0190898101908f831115614a715760008081fd5b928b01925b82841015614a8f5783358252928a0192908a0190614a76565b8652505050918601918601614a17565b50809750505050505050509250929050565b600060208284031215614ac357600080fd5b813567ffffffffffffffff811115614ada57600080fd5b820160a08185031215613ddc57600080fd5b803563ffffffff8116811461401757600080fd5b600060a08284031215614b1257600080fd5b614b1a613f09565b8235614b2581613fea565b8152614b3360208401614aec565b6020820152614b4460408401614aec565b6040820152614b5560608401614aec565b60608201526080830135614b6881613fea565b60808201529392505050565b803560ff8116811461401757600080fd5b600060208284031215614b9757600080fd5b610a7682614b74565b60008151808452602080850194506020840160005b83811015614bda5781516001600160a01b031687529582019590820190600101614bb5565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c3460e0840182614ba0565b90506040840151601f198483030160c0850152614c518282614ba0565b95945050505050565b60008060408385031215614c6d57600080fd5b614c7683613fff565b946020939093013593505050565b60008060208385031215614c9757600080fd5b823567ffffffffffffffff80821115614caf57600080fd5b818501915085601f830112614cc357600080fd5b813581811115614cd257600080fd5b8660208260061b8501011115614ce757600080fd5b60209290920196919550909350505050565b600060208284031215614d0b57600080fd5b610a7682613fff565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526136d060a08401826141f6565b600080600060408486031215614d7757600080fd5b833567ffffffffffffffff80821115614d8f57600080fd5b614d9b878388016145ca565b94506020860135915080821115614db157600080fd5b506143c786828701614288565b600060208284031215614dd057600080fd5b8135613ddc81613fea565b600082601f830112614dec57600080fd5b81356020614dfc61407c83613fc6565b8083825260208201915060208460051b870101935086841115614e1e57600080fd5b602086015b848110156120c5578035614e3681613fea565b8352918301918301614e23565b60006020808385031215614e5657600080fd5b823567ffffffffffffffff80821115614e6e57600080fd5b818501915085601f830112614e8257600080fd5b8135614e9061407c82613fc6565b81815260059190911b83018401908481019088831115614eaf57600080fd5b8585015b838110156141c557803585811115614eca57600080fd5b860160c0818c03601f19011215614ee15760008081fd5b614ee9613f2c565b8882013581526040614efc818401614b74565b8a8301526060614f0d818501614b74565b8284015260809150614f2082850161402a565b9083015260a08381013589811115614f385760008081fd5b614f468f8d83880101614ddb565b838501525060c0840135915088821115614f605760008081fd5b614f6e8e8c84870101614ddb565b9083015250845250918601918601614eb3565b600060208284031215614f9357600080fd5b5035919050565b80356001600160e01b038116811461401757600080fd5b600082601f830112614fc257600080fd5b81356020614fd261407c83613fc6565b82815260069290921b84018101918181019086841115614ff157600080fd5b8286015b848110156120c5576040818903121561500e5760008081fd5b615016613f4f565b61501f82613fff565b815261502c858301614f9a565b81860152835291830191604001614ff5565b600082601f83011261504f57600080fd5b8135602061505f61407c83613fc6565b82815260079290921b8401810191818101908684111561507e57600080fd5b8286015b848110156120c557808803608081121561509c5760008081fd5b6150a4613f72565b6150ad83613fff565b8152604080601f19840112156150c35760008081fd5b6150cb613f4f565b92506150d8878501613fff565b83526150e5818501613fff565b8388015281870192909252606083013591810191909152835291830191608001615082565b6000602080838503121561511d57600080fd5b823567ffffffffffffffff8082111561513557600080fd5b8185019150604080838803121561514b57600080fd5b615153613f4f565b83358381111561516257600080fd5b84016040818a03121561517457600080fd5b61517c613f4f565b81358581111561518b57600080fd5b8201601f81018b1361519c57600080fd5b80356151aa61407c82613fc6565b81815260069190911b8201890190898101908d8311156151c957600080fd5b928a01925b828410156152195787848f0312156151e65760008081fd5b6151ee613f4f565b84356151f981613fea565b8152615206858d01614f9a565b818d0152825292870192908a01906151ce565b84525050508187013593508484111561523157600080fd5b61523d8a858401614fb1565b818801528252508385013591508282111561525757600080fd5b6152638883860161503e565b85820152809550505050505092915050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b818110156152e257835180516001600160a01b031684528501516001600160e01b03168584015292840192918501916001016152ab565b50508583015187820388850152805180835290840192506000918401905b8083101561533c578351805167ffffffffffffffff1683528501516001600160e01b031685830152928401926001929092019190850190615300565b50979650505050505050565b602081526000610a76602083018461528b565b67ffffffffffffffff8316815260608101613ddc6020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153c7576153c7615390565b5092915050565b6000602080835260608451604080848701526153ed606087018361528b565b87850151878203601f19016040890152805180835290860193506000918601905b808310156141c557845167ffffffffffffffff81511683528781015161544d89850182805167ffffffffffffffff908116835260209182015116910152565b5084015182870152938601936001929092019160809091019061540e565b60006020828403121561547d57600080fd5b813567ffffffffffffffff81111561549457600080fd5b6136d084828501614860565b81810381811115610a7957610a79615390565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154e4576154e46154b3565b92169190910692915050565b8082028115828204841417610a7957610a79615390565b60006040828403121561551957600080fd5b615521613f4f565b61552a83613fff565b8152602083013560208201528091505092915050565b600181811c9082168061555457607f821691505b60208210810361557457634e487b7160e01b600052602260045260246000fd5b50919050565b805182526000602067ffffffffffffffff81840151168185015260408084015160a060408701526155ae60a08701826141f6565b9050606085015186820360608801526155c782826141f6565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561533c57835180516001600160a01b03168352860151868301529285019260019290920191908401906155ea565b602081526000610a76602083018461557a565b608081526000615642608083018761557a565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561568057600080fd5b835161568b8161401c565b602085015190935067ffffffffffffffff8111156156a857600080fd5b8401601f810186136156b957600080fd5b80516156c761407c82614035565b8181528760208385010111156156dc57600080fd5b6156ed8260208301602086016141d2565b809450505050604084015190509250925092565b60006020828403121561571357600080fd5b8151613ddc8161401c565b601f821115610cd8576000816000526020600020601f850160051c810160208610156157475750805b601f850160051c820191505b818110156124df57828155600101615753565b815167ffffffffffffffff81111561578057615780613eca565b6157948161578e8454615540565b8461571e565b602080601f8311600181146157c957600084156157b15750858301515b600019600386901b1c1916600185901b1785556124df565b600085815260208120601f198616915b828110156157f8578886015182559484019460019091019084016157d9565b50858210156158165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c1660608501525060018085016080808601526000815461587881615540565b8060a089015260c0600183166000811461589957600181146158b5576158e5565b60ff19841660c08b015260c083151560051b8b010194506158e5565b85600052602060002060005b848110156158dc5781548c82018501529088019089016158c1565b8b0160c0019550505b50929998505050505050505050565b80820180821115610a7957610a79615390565b60ff8181168382160190811115610a7957610a79615390565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff8084168061595f5761595f6154b3565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159a057600080fd5b83018035915067ffffffffffffffff8211156159bb57600080fd5b60200191503681900382131561384357600080fd5b60208101600583106159e4576159e4614407565b91905290565b60ff81811683821602908116908181146153c7576153c7615390565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a5e5784546001600160a01b031683526001948501949284019201615a39565b50508481036060860152865180825290820192508187019060005b81811015615a9e5782516001600160a01b031685529383019391830191600101615a79565b50505060ff851660808501525090506120c7565b600067ffffffffffffffff808616835280851660208401525060606040830152614c5160608301846141f6565b8281526040602082015260006136d060408301846141f6565b67ffffffffffffffff848116825283166020820152606081016136d0604083018461441d565b615b28818561441d565b606060208201526000615b3e60608301856141f6565b9050826040830152949350505050565b600060208284031215615b6057600080fd5b8151613ddc81613fea565b6020815260008251610100806020850152615b8a6101208501836141f6565b91506020850151615ba7604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615be160a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bfe84836141f6565b935060c08701519150808685030160e0870152615c1b84836141f6565b935060e08701519150808685030183870152506120c783826141f6565b600060208284031215615c4a57600080fd5b5051919050565b600060ff821660ff8103615c6757615c67615390565b60010192915050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526120c760808301846141f6565b86815260c060208201526000615cbc60c08301886141f6565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d8d57601f19868403018952815160808151818652615d39828701826141f6565b9150508582015185820387870152615d5182826141f6565b91505060408083015186830382880152615d6b83826141f6565b6060948501519790940196909652505098840198925090830190600101615d13565b5090979650505050505050565b602081526000610a766020830184615cf6565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d8d57601f19868403018952615de88383516141f6565b98840198925090830190600101615dcc565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e626101808501836141f6565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e9f84836141f6565b935060608801519150615ebe6101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615ee58282615cf6565b9150508281036020840152614c518185615dad56fea164736f6c6343000818000a",
+}
+
+var OffRampABI = OffRampMetaData.ABI
+
+var OffRampBin = OffRampMetaData.Bin
+
+func DeployOffRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig OffRampStaticConfig, dynamicConfig OffRampDynamicConfig, sourceChainConfigs []OffRampSourceChainConfigArgs) (common.Address, *types.Transaction, *OffRamp, error) {
+ parsed, err := OffRampMetaData.GetAbi()
+ if err != nil {
+ return common.Address{}, nil, nil, err
+ }
+ if parsed == nil {
+ return common.Address{}, nil, nil, errors.New("GetABI returned nil")
+ }
+
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OffRampBin), backend, staticConfig, dynamicConfig, sourceChainConfigs)
+ if err != nil {
+ return common.Address{}, nil, nil, err
+ }
+ return address, tx, &OffRamp{address: address, abi: *parsed, OffRampCaller: OffRampCaller{contract: contract}, OffRampTransactor: OffRampTransactor{contract: contract}, OffRampFilterer: OffRampFilterer{contract: contract}}, nil
+}
+
+type OffRamp struct {
+ address common.Address
+ abi abi.ABI
+ OffRampCaller
+ OffRampTransactor
+ OffRampFilterer
+}
+
+type OffRampCaller struct {
+ contract *bind.BoundContract
+}
+
+type OffRampTransactor struct {
+ contract *bind.BoundContract
+}
+
+type OffRampFilterer struct {
+ contract *bind.BoundContract
+}
+
+type OffRampSession struct {
+ Contract *OffRamp
+ CallOpts bind.CallOpts
+ TransactOpts bind.TransactOpts
+}
+
+type OffRampCallerSession struct {
+ Contract *OffRampCaller
+ CallOpts bind.CallOpts
+}
+
+type OffRampTransactorSession struct {
+ Contract *OffRampTransactor
+ TransactOpts bind.TransactOpts
+}
+
+type OffRampRaw struct {
+ Contract *OffRamp
+}
+
+type OffRampCallerRaw struct {
+ Contract *OffRampCaller
+}
+
+type OffRampTransactorRaw struct {
+ Contract *OffRampTransactor
+}
+
+func NewOffRamp(address common.Address, backend bind.ContractBackend) (*OffRamp, error) {
+ abi, err := abi.JSON(strings.NewReader(OffRampABI))
+ if err != nil {
+ return nil, err
+ }
+ contract, err := bindOffRamp(address, backend, backend, backend)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRamp{address: address, abi: abi, OffRampCaller: OffRampCaller{contract: contract}, OffRampTransactor: OffRampTransactor{contract: contract}, OffRampFilterer: OffRampFilterer{contract: contract}}, nil
+}
+
+func NewOffRampCaller(address common.Address, caller bind.ContractCaller) (*OffRampCaller, error) {
+ contract, err := bindOffRamp(address, caller, nil, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampCaller{contract: contract}, nil
+}
+
+func NewOffRampTransactor(address common.Address, transactor bind.ContractTransactor) (*OffRampTransactor, error) {
+ contract, err := bindOffRamp(address, nil, transactor, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampTransactor{contract: contract}, nil
+}
+
+func NewOffRampFilterer(address common.Address, filterer bind.ContractFilterer) (*OffRampFilterer, error) {
+ contract, err := bindOffRamp(address, nil, nil, filterer)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampFilterer{contract: contract}, nil
+}
+
+func bindOffRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+ parsed, err := OffRampMetaData.GetAbi()
+ if err != nil {
+ return nil, err
+ }
+ return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
+}
+
+func (_OffRamp *OffRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _OffRamp.Contract.OffRampCaller.contract.Call(opts, result, method, params...)
+}
+
+func (_OffRamp *OffRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OffRamp.Contract.OffRampTransactor.contract.Transfer(opts)
+}
+
+func (_OffRamp *OffRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _OffRamp.Contract.OffRampTransactor.contract.Transact(opts, method, params...)
+}
+
+func (_OffRamp *OffRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _OffRamp.Contract.contract.Call(opts, result, method, params...)
+}
+
+func (_OffRamp *OffRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OffRamp.Contract.contract.Transfer(opts)
+}
+
+func (_OffRamp *OffRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _OffRamp.Contract.contract.Transact(opts, method, params...)
+}
+
+func (_OffRamp *OffRampCaller) CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "ccipReceive", arg0)
+
+ if err != nil {
+ return err
+ }
+
+ return err
+
+}
+
+func (_OffRamp *OffRampSession) CcipReceive(arg0 ClientAny2EVMMessage) error {
+ return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0)
+}
+
+func (_OffRamp *OffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) error {
+ return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0)
+}
+
+func (_OffRamp *OffRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "getDynamicConfig")
+
+ if err != nil {
+ return *new(OffRampDynamicConfig), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(OffRampDynamicConfig)).(*OffRampDynamicConfig)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) GetDynamicConfig() (OffRampDynamicConfig, error) {
+ return _OffRamp.Contract.GetDynamicConfig(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCallerSession) GetDynamicConfig() (OffRampDynamicConfig, error) {
+ return _OffRamp.Contract.GetDynamicConfig(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCaller) GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "getExecutionState", sourceChainSelector, sequenceNumber)
+
+ if err != nil {
+ return *new(uint8), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) {
+ return _OffRamp.Contract.GetExecutionState(&_OffRamp.CallOpts, sourceChainSelector, sequenceNumber)
+}
+
+func (_OffRamp *OffRampCallerSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) {
+ return _OffRamp.Contract.GetExecutionState(&_OffRamp.CallOpts, sourceChainSelector, sequenceNumber)
+}
+
+func (_OffRamp *OffRampCaller) GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "getLatestPriceSequenceNumber")
+
+ if err != nil {
+ return *new(uint64), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) GetLatestPriceSequenceNumber() (uint64, error) {
+ return _OffRamp.Contract.GetLatestPriceSequenceNumber(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCallerSession) GetLatestPriceSequenceNumber() (uint64, error) {
+ return _OffRamp.Contract.GetLatestPriceSequenceNumber(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCaller) GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "getMerkleRoot", sourceChainSelector, root)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) {
+ return _OffRamp.Contract.GetMerkleRoot(&_OffRamp.CallOpts, sourceChainSelector, root)
+}
+
+func (_OffRamp *OffRampCallerSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) {
+ return _OffRamp.Contract.GetMerkleRoot(&_OffRamp.CallOpts, sourceChainSelector, root)
+}
+
+func (_OffRamp *OffRampCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "getSourceChainConfig", sourceChainSelector)
+
+ if err != nil {
+ return *new(OffRampSourceChainConfig), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(OffRampSourceChainConfig)).(*OffRampSourceChainConfig)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) {
+ return _OffRamp.Contract.GetSourceChainConfig(&_OffRamp.CallOpts, sourceChainSelector)
+}
+
+func (_OffRamp *OffRampCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) {
+ return _OffRamp.Contract.GetSourceChainConfig(&_OffRamp.CallOpts, sourceChainSelector)
+}
+
+func (_OffRamp *OffRampCaller) GetStaticConfig(opts *bind.CallOpts) (OffRampStaticConfig, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "getStaticConfig")
+
+ if err != nil {
+ return *new(OffRampStaticConfig), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(OffRampStaticConfig)).(*OffRampStaticConfig)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) GetStaticConfig() (OffRampStaticConfig, error) {
+ return _OffRamp.Contract.GetStaticConfig(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCallerSession) GetStaticConfig() (OffRampStaticConfig, error) {
+ return _OffRamp.Contract.GetStaticConfig(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCaller) IsBlessed(opts *bind.CallOpts, root [32]byte) (bool, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "isBlessed", root)
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) IsBlessed(root [32]byte) (bool, error) {
+ return _OffRamp.Contract.IsBlessed(&_OffRamp.CallOpts, root)
+}
+
+func (_OffRamp *OffRampCallerSession) IsBlessed(root [32]byte) (bool, error) {
+ return _OffRamp.Contract.IsBlessed(&_OffRamp.CallOpts, root)
+}
+
+func (_OffRamp *OffRampCaller) LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "latestConfigDetails", ocrPluginType)
+
+ if err != nil {
+ return *new(MultiOCR3BaseOCRConfig), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(MultiOCR3BaseOCRConfig)).(*MultiOCR3BaseOCRConfig)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) {
+ return _OffRamp.Contract.LatestConfigDetails(&_OffRamp.CallOpts, ocrPluginType)
+}
+
+func (_OffRamp *OffRampCallerSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) {
+ return _OffRamp.Contract.LatestConfigDetails(&_OffRamp.CallOpts, ocrPluginType)
+}
+
+func (_OffRamp *OffRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "owner")
+
+ if err != nil {
+ return *new(common.Address), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) Owner() (common.Address, error) {
+ return _OffRamp.Contract.Owner(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCallerSession) Owner() (common.Address, error) {
+ return _OffRamp.Contract.Owner(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
+ var out []interface{}
+ err := _OffRamp.contract.Call(opts, &out, "typeAndVersion")
+
+ if err != nil {
+ return *new(string), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(string)).(*string)
+
+ return out0, err
+
+}
+
+func (_OffRamp *OffRampSession) TypeAndVersion() (string, error) {
+ return _OffRamp.Contract.TypeAndVersion(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampCallerSession) TypeAndVersion() (string, error) {
+ return _OffRamp.Contract.TypeAndVersion(&_OffRamp.CallOpts)
+}
+
+func (_OffRamp *OffRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "acceptOwnership")
+}
+
+func (_OffRamp *OffRampSession) AcceptOwnership() (*types.Transaction, error) {
+ return _OffRamp.Contract.AcceptOwnership(&_OffRamp.TransactOpts)
+}
+
+func (_OffRamp *OffRampTransactorSession) AcceptOwnership() (*types.Transaction, error) {
+ return _OffRamp.Contract.AcceptOwnership(&_OffRamp.TransactOpts)
+}
+
+func (_OffRamp *OffRampTransactor) ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "applySourceChainConfigUpdates", sourceChainConfigUpdates)
+}
+
+func (_OffRamp *OffRampSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) {
+ return _OffRamp.Contract.ApplySourceChainConfigUpdates(&_OffRamp.TransactOpts, sourceChainConfigUpdates)
+}
+
+func (_OffRamp *OffRampTransactorSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) {
+ return _OffRamp.Contract.ApplySourceChainConfigUpdates(&_OffRamp.TransactOpts, sourceChainConfigUpdates)
+}
+
+func (_OffRamp *OffRampTransactor) Commit(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "commit", reportContext, report, rs, ss, rawVs)
+}
+
+func (_OffRamp *OffRampSession) Commit(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) {
+ return _OffRamp.Contract.Commit(&_OffRamp.TransactOpts, reportContext, report, rs, ss, rawVs)
+}
+
+func (_OffRamp *OffRampTransactorSession) Commit(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) {
+ return _OffRamp.Contract.Commit(&_OffRamp.TransactOpts, reportContext, report, rs, ss, rawVs)
+}
+
+func (_OffRamp *OffRampTransactor) Execute(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "execute", reportContext, report)
+}
+
+func (_OffRamp *OffRampSession) Execute(reportContext [3][32]byte, report []byte) (*types.Transaction, error) {
+ return _OffRamp.Contract.Execute(&_OffRamp.TransactOpts, reportContext, report)
+}
+
+func (_OffRamp *OffRampTransactorSession) Execute(reportContext [3][32]byte, report []byte) (*types.Transaction, error) {
+ return _OffRamp.Contract.Execute(&_OffRamp.TransactOpts, reportContext, report)
+}
+
+func (_OffRamp *OffRampTransactor) ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "executeSingleMessage", message, offchainTokenData)
+}
+
+func (_OffRamp *OffRampSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error) {
+ return _OffRamp.Contract.ExecuteSingleMessage(&_OffRamp.TransactOpts, message, offchainTokenData)
+}
+
+func (_OffRamp *OffRampTransactorSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error) {
+ return _OffRamp.Contract.ExecuteSingleMessage(&_OffRamp.TransactOpts, message, offchainTokenData)
+}
+
+func (_OffRamp *OffRampTransactor) ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "manuallyExecute", reports, gasLimitOverrides)
+}
+
+func (_OffRamp *OffRampSession) ManuallyExecute(reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error) {
+ return _OffRamp.Contract.ManuallyExecute(&_OffRamp.TransactOpts, reports, gasLimitOverrides)
+}
+
+func (_OffRamp *OffRampTransactorSession) ManuallyExecute(reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error) {
+ return _OffRamp.Contract.ManuallyExecute(&_OffRamp.TransactOpts, reports, gasLimitOverrides)
+}
+
+func (_OffRamp *OffRampTransactor) ResetUnblessedRoots(opts *bind.TransactOpts, rootToReset []OffRampUnblessedRoot) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "resetUnblessedRoots", rootToReset)
+}
+
+func (_OffRamp *OffRampSession) ResetUnblessedRoots(rootToReset []OffRampUnblessedRoot) (*types.Transaction, error) {
+ return _OffRamp.Contract.ResetUnblessedRoots(&_OffRamp.TransactOpts, rootToReset)
+}
+
+func (_OffRamp *OffRampTransactorSession) ResetUnblessedRoots(rootToReset []OffRampUnblessedRoot) (*types.Transaction, error) {
+ return _OffRamp.Contract.ResetUnblessedRoots(&_OffRamp.TransactOpts, rootToReset)
+}
+
+func (_OffRamp *OffRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig)
+}
+
+func (_OffRamp *OffRampSession) SetDynamicConfig(dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) {
+ return _OffRamp.Contract.SetDynamicConfig(&_OffRamp.TransactOpts, dynamicConfig)
+}
+
+func (_OffRamp *OffRampTransactorSession) SetDynamicConfig(dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) {
+ return _OffRamp.Contract.SetDynamicConfig(&_OffRamp.TransactOpts, dynamicConfig)
+}
+
+func (_OffRamp *OffRampTransactor) SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "setOCR3Configs", ocrConfigArgs)
+}
+
+func (_OffRamp *OffRampSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) {
+ return _OffRamp.Contract.SetOCR3Configs(&_OffRamp.TransactOpts, ocrConfigArgs)
+}
+
+func (_OffRamp *OffRampTransactorSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) {
+ return _OffRamp.Contract.SetOCR3Configs(&_OffRamp.TransactOpts, ocrConfigArgs)
+}
+
+func (_OffRamp *OffRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
+ return _OffRamp.contract.Transact(opts, "transferOwnership", to)
+}
+
+func (_OffRamp *OffRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _OffRamp.Contract.TransferOwnership(&_OffRamp.TransactOpts, to)
+}
+
+func (_OffRamp *OffRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _OffRamp.Contract.TransferOwnership(&_OffRamp.TransactOpts, to)
+}
+
+type OffRampAlreadyAttemptedIterator struct {
+ Event *OffRampAlreadyAttempted
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampAlreadyAttemptedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampAlreadyAttempted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampAlreadyAttempted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampAlreadyAttemptedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampAlreadyAttemptedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampAlreadyAttempted struct {
+ SourceChainSelector uint64
+ SequenceNumber uint64
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterAlreadyAttempted(opts *bind.FilterOpts) (*OffRampAlreadyAttemptedIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "AlreadyAttempted")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampAlreadyAttemptedIterator{contract: _OffRamp.contract, event: "AlreadyAttempted", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *OffRampAlreadyAttempted) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "AlreadyAttempted")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampAlreadyAttempted)
+ if err := _OffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseAlreadyAttempted(log types.Log) (*OffRampAlreadyAttempted, error) {
+ event := new(OffRampAlreadyAttempted)
+ if err := _OffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampCommitReportAcceptedIterator struct {
+ Event *OffRampCommitReportAccepted
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampCommitReportAcceptedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampCommitReportAccepted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampCommitReportAccepted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampCommitReportAcceptedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampCommitReportAcceptedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampCommitReportAccepted struct {
+ Report OffRampCommitReport
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterCommitReportAccepted(opts *bind.FilterOpts) (*OffRampCommitReportAcceptedIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "CommitReportAccepted")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampCommitReportAcceptedIterator{contract: _OffRamp.contract, event: "CommitReportAccepted", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *OffRampCommitReportAccepted) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "CommitReportAccepted")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampCommitReportAccepted)
+ if err := _OffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseCommitReportAccepted(log types.Log) (*OffRampCommitReportAccepted, error) {
+ event := new(OffRampCommitReportAccepted)
+ if err := _OffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampConfigSetIterator struct {
+ Event *OffRampConfigSet
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampConfigSetIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampConfigSetIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampConfigSetIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampConfigSet struct {
+ OcrPluginType uint8
+ ConfigDigest [32]byte
+ Signers []common.Address
+ Transmitters []common.Address
+ F uint8
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*OffRampConfigSetIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "ConfigSet")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampConfigSetIterator{contract: _OffRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampConfigSet) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "ConfigSet")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseConfigSet(log types.Log) (*OffRampConfigSet, error) {
+ event := new(OffRampConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampDynamicConfigSetIterator struct {
+ Event *OffRampDynamicConfigSet
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampDynamicConfigSetIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampDynamicConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampDynamicConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampDynamicConfigSetIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampDynamicConfigSetIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampDynamicConfigSet struct {
+ DynamicConfig OffRampDynamicConfig
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterDynamicConfigSet(opts *bind.FilterOpts) (*OffRampDynamicConfigSetIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "DynamicConfigSet")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampDynamicConfigSetIterator{contract: _OffRamp.contract, event: "DynamicConfigSet", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampDynamicConfigSet) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "DynamicConfigSet")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampDynamicConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseDynamicConfigSet(log types.Log) (*OffRampDynamicConfigSet, error) {
+ event := new(OffRampDynamicConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampExecutionStateChangedIterator struct {
+ Event *OffRampExecutionStateChanged
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampExecutionStateChangedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampExecutionStateChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampExecutionStateChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampExecutionStateChangedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampExecutionStateChangedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampExecutionStateChanged struct {
+ SourceChainSelector uint64
+ SequenceNumber uint64
+ MessageId [32]byte
+ State uint8
+ ReturnData []byte
+ GasUsed *big.Int
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*OffRampExecutionStateChangedIterator, error) {
+
+ var sourceChainSelectorRule []interface{}
+ for _, sourceChainSelectorItem := range sourceChainSelector {
+ sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
+ }
+ var sequenceNumberRule []interface{}
+ for _, sequenceNumberItem := range sequenceNumber {
+ sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem)
+ }
+ var messageIdRule []interface{}
+ for _, messageIdItem := range messageId {
+ messageIdRule = append(messageIdRule, messageIdItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampExecutionStateChangedIterator{contract: _OffRamp.contract, event: "ExecutionStateChanged", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *OffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) {
+
+ var sourceChainSelectorRule []interface{}
+ for _, sourceChainSelectorItem := range sourceChainSelector {
+ sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
+ }
+ var sequenceNumberRule []interface{}
+ for _, sequenceNumberItem := range sequenceNumber {
+ sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem)
+ }
+ var messageIdRule []interface{}
+ for _, messageIdItem := range messageId {
+ messageIdRule = append(messageIdRule, messageIdItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampExecutionStateChanged)
+ if err := _OffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseExecutionStateChanged(log types.Log) (*OffRampExecutionStateChanged, error) {
+ event := new(OffRampExecutionStateChanged)
+ if err := _OffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampOwnershipTransferRequestedIterator struct {
+ Event *OffRampOwnershipTransferRequested
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampOwnershipTransferRequestedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampOwnershipTransferRequested)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampOwnershipTransferRequested)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampOwnershipTransferRequestedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampOwnershipTransferRequestedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampOwnershipTransferRequested struct {
+ From common.Address
+ To common.Address
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferRequestedIterator, error) {
+
+ var fromRule []interface{}
+ for _, fromItem := range from {
+ fromRule = append(fromRule, fromItem)
+ }
+ var toRule []interface{}
+ for _, toItem := range to {
+ toRule = append(toRule, toItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampOwnershipTransferRequestedIterator{contract: _OffRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
+
+ var fromRule []interface{}
+ for _, fromItem := range from {
+ fromRule = append(fromRule, fromItem)
+ }
+ var toRule []interface{}
+ for _, toItem := range to {
+ toRule = append(toRule, toItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampOwnershipTransferRequested)
+ if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*OffRampOwnershipTransferRequested, error) {
+ event := new(OffRampOwnershipTransferRequested)
+ if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampOwnershipTransferredIterator struct {
+ Event *OffRampOwnershipTransferred
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampOwnershipTransferredIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampOwnershipTransferred)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampOwnershipTransferred)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampOwnershipTransferredIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampOwnershipTransferredIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampOwnershipTransferred struct {
+ From common.Address
+ To common.Address
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferredIterator, error) {
+
+ var fromRule []interface{}
+ for _, fromItem := range from {
+ fromRule = append(fromRule, fromItem)
+ }
+ var toRule []interface{}
+ for _, toItem := range to {
+ toRule = append(toRule, toItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampOwnershipTransferredIterator{contract: _OffRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
+
+ var fromRule []interface{}
+ for _, fromItem := range from {
+ fromRule = append(fromRule, fromItem)
+ }
+ var toRule []interface{}
+ for _, toItem := range to {
+ toRule = append(toRule, toItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampOwnershipTransferred)
+ if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseOwnershipTransferred(log types.Log) (*OffRampOwnershipTransferred, error) {
+ event := new(OffRampOwnershipTransferred)
+ if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampRootRemovedIterator struct {
+ Event *OffRampRootRemoved
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampRootRemovedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampRootRemoved)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampRootRemoved)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampRootRemovedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampRootRemovedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampRootRemoved struct {
+ Root [32]byte
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterRootRemoved(opts *bind.FilterOpts) (*OffRampRootRemovedIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "RootRemoved")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampRootRemovedIterator{contract: _OffRamp.contract, event: "RootRemoved", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *OffRampRootRemoved) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "RootRemoved")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampRootRemoved)
+ if err := _OffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseRootRemoved(log types.Log) (*OffRampRootRemoved, error) {
+ event := new(OffRampRootRemoved)
+ if err := _OffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampSkippedAlreadyExecutedMessageIterator struct {
+ Event *OffRampSkippedAlreadyExecutedMessage
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampSkippedAlreadyExecutedMessageIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampSkippedAlreadyExecutedMessage)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampSkippedAlreadyExecutedMessage)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampSkippedAlreadyExecutedMessageIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampSkippedAlreadyExecutedMessageIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampSkippedAlreadyExecutedMessage struct {
+ SourceChainSelector uint64
+ SequenceNumber uint64
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*OffRampSkippedAlreadyExecutedMessageIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SkippedAlreadyExecutedMessage")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampSkippedAlreadyExecutedMessageIterator{contract: _OffRamp.contract, event: "SkippedAlreadyExecutedMessage", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *OffRampSkippedAlreadyExecutedMessage) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SkippedAlreadyExecutedMessage")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampSkippedAlreadyExecutedMessage)
+ if err := _OffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseSkippedAlreadyExecutedMessage(log types.Log) (*OffRampSkippedAlreadyExecutedMessage, error) {
+ event := new(OffRampSkippedAlreadyExecutedMessage)
+ if err := _OffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampSourceChainConfigSetIterator struct {
+ Event *OffRampSourceChainConfigSet
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampSourceChainConfigSetIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampSourceChainConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampSourceChainConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampSourceChainConfigSetIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampSourceChainConfigSetIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampSourceChainConfigSet struct {
+ SourceChainSelector uint64
+ SourceConfig OffRampSourceChainConfig
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*OffRampSourceChainConfigSetIterator, error) {
+
+ var sourceChainSelectorRule []interface{}
+ for _, sourceChainSelectorItem := range sourceChainSelector {
+ sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampSourceChainConfigSetIterator{contract: _OffRamp.contract, event: "SourceChainConfigSet", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error) {
+
+ var sourceChainSelectorRule []interface{}
+ for _, sourceChainSelectorItem := range sourceChainSelector {
+ sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampSourceChainConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseSourceChainConfigSet(log types.Log) (*OffRampSourceChainConfigSet, error) {
+ event := new(OffRampSourceChainConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampSourceChainSelectorAddedIterator struct {
+ Event *OffRampSourceChainSelectorAdded
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampSourceChainSelectorAddedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampSourceChainSelectorAdded)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampSourceChainSelectorAdded)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampSourceChainSelectorAddedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampSourceChainSelectorAddedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampSourceChainSelectorAdded struct {
+ SourceChainSelector uint64
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*OffRampSourceChainSelectorAddedIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SourceChainSelectorAdded")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampSourceChainSelectorAddedIterator{contract: _OffRamp.contract, event: "SourceChainSelectorAdded", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainSelectorAdded) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SourceChainSelectorAdded")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampSourceChainSelectorAdded)
+ if err := _OffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseSourceChainSelectorAdded(log types.Log) (*OffRampSourceChainSelectorAdded, error) {
+ event := new(OffRampSourceChainSelectorAdded)
+ if err := _OffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampStaticConfigSetIterator struct {
+ Event *OffRampStaticConfigSet
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampStaticConfigSetIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampStaticConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampStaticConfigSet)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampStaticConfigSetIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampStaticConfigSetIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampStaticConfigSet struct {
+ StaticConfig OffRampStaticConfig
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterStaticConfigSet(opts *bind.FilterOpts) (*OffRampStaticConfigSetIterator, error) {
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "StaticConfigSet")
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampStaticConfigSetIterator{contract: _OffRamp.contract, event: "StaticConfigSet", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampStaticConfigSet) (event.Subscription, error) {
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "StaticConfigSet")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampStaticConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseStaticConfigSet(log types.Log) (*OffRampStaticConfigSet, error) {
+ event := new(OffRampStaticConfigSet)
+ if err := _OffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+type OffRampTransmittedIterator struct {
+ Event *OffRampTransmitted
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *OffRampTransmittedIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampTransmitted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(OffRampTransmitted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *OffRampTransmittedIterator) Error() error {
+ return it.fail
+}
+
+func (it *OffRampTransmittedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type OffRampTransmitted struct {
+ OcrPluginType uint8
+ ConfigDigest [32]byte
+ SequenceNumber uint64
+ Raw types.Log
+}
+
+func (_OffRamp *OffRampFilterer) FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*OffRampTransmittedIterator, error) {
+
+ var ocrPluginTypeRule []interface{}
+ for _, ocrPluginTypeItem := range ocrPluginType {
+ ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.FilterLogs(opts, "Transmitted", ocrPluginTypeRule)
+ if err != nil {
+ return nil, err
+ }
+ return &OffRampTransmittedIterator{contract: _OffRamp.contract, event: "Transmitted", logs: logs, sub: sub}, nil
+}
+
+func (_OffRamp *OffRampFilterer) WatchTransmitted(opts *bind.WatchOpts, sink chan<- *OffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error) {
+
+ var ocrPluginTypeRule []interface{}
+ for _, ocrPluginTypeItem := range ocrPluginType {
+ ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem)
+ }
+
+ logs, sub, err := _OffRamp.contract.WatchLogs(opts, "Transmitted", ocrPluginTypeRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(OffRampTransmitted)
+ if err := _OffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_OffRamp *OffRampFilterer) ParseTransmitted(log types.Log) (*OffRampTransmitted, error) {
+ event := new(OffRampTransmitted)
+ if err := _OffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+func (_OffRamp *OffRamp) ParseLog(log types.Log) (generated.AbigenLog, error) {
+ switch log.Topics[0] {
+ case _OffRamp.abi.Events["AlreadyAttempted"].ID:
+ return _OffRamp.ParseAlreadyAttempted(log)
+ case _OffRamp.abi.Events["CommitReportAccepted"].ID:
+ return _OffRamp.ParseCommitReportAccepted(log)
+ case _OffRamp.abi.Events["ConfigSet"].ID:
+ return _OffRamp.ParseConfigSet(log)
+ case _OffRamp.abi.Events["DynamicConfigSet"].ID:
+ return _OffRamp.ParseDynamicConfigSet(log)
+ case _OffRamp.abi.Events["ExecutionStateChanged"].ID:
+ return _OffRamp.ParseExecutionStateChanged(log)
+ case _OffRamp.abi.Events["OwnershipTransferRequested"].ID:
+ return _OffRamp.ParseOwnershipTransferRequested(log)
+ case _OffRamp.abi.Events["OwnershipTransferred"].ID:
+ return _OffRamp.ParseOwnershipTransferred(log)
+ case _OffRamp.abi.Events["RootRemoved"].ID:
+ return _OffRamp.ParseRootRemoved(log)
+ case _OffRamp.abi.Events["SkippedAlreadyExecutedMessage"].ID:
+ return _OffRamp.ParseSkippedAlreadyExecutedMessage(log)
+ case _OffRamp.abi.Events["SourceChainConfigSet"].ID:
+ return _OffRamp.ParseSourceChainConfigSet(log)
+ case _OffRamp.abi.Events["SourceChainSelectorAdded"].ID:
+ return _OffRamp.ParseSourceChainSelectorAdded(log)
+ case _OffRamp.abi.Events["StaticConfigSet"].ID:
+ return _OffRamp.ParseStaticConfigSet(log)
+ case _OffRamp.abi.Events["Transmitted"].ID:
+ return _OffRamp.ParseTransmitted(log)
+
+ default:
+ return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
+ }
+}
+
+func (OffRampAlreadyAttempted) Topic() common.Hash {
+ return common.HexToHash("0x3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120")
+}
+
+func (OffRampCommitReportAccepted) Topic() common.Hash {
+ return common.HexToHash("0x3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d")
+}
+
+func (OffRampConfigSet) Topic() common.Hash {
+ return common.HexToHash("0xab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547")
+}
+
+func (OffRampDynamicConfigSet) Topic() common.Hash {
+ return common.HexToHash("0xa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d")
+}
+
+func (OffRampExecutionStateChanged) Topic() common.Hash {
+ return common.HexToHash("0xdc8ccbc35e0eebd81239bcd1971fcd53c7eb34034880142a0f43c809a458732f")
+}
+
+func (OffRampOwnershipTransferRequested) Topic() common.Hash {
+ return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
+}
+
+func (OffRampOwnershipTransferred) Topic() common.Hash {
+ return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
+}
+
+func (OffRampRootRemoved) Topic() common.Hash {
+ return common.HexToHash("0x202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12")
+}
+
+func (OffRampSkippedAlreadyExecutedMessage) Topic() common.Hash {
+ return common.HexToHash("0x3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c")
+}
+
+func (OffRampSourceChainConfigSet) Topic() common.Hash {
+ return common.HexToHash("0x49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b")
+}
+
+func (OffRampSourceChainSelectorAdded) Topic() common.Hash {
+ return common.HexToHash("0xf4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb9")
+}
+
+func (OffRampStaticConfigSet) Topic() common.Hash {
+ return common.HexToHash("0x683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d8")
+}
+
+func (OffRampTransmitted) Topic() common.Hash {
+ return common.HexToHash("0x198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0")
+}
+
+func (_OffRamp *OffRamp) Address() common.Address {
+ return _OffRamp.address
+}
+
+type OffRampInterface interface {
+ CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error
+
+ GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error)
+
+ GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error)
+
+ GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error)
+
+ GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error)
+
+ GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error)
+
+ GetStaticConfig(opts *bind.CallOpts) (OffRampStaticConfig, error)
+
+ IsBlessed(opts *bind.CallOpts, root [32]byte) (bool, error)
+
+ LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error)
+
+ Owner(opts *bind.CallOpts) (common.Address, error)
+
+ TypeAndVersion(opts *bind.CallOpts) (string, error)
+
+ AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error)
+
+ ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error)
+
+ Commit(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error)
+
+ Execute(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error)
+
+ ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte) (*types.Transaction, error)
+
+ ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReportSingleChain, gasLimitOverrides [][]*big.Int) (*types.Transaction, error)
+
+ ResetUnblessedRoots(opts *bind.TransactOpts, rootToReset []OffRampUnblessedRoot) (*types.Transaction, error)
+
+ SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OffRampDynamicConfig) (*types.Transaction, error)
+
+ SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error)
+
+ TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error)
+
+ FilterAlreadyAttempted(opts *bind.FilterOpts) (*OffRampAlreadyAttemptedIterator, error)
+
+ WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *OffRampAlreadyAttempted) (event.Subscription, error)
+
+ ParseAlreadyAttempted(log types.Log) (*OffRampAlreadyAttempted, error)
+
+ FilterCommitReportAccepted(opts *bind.FilterOpts) (*OffRampCommitReportAcceptedIterator, error)
+
+ WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *OffRampCommitReportAccepted) (event.Subscription, error)
+
+ ParseCommitReportAccepted(log types.Log) (*OffRampCommitReportAccepted, error)
+
+ FilterConfigSet(opts *bind.FilterOpts) (*OffRampConfigSetIterator, error)
+
+ WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampConfigSet) (event.Subscription, error)
+
+ ParseConfigSet(log types.Log) (*OffRampConfigSet, error)
+
+ FilterDynamicConfigSet(opts *bind.FilterOpts) (*OffRampDynamicConfigSetIterator, error)
+
+ WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampDynamicConfigSet) (event.Subscription, error)
+
+ ParseDynamicConfigSet(log types.Log) (*OffRampDynamicConfigSet, error)
+
+ FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*OffRampExecutionStateChangedIterator, error)
+
+ WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *OffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error)
+
+ ParseExecutionStateChanged(log types.Log) (*OffRampExecutionStateChanged, error)
+
+ FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferRequestedIterator, error)
+
+ WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
+
+ ParseOwnershipTransferRequested(log types.Log) (*OffRampOwnershipTransferRequested, error)
+
+ FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferredIterator, error)
+
+ WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
+
+ ParseOwnershipTransferred(log types.Log) (*OffRampOwnershipTransferred, error)
+
+ FilterRootRemoved(opts *bind.FilterOpts) (*OffRampRootRemovedIterator, error)
+
+ WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *OffRampRootRemoved) (event.Subscription, error)
+
+ ParseRootRemoved(log types.Log) (*OffRampRootRemoved, error)
+
+ FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*OffRampSkippedAlreadyExecutedMessageIterator, error)
+
+ WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *OffRampSkippedAlreadyExecutedMessage) (event.Subscription, error)
+
+ ParseSkippedAlreadyExecutedMessage(log types.Log) (*OffRampSkippedAlreadyExecutedMessage, error)
+
+ FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*OffRampSourceChainConfigSetIterator, error)
+
+ WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error)
+
+ ParseSourceChainConfigSet(log types.Log) (*OffRampSourceChainConfigSet, error)
+
+ FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*OffRampSourceChainSelectorAddedIterator, error)
+
+ WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainSelectorAdded) (event.Subscription, error)
+
+ ParseSourceChainSelectorAdded(log types.Log) (*OffRampSourceChainSelectorAdded, error)
+
+ FilterStaticConfigSet(opts *bind.FilterOpts) (*OffRampStaticConfigSetIterator, error)
+
+ WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampStaticConfigSet) (event.Subscription, error)
+
+ ParseStaticConfigSet(log types.Log) (*OffRampStaticConfigSet, error)
+
+ FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*OffRampTransmittedIterator, error)
+
+ WatchTransmitted(opts *bind.WatchOpts, sink chan<- *OffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error)
+
+ ParseTransmitted(log types.Log) (*OffRampTransmitted, error)
+
+ ParseLog(log types.Log) (generated.AbigenLog, error)
+
+ Address() common.Address
+}
diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp/evm_2_evm_multi_onramp.go b/core/gethwrappers/ccip/generated/onramp/onramp.go
similarity index 52%
rename from core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp/evm_2_evm_multi_onramp.go
rename to core/gethwrappers/ccip/generated/onramp/onramp.go
index b3cbed0be5d..5a77d6854f7 100644
--- a/core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp/evm_2_evm_multi_onramp.go
+++ b/core/gethwrappers/ccip/generated/onramp/onramp.go
@@ -1,7 +1,7 @@
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
-package evm_2_evm_multi_onramp
+package onramp
import (
"errors"
@@ -43,29 +43,6 @@ type ClientEVMTokenAmount struct {
Amount *big.Int
}
-type EVM2EVMMultiOnRampDestChainConfig struct {
- SequenceNumber uint64
- Router common.Address
-}
-
-type EVM2EVMMultiOnRampDestChainConfigArgs struct {
- DestChainSelector uint64
- Router common.Address
-}
-
-type EVM2EVMMultiOnRampDynamicConfig struct {
- PriceRegistry common.Address
- MessageValidator common.Address
- FeeAggregator common.Address
-}
-
-type EVM2EVMMultiOnRampStaticConfig struct {
- ChainSelector uint64
- RmnProxy common.Address
- NonceManager common.Address
- TokenAdminRegistry common.Address
-}
-
type InternalEVM2AnyRampMessage struct {
Header InternalRampMessageHeader
Sender common.Address
@@ -92,17 +69,40 @@ type InternalRampTokenAmount struct {
Amount *big.Int
}
-var EVM2EVMMultiOnRampMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOnRamp.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"}],\"name\":\"FeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMMultiOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x6101006040523480156200001257600080fd5b50604051620036af380380620036af83398101604081905262000035916200069c565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d816200036d565b5050506200079c565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060408101516001600160a01b0316155b1562000273576040516306b7c75960e31b815260040160405180910390fd5b8051600280546001600160a01b03199081166001600160a01b03938416179091556020808401805160038054851691861691909117905560408086018051600480549096169087161790945580516080808201835280516001600160401b031680835260a08051891684880190815260c080518b1686880190815260e080518d166060988901908152895196875293518d169a86019a909a52518b169684019690965251891693820193909352885188169181019190915292518616908301529251909316918301919091527f2d8f19dc1cd01460c3367a09d2d424f2b1940ba7c886047edd078c7b77ea4558910160405180910390a150565b60005b8151811015620004aa57600082828151811062000391576200039162000786565b602002602001015190506000838381518110620003b257620003b262000786565b6020026020010151600001519050806001600160401b0316600003620003f75760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6040805180820182526001600160401b03838116600081815260056020818152868320805480871688528a8301516001600160a01b03908116848a019081529587905293835287518551851668010000000000000000026001600160e01b0319909216971696871717905586519485529151169083015291927f324d4a7950b57da00ce533ad6697039be6281726a73da959d0ab3ff795181ec6910160405180910390a250505080600101905062000370565b5050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620004e957620004e9620004ae565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200051a576200051a620004ae565b604052919050565b80516001600160401b03811681146200053a57600080fd5b919050565b6001600160a01b03811681146200055557600080fd5b50565b6000606082840312156200056b57600080fd5b604051606081016001600160401b0381118282101715620005905762000590620004ae565b80604052508091508251620005a5816200053f565b81526020830151620005b7816200053f565b60208201526040830151620005cc816200053f565b6040919091015292915050565b600082601f830112620005eb57600080fd5b815160206001600160401b03821115620006095762000609620004ae565b62000619818360051b01620004ef565b82815260069290921b840181019181810190868411156200063957600080fd5b8286015b84811015620006915760408189031215620006585760008081fd5b62000662620004c4565b6200066d8262000522565b8152848201516200067e816200053f565b818601528352918301916040016200063d565b509695505050505050565b6000806000838503610100811215620006b457600080fd5b6080811215620006c357600080fd5b50604051608081016001600160401b038082118383101715620006ea57620006ea620004ae565b81604052620006f98762000522565b8352602087015191506200070d826200053f565b8160208401526040870151915062000725826200053f565b816040840152606087015191506200073d826200053f565b81606084015282955062000755886080890162000558565b945060e08701519250808311156200076c57600080fd5b50506200077c86828701620005d9565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051612e9a62000815600039600081816101eb015281816108a201526115da0152600081816101af01528181610dc601526115b3015260008181610173015281816104c4015261158901526000818161014301528181610cec0152818161117c015261155c0152612e9a6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637437ff9f11610097578063d77d5ed011610066578063d77d5ed0146103ba578063df0aa9e914610406578063f2fde38b14610419578063fbca3b741461042c57600080fd5b80637437ff9f146102fb57806379ba5097146103685780638da5cb5b146103705780639041be3d1461038e57600080fd5b806320487ded116100d357806320487ded1461028757806334d560e4146102a85780633a019940146102bb57806348a98aa4146102c357600080fd5b80630242cf60146100fa57806306285c691461010f578063181f5a771461023e575b600080fd5b61010d610108366004611fe6565b61044c565b005b61022860408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60405161023591906120a9565b60405180910390f35b61027a6040518060400160405280601c81526020017f45564d3245564d4d756c74694f6e52616d7020312e362e302d6465760000000081525081565b604051610235919061216e565b61029a610295366004612199565b610460565b604051908152602001610235565b61010d6102b63660046121f9565b610619565b61010d61062a565b6102d66102d136600461226b565b61085a565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610235565b61035b6040805160608101825260008082526020820181905291810191909152506040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff908116825260035481166020830152600454169181019190915290565b60405161023591906122a4565b61010d61090f565b60005473ffffffffffffffffffffffffffffffffffffffff166102d6565b6103a161039c3660046122e1565b610a0c565b60405167ffffffffffffffff9091168152602001610235565b6102d66103c83660046122e1565b67ffffffffffffffff1660009081526005602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b61029a6104143660046122fe565b610a35565b61010d61042736600461236a565b611230565b61043f61043a3660046122e1565b611241565b6040516102359190612387565b610454611275565b61045d816112f8565b50565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f91906123f1565b15610577576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd906105cf9086908690600401612520565b602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190612669565b90505b92915050565b610621611275565b61045d81611470565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa158015610699573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106df9190810190612682565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b825181101561085557600083828151811061071b5761071b612711565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ba9190612669565b9050801561084b576107e373ffffffffffffffffffffffffffffffffffffffff8316858361163a565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e8360405161084291815260200190565b60405180910390a35b50506001016106fe565b505050565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190612740565b60015473ffffffffffffffffffffffffffffffffffffffff163314610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161056e565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff80821660009081526005602052604081205490916106139116600161278c565b67ffffffffffffffff8416600090815260056020526040812073ffffffffffffffffffffffffffffffffffffffff8316610a9b576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610af7576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff168015610b9d576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690610b6a908a908a90600401612520565b600060405180830381600087803b158015610b8457600080fd5b505af1158015610b98573d6000803e3d6000fd5b505050505b506002546000908190819073ffffffffffffffffffffffffffffffffffffffff1663c4276bfc8a610bd460808c0160608d0161236a565b8a610be260808e018e6127b4565b6040518663ffffffff1660e01b8152600401610c02959493929190612819565b600060405180830381865afa158015610c1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c6591908101906128e1565b91945092509050610c7c6080890160608a0161236a565b73ffffffffffffffffffffffffffffffffffffffff167f075a2720282fdf622141dae0b048ef90a21a7e57c134c76912d19d006b3b3f6f84604051610cc391815260200190565b60405180910390a2604080516101a081019091526000610100820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101208501528c811661014085015287549293928392916101608401918a918791610d389116612938565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff16815260200186610e38576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8f16600482015273ffffffffffffffffffffffffffffffffffffffff8c811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e33919061295f565b610e3b565b60005b67ffffffffffffffff1681525081526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018a8060200190610e7991906127b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610ebd8b806127b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610f0460808c018c6127b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610f4e60808c0160608d0161236a565b73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018a8060400190610f7f919061297c565b905067ffffffffffffffff811115610f9957610f99611ee3565b604051908082528060200260200182016040528015610ff557816020015b610fe26040518060800160405280606081526020016060815260200160608152602001600081525090565b815260200190600190039081610fb75790505b509052905060005b61100a60408b018b61297c565b90508110156110b95761109061102360408c018c61297c565b8381811061103357611033612711565b90506040020180360381019061104991906129e4565b8c6110548d806127b4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92506116c7915050565b8260e0015182815181106110a6576110a6612711565b6020908102919091010152600101610ffd565b5060025460e082015173ffffffffffffffffffffffffffffffffffffffff9091169063cc88924c908c906110f060408e018e61297c565b6040518563ffffffff1660e01b815260040161110f9493929190612ae0565b60006040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506080808201839052604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c16606082015230918101919091526111d890829060a001604051602081830303815290604052805190602001206119d1565b81515260405167ffffffffffffffff8b16907f0f07cd31e53232da9125e517f09550fdde74bf43d6a0a76ebd41674dafe2ab2990611217908490612b16565b60405180910390a251519450505050505b949350505050565b611238611275565b61045d81611ad1565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633146112f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161056e565b565b60005b815181101561146c57600082828151811061131857611318612711565b60200260200101519050600083838151811061133657611336612711565b60200260200101516000015190508067ffffffffffffffff16600003611394576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161056e565b60408051808201825267ffffffffffffffff838116600081815260056020818152868320805480871688528a83015173ffffffffffffffffffffffffffffffffffffffff908116848a019081529587905293835287518551851668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909216971696871717905586519485529151169083015291927f324d4a7950b57da00ce533ad6697039be6281726a73da959d0ab3ff795181ec6910160405180910390a25050508060010190506112fb565b5050565b805173ffffffffffffffffffffffffffffffffffffffff1615806114ac5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b156114e3576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602080840151600380548416918516919091179055604080850151600480549094169085161790925581516080810183527f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681527f00000000000000000000000000000000000000000000000000000000000000008416918101919091527f00000000000000000000000000000000000000000000000000000000000000008316818301527f00000000000000000000000000000000000000000000000000000000000000009092166060830152517f2d8f19dc1cd01460c3367a09d2d424f2b1940ba7c886047edd078c7b77ea45589161162f918490612c64565b60405180910390a150565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610855908490611bc6565b6116f26040518060800160405280606081526020016060815260200160608152602001600081525090565b8460200151600003611730576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061174085876000015161085a565b905073ffffffffffffffffffffffffffffffffffffffff8116158061181057506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa1580156117ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180e91906123f1565b155b156118625785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161056e565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b81526004016119019190612cf6565b6000604051808303816000875af1158015611920573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119669190810190612d6c565b604080516080810190915273ffffffffffffffffffffffffffffffffffffffff841660a08201529091508060c0810160405160208183030381529060405281526020018260000151815260200182602001518152602001886020015181525092505050949350505050565b60008060001b82846020015185606001518660000151606001518760000151608001518860a001518960c00151604051602001611a1396959493929190612dfd565b604051602081830303815290604052805190602001208560400151805190602001208660e00151604051602001611a4a9190612e5e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808c0151805190840120928501989098529183019590955260608201939093529384015260a083015260c082015260e00160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff821603611b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161056e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611c28826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611cd29092919063ffffffff16565b8051909150156108555780806020019051810190611c4691906123f1565b610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161056e565b6060611ce18484600085611ceb565b90505b9392505050565b606082471015611d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161056e565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611da69190612e71565b60006040518083038185875af1925050503d8060008114611de3576040519150601f19603f3d011682016040523d82523d6000602084013e611de8565b606091505b5091509150611df987838387611e04565b979650505050505050565b60608315611e9a578251600003611e935773ffffffffffffffffffffffffffffffffffffffff85163b611e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056e565b5081611228565b6112288383815115611eaf5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056e919061216e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611f3557611f35611ee3565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f8257611f82611ee3565b604052919050565b600067ffffffffffffffff821115611fa457611fa4611ee3565b5060051b60200190565b67ffffffffffffffff8116811461045d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045d57600080fd5b60006020808385031215611ff957600080fd5b823567ffffffffffffffff81111561201057600080fd5b8301601f8101851361202157600080fd5b803561203461202f82611f8a565b611f3b565b81815260069190911b8201830190838101908783111561205357600080fd5b928401925b82841015611df957604084890312156120715760008081fd5b612079611f12565b843561208481611fae565b81528486013561209381611fc4565b8187015282526040939093019290840190612058565b60808101610613828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b8381101561211b578181015183820152602001612103565b50506000910152565b6000815180845261213c816020860160208601612100565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106106020830184612124565b600060a0828403121561219357600080fd5b50919050565b600080604083850312156121ac57600080fd5b82356121b781611fae565b9150602083013567ffffffffffffffff8111156121d357600080fd5b6121df85828601612181565b9150509250929050565b80356121f481611fc4565b919050565b60006060828403121561220b57600080fd5b6040516060810181811067ffffffffffffffff8211171561222e5761222e611ee3565b604052823561223c81611fc4565b8152602083013561224c81611fc4565b6020820152604083013561225f81611fc4565b60408201529392505050565b6000806040838503121561227e57600080fd5b823561228981611fae565b9150602083013561229981611fc4565b809150509250929050565b606081016106138284805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182169084015260409182015116910152565b6000602082840312156122f357600080fd5b8135611ce481611fae565b6000806000806080858703121561231457600080fd5b843561231f81611fae565b9350602085013567ffffffffffffffff81111561233b57600080fd5b61234787828801612181565b93505060408501359150606085013561235f81611fc4565b939692955090935050565b60006020828403121561237c57600080fd5b8135611ce481611fc4565b6020808252825182820181905260009190848201906040850190845b818110156123d557835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016123a3565b50909695505050505050565b805180151581146121f457600080fd5b60006020828403121561240357600080fd5b610610826123e1565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261244157600080fd5b830160208101925035905067ffffffffffffffff81111561246157600080fd5b80360382131561247057600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156125155781356124e381611fc4565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016124d0565b509495945050505050565b600067ffffffffffffffff808516835260406020840152612541848561240c565b60a0604086015261255660e086018284612477565b915050612566602086018661240c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087850301606088015261259c848385612477565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126125d557600080fd5b602092880192830192359150848211156125ee57600080fd5b8160061b360383131561260057600080fd5b808785030160808801526126158483856124c0565b9450612623606089016121e9565b73ffffffffffffffffffffffffffffffffffffffff811660a0890152935061264e608089018961240c565b94509250808786030160c08801525050611df9838383612477565b60006020828403121561267b57600080fd5b5051919050565b6000602080838503121561269557600080fd5b825167ffffffffffffffff8111156126ac57600080fd5b8301601f810185136126bd57600080fd5b80516126cb61202f82611f8a565b81815260059190911b820183019083810190878311156126ea57600080fd5b928401925b82841015611df957835161270281611fc4565b825292840192908401906126ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561275257600080fd5b8151611ce481611fc4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156127ad576127ad61275d565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127e957600080fd5b83018035915067ffffffffffffffff82111561280457600080fd5b60200191503681900382131561247057600080fd5b67ffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff85166020820152836040820152608060608201526000611df9608083018486612477565b600082601f83011261287057600080fd5b815167ffffffffffffffff81111561288a5761288a611ee3565b6128bb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611f3b565b8181528460208386010111156128d057600080fd5b611228826020830160208701612100565b6000806000606084860312156128f657600080fd5b83519250612906602085016123e1565b9150604084015167ffffffffffffffff81111561292257600080fd5b61292e8682870161285f565b9150509250925092565b600067ffffffffffffffff8083168181036129555761295561275d565b6001019392505050565b60006020828403121561297157600080fd5b8151611ce481611fae565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129b157600080fd5b83018035915067ffffffffffffffff8211156129cc57600080fd5b6020019150600681901b360382131561247057600080fd5b6000604082840312156129f657600080fd5b6129fe611f12565b8235612a0981611fc4565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b84811015612ad3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160808151818652612a7f82870182612124565b9150508582015185820387870152612a978282612124565b91505060408083015186830382880152612ab18382612124565b6060948501519790940196909652505098840198925090830190600101612a3b565b5090979650505050505050565b67ffffffffffffffff85168152606060208201526000612b036060830186612a1e565b8281036040840152611df98185876124c0565b60208152612b6760208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b60006020830151612b9060c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101808060e0850152612bad6101a0850183612124565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086850301610100870152612bea8483612124565b9350608087015191508086850301610120870152612c088483612124565b935060a08701519150612c3461014087018373ffffffffffffffffffffffffffffffffffffffff169052565b60c087015161016087015260e0870151915080868503018387015250612c5a8382612a1e565b9695505050505050565b60e08101612cbb828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff90811660808401526020840151811660a084015260408401511660c0830152611ce4565b602081526000825160a06020840152612d1260c0840182612124565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b600060208284031215612d7e57600080fd5b815167ffffffffffffffff80821115612d9657600080fd5b9083019060408286031215612daa57600080fd5b612db2611f12565b825182811115612dc157600080fd5b612dcd8782860161285f565b825250602083015182811115612de257600080fd5b612dee8782860161285f565b60208301525095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835260c06020840152612e2d60c0840189612124565b67ffffffffffffffff97881660408501529590961660608301525091909316608082015260a0019190915292915050565b6020815260006106106020830184612a1e565b60008251612e83818460208701612100565b919091019291505056fea164736f6c6343000818000a",
+type OnRampDestChainConfig struct {
+ SequenceNumber uint64
+ Router common.Address
+}
+
+type OnRampDestChainConfigArgs struct {
+ DestChainSelector uint64
+ Router common.Address
+}
+
+type OnRampDynamicConfig struct {
+ PriceRegistry common.Address
+ MessageValidator common.Address
+ FeeAggregator common.Address
+}
+
+type OnRampStaticConfig struct {
+ ChainSelector uint64
+ RmnProxy common.Address
+ NonceManager common.Address
+ TokenAdminRegistry common.Address
+}
+
+var OnRampMetaData = &bind.MetaData{
+ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"}],\"name\":\"FeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ Bin: "0x6101006040523480156200001257600080fd5b50604051620036af380380620036af83398101604081905262000035916200069c565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d816200036d565b5050506200079c565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060408101516001600160a01b0316155b1562000273576040516306b7c75960e31b815260040160405180910390fd5b8051600280546001600160a01b03199081166001600160a01b03938416179091556020808401805160038054851691861691909117905560408086018051600480549096169087161790945580516080808201835280516001600160401b031680835260a08051891684880190815260c080518b1686880190815260e080518d166060988901908152895196875293518d169a86019a909a52518b169684019690965251891693820193909352885188169181019190915292518616908301529251909316918301919091527f2d8f19dc1cd01460c3367a09d2d424f2b1940ba7c886047edd078c7b77ea4558910160405180910390a150565b60005b8151811015620004aa57600082828151811062000391576200039162000786565b602002602001015190506000838381518110620003b257620003b262000786565b6020026020010151600001519050806001600160401b0316600003620003f75760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6040805180820182526001600160401b03838116600081815260056020818152868320805480871688528a8301516001600160a01b03908116848a019081529587905293835287518551851668010000000000000000026001600160e01b0319909216971696871717905586519485529151169083015291927f324d4a7950b57da00ce533ad6697039be6281726a73da959d0ab3ff795181ec6910160405180910390a250505080600101905062000370565b5050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620004e957620004e9620004ae565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200051a576200051a620004ae565b604052919050565b80516001600160401b03811681146200053a57600080fd5b919050565b6001600160a01b03811681146200055557600080fd5b50565b6000606082840312156200056b57600080fd5b604051606081016001600160401b0381118282101715620005905762000590620004ae565b80604052508091508251620005a5816200053f565b81526020830151620005b7816200053f565b60208201526040830151620005cc816200053f565b6040919091015292915050565b600082601f830112620005eb57600080fd5b815160206001600160401b03821115620006095762000609620004ae565b62000619818360051b01620004ef565b82815260069290921b840181019181810190868411156200063957600080fd5b8286015b84811015620006915760408189031215620006585760008081fd5b62000662620004c4565b6200066d8262000522565b8152848201516200067e816200053f565b818601528352918301916040016200063d565b509695505050505050565b6000806000838503610100811215620006b457600080fd5b6080811215620006c357600080fd5b50604051608081016001600160401b038082118383101715620006ea57620006ea620004ae565b81604052620006f98762000522565b8352602087015191506200070d826200053f565b8160208401526040870151915062000725826200053f565b816040840152606087015191506200073d826200053f565b81606084015282955062000755886080890162000558565b945060e08701519250808311156200076c57600080fd5b50506200077c86828701620005d9565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051612e9a62000815600039600081816101eb015281816108a201526115da0152600081816101af01528181610dc601526115b3015260008181610173015281816104c4015261158901526000818161014301528181610cec0152818161117c015261155c0152612e9a6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637437ff9f11610097578063d77d5ed011610066578063d77d5ed0146103ba578063df0aa9e914610406578063f2fde38b14610419578063fbca3b741461042c57600080fd5b80637437ff9f146102fb57806379ba5097146103685780638da5cb5b146103705780639041be3d1461038e57600080fd5b806320487ded116100d357806320487ded1461028757806334d560e4146102a85780633a019940146102bb57806348a98aa4146102c357600080fd5b80630242cf60146100fa57806306285c691461010f578063181f5a771461023e575b600080fd5b61010d610108366004611fe6565b61044c565b005b61022860408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60405161023591906120a9565b60405180910390f35b61027a6040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b604051610235919061216e565b61029a610295366004612199565b610460565b604051908152602001610235565b61010d6102b63660046121f9565b610619565b61010d61062a565b6102d66102d136600461226b565b61085a565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610235565b61035b6040805160608101825260008082526020820181905291810191909152506040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff908116825260035481166020830152600454169181019190915290565b60405161023591906122a4565b61010d61090f565b60005473ffffffffffffffffffffffffffffffffffffffff166102d6565b6103a161039c3660046122e1565b610a0c565b60405167ffffffffffffffff9091168152602001610235565b6102d66103c83660046122e1565b67ffffffffffffffff1660009081526005602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b61029a6104143660046122fe565b610a35565b61010d61042736600461236a565b611230565b61043f61043a3660046122e1565b611241565b6040516102359190612387565b610454611275565b61045d816112f8565b50565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f91906123f1565b15610577576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd906105cf9086908690600401612520565b602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190612669565b90505b92915050565b610621611275565b61045d81611470565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa158015610699573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106df9190810190612682565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b825181101561085557600083828151811061071b5761071b612711565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ba9190612669565b9050801561084b576107e373ffffffffffffffffffffffffffffffffffffffff8316858361163a565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e8360405161084291815260200190565b60405180910390a35b50506001016106fe565b505050565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190612740565b60015473ffffffffffffffffffffffffffffffffffffffff163314610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161056e565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff80821660009081526005602052604081205490916106139116600161278c565b67ffffffffffffffff8416600090815260056020526040812073ffffffffffffffffffffffffffffffffffffffff8316610a9b576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610af7576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff168015610b9d576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690610b6a908a908a90600401612520565b600060405180830381600087803b158015610b8457600080fd5b505af1158015610b98573d6000803e3d6000fd5b505050505b506002546000908190819073ffffffffffffffffffffffffffffffffffffffff1663c4276bfc8a610bd460808c0160608d0161236a565b8a610be260808e018e6127b4565b6040518663ffffffff1660e01b8152600401610c02959493929190612819565b600060405180830381865afa158015610c1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c6591908101906128e1565b91945092509050610c7c6080890160608a0161236a565b73ffffffffffffffffffffffffffffffffffffffff167f075a2720282fdf622141dae0b048ef90a21a7e57c134c76912d19d006b3b3f6f84604051610cc391815260200190565b60405180910390a2604080516101a081019091526000610100820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101208501528c811661014085015287549293928392916101608401918a918791610d389116612938565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff16815260200186610e38576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8f16600482015273ffffffffffffffffffffffffffffffffffffffff8c811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e33919061295f565b610e3b565b60005b67ffffffffffffffff1681525081526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018a8060200190610e7991906127b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610ebd8b806127b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610f0460808c018c6127b4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001610f4e60808c0160608d0161236a565b73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018a8060400190610f7f919061297c565b905067ffffffffffffffff811115610f9957610f99611ee3565b604051908082528060200260200182016040528015610ff557816020015b610fe26040518060800160405280606081526020016060815260200160608152602001600081525090565b815260200190600190039081610fb75790505b509052905060005b61100a60408b018b61297c565b90508110156110b95761109061102360408c018c61297c565b8381811061103357611033612711565b90506040020180360381019061104991906129e4565b8c6110548d806127b4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92506116c7915050565b8260e0015182815181106110a6576110a6612711565b6020908102919091010152600101610ffd565b5060025460e082015173ffffffffffffffffffffffffffffffffffffffff9091169063cc88924c908c906110f060408e018e61297c565b6040518563ffffffff1660e01b815260040161110f9493929190612ae0565b60006040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506080808201839052604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c16606082015230918101919091526111d890829060a001604051602081830303815290604052805190602001206119d1565b81515260405167ffffffffffffffff8b16907f0f07cd31e53232da9125e517f09550fdde74bf43d6a0a76ebd41674dafe2ab2990611217908490612b16565b60405180910390a251519450505050505b949350505050565b611238611275565b61045d81611ad1565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633146112f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161056e565b565b60005b815181101561146c57600082828151811061131857611318612711565b60200260200101519050600083838151811061133657611336612711565b60200260200101516000015190508067ffffffffffffffff16600003611394576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161056e565b60408051808201825267ffffffffffffffff838116600081815260056020818152868320805480871688528a83015173ffffffffffffffffffffffffffffffffffffffff908116848a019081529587905293835287518551851668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909216971696871717905586519485529151169083015291927f324d4a7950b57da00ce533ad6697039be6281726a73da959d0ab3ff795181ec6910160405180910390a25050508060010190506112fb565b5050565b805173ffffffffffffffffffffffffffffffffffffffff1615806114ac5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b156114e3576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602080840151600380548416918516919091179055604080850151600480549094169085161790925581516080810183527f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681527f00000000000000000000000000000000000000000000000000000000000000008416918101919091527f00000000000000000000000000000000000000000000000000000000000000008316818301527f00000000000000000000000000000000000000000000000000000000000000009092166060830152517f2d8f19dc1cd01460c3367a09d2d424f2b1940ba7c886047edd078c7b77ea45589161162f918490612c64565b60405180910390a150565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610855908490611bc6565b6116f26040518060800160405280606081526020016060815260200160608152602001600081525090565b8460200151600003611730576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061174085876000015161085a565b905073ffffffffffffffffffffffffffffffffffffffff8116158061181057506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa1580156117ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180e91906123f1565b155b156118625785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161056e565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b81526004016119019190612cf6565b6000604051808303816000875af1158015611920573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119669190810190612d6c565b604080516080810190915273ffffffffffffffffffffffffffffffffffffffff841660a08201529091508060c0810160405160208183030381529060405281526020018260000151815260200182602001518152602001886020015181525092505050949350505050565b60008060001b82846020015185606001518660000151606001518760000151608001518860a001518960c00151604051602001611a1396959493929190612dfd565b604051602081830303815290604052805190602001208560400151805190602001208660e00151604051602001611a4a9190612e5e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808c0151805190840120928501989098529183019590955260608201939093529384015260a083015260c082015260e00160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff821603611b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161056e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611c28826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611cd29092919063ffffffff16565b8051909150156108555780806020019051810190611c4691906123f1565b610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161056e565b6060611ce18484600085611ceb565b90505b9392505050565b606082471015611d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161056e565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611da69190612e71565b60006040518083038185875af1925050503d8060008114611de3576040519150601f19603f3d011682016040523d82523d6000602084013e611de8565b606091505b5091509150611df987838387611e04565b979650505050505050565b60608315611e9a578251600003611e935773ffffffffffffffffffffffffffffffffffffffff85163b611e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056e565b5081611228565b6112288383815115611eaf5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056e919061216e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611f3557611f35611ee3565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f8257611f82611ee3565b604052919050565b600067ffffffffffffffff821115611fa457611fa4611ee3565b5060051b60200190565b67ffffffffffffffff8116811461045d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461045d57600080fd5b60006020808385031215611ff957600080fd5b823567ffffffffffffffff81111561201057600080fd5b8301601f8101851361202157600080fd5b803561203461202f82611f8a565b611f3b565b81815260069190911b8201830190838101908783111561205357600080fd5b928401925b82841015611df957604084890312156120715760008081fd5b612079611f12565b843561208481611fae565b81528486013561209381611fc4565b8187015282526040939093019290840190612058565b60808101610613828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b8381101561211b578181015183820152602001612103565b50506000910152565b6000815180845261213c816020860160208601612100565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106106020830184612124565b600060a0828403121561219357600080fd5b50919050565b600080604083850312156121ac57600080fd5b82356121b781611fae565b9150602083013567ffffffffffffffff8111156121d357600080fd5b6121df85828601612181565b9150509250929050565b80356121f481611fc4565b919050565b60006060828403121561220b57600080fd5b6040516060810181811067ffffffffffffffff8211171561222e5761222e611ee3565b604052823561223c81611fc4565b8152602083013561224c81611fc4565b6020820152604083013561225f81611fc4565b60408201529392505050565b6000806040838503121561227e57600080fd5b823561228981611fae565b9150602083013561229981611fc4565b809150509250929050565b606081016106138284805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182169084015260409182015116910152565b6000602082840312156122f357600080fd5b8135611ce481611fae565b6000806000806080858703121561231457600080fd5b843561231f81611fae565b9350602085013567ffffffffffffffff81111561233b57600080fd5b61234787828801612181565b93505060408501359150606085013561235f81611fc4565b939692955090935050565b60006020828403121561237c57600080fd5b8135611ce481611fc4565b6020808252825182820181905260009190848201906040850190845b818110156123d557835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016123a3565b50909695505050505050565b805180151581146121f457600080fd5b60006020828403121561240357600080fd5b610610826123e1565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261244157600080fd5b830160208101925035905067ffffffffffffffff81111561246157600080fd5b80360382131561247057600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156125155781356124e381611fc4565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016124d0565b509495945050505050565b600067ffffffffffffffff808516835260406020840152612541848561240c565b60a0604086015261255660e086018284612477565b915050612566602086018661240c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087850301606088015261259c848385612477565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126125d557600080fd5b602092880192830192359150848211156125ee57600080fd5b8160061b360383131561260057600080fd5b808785030160808801526126158483856124c0565b9450612623606089016121e9565b73ffffffffffffffffffffffffffffffffffffffff811660a0890152935061264e608089018961240c565b94509250808786030160c08801525050611df9838383612477565b60006020828403121561267b57600080fd5b5051919050565b6000602080838503121561269557600080fd5b825167ffffffffffffffff8111156126ac57600080fd5b8301601f810185136126bd57600080fd5b80516126cb61202f82611f8a565b81815260059190911b820183019083810190878311156126ea57600080fd5b928401925b82841015611df957835161270281611fc4565b825292840192908401906126ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561275257600080fd5b8151611ce481611fc4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156127ad576127ad61275d565b5092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127e957600080fd5b83018035915067ffffffffffffffff82111561280457600080fd5b60200191503681900382131561247057600080fd5b67ffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff85166020820152836040820152608060608201526000611df9608083018486612477565b600082601f83011261287057600080fd5b815167ffffffffffffffff81111561288a5761288a611ee3565b6128bb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611f3b565b8181528460208386010111156128d057600080fd5b611228826020830160208701612100565b6000806000606084860312156128f657600080fd5b83519250612906602085016123e1565b9150604084015167ffffffffffffffff81111561292257600080fd5b61292e8682870161285f565b9150509250925092565b600067ffffffffffffffff8083168181036129555761295561275d565b6001019392505050565b60006020828403121561297157600080fd5b8151611ce481611fae565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129b157600080fd5b83018035915067ffffffffffffffff8211156129cc57600080fd5b6020019150600681901b360382131561247057600080fd5b6000604082840312156129f657600080fd5b6129fe611f12565b8235612a0981611fc4565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b84811015612ad3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160808151818652612a7f82870182612124565b9150508582015185820387870152612a978282612124565b91505060408083015186830382880152612ab18382612124565b6060948501519790940196909652505098840198925090830190600101612a3b565b5090979650505050505050565b67ffffffffffffffff85168152606060208201526000612b036060830186612a1e565b8281036040840152611df98185876124c0565b60208152612b6760208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b60006020830151612b9060c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101808060e0850152612bad6101a0850183612124565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086850301610100870152612bea8483612124565b9350608087015191508086850301610120870152612c088483612124565b935060a08701519150612c3461014087018373ffffffffffffffffffffffffffffffffffffffff169052565b60c087015161016087015260e0870151915080868503018387015250612c5a8382612a1e565b9695505050505050565b60e08101612cbb828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff90811660808401526020840151811660a084015260408401511660c0830152611ce4565b602081526000825160a06020840152612d1260c0840182612124565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b600060208284031215612d7e57600080fd5b815167ffffffffffffffff80821115612d9657600080fd5b9083019060408286031215612daa57600080fd5b612db2611f12565b825182811115612dc157600080fd5b612dcd8782860161285f565b825250602083015182811115612de257600080fd5b612dee8782860161285f565b60208301525095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835260c06020840152612e2d60c0840189612124565b67ffffffffffffffff97881660408501529590961660608301525091909316608082015260a0019190915292915050565b6020815260006106106020830184612a1e565b60008251612e83818460208701612100565b919091019291505056fea164736f6c6343000818000a",
}
-var EVM2EVMMultiOnRampABI = EVM2EVMMultiOnRampMetaData.ABI
+var OnRampABI = OnRampMetaData.ABI
-var EVM2EVMMultiOnRampBin = EVM2EVMMultiOnRampMetaData.Bin
+var OnRampBin = OnRampMetaData.Bin
-func DeployEVM2EVMMultiOnRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig EVM2EVMMultiOnRampStaticConfig, dynamicConfig EVM2EVMMultiOnRampDynamicConfig, destChainConfigArgs []EVM2EVMMultiOnRampDestChainConfigArgs) (common.Address, *types.Transaction, *EVM2EVMMultiOnRamp, error) {
- parsed, err := EVM2EVMMultiOnRampMetaData.GetAbi()
+func DeployOnRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig OnRampStaticConfig, dynamicConfig OnRampDynamicConfig, destChainConfigArgs []OnRampDestChainConfigArgs) (common.Address, *types.Transaction, *OnRamp, error) {
+ parsed, err := OnRampMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
@@ -110,154 +110,154 @@ func DeployEVM2EVMMultiOnRamp(auth *bind.TransactOpts, backend bind.ContractBack
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
- address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EVM2EVMMultiOnRampBin), backend, staticConfig, dynamicConfig, destChainConfigArgs)
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OnRampBin), backend, staticConfig, dynamicConfig, destChainConfigArgs)
if err != nil {
return common.Address{}, nil, nil, err
}
- return address, tx, &EVM2EVMMultiOnRamp{address: address, abi: *parsed, EVM2EVMMultiOnRampCaller: EVM2EVMMultiOnRampCaller{contract: contract}, EVM2EVMMultiOnRampTransactor: EVM2EVMMultiOnRampTransactor{contract: contract}, EVM2EVMMultiOnRampFilterer: EVM2EVMMultiOnRampFilterer{contract: contract}}, nil
+ return address, tx, &OnRamp{address: address, abi: *parsed, OnRampCaller: OnRampCaller{contract: contract}, OnRampTransactor: OnRampTransactor{contract: contract}, OnRampFilterer: OnRampFilterer{contract: contract}}, nil
}
-type EVM2EVMMultiOnRamp struct {
+type OnRamp struct {
address common.Address
abi abi.ABI
- EVM2EVMMultiOnRampCaller
- EVM2EVMMultiOnRampTransactor
- EVM2EVMMultiOnRampFilterer
+ OnRampCaller
+ OnRampTransactor
+ OnRampFilterer
}
-type EVM2EVMMultiOnRampCaller struct {
+type OnRampCaller struct {
contract *bind.BoundContract
}
-type EVM2EVMMultiOnRampTransactor struct {
+type OnRampTransactor struct {
contract *bind.BoundContract
}
-type EVM2EVMMultiOnRampFilterer struct {
+type OnRampFilterer struct {
contract *bind.BoundContract
}
-type EVM2EVMMultiOnRampSession struct {
- Contract *EVM2EVMMultiOnRamp
+type OnRampSession struct {
+ Contract *OnRamp
CallOpts bind.CallOpts
TransactOpts bind.TransactOpts
}
-type EVM2EVMMultiOnRampCallerSession struct {
- Contract *EVM2EVMMultiOnRampCaller
+type OnRampCallerSession struct {
+ Contract *OnRampCaller
CallOpts bind.CallOpts
}
-type EVM2EVMMultiOnRampTransactorSession struct {
- Contract *EVM2EVMMultiOnRampTransactor
+type OnRampTransactorSession struct {
+ Contract *OnRampTransactor
TransactOpts bind.TransactOpts
}
-type EVM2EVMMultiOnRampRaw struct {
- Contract *EVM2EVMMultiOnRamp
+type OnRampRaw struct {
+ Contract *OnRamp
}
-type EVM2EVMMultiOnRampCallerRaw struct {
- Contract *EVM2EVMMultiOnRampCaller
+type OnRampCallerRaw struct {
+ Contract *OnRampCaller
}
-type EVM2EVMMultiOnRampTransactorRaw struct {
- Contract *EVM2EVMMultiOnRampTransactor
+type OnRampTransactorRaw struct {
+ Contract *OnRampTransactor
}
-func NewEVM2EVMMultiOnRamp(address common.Address, backend bind.ContractBackend) (*EVM2EVMMultiOnRamp, error) {
- abi, err := abi.JSON(strings.NewReader(EVM2EVMMultiOnRampABI))
+func NewOnRamp(address common.Address, backend bind.ContractBackend) (*OnRamp, error) {
+ abi, err := abi.JSON(strings.NewReader(OnRampABI))
if err != nil {
return nil, err
}
- contract, err := bindEVM2EVMMultiOnRamp(address, backend, backend, backend)
+ contract, err := bindOnRamp(address, backend, backend, backend)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRamp{address: address, abi: abi, EVM2EVMMultiOnRampCaller: EVM2EVMMultiOnRampCaller{contract: contract}, EVM2EVMMultiOnRampTransactor: EVM2EVMMultiOnRampTransactor{contract: contract}, EVM2EVMMultiOnRampFilterer: EVM2EVMMultiOnRampFilterer{contract: contract}}, nil
+ return &OnRamp{address: address, abi: abi, OnRampCaller: OnRampCaller{contract: contract}, OnRampTransactor: OnRampTransactor{contract: contract}, OnRampFilterer: OnRampFilterer{contract: contract}}, nil
}
-func NewEVM2EVMMultiOnRampCaller(address common.Address, caller bind.ContractCaller) (*EVM2EVMMultiOnRampCaller, error) {
- contract, err := bindEVM2EVMMultiOnRamp(address, caller, nil, nil)
+func NewOnRampCaller(address common.Address, caller bind.ContractCaller) (*OnRampCaller, error) {
+ contract, err := bindOnRamp(address, caller, nil, nil)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampCaller{contract: contract}, nil
+ return &OnRampCaller{contract: contract}, nil
}
-func NewEVM2EVMMultiOnRampTransactor(address common.Address, transactor bind.ContractTransactor) (*EVM2EVMMultiOnRampTransactor, error) {
- contract, err := bindEVM2EVMMultiOnRamp(address, nil, transactor, nil)
+func NewOnRampTransactor(address common.Address, transactor bind.ContractTransactor) (*OnRampTransactor, error) {
+ contract, err := bindOnRamp(address, nil, transactor, nil)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampTransactor{contract: contract}, nil
+ return &OnRampTransactor{contract: contract}, nil
}
-func NewEVM2EVMMultiOnRampFilterer(address common.Address, filterer bind.ContractFilterer) (*EVM2EVMMultiOnRampFilterer, error) {
- contract, err := bindEVM2EVMMultiOnRamp(address, nil, nil, filterer)
+func NewOnRampFilterer(address common.Address, filterer bind.ContractFilterer) (*OnRampFilterer, error) {
+ contract, err := bindOnRamp(address, nil, nil, filterer)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampFilterer{contract: contract}, nil
+ return &OnRampFilterer{contract: contract}, nil
}
-func bindEVM2EVMMultiOnRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
- parsed, err := EVM2EVMMultiOnRampMetaData.GetAbi()
+func bindOnRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+ parsed, err := OnRampMetaData.GetAbi()
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _EVM2EVMMultiOnRamp.Contract.EVM2EVMMultiOnRampCaller.contract.Call(opts, result, method, params...)
+func (_OnRamp *OnRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _OnRamp.Contract.OnRampCaller.contract.Call(opts, result, method, params...)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.EVM2EVMMultiOnRampTransactor.contract.Transfer(opts)
+func (_OnRamp *OnRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OnRamp.Contract.OnRampTransactor.contract.Transfer(opts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.EVM2EVMMultiOnRampTransactor.contract.Transact(opts, method, params...)
+func (_OnRamp *OnRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _OnRamp.Contract.OnRampTransactor.contract.Transact(opts, method, params...)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _EVM2EVMMultiOnRamp.Contract.contract.Call(opts, result, method, params...)
+func (_OnRamp *OnRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _OnRamp.Contract.contract.Call(opts, result, method, params...)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.contract.Transfer(opts)
+func (_OnRamp *OnRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OnRamp.Contract.contract.Transfer(opts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.contract.Transact(opts, method, params...)
+func (_OnRamp *OnRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _OnRamp.Contract.contract.Transact(opts, method, params...)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetDynamicConfig(opts *bind.CallOpts) (EVM2EVMMultiOnRampDynamicConfig, error) {
+func (_OnRamp *OnRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OnRampDynamicConfig, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getDynamicConfig")
+ err := _OnRamp.contract.Call(opts, &out, "getDynamicConfig")
if err != nil {
- return *new(EVM2EVMMultiOnRampDynamicConfig), err
+ return *new(OnRampDynamicConfig), err
}
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOnRampDynamicConfig)).(*EVM2EVMMultiOnRampDynamicConfig)
+ out0 := *abi.ConvertType(out[0], new(OnRampDynamicConfig)).(*OnRampDynamicConfig)
return out0, err
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetDynamicConfig() (EVM2EVMMultiOnRampDynamicConfig, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetDynamicConfig(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampSession) GetDynamicConfig() (OnRampDynamicConfig, error) {
+ return _OnRamp.Contract.GetDynamicConfig(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetDynamicConfig() (EVM2EVMMultiOnRampDynamicConfig, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetDynamicConfig(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampCallerSession) GetDynamicConfig() (OnRampDynamicConfig, error) {
+ return _OnRamp.Contract.GetDynamicConfig(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) {
+func (_OnRamp *OnRampCaller) GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getExpectedNextSequenceNumber", destChainSelector)
+ err := _OnRamp.contract.Call(opts, &out, "getExpectedNextSequenceNumber", destChainSelector)
if err != nil {
return *new(uint64), err
@@ -269,17 +269,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetExpectedNextSequenceNumb
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetExpectedNextSequenceNumber(&_EVM2EVMMultiOnRamp.CallOpts, destChainSelector)
+func (_OnRamp *OnRampSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) {
+ return _OnRamp.Contract.GetExpectedNextSequenceNumber(&_OnRamp.CallOpts, destChainSelector)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetExpectedNextSequenceNumber(&_EVM2EVMMultiOnRamp.CallOpts, destChainSelector)
+func (_OnRamp *OnRampCallerSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) {
+ return _OnRamp.Contract.GetExpectedNextSequenceNumber(&_OnRamp.CallOpts, destChainSelector)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) {
+func (_OnRamp *OnRampCaller) GetFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getFee", destChainSelector, message)
+ err := _OnRamp.contract.Call(opts, &out, "getFee", destChainSelector, message)
if err != nil {
return *new(*big.Int), err
@@ -291,17 +291,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetFee(opts *bind.CallOpts,
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetFee(&_EVM2EVMMultiOnRamp.CallOpts, destChainSelector, message)
+func (_OnRamp *OnRampSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) {
+ return _OnRamp.Contract.GetFee(&_OnRamp.CallOpts, destChainSelector, message)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetFee(&_EVM2EVMMultiOnRamp.CallOpts, destChainSelector, message)
+func (_OnRamp *OnRampCallerSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) {
+ return _OnRamp.Contract.GetFee(&_OnRamp.CallOpts, destChainSelector, message)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetPoolBySourceToken(opts *bind.CallOpts, arg0 uint64, sourceToken common.Address) (common.Address, error) {
+func (_OnRamp *OnRampCaller) GetPoolBySourceToken(opts *bind.CallOpts, arg0 uint64, sourceToken common.Address) (common.Address, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getPoolBySourceToken", arg0, sourceToken)
+ err := _OnRamp.contract.Call(opts, &out, "getPoolBySourceToken", arg0, sourceToken)
if err != nil {
return *new(common.Address), err
@@ -313,17 +313,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetPoolBySourceToken(opts *
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetPoolBySourceToken(&_EVM2EVMMultiOnRamp.CallOpts, arg0, sourceToken)
+func (_OnRamp *OnRampSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) {
+ return _OnRamp.Contract.GetPoolBySourceToken(&_OnRamp.CallOpts, arg0, sourceToken)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetPoolBySourceToken(&_EVM2EVMMultiOnRamp.CallOpts, arg0, sourceToken)
+func (_OnRamp *OnRampCallerSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) {
+ return _OnRamp.Contract.GetPoolBySourceToken(&_OnRamp.CallOpts, arg0, sourceToken)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetRouter(opts *bind.CallOpts, destChainSelector uint64) (common.Address, error) {
+func (_OnRamp *OnRampCaller) GetRouter(opts *bind.CallOpts, destChainSelector uint64) (common.Address, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getRouter", destChainSelector)
+ err := _OnRamp.contract.Call(opts, &out, "getRouter", destChainSelector)
if err != nil {
return *new(common.Address), err
@@ -335,39 +335,39 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetRouter(opts *bind.CallOp
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetRouter(destChainSelector uint64) (common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetRouter(&_EVM2EVMMultiOnRamp.CallOpts, destChainSelector)
+func (_OnRamp *OnRampSession) GetRouter(destChainSelector uint64) (common.Address, error) {
+ return _OnRamp.Contract.GetRouter(&_OnRamp.CallOpts, destChainSelector)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetRouter(destChainSelector uint64) (common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetRouter(&_EVM2EVMMultiOnRamp.CallOpts, destChainSelector)
+func (_OnRamp *OnRampCallerSession) GetRouter(destChainSelector uint64) (common.Address, error) {
+ return _OnRamp.Contract.GetRouter(&_OnRamp.CallOpts, destChainSelector)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetStaticConfig(opts *bind.CallOpts) (EVM2EVMMultiOnRampStaticConfig, error) {
+func (_OnRamp *OnRampCaller) GetStaticConfig(opts *bind.CallOpts) (OnRampStaticConfig, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getStaticConfig")
+ err := _OnRamp.contract.Call(opts, &out, "getStaticConfig")
if err != nil {
- return *new(EVM2EVMMultiOnRampStaticConfig), err
+ return *new(OnRampStaticConfig), err
}
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOnRampStaticConfig)).(*EVM2EVMMultiOnRampStaticConfig)
+ out0 := *abi.ConvertType(out[0], new(OnRampStaticConfig)).(*OnRampStaticConfig)
return out0, err
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetStaticConfig() (EVM2EVMMultiOnRampStaticConfig, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetStaticConfig(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampSession) GetStaticConfig() (OnRampStaticConfig, error) {
+ return _OnRamp.Contract.GetStaticConfig(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetStaticConfig() (EVM2EVMMultiOnRampStaticConfig, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetStaticConfig(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampCallerSession) GetStaticConfig() (OnRampStaticConfig, error) {
+ return _OnRamp.Contract.GetStaticConfig(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error) {
+func (_OnRamp *OnRampCaller) GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "getSupportedTokens", arg0)
+ err := _OnRamp.contract.Call(opts, &out, "getSupportedTokens", arg0)
if err != nil {
return *new([]common.Address), err
@@ -379,17 +379,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) GetSupportedTokens(opts *bi
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetSupportedTokens(&_EVM2EVMMultiOnRamp.CallOpts, arg0)
+func (_OnRamp *OnRampSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) {
+ return _OnRamp.Contract.GetSupportedTokens(&_OnRamp.CallOpts, arg0)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.GetSupportedTokens(&_EVM2EVMMultiOnRamp.CallOpts, arg0)
+func (_OnRamp *OnRampCallerSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) {
+ return _OnRamp.Contract.GetSupportedTokens(&_OnRamp.CallOpts, arg0)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
+func (_OnRamp *OnRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "owner")
+ err := _OnRamp.contract.Call(opts, &out, "owner")
if err != nil {
return *new(common.Address), err
@@ -401,17 +401,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) Owner(opts *bind.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) Owner() (common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.Owner(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampSession) Owner() (common.Address, error) {
+ return _OnRamp.Contract.Owner(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) Owner() (common.Address, error) {
- return _EVM2EVMMultiOnRamp.Contract.Owner(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampCallerSession) Owner() (common.Address, error) {
+ return _OnRamp.Contract.Owner(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
+func (_OnRamp *OnRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
var out []interface{}
- err := _EVM2EVMMultiOnRamp.contract.Call(opts, &out, "typeAndVersion")
+ err := _OnRamp.contract.Call(opts, &out, "typeAndVersion")
if err != nil {
return *new(string), err
@@ -423,88 +423,88 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCaller) TypeAndVersion(opts *bind.C
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) TypeAndVersion() (string, error) {
- return _EVM2EVMMultiOnRamp.Contract.TypeAndVersion(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampSession) TypeAndVersion() (string, error) {
+ return _OnRamp.Contract.TypeAndVersion(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampCallerSession) TypeAndVersion() (string, error) {
- return _EVM2EVMMultiOnRamp.Contract.TypeAndVersion(&_EVM2EVMMultiOnRamp.CallOpts)
+func (_OnRamp *OnRampCallerSession) TypeAndVersion() (string, error) {
+ return _OnRamp.Contract.TypeAndVersion(&_OnRamp.CallOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.contract.Transact(opts, "acceptOwnership")
+func (_OnRamp *OnRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OnRamp.contract.Transact(opts, "acceptOwnership")
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) AcceptOwnership() (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.AcceptOwnership(&_EVM2EVMMultiOnRamp.TransactOpts)
+func (_OnRamp *OnRampSession) AcceptOwnership() (*types.Transaction, error) {
+ return _OnRamp.Contract.AcceptOwnership(&_OnRamp.TransactOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorSession) AcceptOwnership() (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.AcceptOwnership(&_EVM2EVMMultiOnRamp.TransactOpts)
+func (_OnRamp *OnRampTransactorSession) AcceptOwnership() (*types.Transaction, error) {
+ return _OnRamp.Contract.AcceptOwnership(&_OnRamp.TransactOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactor) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []EVM2EVMMultiOnRampDestChainConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.contract.Transact(opts, "applyDestChainConfigUpdates", destChainConfigArgs)
+func (_OnRamp *OnRampTransactor) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) {
+ return _OnRamp.contract.Transact(opts, "applyDestChainConfigUpdates", destChainConfigArgs)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) ApplyDestChainConfigUpdates(destChainConfigArgs []EVM2EVMMultiOnRampDestChainConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.ApplyDestChainConfigUpdates(&_EVM2EVMMultiOnRamp.TransactOpts, destChainConfigArgs)
+func (_OnRamp *OnRampSession) ApplyDestChainConfigUpdates(destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) {
+ return _OnRamp.Contract.ApplyDestChainConfigUpdates(&_OnRamp.TransactOpts, destChainConfigArgs)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorSession) ApplyDestChainConfigUpdates(destChainConfigArgs []EVM2EVMMultiOnRampDestChainConfigArgs) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.ApplyDestChainConfigUpdates(&_EVM2EVMMultiOnRamp.TransactOpts, destChainConfigArgs)
+func (_OnRamp *OnRampTransactorSession) ApplyDestChainConfigUpdates(destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) {
+ return _OnRamp.Contract.ApplyDestChainConfigUpdates(&_OnRamp.TransactOpts, destChainConfigArgs)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactor) ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.contract.Transact(opts, "forwardFromRouter", destChainSelector, message, feeTokenAmount, originalSender)
+func (_OnRamp *OnRampTransactor) ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) {
+ return _OnRamp.contract.Transact(opts, "forwardFromRouter", destChainSelector, message, feeTokenAmount, originalSender)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.ForwardFromRouter(&_EVM2EVMMultiOnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender)
+func (_OnRamp *OnRampSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) {
+ return _OnRamp.Contract.ForwardFromRouter(&_OnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.ForwardFromRouter(&_EVM2EVMMultiOnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender)
+func (_OnRamp *OnRampTransactorSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) {
+ return _OnRamp.Contract.ForwardFromRouter(&_OnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig EVM2EVMMultiOnRampDynamicConfig) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig)
+func (_OnRamp *OnRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) {
+ return _OnRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) SetDynamicConfig(dynamicConfig EVM2EVMMultiOnRampDynamicConfig) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.SetDynamicConfig(&_EVM2EVMMultiOnRamp.TransactOpts, dynamicConfig)
+func (_OnRamp *OnRampSession) SetDynamicConfig(dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) {
+ return _OnRamp.Contract.SetDynamicConfig(&_OnRamp.TransactOpts, dynamicConfig)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorSession) SetDynamicConfig(dynamicConfig EVM2EVMMultiOnRampDynamicConfig) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.SetDynamicConfig(&_EVM2EVMMultiOnRamp.TransactOpts, dynamicConfig)
+func (_OnRamp *OnRampTransactorSession) SetDynamicConfig(dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) {
+ return _OnRamp.Contract.SetDynamicConfig(&_OnRamp.TransactOpts, dynamicConfig)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.contract.Transact(opts, "transferOwnership", to)
+func (_OnRamp *OnRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
+ return _OnRamp.contract.Transact(opts, "transferOwnership", to)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.TransferOwnership(&_EVM2EVMMultiOnRamp.TransactOpts, to)
+func (_OnRamp *OnRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _OnRamp.Contract.TransferOwnership(&_OnRamp.TransactOpts, to)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.TransferOwnership(&_EVM2EVMMultiOnRamp.TransactOpts, to)
+func (_OnRamp *OnRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _OnRamp.Contract.TransferOwnership(&_OnRamp.TransactOpts, to)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactor) WithdrawFeeTokens(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.contract.Transact(opts, "withdrawFeeTokens")
+func (_OnRamp *OnRampTransactor) WithdrawFeeTokens(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _OnRamp.contract.Transact(opts, "withdrawFeeTokens")
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampSession) WithdrawFeeTokens() (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.WithdrawFeeTokens(&_EVM2EVMMultiOnRamp.TransactOpts)
+func (_OnRamp *OnRampSession) WithdrawFeeTokens() (*types.Transaction, error) {
+ return _OnRamp.Contract.WithdrawFeeTokens(&_OnRamp.TransactOpts)
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampTransactorSession) WithdrawFeeTokens() (*types.Transaction, error) {
- return _EVM2EVMMultiOnRamp.Contract.WithdrawFeeTokens(&_EVM2EVMMultiOnRamp.TransactOpts)
+func (_OnRamp *OnRampTransactorSession) WithdrawFeeTokens() (*types.Transaction, error) {
+ return _OnRamp.Contract.WithdrawFeeTokens(&_OnRamp.TransactOpts)
}
-type EVM2EVMMultiOnRampCCIPSendRequestedIterator struct {
- Event *EVM2EVMMultiOnRampCCIPSendRequested
+type OnRampCCIPSendRequestedIterator struct {
+ Event *OnRampCCIPSendRequested
contract *bind.BoundContract
event string
@@ -515,7 +515,7 @@ type EVM2EVMMultiOnRampCCIPSendRequestedIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampCCIPSendRequestedIterator) Next() bool {
+func (it *OnRampCCIPSendRequestedIterator) Next() bool {
if it.fail != nil {
return false
@@ -524,7 +524,7 @@ func (it *EVM2EVMMultiOnRampCCIPSendRequestedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampCCIPSendRequested)
+ it.Event = new(OnRampCCIPSendRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -539,7 +539,7 @@ func (it *EVM2EVMMultiOnRampCCIPSendRequestedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampCCIPSendRequested)
+ it.Event = new(OnRampCCIPSendRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -554,43 +554,43 @@ func (it *EVM2EVMMultiOnRampCCIPSendRequestedIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampCCIPSendRequestedIterator) Error() error {
+func (it *OnRampCCIPSendRequestedIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampCCIPSendRequestedIterator) Close() error {
+func (it *OnRampCCIPSendRequestedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampCCIPSendRequested struct {
+type OnRampCCIPSendRequested struct {
DestChainSelector uint64
Message InternalEVM2AnyRampMessage
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*EVM2EVMMultiOnRampCCIPSendRequestedIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampCCIPSendRequestedIterator, error) {
var destChainSelectorRule []interface{}
for _, destChainSelectorItem := range destChainSelector {
destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "CCIPSendRequested", destChainSelectorRule)
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "CCIPSendRequested", destChainSelectorRule)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampCCIPSendRequestedIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "CCIPSendRequested", logs: logs, sub: sub}, nil
+ return &OnRampCCIPSendRequestedIterator{contract: _OnRamp.contract, event: "CCIPSendRequested", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *OnRampCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error) {
var destChainSelectorRule []interface{}
for _, destChainSelectorItem := range destChainSelector {
destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "CCIPSendRequested", destChainSelectorRule)
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "CCIPSendRequested", destChainSelectorRule)
if err != nil {
return nil, err
}
@@ -600,8 +600,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchCCIPSendRequested(op
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampCCIPSendRequested)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil {
+ event := new(OnRampCCIPSendRequested)
+ if err := _OnRamp.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil {
return err
}
event.Raw = log
@@ -622,17 +622,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchCCIPSendRequested(op
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseCCIPSendRequested(log types.Log) (*EVM2EVMMultiOnRampCCIPSendRequested, error) {
- event := new(EVM2EVMMultiOnRampCCIPSendRequested)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseCCIPSendRequested(log types.Log) (*OnRampCCIPSendRequested, error) {
+ event := new(OnRampCCIPSendRequested)
+ if err := _OnRamp.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type EVM2EVMMultiOnRampConfigSetIterator struct {
- Event *EVM2EVMMultiOnRampConfigSet
+type OnRampConfigSetIterator struct {
+ Event *OnRampConfigSet
contract *bind.BoundContract
event string
@@ -643,7 +643,7 @@ type EVM2EVMMultiOnRampConfigSetIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampConfigSetIterator) Next() bool {
+func (it *OnRampConfigSetIterator) Next() bool {
if it.fail != nil {
return false
@@ -652,7 +652,7 @@ func (it *EVM2EVMMultiOnRampConfigSetIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampConfigSet)
+ it.Event = new(OnRampConfigSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -667,7 +667,7 @@ func (it *EVM2EVMMultiOnRampConfigSetIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampConfigSet)
+ it.Event = new(OnRampConfigSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -682,33 +682,33 @@ func (it *EVM2EVMMultiOnRampConfigSetIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampConfigSetIterator) Error() error {
+func (it *OnRampConfigSetIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampConfigSetIterator) Close() error {
+func (it *OnRampConfigSetIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampConfigSet struct {
- StaticConfig EVM2EVMMultiOnRampStaticConfig
- DynamicConfig EVM2EVMMultiOnRampDynamicConfig
+type OnRampConfigSet struct {
+ StaticConfig OnRampStaticConfig
+ DynamicConfig OnRampDynamicConfig
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOnRampConfigSetIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*OnRampConfigSetIterator, error) {
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "ConfigSet")
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "ConfigSet")
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampConfigSetIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil
+ return &OnRampConfigSetIterator{contract: _OnRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampConfigSet) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampConfigSet) (event.Subscription, error) {
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "ConfigSet")
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "ConfigSet")
if err != nil {
return nil, err
}
@@ -718,8 +718,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchConfigSet(opts *bind
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampConfigSet)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
+ event := new(OnRampConfigSet)
+ if err := _OnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
return err
}
event.Raw = log
@@ -740,17 +740,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchConfigSet(opts *bind
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseConfigSet(log types.Log) (*EVM2EVMMultiOnRampConfigSet, error) {
- event := new(EVM2EVMMultiOnRampConfigSet)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseConfigSet(log types.Log) (*OnRampConfigSet, error) {
+ event := new(OnRampConfigSet)
+ if err := _OnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type EVM2EVMMultiOnRampDestChainConfigSetIterator struct {
- Event *EVM2EVMMultiOnRampDestChainConfigSet
+type OnRampDestChainConfigSetIterator struct {
+ Event *OnRampDestChainConfigSet
contract *bind.BoundContract
event string
@@ -761,7 +761,7 @@ type EVM2EVMMultiOnRampDestChainConfigSetIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampDestChainConfigSetIterator) Next() bool {
+func (it *OnRampDestChainConfigSetIterator) Next() bool {
if it.fail != nil {
return false
@@ -770,7 +770,7 @@ func (it *EVM2EVMMultiOnRampDestChainConfigSetIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampDestChainConfigSet)
+ it.Event = new(OnRampDestChainConfigSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -785,7 +785,7 @@ func (it *EVM2EVMMultiOnRampDestChainConfigSetIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampDestChainConfigSet)
+ it.Event = new(OnRampDestChainConfigSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -800,43 +800,43 @@ func (it *EVM2EVMMultiOnRampDestChainConfigSetIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampDestChainConfigSetIterator) Error() error {
+func (it *OnRampDestChainConfigSetIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampDestChainConfigSetIterator) Close() error {
+func (it *OnRampDestChainConfigSetIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampDestChainConfigSet struct {
+type OnRampDestChainConfigSet struct {
DestChainSelector uint64
- DestChainConfig EVM2EVMMultiOnRampDestChainConfig
+ DestChainConfig OnRampDestChainConfig
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*EVM2EVMMultiOnRampDestChainConfigSetIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampDestChainConfigSetIterator, error) {
var destChainSelectorRule []interface{}
for _, destChainSelectorItem := range destChainSelector {
destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "DestChainConfigSet", destChainSelectorRule)
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "DestChainConfigSet", destChainSelectorRule)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampDestChainConfigSetIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "DestChainConfigSet", logs: logs, sub: sub}, nil
+ return &OnRampDestChainConfigSetIterator{contract: _OnRamp.contract, event: "DestChainConfigSet", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error) {
var destChainSelectorRule []interface{}
for _, destChainSelectorItem := range destChainSelector {
destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "DestChainConfigSet", destChainSelectorRule)
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "DestChainConfigSet", destChainSelectorRule)
if err != nil {
return nil, err
}
@@ -846,8 +846,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchDestChainConfigSet(o
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampDestChainConfigSet)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil {
+ event := new(OnRampDestChainConfigSet)
+ if err := _OnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil {
return err
}
event.Raw = log
@@ -868,17 +868,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchDestChainConfigSet(o
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseDestChainConfigSet(log types.Log) (*EVM2EVMMultiOnRampDestChainConfigSet, error) {
- event := new(EVM2EVMMultiOnRampDestChainConfigSet)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseDestChainConfigSet(log types.Log) (*OnRampDestChainConfigSet, error) {
+ event := new(OnRampDestChainConfigSet)
+ if err := _OnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type EVM2EVMMultiOnRampFeePaidIterator struct {
- Event *EVM2EVMMultiOnRampFeePaid
+type OnRampFeePaidIterator struct {
+ Event *OnRampFeePaid
contract *bind.BoundContract
event string
@@ -889,7 +889,7 @@ type EVM2EVMMultiOnRampFeePaidIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampFeePaidIterator) Next() bool {
+func (it *OnRampFeePaidIterator) Next() bool {
if it.fail != nil {
return false
@@ -898,7 +898,7 @@ func (it *EVM2EVMMultiOnRampFeePaidIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampFeePaid)
+ it.Event = new(OnRampFeePaid)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -913,7 +913,7 @@ func (it *EVM2EVMMultiOnRampFeePaidIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampFeePaid)
+ it.Event = new(OnRampFeePaid)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -928,43 +928,43 @@ func (it *EVM2EVMMultiOnRampFeePaidIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampFeePaidIterator) Error() error {
+func (it *OnRampFeePaidIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampFeePaidIterator) Close() error {
+func (it *OnRampFeePaidIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampFeePaid struct {
+type OnRampFeePaid struct {
FeeToken common.Address
FeeValueJuels *big.Int
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterFeePaid(opts *bind.FilterOpts, feeToken []common.Address) (*EVM2EVMMultiOnRampFeePaidIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterFeePaid(opts *bind.FilterOpts, feeToken []common.Address) (*OnRampFeePaidIterator, error) {
var feeTokenRule []interface{}
for _, feeTokenItem := range feeToken {
feeTokenRule = append(feeTokenRule, feeTokenItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "FeePaid", feeTokenRule)
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "FeePaid", feeTokenRule)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampFeePaidIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "FeePaid", logs: logs, sub: sub}, nil
+ return &OnRampFeePaidIterator{contract: _OnRamp.contract, event: "FeePaid", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeePaid(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampFeePaid, feeToken []common.Address) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchFeePaid(opts *bind.WatchOpts, sink chan<- *OnRampFeePaid, feeToken []common.Address) (event.Subscription, error) {
var feeTokenRule []interface{}
for _, feeTokenItem := range feeToken {
feeTokenRule = append(feeTokenRule, feeTokenItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "FeePaid", feeTokenRule)
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "FeePaid", feeTokenRule)
if err != nil {
return nil, err
}
@@ -974,8 +974,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeePaid(opts *bind.W
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampFeePaid)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "FeePaid", log); err != nil {
+ event := new(OnRampFeePaid)
+ if err := _OnRamp.contract.UnpackLog(event, "FeePaid", log); err != nil {
return err
}
event.Raw = log
@@ -996,17 +996,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeePaid(opts *bind.W
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseFeePaid(log types.Log) (*EVM2EVMMultiOnRampFeePaid, error) {
- event := new(EVM2EVMMultiOnRampFeePaid)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "FeePaid", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseFeePaid(log types.Log) (*OnRampFeePaid, error) {
+ event := new(OnRampFeePaid)
+ if err := _OnRamp.contract.UnpackLog(event, "FeePaid", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type EVM2EVMMultiOnRampFeeTokenWithdrawnIterator struct {
- Event *EVM2EVMMultiOnRampFeeTokenWithdrawn
+type OnRampFeeTokenWithdrawnIterator struct {
+ Event *OnRampFeeTokenWithdrawn
contract *bind.BoundContract
event string
@@ -1017,7 +1017,7 @@ type EVM2EVMMultiOnRampFeeTokenWithdrawnIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampFeeTokenWithdrawnIterator) Next() bool {
+func (it *OnRampFeeTokenWithdrawnIterator) Next() bool {
if it.fail != nil {
return false
@@ -1026,7 +1026,7 @@ func (it *EVM2EVMMultiOnRampFeeTokenWithdrawnIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampFeeTokenWithdrawn)
+ it.Event = new(OnRampFeeTokenWithdrawn)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1041,7 +1041,7 @@ func (it *EVM2EVMMultiOnRampFeeTokenWithdrawnIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampFeeTokenWithdrawn)
+ it.Event = new(OnRampFeeTokenWithdrawn)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1056,23 +1056,23 @@ func (it *EVM2EVMMultiOnRampFeeTokenWithdrawnIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampFeeTokenWithdrawnIterator) Error() error {
+func (it *OnRampFeeTokenWithdrawnIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampFeeTokenWithdrawnIterator) Close() error {
+func (it *OnRampFeeTokenWithdrawnIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampFeeTokenWithdrawn struct {
+type OnRampFeeTokenWithdrawn struct {
FeeAggregator common.Address
FeeToken common.Address
Amount *big.Int
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*EVM2EVMMultiOnRampFeeTokenWithdrawnIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*OnRampFeeTokenWithdrawnIterator, error) {
var feeAggregatorRule []interface{}
for _, feeAggregatorItem := range feeAggregator {
@@ -1083,14 +1083,14 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterFeeTokenWithdrawn(o
feeTokenRule = append(feeTokenRule, feeTokenItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule)
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampFeeTokenWithdrawnIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "FeeTokenWithdrawn", logs: logs, sub: sub}, nil
+ return &OnRampFeeTokenWithdrawnIterator{contract: _OnRamp.contract, event: "FeeTokenWithdrawn", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *OnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error) {
var feeAggregatorRule []interface{}
for _, feeAggregatorItem := range feeAggregator {
@@ -1101,7 +1101,7 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeeTokenWithdrawn(op
feeTokenRule = append(feeTokenRule, feeTokenItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule)
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule)
if err != nil {
return nil, err
}
@@ -1111,8 +1111,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeeTokenWithdrawn(op
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampFeeTokenWithdrawn)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil {
+ event := new(OnRampFeeTokenWithdrawn)
+ if err := _OnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil {
return err
}
event.Raw = log
@@ -1133,17 +1133,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchFeeTokenWithdrawn(op
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseFeeTokenWithdrawn(log types.Log) (*EVM2EVMMultiOnRampFeeTokenWithdrawn, error) {
- event := new(EVM2EVMMultiOnRampFeeTokenWithdrawn)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseFeeTokenWithdrawn(log types.Log) (*OnRampFeeTokenWithdrawn, error) {
+ event := new(OnRampFeeTokenWithdrawn)
+ if err := _OnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type EVM2EVMMultiOnRampOwnershipTransferRequestedIterator struct {
- Event *EVM2EVMMultiOnRampOwnershipTransferRequested
+type OnRampOwnershipTransferRequestedIterator struct {
+ Event *OnRampOwnershipTransferRequested
contract *bind.BoundContract
event string
@@ -1154,7 +1154,7 @@ type EVM2EVMMultiOnRampOwnershipTransferRequestedIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampOwnershipTransferRequestedIterator) Next() bool {
+func (it *OnRampOwnershipTransferRequestedIterator) Next() bool {
if it.fail != nil {
return false
@@ -1163,7 +1163,7 @@ func (it *EVM2EVMMultiOnRampOwnershipTransferRequestedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampOwnershipTransferRequested)
+ it.Event = new(OnRampOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1178,7 +1178,7 @@ func (it *EVM2EVMMultiOnRampOwnershipTransferRequestedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampOwnershipTransferRequested)
+ it.Event = new(OnRampOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1193,22 +1193,22 @@ func (it *EVM2EVMMultiOnRampOwnershipTransferRequestedIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampOwnershipTransferRequestedIterator) Error() error {
+func (it *OnRampOwnershipTransferRequestedIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampOwnershipTransferRequestedIterator) Close() error {
+func (it *OnRampOwnershipTransferRequestedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampOwnershipTransferRequested struct {
+type OnRampOwnershipTransferRequested struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOnRampOwnershipTransferRequestedIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferRequestedIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1219,14 +1219,14 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterOwnershipTransferRe
toRule = append(toRule, toItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampOwnershipTransferRequestedIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
+ return &OnRampOwnershipTransferRequestedIterator{contract: _OnRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1237,7 +1237,7 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferReq
toRule = append(toRule, toItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -1247,8 +1247,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferReq
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampOwnershipTransferRequested)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+ event := new(OnRampOwnershipTransferRequested)
+ if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return err
}
event.Raw = log
@@ -1269,17 +1269,17 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferReq
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*EVM2EVMMultiOnRampOwnershipTransferRequested, error) {
- event := new(EVM2EVMMultiOnRampOwnershipTransferRequested)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*OnRampOwnershipTransferRequested, error) {
+ event := new(OnRampOwnershipTransferRequested)
+ if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type EVM2EVMMultiOnRampOwnershipTransferredIterator struct {
- Event *EVM2EVMMultiOnRampOwnershipTransferred
+type OnRampOwnershipTransferredIterator struct {
+ Event *OnRampOwnershipTransferred
contract *bind.BoundContract
event string
@@ -1290,7 +1290,7 @@ type EVM2EVMMultiOnRampOwnershipTransferredIterator struct {
fail error
}
-func (it *EVM2EVMMultiOnRampOwnershipTransferredIterator) Next() bool {
+func (it *OnRampOwnershipTransferredIterator) Next() bool {
if it.fail != nil {
return false
@@ -1299,7 +1299,7 @@ func (it *EVM2EVMMultiOnRampOwnershipTransferredIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampOwnershipTransferred)
+ it.Event = new(OnRampOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1314,7 +1314,7 @@ func (it *EVM2EVMMultiOnRampOwnershipTransferredIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(EVM2EVMMultiOnRampOwnershipTransferred)
+ it.Event = new(OnRampOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1329,22 +1329,22 @@ func (it *EVM2EVMMultiOnRampOwnershipTransferredIterator) Next() bool {
}
}
-func (it *EVM2EVMMultiOnRampOwnershipTransferredIterator) Error() error {
+func (it *OnRampOwnershipTransferredIterator) Error() error {
return it.fail
}
-func (it *EVM2EVMMultiOnRampOwnershipTransferredIterator) Close() error {
+func (it *OnRampOwnershipTransferredIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type EVM2EVMMultiOnRampOwnershipTransferred struct {
+type OnRampOwnershipTransferred struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOnRampOwnershipTransferredIterator, error) {
+func (_OnRamp *OnRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferredIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1355,14 +1355,14 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) FilterOwnershipTransferre
toRule = append(toRule, toItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _OnRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
- return &EVM2EVMMultiOnRampOwnershipTransferredIterator{contract: _EVM2EVMMultiOnRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+ return &OnRampOwnershipTransferredIterator{contract: _OnRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_OnRamp *OnRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1373,7 +1373,7 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferred
toRule = append(toRule, toItem)
}
- logs, sub, err := _EVM2EVMMultiOnRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _OnRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -1383,8 +1383,8 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferred
select {
case log := <-logs:
- event := new(EVM2EVMMultiOnRampOwnershipTransferred)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ event := new(OnRampOwnershipTransferred)
+ if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return err
}
event.Raw = log
@@ -1405,71 +1405,71 @@ func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) WatchOwnershipTransferred
}), nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRampFilterer) ParseOwnershipTransferred(log types.Log) (*EVM2EVMMultiOnRampOwnershipTransferred, error) {
- event := new(EVM2EVMMultiOnRampOwnershipTransferred)
- if err := _EVM2EVMMultiOnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+func (_OnRamp *OnRampFilterer) ParseOwnershipTransferred(log types.Log) (*OnRampOwnershipTransferred, error) {
+ event := new(OnRampOwnershipTransferred)
+ if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRamp) ParseLog(log types.Log) (generated.AbigenLog, error) {
+func (_OnRamp *OnRamp) ParseLog(log types.Log) (generated.AbigenLog, error) {
switch log.Topics[0] {
- case _EVM2EVMMultiOnRamp.abi.Events["CCIPSendRequested"].ID:
- return _EVM2EVMMultiOnRamp.ParseCCIPSendRequested(log)
- case _EVM2EVMMultiOnRamp.abi.Events["ConfigSet"].ID:
- return _EVM2EVMMultiOnRamp.ParseConfigSet(log)
- case _EVM2EVMMultiOnRamp.abi.Events["DestChainConfigSet"].ID:
- return _EVM2EVMMultiOnRamp.ParseDestChainConfigSet(log)
- case _EVM2EVMMultiOnRamp.abi.Events["FeePaid"].ID:
- return _EVM2EVMMultiOnRamp.ParseFeePaid(log)
- case _EVM2EVMMultiOnRamp.abi.Events["FeeTokenWithdrawn"].ID:
- return _EVM2EVMMultiOnRamp.ParseFeeTokenWithdrawn(log)
- case _EVM2EVMMultiOnRamp.abi.Events["OwnershipTransferRequested"].ID:
- return _EVM2EVMMultiOnRamp.ParseOwnershipTransferRequested(log)
- case _EVM2EVMMultiOnRamp.abi.Events["OwnershipTransferred"].ID:
- return _EVM2EVMMultiOnRamp.ParseOwnershipTransferred(log)
+ case _OnRamp.abi.Events["CCIPSendRequested"].ID:
+ return _OnRamp.ParseCCIPSendRequested(log)
+ case _OnRamp.abi.Events["ConfigSet"].ID:
+ return _OnRamp.ParseConfigSet(log)
+ case _OnRamp.abi.Events["DestChainConfigSet"].ID:
+ return _OnRamp.ParseDestChainConfigSet(log)
+ case _OnRamp.abi.Events["FeePaid"].ID:
+ return _OnRamp.ParseFeePaid(log)
+ case _OnRamp.abi.Events["FeeTokenWithdrawn"].ID:
+ return _OnRamp.ParseFeeTokenWithdrawn(log)
+ case _OnRamp.abi.Events["OwnershipTransferRequested"].ID:
+ return _OnRamp.ParseOwnershipTransferRequested(log)
+ case _OnRamp.abi.Events["OwnershipTransferred"].ID:
+ return _OnRamp.ParseOwnershipTransferred(log)
default:
return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
}
}
-func (EVM2EVMMultiOnRampCCIPSendRequested) Topic() common.Hash {
+func (OnRampCCIPSendRequested) Topic() common.Hash {
return common.HexToHash("0x0f07cd31e53232da9125e517f09550fdde74bf43d6a0a76ebd41674dafe2ab29")
}
-func (EVM2EVMMultiOnRampConfigSet) Topic() common.Hash {
+func (OnRampConfigSet) Topic() common.Hash {
return common.HexToHash("0x2d8f19dc1cd01460c3367a09d2d424f2b1940ba7c886047edd078c7b77ea4558")
}
-func (EVM2EVMMultiOnRampDestChainConfigSet) Topic() common.Hash {
+func (OnRampDestChainConfigSet) Topic() common.Hash {
return common.HexToHash("0x324d4a7950b57da00ce533ad6697039be6281726a73da959d0ab3ff795181ec6")
}
-func (EVM2EVMMultiOnRampFeePaid) Topic() common.Hash {
+func (OnRampFeePaid) Topic() common.Hash {
return common.HexToHash("0x075a2720282fdf622141dae0b048ef90a21a7e57c134c76912d19d006b3b3f6f")
}
-func (EVM2EVMMultiOnRampFeeTokenWithdrawn) Topic() common.Hash {
+func (OnRampFeeTokenWithdrawn) Topic() common.Hash {
return common.HexToHash("0x508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e")
}
-func (EVM2EVMMultiOnRampOwnershipTransferRequested) Topic() common.Hash {
+func (OnRampOwnershipTransferRequested) Topic() common.Hash {
return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
}
-func (EVM2EVMMultiOnRampOwnershipTransferred) Topic() common.Hash {
+func (OnRampOwnershipTransferred) Topic() common.Hash {
return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
}
-func (_EVM2EVMMultiOnRamp *EVM2EVMMultiOnRamp) Address() common.Address {
- return _EVM2EVMMultiOnRamp.address
+func (_OnRamp *OnRamp) Address() common.Address {
+ return _OnRamp.address
}
-type EVM2EVMMultiOnRampInterface interface {
- GetDynamicConfig(opts *bind.CallOpts) (EVM2EVMMultiOnRampDynamicConfig, error)
+type OnRampInterface interface {
+ GetDynamicConfig(opts *bind.CallOpts) (OnRampDynamicConfig, error)
GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error)
@@ -1479,7 +1479,7 @@ type EVM2EVMMultiOnRampInterface interface {
GetRouter(opts *bind.CallOpts, destChainSelector uint64) (common.Address, error)
- GetStaticConfig(opts *bind.CallOpts) (EVM2EVMMultiOnRampStaticConfig, error)
+ GetStaticConfig(opts *bind.CallOpts) (OnRampStaticConfig, error)
GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error)
@@ -1489,57 +1489,57 @@ type EVM2EVMMultiOnRampInterface interface {
AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error)
- ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []EVM2EVMMultiOnRampDestChainConfigArgs) (*types.Transaction, error)
+ ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error)
ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error)
- SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig EVM2EVMMultiOnRampDynamicConfig) (*types.Transaction, error)
+ SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OnRampDynamicConfig) (*types.Transaction, error)
TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error)
WithdrawFeeTokens(opts *bind.TransactOpts) (*types.Transaction, error)
- FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*EVM2EVMMultiOnRampCCIPSendRequestedIterator, error)
+ FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampCCIPSendRequestedIterator, error)
- WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error)
+ WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *OnRampCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error)
- ParseCCIPSendRequested(log types.Log) (*EVM2EVMMultiOnRampCCIPSendRequested, error)
+ ParseCCIPSendRequested(log types.Log) (*OnRampCCIPSendRequested, error)
- FilterConfigSet(opts *bind.FilterOpts) (*EVM2EVMMultiOnRampConfigSetIterator, error)
+ FilterConfigSet(opts *bind.FilterOpts) (*OnRampConfigSetIterator, error)
- WatchConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampConfigSet) (event.Subscription, error)
+ WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampConfigSet) (event.Subscription, error)
- ParseConfigSet(log types.Log) (*EVM2EVMMultiOnRampConfigSet, error)
+ ParseConfigSet(log types.Log) (*OnRampConfigSet, error)
- FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*EVM2EVMMultiOnRampDestChainConfigSetIterator, error)
+ FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampDestChainConfigSetIterator, error)
- WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error)
+ WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error)
- ParseDestChainConfigSet(log types.Log) (*EVM2EVMMultiOnRampDestChainConfigSet, error)
+ ParseDestChainConfigSet(log types.Log) (*OnRampDestChainConfigSet, error)
- FilterFeePaid(opts *bind.FilterOpts, feeToken []common.Address) (*EVM2EVMMultiOnRampFeePaidIterator, error)
+ FilterFeePaid(opts *bind.FilterOpts, feeToken []common.Address) (*OnRampFeePaidIterator, error)
- WatchFeePaid(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampFeePaid, feeToken []common.Address) (event.Subscription, error)
+ WatchFeePaid(opts *bind.WatchOpts, sink chan<- *OnRampFeePaid, feeToken []common.Address) (event.Subscription, error)
- ParseFeePaid(log types.Log) (*EVM2EVMMultiOnRampFeePaid, error)
+ ParseFeePaid(log types.Log) (*OnRampFeePaid, error)
- FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*EVM2EVMMultiOnRampFeeTokenWithdrawnIterator, error)
+ FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*OnRampFeeTokenWithdrawnIterator, error)
- WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error)
+ WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *OnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error)
- ParseFeeTokenWithdrawn(log types.Log) (*EVM2EVMMultiOnRampFeeTokenWithdrawn, error)
+ ParseFeeTokenWithdrawn(log types.Log) (*OnRampFeeTokenWithdrawn, error)
- FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOnRampOwnershipTransferRequestedIterator, error)
+ FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferRequestedIterator, error)
- WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferRequested(log types.Log) (*EVM2EVMMultiOnRampOwnershipTransferRequested, error)
+ ParseOwnershipTransferRequested(log types.Log) (*OnRampOwnershipTransferRequested, error)
- FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*EVM2EVMMultiOnRampOwnershipTransferredIterator, error)
+ FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferredIterator, error)
- WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EVM2EVMMultiOnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferred(log types.Log) (*EVM2EVMMultiOnRampOwnershipTransferred, error)
+ ParseOwnershipTransferred(log types.Log) (*OnRampOwnershipTransferred, error)
ParseLog(log types.Log) (generated.AbigenLog, error)
diff --git a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go
index 4387dd3080c..349d83182c4 100644
--- a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go
+++ b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go
@@ -44,8 +44,8 @@ type ClientEVMTokenAmount struct {
}
var PingPongDemoMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
- Bin: "0x60a06040523480156200001157600080fd5b50604051620013d8380380620013d8833981016040819052620000349162000263565b33806000846001600160a01b03811662000069576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000060565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fa57620000fa816200019f565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620002a2565b505050620002cd565b336001600160a01b03821603620001f95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200026057600080fd5b50565b600080604083850312156200027757600080fd5b825162000284816200024a565b602084015190925062000297816200024a565b809150509250929050565b600060208284031215620002b557600080fd5b81518015158114620002c657600080fd5b9392505050565b6080516110e1620002f7600039600081816102290152818161058e01526108f201526110e16000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063b5a1101111610066578063b5a1101114610270578063bee518a414610283578063ca709a25146102c1578063f2fde38b146102df57600080fd5b80638da5cb5b146101f65780639d2aede514610214578063b0f479a114610227578063b187bd261461024d57600080fd5b80632874d8bf116100d35780632874d8bf146101945780632b6e5d631461019c57806379ba5097146101db57806385572ffb146101e357600080fd5b806301ffc9a71461010557806316c38b3c1461012d578063181f5a77146101425780631892b90614610181575b600080fd5b610118610113366004610af5565b6102f2565b60405190151581526020015b60405180910390f35b61014061013b366004610b3e565b61038b565b005b604080518082018252601281527f50696e67506f6e6744656d6f20312e322e300000000000000000000000000000602082015290516101249190610bc4565b61014061018f366004610bf4565b6103dd565b610140610438565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b610140610474565b6101406101f1366004610c0f565b610576565b60005473ffffffffffffffffffffffffffffffffffffffff166101b6565b610140610222366004610c6e565b6105fb565b7f00000000000000000000000000000000000000000000000000000000000000006101b6565b60025474010000000000000000000000000000000000000000900460ff16610118565b61014061027e366004610c89565b61064a565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff9091168152602001610124565b60035473ffffffffffffffffffffffffffffffffffffffff166101b6565b6101406102ed366004610c6e565b6106ec565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061038557507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6103936106fd565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6103e56106fd565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104406106fd565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055610472600161077e565b565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105e7576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016104f1565b6105f86105f382610ebf565b6109aa565b50565b6106036106fd565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6106526106fd565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6106f46106fd565b6105f881610a00565b60005473ffffffffffffffffffffffffffffffffffffffff163314610472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016104f1565b806001166001036107c1576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a16107f5565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161080a91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260a08301825260025473ffffffffffffffffffffffffffffffffffffffff1660c0808501919091528251808503909101815260e084018352835260208084018290528251600080825291810184529194509291820190836108b8565b60408051808201909152600080825260208201528152602001906001900390816108915790505b50815260035473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600160149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401610961929190610f6c565b6020604051808303816000875af1158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190611081565b50505050565b600081606001518060200190518101906109c49190611081565b60025490915074010000000000000000000000000000000000000000900460ff166109fc576109fc6109f782600161109a565b61077e565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016104f1565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610b0757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610b3757600080fd5b9392505050565b600060208284031215610b5057600080fd5b81358015158114610b3757600080fd5b6000815180845260005b81811015610b8657602081850181015186830182015201610b6a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610b376020830184610b60565b803567ffffffffffffffff81168114610bef57600080fd5b919050565b600060208284031215610c0657600080fd5b610b3782610bd7565b600060208284031215610c2157600080fd5b813567ffffffffffffffff811115610c3857600080fd5b820160a08185031215610b3757600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610bef57600080fd5b600060208284031215610c8057600080fd5b610b3782610c4a565b60008060408385031215610c9c57600080fd5b610ca583610bd7565b9150610cb360208401610c4a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610d0e57610d0e610cbc565b60405290565b60405160a0810167ffffffffffffffff81118282101715610d0e57610d0e610cbc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610d7e57610d7e610cbc565b604052919050565b600082601f830112610d9757600080fd5b813567ffffffffffffffff811115610db157610db1610cbc565b610de260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610d37565b818152846020838601011115610df757600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610e2557600080fd5b8135602067ffffffffffffffff821115610e4157610e41610cbc565b610e4f818360051b01610d37565b82815260069290921b84018101918181019086841115610e6e57600080fd5b8286015b84811015610eb45760408189031215610e8b5760008081fd5b610e93610ceb565b610e9c82610c4a565b81528185013585820152835291830191604001610e72565b509695505050505050565b600060a08236031215610ed157600080fd5b610ed9610d14565b82358152610ee960208401610bd7565b6020820152604083013567ffffffffffffffff80821115610f0957600080fd5b610f1536838701610d86565b60408401526060850135915080821115610f2e57600080fd5b610f3a36838701610d86565b60608401526080850135915080821115610f5357600080fd5b50610f6036828601610e14565b60808301525092915050565b6000604067ffffffffffffffff851683526020604081850152845160a06040860152610f9b60e0860182610b60565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878403016060880152610fd68383610b60565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015611037578451805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152938501936001939093019290860190610ff8565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506110738187610b60565b9a9950505050505050505050565b60006020828403121561109357600080fd5b5051919050565b80820180821115610385577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
+ Bin: "0x60a06040523480156200001157600080fd5b506040516200159d3803806200159d833981016040819052620000349162000263565b33806000846001600160a01b03811662000069576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000060565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fa57620000fa816200019f565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620002a2565b505050620002cd565b336001600160a01b03821603620001f95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200026057600080fd5b50565b600080604083850312156200027757600080fd5b825162000284816200024a565b602084015190925062000297816200024a565b809150509250929050565b600060208284031215620002b557600080fd5b81518015158114620002c657600080fd5b9392505050565b6080516112a6620002f760003960008181610295015281816106860152610ab901526112a66000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638da5cb5b116100b2578063b187bd2611610081578063bee518a411610066578063bee518a4146102ef578063ca709a251461032d578063f2fde38b1461034b57600080fd5b8063b187bd26146102b9578063b5a11011146102dc57600080fd5b80638da5cb5b1461023f5780639d2aede51461025d578063ae90de5514610270578063b0f479a11461029357600080fd5b80632874d8bf11610109578063665ed537116100ee578063665ed5371461021157806379ba50971461022457806385572ffb1461022c57600080fd5b80632874d8bf146101ca5780632b6e5d63146101d257600080fd5b806301ffc9a71461013b57806316c38b3c14610163578063181f5a77146101785780631892b906146101b7575b600080fd5b61014e610149366004610cba565b61035e565b60405190151581526020015b60405180910390f35b610176610171366004610d03565b6103f7565b005b604080518082018252601281527f50696e67506f6e6744656d6f20312e322e3000000000000000000000000000006020820152905161015a9190610d89565b6101766101c5366004610db9565b610449565b6101766104a4565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b61017661021f366004610d03565b6104e0565b61017661056c565b61017661023a366004610dd4565b61066e565b60005473ffffffffffffffffffffffffffffffffffffffff166101ec565b61017661026b366004610e33565b6106f3565b60035474010000000000000000000000000000000000000000900460ff1661014e565b7f00000000000000000000000000000000000000000000000000000000000000006101ec565b60025474010000000000000000000000000000000000000000900460ff1661014e565b6101766102ea366004610e4e565b610742565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161015a565b60035473ffffffffffffffffffffffffffffffffffffffff166101ec565b610176610359366004610e33565b6107e4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb0000000000000000000000000000000000000000000000000000000014806103f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6103ff6107f5565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104516107f5565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104ac6107f5565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556104de6001610876565b565b6104e86107f5565b6003805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99061056190831515815260200190565b60405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106df576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016105e9565b6106f06106eb82611084565b610b6f565b50565b6106fb6107f5565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61074a6107f5565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6107ec6107f5565b6106f081610bc5565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105e9565b806001166001036108b9576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a16108ed565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e0810160405160208183030381529060405281526020018360405160200161094591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052815260200160006040519080825280602002602001820160405280156109bf57816020015b60408051808201909152600080825260208201528152602001906001900390816109985790505b50815260035473ffffffffffffffffffffffffffffffffffffffff811660208084019190915260408051808201825262030d408082527401000000000000000000000000000000000000000090940460ff16151590830190815281516024810194909452511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf1000000000000000000000000000000000000000000000000000000000179052909101526001546040517f96f4e9f90000000000000000000000000000000000000000000000000000000081529192507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916396f4e9f991610b27917401000000000000000000000000000000000000000090910467ffffffffffffffff16908590600401611131565b6020604051808303816000875af1158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190611246565b505050565b60008160600151806020019051810190610b899190611246565b60025490915074010000000000000000000000000000000000000000900460ff16610bc157610bc1610bbc82600161125f565b610876565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105e9565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610ccc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610cfc57600080fd5b9392505050565b600060208284031215610d1557600080fd5b81358015158114610cfc57600080fd5b6000815180845260005b81811015610d4b57602081850181015186830182015201610d2f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610cfc6020830184610d25565b803567ffffffffffffffff81168114610db457600080fd5b919050565b600060208284031215610dcb57600080fd5b610cfc82610d9c565b600060208284031215610de657600080fd5b813567ffffffffffffffff811115610dfd57600080fd5b820160a08185031215610cfc57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610db457600080fd5b600060208284031215610e4557600080fd5b610cfc82610e0f565b60008060408385031215610e6157600080fd5b610e6a83610d9c565b9150610e7860208401610e0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610ed357610ed3610e81565b60405290565b60405160a0810167ffffffffffffffff81118282101715610ed357610ed3610e81565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610f4357610f43610e81565b604052919050565b600082601f830112610f5c57600080fd5b813567ffffffffffffffff811115610f7657610f76610e81565b610fa760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610efc565b818152846020838601011115610fbc57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610fea57600080fd5b8135602067ffffffffffffffff82111561100657611006610e81565b611014818360051b01610efc565b82815260069290921b8401810191818101908684111561103357600080fd5b8286015b8481101561107957604081890312156110505760008081fd5b611058610eb0565b61106182610e0f565b81528185013585820152835291830191604001611037565b509695505050505050565b600060a0823603121561109657600080fd5b61109e610ed9565b823581526110ae60208401610d9c565b6020820152604083013567ffffffffffffffff808211156110ce57600080fd5b6110da36838701610f4b565b604084015260608501359150808211156110f357600080fd5b6110ff36838701610f4b565b6060840152608085013591508082111561111857600080fd5b5061112536828601610fd9565b60808301525092915050565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261116060e0860182610d25565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087840301606088015261119b8383610d25565b6040890151888203830160808a01528051808352908601945060009350908501905b808410156111fc578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906111bd565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506112388187610d25565b9a9950505050505050505050565b60006020828403121561125857600080fd5b5051919050565b808201808211156103f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a",
}
var PingPongDemoABI = PingPongDemoMetaData.ABI
@@ -250,6 +250,28 @@ func (_PingPongDemo *PingPongDemoCallerSession) GetFeeToken() (common.Address, e
return _PingPongDemo.Contract.GetFeeToken(&_PingPongDemo.CallOpts)
}
+func (_PingPongDemo *PingPongDemoCaller) GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) {
+ var out []interface{}
+ err := _PingPongDemo.contract.Call(opts, &out, "getOutOfOrderExecution")
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+func (_PingPongDemo *PingPongDemoSession) GetOutOfOrderExecution() (bool, error) {
+ return _PingPongDemo.Contract.GetOutOfOrderExecution(&_PingPongDemo.CallOpts)
+}
+
+func (_PingPongDemo *PingPongDemoCallerSession) GetOutOfOrderExecution() (bool, error) {
+ return _PingPongDemo.Contract.GetOutOfOrderExecution(&_PingPongDemo.CallOpts)
+}
+
func (_PingPongDemo *PingPongDemoCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
err := _PingPongDemo.contract.Call(opts, &out, "getRouter")
@@ -420,6 +442,18 @@ func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartChainSelector(
return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector)
}
+func (_PingPongDemo *PingPongDemoTransactor) SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) {
+ return _PingPongDemo.contract.Transact(opts, "setOutOfOrderExecution", outOfOrderExecution)
+}
+
+func (_PingPongDemo *PingPongDemoSession) SetOutOfOrderExecution(outOfOrderExecution bool) (*types.Transaction, error) {
+ return _PingPongDemo.Contract.SetOutOfOrderExecution(&_PingPongDemo.TransactOpts, outOfOrderExecution)
+}
+
+func (_PingPongDemo *PingPongDemoTransactorSession) SetOutOfOrderExecution(outOfOrderExecution bool) (*types.Transaction, error) {
+ return _PingPongDemo.Contract.SetOutOfOrderExecution(&_PingPongDemo.TransactOpts, outOfOrderExecution)
+}
+
func (_PingPongDemo *PingPongDemoTransactor) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) {
return _PingPongDemo.contract.Transact(opts, "setPaused", pause)
}
@@ -456,6 +490,123 @@ func (_PingPongDemo *PingPongDemoTransactorSession) TransferOwnership(to common.
return _PingPongDemo.Contract.TransferOwnership(&_PingPongDemo.TransactOpts, to)
}
+type PingPongDemoOutOfOrderExecutionChangeIterator struct {
+ Event *PingPongDemoOutOfOrderExecutionChange
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(PingPongDemoOutOfOrderExecutionChange)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(PingPongDemoOutOfOrderExecutionChange)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Error() error {
+ return it.fail
+}
+
+func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type PingPongDemoOutOfOrderExecutionChange struct {
+ IsOutOfOrder bool
+ Raw types.Log
+}
+
+func (_PingPongDemo *PingPongDemoFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error) {
+
+ logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OutOfOrderExecutionChange")
+ if err != nil {
+ return nil, err
+ }
+ return &PingPongDemoOutOfOrderExecutionChangeIterator{contract: _PingPongDemo.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil
+}
+
+func (_PingPongDemo *PingPongDemoFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error) {
+
+ logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OutOfOrderExecutionChange")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(PingPongDemoOutOfOrderExecutionChange)
+ if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_PingPongDemo *PingPongDemoFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*PingPongDemoOutOfOrderExecutionChange, error) {
+ event := new(PingPongDemoOutOfOrderExecutionChange)
+ if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
type PingPongDemoOwnershipTransferRequestedIterator struct {
Event *PingPongDemoOwnershipTransferRequested
@@ -964,6 +1115,8 @@ func (_PingPongDemo *PingPongDemoFilterer) ParsePong(log types.Log) (*PingPongDe
func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, error) {
switch log.Topics[0] {
+ case _PingPongDemo.abi.Events["OutOfOrderExecutionChange"].ID:
+ return _PingPongDemo.ParseOutOfOrderExecutionChange(log)
case _PingPongDemo.abi.Events["OwnershipTransferRequested"].ID:
return _PingPongDemo.ParseOwnershipTransferRequested(log)
case _PingPongDemo.abi.Events["OwnershipTransferred"].ID:
@@ -978,6 +1131,10 @@ func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog,
}
}
+func (PingPongDemoOutOfOrderExecutionChange) Topic() common.Hash {
+ return common.HexToHash("0x05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd9")
+}
+
func (PingPongDemoOwnershipTransferRequested) Topic() common.Hash {
return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
}
@@ -1005,6 +1162,8 @@ type PingPongDemoInterface interface {
GetFeeToken(opts *bind.CallOpts) (common.Address, error)
+ GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error)
+
GetRouter(opts *bind.CallOpts) (common.Address, error)
IsPaused(opts *bind.CallOpts) (bool, error)
@@ -1025,12 +1184,20 @@ type PingPongDemoInterface interface {
SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error)
+ SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error)
+
SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error)
StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error)
TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error)
+ FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error)
+
+ WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error)
+
+ ParseOutOfOrderExecutionChange(log types.Log) (*PingPongDemoOutOfOrderExecutionChange, error)
+
FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error)
WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
diff --git a/core/gethwrappers/ccip/generated/report_codec/report_codec.go b/core/gethwrappers/ccip/generated/report_codec/report_codec.go
index 1648ea9ba51..7afd3d9bbad 100644
--- a/core/gethwrappers/ccip/generated/report_codec/report_codec.go
+++ b/core/gethwrappers/ccip/generated/report_codec/report_codec.go
@@ -30,22 +30,6 @@ var (
_ = abi.ConvertType
)
-type EVM2EVMMultiOffRampCommitReport struct {
- PriceUpdates InternalPriceUpdates
- MerkleRoots []EVM2EVMMultiOffRampMerkleRoot
-}
-
-type EVM2EVMMultiOffRampInterval struct {
- Min uint64
- Max uint64
-}
-
-type EVM2EVMMultiOffRampMerkleRoot struct {
- SourceChainSelector uint64
- Interval EVM2EVMMultiOffRampInterval
- MerkleRoot [32]byte
-}
-
type InternalAny2EVMRampMessage struct {
Header InternalRampMessageHeader
Sender []byte
@@ -93,8 +77,24 @@ type InternalTokenPriceUpdate struct {
UsdPerToken *big.Int
}
+type OffRampCommitReport struct {
+ PriceUpdates InternalPriceUpdates
+ MerkleRoots []OffRampMerkleRoot
+}
+
+type OffRampInterval struct {
+ Min uint64
+ Max uint64
+}
+
+type OffRampMerkleRoot struct {
+ SourceChainSelector uint64
+ Interval OffRampInterval
+ MerkleRoot [32]byte
+}
+
var ReportCodecMetaData = &bind.MetaData{
- ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structEVM2EVMMultiOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
+ ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b5061124f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e61004936600461024f565b610084565b60405161005b91906104f5565b60405180910390f35b61007761007236600461024f565b6100a0565b60405161005b91906107ae565b60608180602001905181019061009a9190610dc3565b92915050565b604080516080810182526060918101828152828201839052815260208101919091528180602001905181019061009a91906110d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610128576101286100d6565b60405290565b6040516080810167ffffffffffffffff81118282101715610128576101286100d6565b60405160c0810167ffffffffffffffff81118282101715610128576101286100d6565b6040805190810167ffffffffffffffff81118282101715610128576101286100d6565b6040516060810167ffffffffffffffff81118282101715610128576101286100d6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610201576102016100d6565b604052919050565b600067ffffffffffffffff821115610223576102236100d6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561026157600080fd5b813567ffffffffffffffff81111561027857600080fd5b8201601f8101841361028957600080fd5b803561029c61029782610209565b6101ba565b8181528560208385010111156102b157600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102ea5781810151838201526020016102d2565b50506000910152565b6000815180845261030b8160208601602086016102cf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301895281516080815181865261039e828701826102f3565b91505085820151858203878701526103b682826102f3565b915050604080830151868303828801526103d083826102f3565b606094850151979094019690965250509884019892509083019060010161035a565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104aa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561049357858a83030184526104818286516102f3565b948c0194938c01939150600101610467565b509e8a019e9750505093870193505060010161041f565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104ea578151875295820195908201906001016104ce565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b81811015610686577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a08901526106096101408901826102f3565b9050604082015188820360c08a015261062282826102f3565b915050606082015161064c60e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a08201519150878103610120890152610672818361033d565b97505050928c0192918c0191600101610589565b5050505050604082015187820360408901526106a282826103ff565b915050606082015187820360608901526106bc82826104b9565b6080938401519890930197909752509450928501929085019060010161051c565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104ea578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1683880152604090960195908201906001016106ff565b600081518084526020808501945080840160005b838110156104ea578151805167ffffffffffffffff90811689528482015180518216868b0152850151166040808a01919091520151606088015260809096019590820190600101610762565b6000602080835283516040808386015260a0850182516040606088015281815180845260c0890191508683019350600092505b8083101561083e578351805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16878301529286019260019290920191908401906107e1565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160808901529361087881866106ea565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526108b8818361074e565b95945050505050565b600067ffffffffffffffff8211156108db576108db6100d6565b5060051b60200190565b805167ffffffffffffffff811681146108fd57600080fd5b919050565b600060a0828403121561091457600080fd5b61091c610105565b90508151815261092e602083016108e5565b602082015261093f604083016108e5565b6040820152610950606083016108e5565b6060820152610961608083016108e5565b608082015292915050565b600082601f83011261097d57600080fd5b815161098b61029782610209565b8181528460208386010111156109a057600080fd5b6109b18260208301602087016102cf565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff811681146108fd57600080fd5b600082601f8301126109ee57600080fd5b815160206109fe610297836108c1565b82815260059290921b84018101918181019086841115610a1d57600080fd5b8286015b84811015610b1157805167ffffffffffffffff80821115610a425760008081fd5b81890191506080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610a7b5760008081fd5b610a8361012e565b8784015183811115610a955760008081fd5b610aa38d8a8388010161096c565b82525060408085015184811115610aba5760008081fd5b610ac88e8b8389010161096c565b8a8401525060608086015185811115610ae15760008081fd5b610aef8f8c838a010161096c565b9284019290925294909201519381019390935250508352918301918301610a21565b509695505050505050565b600082601f830112610b2d57600080fd5b81516020610b3d610297836108c1565b82815260059290921b84018101918181019086841115610b5c57600080fd5b8286015b84811015610b1157805167ffffffffffffffff80821115610b815760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610bbb5760008081fd5b610bc3610151565b610bcf8c898601610902565b815260c084015183811115610be45760008081fd5b610bf28d8a8388010161096c565b898301525060e084015183811115610c0a5760008081fd5b610c188d8a8388010161096c565b604083015250610c2b61010085016109b9565b60608201526101208401516080820152908301519082821115610c4e5760008081fd5b610c5c8c89848701016109dd565b60a08201528652505050918301918301610b60565b600082601f830112610c8257600080fd5b81516020610c92610297836108c1565b82815260059290921b84018101918181019086841115610cb157600080fd5b8286015b84811015610b1157805167ffffffffffffffff80821115610cd557600080fd5b818901915089603f830112610ce957600080fd5b85820151610cf9610297826108c1565b81815260059190911b830160400190878101908c831115610d1957600080fd5b604085015b83811015610d5257805185811115610d3557600080fd5b610d448f6040838a010161096c565b845250918901918901610d1e565b50875250505092840192508301610cb5565b600082601f830112610d7557600080fd5b81516020610d85610297836108c1565b8083825260208201915060208460051b870101935086841115610da757600080fd5b602086015b84811015610b115780518352918301918301610dac565b60006020808385031215610dd657600080fd5b825167ffffffffffffffff80821115610dee57600080fd5b818501915085601f830112610e0257600080fd5b8151610e10610297826108c1565b81815260059190911b83018401908481019088831115610e2f57600080fd5b8585015b83811015610f2957805185811115610e4a57600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610e7f5760008081fd5b610e87610105565b610e928983016108e5565b815260408083015188811115610ea85760008081fd5b610eb68e8c83870101610b1c565b8b8401525060608084015189811115610ecf5760008081fd5b610edd8f8d83880101610c71565b8385015250608091508184015189811115610ef85760008081fd5b610f068f8d83880101610d64565b918401919091525060a09290920151918101919091528352918601918601610e33565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146108fd57600080fd5b600082601f830112610f7357600080fd5b81516020610f83610297836108c1565b82815260069290921b84018101918181019086841115610fa257600080fd5b8286015b84811015610b115760408189031215610fbf5760008081fd5b610fc7610174565b610fd0826108e5565b8152610fdd858301610f36565b81860152835291830191604001610fa6565b600082601f83011261100057600080fd5b81516020611010610297836108c1565b82815260079290921b8401810191818101908684111561102f57600080fd5b8286015b84811015610b1157808803608081121561104d5760008081fd5b611055610197565b61105e836108e5565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840112156110925760008081fd5b61109a610174565b92506110a78785016108e5565b83526110b48185016108e5565b8388015281870192909252606083015191810191909152835291830191608001611033565b600060208083850312156110ec57600080fd5b825167ffffffffffffffff8082111561110457600080fd5b8185019150604080838803121561111a57600080fd5b611122610174565b83518381111561113157600080fd5b84016040818a03121561114357600080fd5b61114b610174565b81518581111561115a57600080fd5b8201601f81018b1361116b57600080fd5b8051611179610297826108c1565b81815260069190911b8201890190898101908d83111561119857600080fd5b928a01925b828410156111e65787848f0312156111b55760008081fd5b6111bd610174565b6111c6856109b9565b81526111d38c8601610f36565b818d0152825292870192908a019061119d565b8452505050818701519350848411156111fe57600080fd5b61120a8a858401610f62565b818801528252508385015191508282111561122457600080fd5b61123088838601610fef565b8582015280955050505050509291505056fea164736f6c6343000818000a",
}
@@ -234,25 +234,25 @@ func (_ReportCodec *ReportCodecTransactorRaw) Transact(opts *bind.TransactOpts,
return _ReportCodec.Contract.contract.Transact(opts, method, params...)
}
-func (_ReportCodec *ReportCodecCaller) DecodeCommitReport(opts *bind.CallOpts, report []byte) (EVM2EVMMultiOffRampCommitReport, error) {
+func (_ReportCodec *ReportCodecCaller) DecodeCommitReport(opts *bind.CallOpts, report []byte) (OffRampCommitReport, error) {
var out []interface{}
err := _ReportCodec.contract.Call(opts, &out, "decodeCommitReport", report)
if err != nil {
- return *new(EVM2EVMMultiOffRampCommitReport), err
+ return *new(OffRampCommitReport), err
}
- out0 := *abi.ConvertType(out[0], new(EVM2EVMMultiOffRampCommitReport)).(*EVM2EVMMultiOffRampCommitReport)
+ out0 := *abi.ConvertType(out[0], new(OffRampCommitReport)).(*OffRampCommitReport)
return out0, err
}
-func (_ReportCodec *ReportCodecSession) DecodeCommitReport(report []byte) (EVM2EVMMultiOffRampCommitReport, error) {
+func (_ReportCodec *ReportCodecSession) DecodeCommitReport(report []byte) (OffRampCommitReport, error) {
return _ReportCodec.Contract.DecodeCommitReport(&_ReportCodec.CallOpts, report)
}
-func (_ReportCodec *ReportCodecCallerSession) DecodeCommitReport(report []byte) (EVM2EVMMultiOffRampCommitReport, error) {
+func (_ReportCodec *ReportCodecCallerSession) DecodeCommitReport(report []byte) (OffRampCommitReport, error) {
return _ReportCodec.Contract.DecodeCommitReport(&_ReportCodec.CallOpts, report)
}
@@ -339,7 +339,7 @@ func (it *ReportCodecCommitReportDecodedIterator) Close() error {
}
type ReportCodecCommitReportDecoded struct {
- Report EVM2EVMMultiOffRampCommitReport
+ Report OffRampCommitReport
Raw types.Log
}
@@ -537,7 +537,7 @@ func (_ReportCodec *ReportCodec) Address() common.Address {
}
type ReportCodecInterface interface {
- DecodeCommitReport(opts *bind.CallOpts, report []byte) (EVM2EVMMultiOffRampCommitReport, error)
+ DecodeCommitReport(opts *bind.CallOpts, report []byte) (OffRampCommitReport, error)
DecodeExecuteReport(opts *bind.CallOpts, report []byte) ([]InternalExecutionReportSingleChain, error)
diff --git a/core/gethwrappers/ccip/generated/arm_contract/arm_contract.go b/core/gethwrappers/ccip/generated/rmn_contract/rmn_contract.go
similarity index 75%
rename from core/gethwrappers/ccip/generated/arm_contract/arm_contract.go
rename to core/gethwrappers/ccip/generated/rmn_contract/rmn_contract.go
index 6e225576c17..e314f0243a9 100644
--- a/core/gethwrappers/ccip/generated/arm_contract/arm_contract.go
+++ b/core/gethwrappers/ccip/generated/rmn_contract/rmn_contract.go
@@ -1,7 +1,7 @@
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
-package arm_contract
+package rmn_contract
import (
"errors"
@@ -68,17 +68,17 @@ type RMNVoter struct {
CurseWeight uint8
}
-var ARMContractMetaData = &bind.MetaData{
+var RMNContractMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"blessVoteAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"blessWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"curseWeight\",\"type\":\"uint8\"}],\"internalType\":\"structRMN.Voter[]\",\"name\":\"voters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"blessWeightThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"curseWeightThreshold\",\"type\":\"uint16\"}],\"internalType\":\"structRMN.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"bytes16\",\"name\":\"curseId\",\"type\":\"bytes16\"}],\"name\":\"ReusedCurseId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SubjectsMustBeStrictlyIncreasing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"UnauthorizedVoter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnvoteToCurseNoop\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteToBlessForbiddenDuringActiveGlobalCurse\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteToBlessNoop\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteToCurseNoop\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"}],\"name\":\"AlreadyBlessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"}],\"name\":\"AlreadyVotedToBless\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"blessVoteAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"blessWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"curseWeight\",\"type\":\"uint8\"}],\"internalType\":\"structRMN.Voter[]\",\"name\":\"voters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"blessWeightThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"curseWeightThreshold\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"structRMN.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"CurseLifted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"blockTimestamp\",\"type\":\"uint64\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"}],\"name\":\"PermaBlessedCommitStoreAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"}],\"name\":\"PermaBlessedCommitStoreRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"indexed\":false,\"internalType\":\"bytes28\",\"name\":\"onchainCursesHash\",\"type\":\"bytes28\"},{\"indexed\":false,\"internalType\":\"bytes28\",\"name\":\"cursesHash\",\"type\":\"bytes28\"}],\"name\":\"SkippedUnvoteToCurse\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"wasBlessed\",\"type\":\"bool\"}],\"name\":\"TaggedRootBlessVotesReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"accumulatedWeight\",\"type\":\"uint16\"}],\"name\":\"TaggedRootBlessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes28\",\"name\":\"cursesHash\",\"type\":\"bytes28\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"remainingAccumulatedWeight\",\"type\":\"uint16\"}],\"name\":\"UnvotedToCurse\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"name\":\"VotedToBless\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"configVersion\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"indexed\":false,\"internalType\":\"bytes16\",\"name\":\"curseId\",\"type\":\"bytes16\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"blockTimestamp\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes28\",\"name\":\"cursesHash\",\"type\":\"bytes28\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"accumulatedWeight\",\"type\":\"uint16\"}],\"name\":\"VotedToCurse\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"}],\"name\":\"getBlessProgress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"blessVoteAddrs\",\"type\":\"address[]\"},{\"internalType\":\"uint16\",\"name\":\"accumulatedWeight\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"blessed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"blessVoteAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"blessWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"curseWeight\",\"type\":\"uint8\"}],\"internalType\":\"structRMN.Voter[]\",\"name\":\"voters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"blessWeightThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"curseWeightThreshold\",\"type\":\"uint16\"}],\"internalType\":\"structRMN.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"getCurseProgress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"curseVoteAddrs\",\"type\":\"address[]\"},{\"internalType\":\"bytes28[]\",\"name\":\"cursesHashes\",\"type\":\"bytes28[]\"},{\"internalType\":\"uint16\",\"name\":\"accumulatedWeight\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"cursed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjectsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermaBlessedCommitStores\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"getRecordedCurseRelatedOps\",\"outputs\":[{\"components\":[{\"internalType\":\"enumRMN.RecordedCurseRelatedOpTag\",\"name\":\"tag\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"blockTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"cursed\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"internalType\":\"bytes16\",\"name\":\"curseId\",\"type\":\"bytes16\"}],\"internalType\":\"structRMN.RecordedCurseRelatedOp[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecordedCurseRelatedOpsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMN.TaggedRoot\",\"name\":\"taggedRoot\",\"type\":\"tuple\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"curseId\",\"type\":\"bytes16\"},{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"ownerCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"ownerRemoveThenAddPermaBlessedCommitStores\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMN.TaggedRoot[]\",\"name\":\"taggedRoots\",\"type\":\"tuple[]\"}],\"name\":\"ownerResetBlessVotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"internalType\":\"bytes28\",\"name\":\"cursesHash\",\"type\":\"bytes28\"}],\"internalType\":\"structRMN.UnvoteToCurseRequest\",\"name\":\"unit\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"forceUnvote\",\"type\":\"bool\"}],\"internalType\":\"structRMN.OwnerUnvoteToCurseRequest[]\",\"name\":\"ownerUnvoteToCurseRequests\",\"type\":\"tuple[]\"}],\"name\":\"ownerUnvoteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"blessVoteAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"curseVoteAddr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"blessWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"curseWeight\",\"type\":\"uint8\"}],\"internalType\":\"structRMN.Voter[]\",\"name\":\"voters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"blessWeightThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"curseWeightThreshold\",\"type\":\"uint16\"}],\"internalType\":\"structRMN.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"},{\"internalType\":\"bytes28\",\"name\":\"cursesHash\",\"type\":\"bytes28\"}],\"internalType\":\"structRMN.UnvoteToCurseRequest[]\",\"name\":\"unvoteToCurseRequests\",\"type\":\"tuple[]\"}],\"name\":\"unvoteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMN.TaggedRoot[]\",\"name\":\"taggedRoots\",\"type\":\"tuple[]\"}],\"name\":\"voteToBless\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"curseId\",\"type\":\"bytes16\"},{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"voteToCurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
Bin: "0x60806040523480156200001157600080fd5b506040516200596238038062005962833981016040819052620000349162000aff565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be8162000138565b505060408051608081018252600080825260208201819052918101919091526001600160c81b03606082015290506001620000fb81601062000c7d565b82606001516001600160c81b0316901c6001600160c81b0316101562000125576200012562000c99565b506200013181620001e3565b5062000e14565b336001600160a01b03821603620001925760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b620001ee816200071d565b6200020c576040516306b7c75960e31b815260040160405180910390fd5b602081015160038054604084015161ffff908116620100000263ffffffff199092169316929092179190911790555b60025415620003465760028054600091906200025a9060019062000c7d565b815481106200026d576200026d62000caf565b6000918252602080832060408051608081018252600294850290920180546001600160a01b0390811680855260019092015480821685870190815260ff600160a01b8304811687870152600160a81b909204909116606086015291875260058552828720805465ffffffffffff19169055905116855260099092529220805461ffff191690558054919250908062000309576200030962000cc5565b60008281526020902060026000199092019182020180546001600160a01b031916815560010180546001600160b01b03191690559055506200023b565b60005b81515181101562000403578151805160029190839081106200036f576200036f62000caf565b602090810291909101810151825460018181018555600094855293839020825160029092020180546001600160a01b039283166001600160a01b0319909116178155928201519284018054604084015160609094015160ff908116600160a81b0260ff60a81b1991909516600160a01b026001600160a81b0319909216959093169490941793909317161790550162000349565b50600480546000906200041c9063ffffffff1662000cdb565b82546101009290920a63ffffffff8181021990931691831602179091556004541660005b82515160ff821610156200054157600083600001518260ff16815181106200046c576200046c62000caf565b602090810291909101810151604080516060808201835263ffffffff80891683528385015160ff90811684880190815289821685870190815287516001600160a01b03908116600090815260058b5288812097518854945193518616650100000000000260ff60281b199487166401000000000264ffffffffff1990961691909716179390931791909116939093179094558587015190911683526009909552919020805491909201519092166101000261ffff1990921691909117600117905550620005398162000d01565b905062000440565b506001600160a01b0360005260096020527f3bddde647ecb7992f4c710d4e1d59d07614508581f7c22c879a79d28544538a7805461ffff191660011790556004805463ffffffff4381166401000000000263ffffffff60201b1990921691909117909155604051908216907f8c49fda8177c5c8c768eb39634bc6773695c7181711537b822451c12b2efd2a990620005db90859062000d23565b60405180910390a26040805160c08101825260048082526001600160401b03421660208301526000928201839052606082018390526080820183905260a08201839052600c80546001808201835591909452825160029094027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7018054939490939092849260ff19909216919084908111156200067c576200067c62000dce565b021790555060208201518154604084015160608501516001600160a01b03166a010000000000000000000002600160501b600160f01b031991151569010000000000000000000260ff60481b196001600160401b039095166101000294909416610100600160501b031990931692909217929092179190911617815560808083015160a090930151811c600160801b0292901c919091176001909101555050565b80515160009015806200073257508151516010105b80620007445750602082015161ffff16155b80620007565750604082015161ffff16155b156200076457506000919050565b600080600084600001515160026200077d919062000de4565b6001600160401b0381111562000797576200079762000a24565b604051908082528060200260200182016040528015620007c1578160200160208202803683370190505b50905060005b8551518110156200095457600086600001518281518110620007ed57620007ed62000caf565b6020026020010151905060006001600160a01b031681600001516001600160a01b0316148062000828575060208101516001600160a01b0316155b806200083f575060208101516001600160a01b0316155b8062000858575060208101516001600160a01b03908116145b806200087a5750604081015160ff161580156200087a5750606081015160ff16155b156200088d575060009695505050505050565b8051836200089d84600262000de4565b620008aa90600062000dfe565b81518110620008bd57620008bd62000caf565b6001600160a01b0390921660209283029190910182015281015183620008e584600262000de4565b620008f290600162000dfe565b8151811062000905576200090562000caf565b6001600160a01b03909216602092830291909101909101526040810151620009319060ff168662000dfe565b9450806060015160ff168462000948919062000dfe565b935050600101620007c7565b5060005b8151811015620009f957600082828151811062000979576200097962000caf565b60200260200101519050600082600162000994919062000dfe565b90505b8351811015620009ee57838181518110620009b657620009b662000caf565b60200260200101516001600160a01b0316826001600160a01b031603620009e557506000979650505050505050565b60010162000997565b505060010162000958565b50846020015161ffff16831015801562000a1b5750846040015161ffff168210155b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562000a5f5762000a5f62000a24565b60405290565b604051608081016001600160401b038111828210171562000a5f5762000a5f62000a24565b604051601f8201601f191681016001600160401b038111828210171562000ab55762000ab562000a24565b604052919050565b80516001600160a01b038116811462000ad557600080fd5b919050565b805160ff8116811462000ad557600080fd5b805161ffff8116811462000ad557600080fd5b6000602080838503121562000b1357600080fd5b82516001600160401b038082111562000b2b57600080fd5b8185019150606080838803121562000b4257600080fd5b62000b4c62000a3a565b83518381111562000b5c57600080fd5b8401601f8101891362000b6e57600080fd5b80518481111562000b835762000b8362000a24565b62000b93878260051b0162000a8a565b818152878101955060079190911b82018701908a82111562000bb457600080fd5b918701915b8183101562000c33576080838c03121562000bd45760008081fd5b62000bde62000a65565b62000be98462000abd565b815262000bf889850162000abd565b89820152604062000c0b81860162000ada565b9082015262000c1c84870162000ada565b818701528652948701946080929092019162000bb9565b83525062000c45905084860162000aec565b8582015262000c576040850162000aec565b6040820152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000c935762000c9362000c67565b92915050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600063ffffffff80831681810362000cf75762000cf762000c67565b6001019392505050565b600060ff821660ff810362000d1a5762000d1a62000c67565b60010192915050565b60006020808352608080840185516060808588015282825180855260a0890191508684019450600093505b8084101562000da157845180516001600160a01b03908116845288820151168884015260408082015160ff9081169185019190915290840151168383015293860193600193909301929085019062000d4e565b509488015161ffff8116604089015294604089015161ffff811660608a0152955098975050505050505050565b634e487b7160e01b600052602160045260246000fd5b808202811582820484141762000c935762000c9362000c67565b8082018082111562000c935762000c9362000c67565b614b3e8062000e246000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063631ec73e116100d8578063979986111161008c578063d927f26711610066578063d927f26714610354578063f2fde38b14610374578063f33f28951461038757600080fd5b8063979986111461030b578063ba86a1f01461031e578063bd147ef41461033157600080fd5b806379ba5097116100bd57806379ba5097146102d35780638da5cb5b146102db578063970b8fc21461030357600080fd5b8063631ec73e146102ad5780636ba0526d146102c057600080fd5b8063397796f71161013a5780634102e4f4116101145780634102e4f4146102745780634d61677114610287578063586abe3c1461029a57600080fd5b8063397796f7146102425780633d0cf6101461024a5780633f42ab731461025d57600080fd5b8063181f5a771161016b578063181f5a77146101ba5780632cbc26bb14610203578063328d716c1461022657600080fd5b80630b009be21461018757806315c65588146101a5575b600080fd5b61018f6103a9565b60405161019c9190613e3f565b60405180910390f35b6101b86101b3366004613fdd565b6103ba565b005b6101f66040518060400160405280600981526020017f524d4e20312e352e30000000000000000000000000000000000000000000000081525081565b60405161019c9190614083565b6102166102113660046140f0565b6104e6565b604051901515815260200161019c565b600b5467ffffffffffffffff165b60405190815260200161019c565b6102166105b1565b6101b86102583660046141a0565b61068b565b6102656107ff565b60405161019c939291906142b3565b6101b86102823660046142ff565b610929565b610216610295366004614439565b61093d565b6101b86102a8366004614451565b6109cd565b6101b86102bb3660046144fc565b610a87565b6101b86102ce366004614451565b610ca0565b6101b8610d13565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b600c54610234565b6101b86103193660046145d0565b610e10565b6101b861032c3660046145d0565b611368565b61034461033f3660046140f0565b61150d565b60405161019c9493929190614645565b6103676103623660046146b6565b611946565b60405161019c9190614707565b6101b8610382366004614800565b611b68565b61039a610395366004614439565b611b79565b60405161019c9392919061481b565b60606103b56007611de1565b905090565b336000818152600960205260409020805460ff16610421576040517f85412e7f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b60045463ffffffff166000805b85518110156104a757600086828151811061044b5761044b614849565b602002602001015190506000610465858360000151611df5565b905060008061047b6001888b8760008d89611fd6565b91509150801561048d5761048d614878565b85806104965750815b95505050505080600101905061042e565b50806104df576040517ffb106b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600b5460009067ffffffffffffffff16810361050457506000919050565b7f0100000000000000000000000000000100000000000000000000000000000000600052600a6020527fcf943f0e419056430919a3fdfd72276bc0b123ebdd670f4152b82bffbfb8bb385468010000000000000000900460ff16806105a657507fffffffffffffffffffffffffffffffff0000000000000000000000000000000082166000908152600a602052604090205468010000000000000000900460ff165b92915050565b919050565b600b5460009067ffffffffffffffff1681036105cd5750600090565b7f0100000000000000000000000000000100000000000000000000000000000000600052600a6020527fcf943f0e419056430919a3fdfd72276bc0b123ebdd670f4152b82bffbfb8bb385468010000000000000000900460ff16806103b55750507f0100000000000000000000000000000000000000000000000000000000000000600052600a6020527f1d4cd6d2639449a552dbfb463b59316946d78c518b3170daa4a4c217bef019ba5468010000000000000000900460ff1690565b6106936126a4565b60005b8251811015610746576106cc8382815181106106b4576106b4614849565b6020026020010151600761272790919063ffffffff16565b1561073e577fdca892154bbc36d0c05ccd01b3d0411875cb1b841fcdeebb384e5d0d6eb06b4483828151811061070457610704614849565b6020026020010151604051610735919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60405180910390a15b600101610696565b5060005b81518110156107fa5761078082828151811061076857610768614849565b6020026020010151600761274990919063ffffffff16565b156107f2577f66b4b4752c65ae8cd2f3a0a48c7dc8b2118c60d5ea15514992eb2ddf56c9cb158282815181106107b8576107b8614849565b60200260200101516040516107e9919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60405180910390a15b60010161074a565b505050565b6040805160608082018352808252600060208084018290528385018290526004548551600280549384028201608090810190985294810183815263ffffffff808416986401000000009094041696959194919385939192859285015b828210156108f95760008481526020908190206040805160808101825260028602909201805473ffffffffffffffffffffffffffffffffffffffff90811684526001918201549081168486015260ff740100000000000000000000000000000000000000008204811693850193909352750100000000000000000000000000000000000000000090049091166060830152908352909201910161085b565b505050908252506001919091015461ffff8082166020840152620100009091041660409091015292939192919050565b6109316126a4565b61093a8161276b565b50565b600060068161099b610954368690038601866148a7565b80516020918201516040805173ffffffffffffffffffffffffffffffffffffffff909316838501528281019190915280518083038201815260609092019052805191012090565b815260208101919091526040016000205460ff16806105a657506105a66109c56020840184614800565b600790612eef565b337fffffffffffffffffffffffff000000000000000000000000000000000000000181016109fd576109fd614878565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600960205260409020805460ff16610a75576040517f85412e7f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610418565b610a8182858584612f1e565b50505050565b610a8f6126a4565b600454600090819063ffffffff16815b8451811015610b66576000858281518110610abc57610abc614849565b602002602001015190506000610ada84836020015160000151611df5565b9050600080610b3d600087866000015187602001518860400151600960008b6000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002089611fd6565b915091508680610b4a5750815b96508780610b555750805b975050505050806001019050610a9f565b508215610c615760408051600280546080602082028401810190945260608301818152610c61948492849160009085015b82821015610c355760008481526020908190206040805160808101825260028602909201805473ffffffffffffffffffffffffffffffffffffffff90811684526001918201549081168486015260ff7401000000000000000000000000000000000000000082048116938501939093527501000000000000000000000000000000000000000000900490911660608301529083529092019101610b97565b505050908252506001919091015461ffff8082166020840152620100009091041660409091015261276b565b8180610c6a5750825b610a81576040517ffb106b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca86126a4565b73ffffffffffffffffffffffffffffffffffffffff60005260096020527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f3bddde647ecb7992f4c710d4e1d59d07614508581f7c22c879a79d28544538a7610a8182858584612f1e565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610418565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e397f01000000000000000000000000000001000000000000000000000000000000006104e6565b15610e70576040517fcde2d97c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600454336000908152600560209081526040918290208251606081018452905463ffffffff81811680845260ff64010000000084048116958501959095526501000000000090920490931693820193909352921691908214610f00576040517f85412e7f000000000000000000000000000000000000000000000000000000008152336004820152602401610418565b600160005b8481101561132f576000868683818110610f2157610f21614849565b905060400201803603810190610f3791906148a7565b90506000610f868280516020918201516040805173ffffffffffffffffffffffffffffffffffffffff909316838501528281019190915280518083038201815260609092019052805191012090565b6000818152600660209081526040918290208251608081018452905460ff81161580158352610100820463ffffffff169383019390935265010000000000810461ffff169382019390935267010000000000000090920478ffffffffffffffffffffffffffffffffffffffffffffffffff16606083015291925090611062573373ffffffffffffffffffffffffffffffffffffffff168763ffffffff167f274d6d5b916b0a53974b7ab86c844b97a2e03a60f658cd9a4b1c028b604d7bf18560405161105291906148e0565b60405180910390a3505050611327565b8663ffffffff16816020015163ffffffff16146110a8575060408051608081018252600080825263ffffffff89166020830152918101829052606081019190915261110c565b6110ba816060015187604001516136d6565b1561110c573373ffffffffffffffffffffffffffffffffffffffff168763ffffffff167f6dfbb745226fa630aeb1b9557d17d508ddb789a04f0cb873ec16e58beb8beead8560405161105291906148e0565b6000945061112281606001518760400151613718565b78ffffffffffffffffffffffffffffffffffffffffffffffffff166060820152602086015160408201805160ff9092169161115e90839061493c565b61ffff1690525060208681015160408051865173ffffffffffffffffffffffffffffffffffffffff168152868401519381019390935260ff9091168282015251339163ffffffff8a16917f2a08a2bd2798f0aae9a843f0f4ad4de488c1b3d5f04049940cfed736ad69fb979181900360600190a3600354604082015161ffff91821691161061125757600181526040808201518151855173ffffffffffffffffffffffffffffffffffffffff1681526020808701519082015261ffff90911681830152905163ffffffff8916917f8257378aa73bf8e4ada848713526584a3dcee0fd3db3beed7397f7a7f5067cc9919081900360600190a25b60009182526006602090815260409283902082518154928401519484015160609094015178ffffffffffffffffffffffffffffffffffffffffffffffffff166701000000000000000266ffffffffffffff61ffff90951665010000000000029490941664ffffffffff63ffffffff909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090941693909317179390931617179055505b600101610f05565b5080156104df576040517f604c767700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113706126a4565b60045463ffffffff1660005b82811015610a8157600084848381811061139857611398614849565b9050604002018036038101906113ae91906148a7565b905060006113fd8280516020918201516040805173ffffffffffffffffffffffffffffffffffffffff909316838501528281019190915280518083038201815260609092019052805191012090565b60008181526006602081815260408084208151608081018352815460ff811615158252610100810463ffffffff90811683870190815265010000000000830461ffff169584019590955267010000000000000090910478ffffffffffffffffffffffffffffffffffffffffffffffffff16606083015287875294909352939093558051925193945092878216911614806114945750805b156114fe5760408051855173ffffffffffffffffffffffffffffffffffffffff1681526020808701519082015282151581830152905163ffffffff8816917f7d15a6eebaa019ea7d5b7d38937c51ebd3befbfdf51bb630a694fd28635bbcba919081900360600190a25b5050505080600101905061137c565b600454604080516002805460806020820284018101909452606083810182815290958695600095869563ffffffff9093169486949193928492918491879085015b828210156115ec5760008481526020908190206040805160808101825260028602909201805473ffffffffffffffffffffffffffffffffffffffff90811684526001918201549081168486015260ff740100000000000000000000000000000000000000008204811693850193909352750100000000000000000000000000000000000000000090049091166060830152908352909201910161154e565b505050908252506001919091015461ffff80821660208085019190915262010000909204166040928301527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a166000908152600a909152908120805460ff6801000000000000000082041696509293509163ffffffff80861691161080156116725750845b6000965090508560015b60028111611939578451515b6000808760000151518310156116e35787518051849081106116ac576116ac614849565b6020026020010151602001519150876000015183815181106116d0576116d0614849565b602002602001015160600151905061170a565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b73ffffffffffffffffffffffffffffffffffffffff82166000908152600188016020908152604080832081518083019092525463ffffffff811682526401000000009004821b63ffffffff19169181019190915290878061177a57508a63ffffffff16826000015163ffffffff16145b8061179a575073ffffffffffffffffffffffffffffffffffffffff848116145b80156117b05750602082015163ffffffff191615155b9050801561186d57856001036117d0576117c987614957565b965061186d565b85600203610182576117e560ff84168e61493c565b9c506117f08761498f565b9650838f888151811061180557611805614849565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081602001518e888151811061185657611856614849565b63ffffffff19909216602092830291909101909101525b84156118835761187c8561498f565b945061188c565b50505050611895565b50505050611688565b81600103611928578267ffffffffffffffff8111156118b6576118b6613e52565b6040519080825280602002602001820160405280156118df578160200160208202803683370190505b509a508267ffffffffffffffff8111156118fb576118fb613e52565b604051908082528060200260200182016040528015611924578160200160208202803683370190505b5099505b5061193281614957565b905061167c565b5050505050509193509193565b600c5460609060009061195984866149c4565b11611965575081611988565b600c5484101561198457600c5461197d9085906149d7565b9050611988565b5060005b60008167ffffffffffffffff8111156119a3576119a3613e52565b604051908082528060200260200182016040528015611a2157816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816119c15790505b50905060005b82811015611b5f57600c611a3b82886149c4565b81548110611a4b57611a4b614849565b600091825260209091206040805160c081019091526002909202018054829060ff166004811115611a7e57611a7e6146d8565b6004811115611a8f57611a8f6146d8565b81528154610100810467ffffffffffffffff1660208301526901000000000000000000810460ff16151560408301526a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff166060820152600190910154608081811b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682850152700100000000000000000000000000000000909204901b1660a0909101528251839083908110611b4c57611b4c614849565b6020908102919091010152600101611a27565b50949350505050565b611b706126a4565b61093a8161373b565b606060008080611b91610954368790038701876148a7565b6000818152600660209081526040918290208251608081018452905460ff81161515808352610100820463ffffffff90811694840185905265010000000000830461ffff169584019590955267010000000000000090910478ffffffffffffffffffffffffffffffffffffffffffffffffff166060830152600454909650939450929091169003611dd85760408101516060820151909450611c3281613830565b60ff1667ffffffffffffffff811115611c4d57611c4d613e52565b604051908082528060200260200182016040528015611c76578160200160208202803683370190505b506002805460408051602080840282018101909252828152939950600093929190849084015b82821015611d3a5760008481526020908190206040805160808101825260028602909201805473ffffffffffffffffffffffffffffffffffffffff90811684526001918201549081168486015260ff7401000000000000000000000000000000000000000082048116938501939093527501000000000000000000000000000000000000000000900490911660608301529083529092019101611c9c565b5050505090506000805b82518160ff161015611dd357611d5a84826136d6565b15611dc357828160ff1681518110611d7457611d74614849565b602002602001015160000151898381518110611d9257611d92614849565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152611dc082614957565b91505b611dcc816149ea565b9050611d44565b505050505b50509193909250565b60606000611dee8361389f565b9392505050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166000908152600a60205260408120805463ffffffff858116911614611dee57805463ffffffff19811663ffffffff861690811783556003547fffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000909216176201000090910461ffff1664010000000002177fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1680825568010000000000000000900460ff1615611dee57600260005b8154811015611fcd576000826000018281548110611ee657611ee6614849565b6000918252602080832060016002909302018281015473ffffffffffffffffffffffffffffffffffffffff1684529187019052604090912080549192509063ffffffff808a169116108015611f4d57508054640100000000900460201b63ffffffff191615155b15611fc357805463ffffffff191663ffffffff891617815560018201548554750100000000000000000000000000000000000000000090910460ff16908690600690611fa89084906601000000000000900461ffff1661493c565b92506101000a81548161ffff021916908361ffff1602179055505b5050600101611ec6565b50509392505050565b6000806001896001811115611fed57611fed6146d8565b148061200a57506000896001811115612008576120086146d8565b145b61201657612016614878565b8480612037575073ffffffffffffffffffffffffffffffffffffffff878116145b80612056575073ffffffffffffffffffffffffffffffffffffffff8716155b1561207c57600089600181111561206f5761206f6146d8565b1461207c5761207c614878565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260018401602090815260409182902082518084019093525463ffffffff811683526401000000009004811b63ffffffff191690820152845460ff16801561210d575073ffffffffffffffffffffffffffffffffffffffff888116148061210d57508863ffffffff16816000015163ffffffff16145b80156121235750602081015163ffffffff191615155b801561214b5750866020015163ffffffff1916816020015163ffffffff1916148061214b5750855b156122765773ffffffffffffffffffffffffffffffffffffffff881660009081526001858101602052604082209190915585548554919450610100900460ff169085906006906121aa9084906601000000000000900461ffff16614a09565b825461010092830a61ffff818102199092169282160291909117909255895188546020808d01518a54604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961686529590930460ff169184019190915263ffffffff1916828401526601000000000000900490921660608301525173ffffffffffffffffffffffffffffffffffffffff8b16925063ffffffff8c16917fa96a155bd67c927a6c056befbd979b78465e2b2f1276bf7d4e90a31d4f430aa8919081900360800190a35b6000808b600181111561228b5761228b6146d8565b1480156122b3575083806122b3575073ffffffffffffffffffffffffffffffffffffffff8916155b90508080156122cf5750845468010000000000000000900460ff165b80156122e157506122df856138fb565b155b156123b45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555600b80546001945060009061232a9067ffffffffffffffff16614a24565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f65d0e78c3625f0956f58610cf0fb157eaf627683258875ef29af2f71d25ac8fd88600001516040516123ab91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b60405180910390a15b83806123bd5750825b15612605576000808c60018111156123d7576123d76146d8565b036123f25787156123ea5750600361240f565b50600261240f565b60018c6001811115612406576124066146d8565b03610182575060015b600c6040518060c0016040528083600481111561242e5761242e6146d8565b81526020014267ffffffffffffffff168152885468010000000000000000900460ff16151560208083019190915273ffffffffffffffffffffffffffffffffffffffff8e1660408301528c517fffffffffffffffffffffffffffffffff00000000000000000000000000000000166060830152600060809092018290528354600180820186559483529120825160029092020180549293909283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911690836004811115612500576125006146d8565b0217905550602082015181546040840151606085015173ffffffffffffffffffffffffffffffffffffffff166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff9115156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff67ffffffffffffffff90951661010002949094167fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90931692909217929092179190911617815560808083015160a090930151811c7001000000000000000000000000000000000292901c9190911760019091015550612696565b8751602080840151818b0151604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516855263ffffffff1992831693850193909352169082015273ffffffffffffffffffffffffffffffffffffffff8a16907fbabb0d7099e6ca14a29fad2a2cfb4fda2bd30f97cb3c27e546174bfb4277c1cc9060600160405180910390a25b505097509795505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610418565b565b6000611dee8373ffffffffffffffffffffffffffffffffffffffff841661395c565b6000611dee8373ffffffffffffffffffffffffffffffffffffffff8416613a56565b61277481613aa5565b6127aa576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160038054604084015161ffff908116620100000263ffffffff199092169316929092179190911790555b6002541561298e5760028054600091906127f5906001906149d7565b8154811061280557612805614849565b60009182526020808320604080516080810182526002948502909201805473ffffffffffffffffffffffffffffffffffffffff90811680855260019092015480821685870190815260ff740100000000000000000000000000000000000000008304811687870152750100000000000000000000000000000000000000000090920490911660608601529187526005855282872080547fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000016905590511685526009909252922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690558054919250908061290457612904614a66565b60008281526020902060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019182020180547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010180547fffffffffffffffffffff000000000000000000000000000000000000000000001690559055506127d9565b60005b815151811015612ac1578151805160029190839081106129b3576129b3614849565b6020908102919091018101518254600181810185556000948552938390208251600290920201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116178155928201519284018054604084015160609094015160ff9081167501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9190951674010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009092169590931694909417939093171617905501612991565b5060048054600090612ad89063ffffffff16614a95565b82546101009290920a63ffffffff8181021990931691831602179091556004541660005b82515160ff82161015612c5557600083600001518260ff1681518110612b2457612b24614849565b602090810291909101810151604080516060808201835263ffffffff80891683528385015160ff908116848801908152898216858701908152875173ffffffffffffffffffffffffffffffffffffffff908116600090815260058b528881209751885494519351861665010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff948716640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009096169190971617939093179190911693909317909455858701519091168352600990955291902080549190920151909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921691909117600117905550612c4e816149ea565b9050612afc565b5073ffffffffffffffffffffffffffffffffffffffff60005260096020527f3bddde647ecb7992f4c710d4e1d59d07614508581f7c22c879a79d28544538a780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660011790556004805463ffffffff438116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90921691909117909155604051908216907f8c49fda8177c5c8c768eb39634bc6773695c7181711537b822451c12b2efd2a990612d2f908590614ab8565b60405180910390a26040805160c081018252600480825267ffffffffffffffff421660208301526000928201839052606082018390526080820183905260a08201839052600c80546001808201835591909452825160029094027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701805493949093909284927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691908490811115612dec57612dec6146d8565b0217905550602082015181546040840151606085015173ffffffffffffffffffffffffffffffffffffffff166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff9115156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff67ffffffffffffffff90951661010002949094167fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90931692909217929092179190911617815560808083015160a090930151811c7001000000000000000000000000000000000292901c919091176001909101555050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611dee565b8151600003612f59576040517f55e9b08b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600090815260018201602052604090205460ff1615613007576040517f078f340000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166024820152604401610418565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600090815260018281016020526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905560045463ffffffff16905b83518110156136ce57600181101580156130ed575083818151811061309657613096614849565b60200260200101516fffffffffffffffffffffffffffffffff1916846001836130bf91906149d7565b815181106130cf576130cf614849565b60200260200101516fffffffffffffffffffffffffffffffff191610155b15613124576040517f2432d8ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084828151811061313857613138614849565b60200260200101519050600061314e8483611df5565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600184016020908152604080832081518083019092525463ffffffff811682526401000000009004821b63ffffffff19169181019190915293945091148015906131be5750815163ffffffff8088169116105b806131d25750602082015163ffffffff1916155b15613225575085548254600091610100900460ff169084906006906132069084906601000000000000900461ffff1661493c565b92506101000a81548161ffff021916908361ffff16021790555061322c565b5060208101515b60408051808201825263ffffffff88168152815163ffffffff1984166020828101919091527fffffffffffffffffffffffffffffffff000000000000000000000000000000008d16828501528351808303850181526060909201909352805190830120909182019063ffffffff1916905273ffffffffffffffffffffffffffffffffffffffff8b166000818152600186016020908152604090912083518285015190921c6401000000000263ffffffff92831617905589549294509091908816907f8137bc8a8d712aaa27bfc6506d5566ac405618bd53f9831b8ca6b6fe5442ee7a9087908d9060ff610100909104166133234290565b6020898101518b54604080517fffffffffffffffffffffffffffffffff000000000000000000000000000000009889168152979096169287019290925260ff9093169385019390935267ffffffffffffffff16606084015263ffffffff191660808301526601000000000000900461ffff1660a082015260c00160405180910390a363ffffffff1981161580156133c85750825468010000000000000000900460ff16155b80156133d857506133d8836138fb565b156134c35782547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000178355600b80546000906134289067ffffffffffffffff16614acb565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508563ffffffff167fcfdbfd8ce9a56b5f7c202c0e102184d24f47ca87121dc165063fc4c290957bde8561347e4290565b604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000909316835267ffffffffffffffff90911660208301520160405180910390a25b6040805160c081018252600080825267ffffffffffffffff42166020830152855460ff680100000000000000009091041615159282019290925273ffffffffffffffffffffffffffffffffffffffff8c1660608201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000086811660808301528b1660a0820152600c80546001808201835591909352815160029093027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701805492939092909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908360048111156135c0576135c06146d8565b0217905550602082015181546040840151606085015173ffffffffffffffffffffffffffffffffffffffff166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff9115156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff67ffffffffffffffff90951661010002949094167fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90931692909217929092179190911617815560808083015160a090930151811c7001000000000000000000000000000000000292901c9190911760019182015594909401935061306f92505050565b505050505050565b600060108260ff16106136eb576136eb614878565b50600160ff82161b821678ffffffffffffffffffffffffffffffffffffffffffffffffff16151592915050565b600060108260ff161061372d5761372d614878565b50600160ff919091161b1790565b3373ffffffffffffffffffffffffffffffffffffffff8216036137ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610418565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006201000078ffffffffffffffffffffffffffffffffffffffffffffffffff83161061385f5761385f614878565b78ffffffffffffffffffffffffffffffffffffffffffffffffff8216156105ac5761388b600183614ae8565b90911690613898816149ea565b905061385f565b6060816000018054806020026020016040519081016040528092919081815260200182805480156138ef57602002820191906000526020600020905b8154815260200190600101908083116138db575b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff600090815260018201602090815260408220546401000000009004901b63ffffffff19161515806105a65750505461ffff64010000000082048116660100000000000090920416101590565b60008181526001830160205260408120548015613a455760006139806001836149d7565b8554909150600090613994906001906149d7565b90508082146139f95760008660000182815481106139b4576139b4614849565b90600052602060002001549050808760000184815481106139d7576139d7614849565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613a0a57613a0a614a66565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105a6565b60009150506105a6565b5092915050565b6000818152600183016020526040812054613a9d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105a6565b5060006105a6565b8051516000901580613ab957508151516010105b80613aca5750602082015161ffff16155b80613adb5750604082015161ffff16155b15613ae857506000919050565b60008060008460000151516002613aff9190614b1a565b67ffffffffffffffff811115613b1757613b17613e52565b604051908082528060200260200182016040528015613b40578160200160208202803683370190505b50905060005b855151811015613d1157600086600001518281518110613b6857613b68614849565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161480613bc95750602081015173ffffffffffffffffffffffffffffffffffffffff16155b80613bec5750602081015173ffffffffffffffffffffffffffffffffffffffff16155b80613c115750602081015173ffffffffffffffffffffffffffffffffffffffff908116145b80613c315750604081015160ff16158015613c315750606081015160ff16155b15613c43575060009695505050505050565b805183613c51846002614b1a565b613c5c9060006149c4565b81518110613c6c57613c6c614849565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910182015281015183613c9f846002614b1a565b613caa9060016149c4565b81518110613cba57613cba614849565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526040810151613cf19060ff16866149c4565b9450806060015160ff1684613d0691906149c4565b935050600101613b46565b5060005b8151811015613dc3576000828281518110613d3257613d32614849565b602002602001015190506000826001613d4b91906149c4565b90505b8351811015613db957838181518110613d6957613d69614849565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613db157506000979650505050505050565b600101613d4e565b5050600101613d15565b50846020015161ffff168310158015613de45750846040015161ffff168210155b95945050505050565b60008151808452602080850194506020840160005b83811015613e3457815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613e02565b509495945050505050565b602081526000611dee6020830184613ded565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613ea457613ea4613e52565b60405290565b6040516060810167ffffffffffffffff81118282101715613ea457613ea4613e52565b6040516080810167ffffffffffffffff81118282101715613ea457613ea4613e52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613f3757613f37613e52565b604052919050565b600067ffffffffffffffff821115613f5957613f59613e52565b5060051b60200190565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146105ac57600080fd5b600060408284031215613fa557600080fd5b613fad613e81565b9050613fb882613f63565b8152602082013563ffffffff1981168114613fd257600080fd5b602082015292915050565b60006020808385031215613ff057600080fd5b823567ffffffffffffffff81111561400757600080fd5b8301601f8101851361401857600080fd5b803561402b61402682613f3f565b613ef0565b8082825260208201915060208360061b85010192508783111561404d57600080fd5b6020840193505b82841015614078576140668885613f93565b82528482019150604084019350614054565b979650505050505050565b60006020808352835180602085015260005b818110156140b157858101830151858201604001528201614095565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006020828403121561410257600080fd5b611dee82613f63565b803573ffffffffffffffffffffffffffffffffffffffff811681146105ac57600080fd5b600082601f83011261414057600080fd5b8135602061415061402683613f3f565b8083825260208201915060208460051b87010193508684111561417257600080fd5b602086015b84811015614195576141888161410b565b8352918301918301614177565b509695505050505050565b600080604083850312156141b357600080fd5b823567ffffffffffffffff808211156141cb57600080fd5b6141d78683870161412f565b935060208501359150808211156141ed57600080fd5b506141fa8582860161412f565b9150509250929050565b8051606080845281518482018190526000926080916020918201918388019190865b82811015614280578451805173ffffffffffffffffffffffffffffffffffffffff908116865283820151168386015260408082015160ff908116918701919091529088015116878501529381019392850192600101614226565b508781015161ffff81168a83015295505050604086015193506142a9604088018561ffff169052565b9695505050505050565b600063ffffffff808616835280851660208401525060606040830152613de46060830184614204565b803560ff811681146105ac57600080fd5b803561ffff811681146105ac57600080fd5b6000602080838503121561431257600080fd5b823567ffffffffffffffff8082111561432a57600080fd5b8185019150606080838803121561434057600080fd5b614348613eaa565b83358381111561435757600080fd5b84019250601f8301881361436a57600080fd5b823561437861402682613f3f565b81815260079190911b8401860190868101908a83111561439757600080fd5b948701945b82861015614409576080868c0312156143b55760008081fd5b6143bd613ecd565b6143c68761410b565b81526143d389880161410b565b8982015260406143e48189016142dc565b908201526143f38787016142dc565b818701528252608095909501949087019061439c565b83525061441990508486016142ed565b85820152614429604085016142ed565b6040820152979650505050505050565b60006040828403121561444b57600080fd5b50919050565b6000806040838503121561446457600080fd5b61446d83613f63565b915060208084013567ffffffffffffffff81111561448a57600080fd5b8401601f8101861361449b57600080fd5b80356144a961402682613f3f565b81815260059190911b820183019083810190888311156144c857600080fd5b928401925b828410156144ed576144de84613f63565b825292840192908401906144cd565b80955050505050509250929050565b6000602080838503121561450f57600080fd5b823567ffffffffffffffff81111561452657600080fd5b8301601f8101851361453757600080fd5b803561454561402682613f3f565b81815260079190911b8201830190838101908783111561456457600080fd5b928401925b8284101561407857608084890312156145825760008081fd5b61458a613eaa565b6145938561410b565b81526145a189878701613f93565b86820152606085013580151581146145b95760008081fd5b604082015282526080939093019290840190614569565b600080602083850312156145e357600080fd5b823567ffffffffffffffff808211156145fb57600080fd5b818501915085601f83011261460f57600080fd5b81358181111561461e57600080fd5b8660208260061b850101111561463357600080fd5b60209290920196919550909350505050565b6080815260006146586080830187613ded565b82810360208481019190915286518083528782019282019060005b8181101561469657845163ffffffff191683529383019391830191600101614673565b505061ffff96909616604085015250505090151560609091015292915050565b600080604083850312156146c957600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208082528251828201819052600091906040908185019086840185805b838110156147f2578251805160058110614766577f4e487b710000000000000000000000000000000000000000000000000000000084526021600452602484fd5b86528088015167ffffffffffffffff16888701528681015115158787015260608082015173ffffffffffffffffffffffffffffffffffffffff16908701526080808201517fffffffffffffffffffffffffffffffff000000000000000000000000000000009081169188019190915260a091820151169086015260c09094019391860191600101614725565b509298975050505050505050565b60006020828403121561481257600080fd5b611dee8261410b565b60608152600061482e6060830186613ded565b61ffff94909416602083015250901515604090910152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000604082840312156148b957600080fd5b6148c1613e81565b6148ca8361410b565b8152602083013560208201528091505092915050565b815173ffffffffffffffffffffffffffffffffffffffff16815260208083015190820152604081016105a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61ffff818116838216019080821115613a4f57613a4f61490d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149885761498861490d565b5060010190565b60008161499e5761499e61490d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b808201808211156105a6576105a661490d565b818103818111156105a6576105a661490d565b600060ff821660ff8103614a0057614a0061490d565b60010192915050565b61ffff828116828216039080821115613a4f57613a4f61490d565b600067ffffffffffffffff821680614a3e57614a3e61490d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600063ffffffff808316818103614aae57614aae61490d565b6001019392505050565b602081526000611dee6020830184614204565b600067ffffffffffffffff808316818103614aae57614aae61490d565b78ffffffffffffffffffffffffffffffffffffffffffffffffff828116828216039080821115613a4f57613a4f61490d565b80820281158282048414176105a6576105a661490d56fea164736f6c6343000818000a",
}
-var ARMContractABI = ARMContractMetaData.ABI
+var RMNContractABI = RMNContractMetaData.ABI
-var ARMContractBin = ARMContractMetaData.Bin
+var RMNContractBin = RMNContractMetaData.Bin
-func DeployARMContract(auth *bind.TransactOpts, backend bind.ContractBackend, config RMNConfig) (common.Address, *types.Transaction, *ARMContract, error) {
- parsed, err := ARMContractMetaData.GetAbi()
+func DeployRMNContract(auth *bind.TransactOpts, backend bind.ContractBackend, config RMNConfig) (common.Address, *types.Transaction, *RMNContract, error) {
+ parsed, err := RMNContractMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
@@ -86,134 +86,134 @@ func DeployARMContract(auth *bind.TransactOpts, backend bind.ContractBackend, co
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
- address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ARMContractBin), backend, config)
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNContractBin), backend, config)
if err != nil {
return common.Address{}, nil, nil, err
}
- return address, tx, &ARMContract{address: address, abi: *parsed, ARMContractCaller: ARMContractCaller{contract: contract}, ARMContractTransactor: ARMContractTransactor{contract: contract}, ARMContractFilterer: ARMContractFilterer{contract: contract}}, nil
+ return address, tx, &RMNContract{address: address, abi: *parsed, RMNContractCaller: RMNContractCaller{contract: contract}, RMNContractTransactor: RMNContractTransactor{contract: contract}, RMNContractFilterer: RMNContractFilterer{contract: contract}}, nil
}
-type ARMContract struct {
+type RMNContract struct {
address common.Address
abi abi.ABI
- ARMContractCaller
- ARMContractTransactor
- ARMContractFilterer
+ RMNContractCaller
+ RMNContractTransactor
+ RMNContractFilterer
}
-type ARMContractCaller struct {
+type RMNContractCaller struct {
contract *bind.BoundContract
}
-type ARMContractTransactor struct {
+type RMNContractTransactor struct {
contract *bind.BoundContract
}
-type ARMContractFilterer struct {
+type RMNContractFilterer struct {
contract *bind.BoundContract
}
-type ARMContractSession struct {
- Contract *ARMContract
+type RMNContractSession struct {
+ Contract *RMNContract
CallOpts bind.CallOpts
TransactOpts bind.TransactOpts
}
-type ARMContractCallerSession struct {
- Contract *ARMContractCaller
+type RMNContractCallerSession struct {
+ Contract *RMNContractCaller
CallOpts bind.CallOpts
}
-type ARMContractTransactorSession struct {
- Contract *ARMContractTransactor
+type RMNContractTransactorSession struct {
+ Contract *RMNContractTransactor
TransactOpts bind.TransactOpts
}
-type ARMContractRaw struct {
- Contract *ARMContract
+type RMNContractRaw struct {
+ Contract *RMNContract
}
-type ARMContractCallerRaw struct {
- Contract *ARMContractCaller
+type RMNContractCallerRaw struct {
+ Contract *RMNContractCaller
}
-type ARMContractTransactorRaw struct {
- Contract *ARMContractTransactor
+type RMNContractTransactorRaw struct {
+ Contract *RMNContractTransactor
}
-func NewARMContract(address common.Address, backend bind.ContractBackend) (*ARMContract, error) {
- abi, err := abi.JSON(strings.NewReader(ARMContractABI))
+func NewRMNContract(address common.Address, backend bind.ContractBackend) (*RMNContract, error) {
+ abi, err := abi.JSON(strings.NewReader(RMNContractABI))
if err != nil {
return nil, err
}
- contract, err := bindARMContract(address, backend, backend, backend)
+ contract, err := bindRMNContract(address, backend, backend, backend)
if err != nil {
return nil, err
}
- return &ARMContract{address: address, abi: abi, ARMContractCaller: ARMContractCaller{contract: contract}, ARMContractTransactor: ARMContractTransactor{contract: contract}, ARMContractFilterer: ARMContractFilterer{contract: contract}}, nil
+ return &RMNContract{address: address, abi: abi, RMNContractCaller: RMNContractCaller{contract: contract}, RMNContractTransactor: RMNContractTransactor{contract: contract}, RMNContractFilterer: RMNContractFilterer{contract: contract}}, nil
}
-func NewARMContractCaller(address common.Address, caller bind.ContractCaller) (*ARMContractCaller, error) {
- contract, err := bindARMContract(address, caller, nil, nil)
+func NewRMNContractCaller(address common.Address, caller bind.ContractCaller) (*RMNContractCaller, error) {
+ contract, err := bindRMNContract(address, caller, nil, nil)
if err != nil {
return nil, err
}
- return &ARMContractCaller{contract: contract}, nil
+ return &RMNContractCaller{contract: contract}, nil
}
-func NewARMContractTransactor(address common.Address, transactor bind.ContractTransactor) (*ARMContractTransactor, error) {
- contract, err := bindARMContract(address, nil, transactor, nil)
+func NewRMNContractTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNContractTransactor, error) {
+ contract, err := bindRMNContract(address, nil, transactor, nil)
if err != nil {
return nil, err
}
- return &ARMContractTransactor{contract: contract}, nil
+ return &RMNContractTransactor{contract: contract}, nil
}
-func NewARMContractFilterer(address common.Address, filterer bind.ContractFilterer) (*ARMContractFilterer, error) {
- contract, err := bindARMContract(address, nil, nil, filterer)
+func NewRMNContractFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNContractFilterer, error) {
+ contract, err := bindRMNContract(address, nil, nil, filterer)
if err != nil {
return nil, err
}
- return &ARMContractFilterer{contract: contract}, nil
+ return &RMNContractFilterer{contract: contract}, nil
}
-func bindARMContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
- parsed, err := ARMContractMetaData.GetAbi()
+func bindRMNContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+ parsed, err := RMNContractMetaData.GetAbi()
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}
-func (_ARMContract *ARMContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _ARMContract.Contract.ARMContractCaller.contract.Call(opts, result, method, params...)
+func (_RMNContract *RMNContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _RMNContract.Contract.RMNContractCaller.contract.Call(opts, result, method, params...)
}
-func (_ARMContract *ARMContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _ARMContract.Contract.ARMContractTransactor.contract.Transfer(opts)
+func (_RMNContract *RMNContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _RMNContract.Contract.RMNContractTransactor.contract.Transfer(opts)
}
-func (_ARMContract *ARMContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _ARMContract.Contract.ARMContractTransactor.contract.Transact(opts, method, params...)
+func (_RMNContract *RMNContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _RMNContract.Contract.RMNContractTransactor.contract.Transact(opts, method, params...)
}
-func (_ARMContract *ARMContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _ARMContract.Contract.contract.Call(opts, result, method, params...)
+func (_RMNContract *RMNContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _RMNContract.Contract.contract.Call(opts, result, method, params...)
}
-func (_ARMContract *ARMContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _ARMContract.Contract.contract.Transfer(opts)
+func (_RMNContract *RMNContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _RMNContract.Contract.contract.Transfer(opts)
}
-func (_ARMContract *ARMContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _ARMContract.Contract.contract.Transact(opts, method, params...)
+func (_RMNContract *RMNContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _RMNContract.Contract.contract.Transact(opts, method, params...)
}
-func (_ARMContract *ARMContractCaller) GetBlessProgress(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (GetBlessProgress,
+func (_RMNContract *RMNContractCaller) GetBlessProgress(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (GetBlessProgress,
error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getBlessProgress", taggedRoot)
+ err := _RMNContract.contract.Call(opts, &out, "getBlessProgress", taggedRoot)
outstruct := new(GetBlessProgress)
if err != nil {
@@ -228,23 +228,23 @@ func (_ARMContract *ARMContractCaller) GetBlessProgress(opts *bind.CallOpts, tag
}
-func (_ARMContract *ARMContractSession) GetBlessProgress(taggedRoot IRMNTaggedRoot) (GetBlessProgress,
+func (_RMNContract *RMNContractSession) GetBlessProgress(taggedRoot IRMNTaggedRoot) (GetBlessProgress,
error) {
- return _ARMContract.Contract.GetBlessProgress(&_ARMContract.CallOpts, taggedRoot)
+ return _RMNContract.Contract.GetBlessProgress(&_RMNContract.CallOpts, taggedRoot)
}
-func (_ARMContract *ARMContractCallerSession) GetBlessProgress(taggedRoot IRMNTaggedRoot) (GetBlessProgress,
+func (_RMNContract *RMNContractCallerSession) GetBlessProgress(taggedRoot IRMNTaggedRoot) (GetBlessProgress,
error) {
- return _ARMContract.Contract.GetBlessProgress(&_ARMContract.CallOpts, taggedRoot)
+ return _RMNContract.Contract.GetBlessProgress(&_RMNContract.CallOpts, taggedRoot)
}
-func (_ARMContract *ARMContractCaller) GetConfigDetails(opts *bind.CallOpts) (GetConfigDetails,
+func (_RMNContract *RMNContractCaller) GetConfigDetails(opts *bind.CallOpts) (GetConfigDetails,
error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getConfigDetails")
+ err := _RMNContract.contract.Call(opts, &out, "getConfigDetails")
outstruct := new(GetConfigDetails)
if err != nil {
@@ -259,23 +259,23 @@ func (_ARMContract *ARMContractCaller) GetConfigDetails(opts *bind.CallOpts) (Ge
}
-func (_ARMContract *ARMContractSession) GetConfigDetails() (GetConfigDetails,
+func (_RMNContract *RMNContractSession) GetConfigDetails() (GetConfigDetails,
error) {
- return _ARMContract.Contract.GetConfigDetails(&_ARMContract.CallOpts)
+ return _RMNContract.Contract.GetConfigDetails(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) GetConfigDetails() (GetConfigDetails,
+func (_RMNContract *RMNContractCallerSession) GetConfigDetails() (GetConfigDetails,
error) {
- return _ARMContract.Contract.GetConfigDetails(&_ARMContract.CallOpts)
+ return _RMNContract.Contract.GetConfigDetails(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCaller) GetCurseProgress(opts *bind.CallOpts, subject [16]byte) (GetCurseProgress,
+func (_RMNContract *RMNContractCaller) GetCurseProgress(opts *bind.CallOpts, subject [16]byte) (GetCurseProgress,
error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getCurseProgress", subject)
+ err := _RMNContract.contract.Call(opts, &out, "getCurseProgress", subject)
outstruct := new(GetCurseProgress)
if err != nil {
@@ -291,21 +291,21 @@ func (_ARMContract *ARMContractCaller) GetCurseProgress(opts *bind.CallOpts, sub
}
-func (_ARMContract *ARMContractSession) GetCurseProgress(subject [16]byte) (GetCurseProgress,
+func (_RMNContract *RMNContractSession) GetCurseProgress(subject [16]byte) (GetCurseProgress,
error) {
- return _ARMContract.Contract.GetCurseProgress(&_ARMContract.CallOpts, subject)
+ return _RMNContract.Contract.GetCurseProgress(&_RMNContract.CallOpts, subject)
}
-func (_ARMContract *ARMContractCallerSession) GetCurseProgress(subject [16]byte) (GetCurseProgress,
+func (_RMNContract *RMNContractCallerSession) GetCurseProgress(subject [16]byte) (GetCurseProgress,
error) {
- return _ARMContract.Contract.GetCurseProgress(&_ARMContract.CallOpts, subject)
+ return _RMNContract.Contract.GetCurseProgress(&_RMNContract.CallOpts, subject)
}
-func (_ARMContract *ARMContractCaller) GetCursedSubjectsCount(opts *bind.CallOpts) (*big.Int, error) {
+func (_RMNContract *RMNContractCaller) GetCursedSubjectsCount(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getCursedSubjectsCount")
+ err := _RMNContract.contract.Call(opts, &out, "getCursedSubjectsCount")
if err != nil {
return *new(*big.Int), err
@@ -317,17 +317,17 @@ func (_ARMContract *ARMContractCaller) GetCursedSubjectsCount(opts *bind.CallOpt
}
-func (_ARMContract *ARMContractSession) GetCursedSubjectsCount() (*big.Int, error) {
- return _ARMContract.Contract.GetCursedSubjectsCount(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractSession) GetCursedSubjectsCount() (*big.Int, error) {
+ return _RMNContract.Contract.GetCursedSubjectsCount(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) GetCursedSubjectsCount() (*big.Int, error) {
- return _ARMContract.Contract.GetCursedSubjectsCount(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractCallerSession) GetCursedSubjectsCount() (*big.Int, error) {
+ return _RMNContract.Contract.GetCursedSubjectsCount(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCaller) GetPermaBlessedCommitStores(opts *bind.CallOpts) ([]common.Address, error) {
+func (_RMNContract *RMNContractCaller) GetPermaBlessedCommitStores(opts *bind.CallOpts) ([]common.Address, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getPermaBlessedCommitStores")
+ err := _RMNContract.contract.Call(opts, &out, "getPermaBlessedCommitStores")
if err != nil {
return *new([]common.Address), err
@@ -339,17 +339,17 @@ func (_ARMContract *ARMContractCaller) GetPermaBlessedCommitStores(opts *bind.Ca
}
-func (_ARMContract *ARMContractSession) GetPermaBlessedCommitStores() ([]common.Address, error) {
- return _ARMContract.Contract.GetPermaBlessedCommitStores(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractSession) GetPermaBlessedCommitStores() ([]common.Address, error) {
+ return _RMNContract.Contract.GetPermaBlessedCommitStores(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) GetPermaBlessedCommitStores() ([]common.Address, error) {
- return _ARMContract.Contract.GetPermaBlessedCommitStores(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractCallerSession) GetPermaBlessedCommitStores() ([]common.Address, error) {
+ return _RMNContract.Contract.GetPermaBlessedCommitStores(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCaller) GetRecordedCurseRelatedOps(opts *bind.CallOpts, offset *big.Int, limit *big.Int) ([]RMNRecordedCurseRelatedOp, error) {
+func (_RMNContract *RMNContractCaller) GetRecordedCurseRelatedOps(opts *bind.CallOpts, offset *big.Int, limit *big.Int) ([]RMNRecordedCurseRelatedOp, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getRecordedCurseRelatedOps", offset, limit)
+ err := _RMNContract.contract.Call(opts, &out, "getRecordedCurseRelatedOps", offset, limit)
if err != nil {
return *new([]RMNRecordedCurseRelatedOp), err
@@ -361,17 +361,17 @@ func (_ARMContract *ARMContractCaller) GetRecordedCurseRelatedOps(opts *bind.Cal
}
-func (_ARMContract *ARMContractSession) GetRecordedCurseRelatedOps(offset *big.Int, limit *big.Int) ([]RMNRecordedCurseRelatedOp, error) {
- return _ARMContract.Contract.GetRecordedCurseRelatedOps(&_ARMContract.CallOpts, offset, limit)
+func (_RMNContract *RMNContractSession) GetRecordedCurseRelatedOps(offset *big.Int, limit *big.Int) ([]RMNRecordedCurseRelatedOp, error) {
+ return _RMNContract.Contract.GetRecordedCurseRelatedOps(&_RMNContract.CallOpts, offset, limit)
}
-func (_ARMContract *ARMContractCallerSession) GetRecordedCurseRelatedOps(offset *big.Int, limit *big.Int) ([]RMNRecordedCurseRelatedOp, error) {
- return _ARMContract.Contract.GetRecordedCurseRelatedOps(&_ARMContract.CallOpts, offset, limit)
+func (_RMNContract *RMNContractCallerSession) GetRecordedCurseRelatedOps(offset *big.Int, limit *big.Int) ([]RMNRecordedCurseRelatedOp, error) {
+ return _RMNContract.Contract.GetRecordedCurseRelatedOps(&_RMNContract.CallOpts, offset, limit)
}
-func (_ARMContract *ARMContractCaller) GetRecordedCurseRelatedOpsCount(opts *bind.CallOpts) (*big.Int, error) {
+func (_RMNContract *RMNContractCaller) GetRecordedCurseRelatedOpsCount(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "getRecordedCurseRelatedOpsCount")
+ err := _RMNContract.contract.Call(opts, &out, "getRecordedCurseRelatedOpsCount")
if err != nil {
return *new(*big.Int), err
@@ -383,17 +383,17 @@ func (_ARMContract *ARMContractCaller) GetRecordedCurseRelatedOpsCount(opts *bin
}
-func (_ARMContract *ARMContractSession) GetRecordedCurseRelatedOpsCount() (*big.Int, error) {
- return _ARMContract.Contract.GetRecordedCurseRelatedOpsCount(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractSession) GetRecordedCurseRelatedOpsCount() (*big.Int, error) {
+ return _RMNContract.Contract.GetRecordedCurseRelatedOpsCount(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) GetRecordedCurseRelatedOpsCount() (*big.Int, error) {
- return _ARMContract.Contract.GetRecordedCurseRelatedOpsCount(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractCallerSession) GetRecordedCurseRelatedOpsCount() (*big.Int, error) {
+ return _RMNContract.Contract.GetRecordedCurseRelatedOpsCount(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCaller) IsBlessed(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (bool, error) {
+func (_RMNContract *RMNContractCaller) IsBlessed(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (bool, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "isBlessed", taggedRoot)
+ err := _RMNContract.contract.Call(opts, &out, "isBlessed", taggedRoot)
if err != nil {
return *new(bool), err
@@ -405,17 +405,17 @@ func (_ARMContract *ARMContractCaller) IsBlessed(opts *bind.CallOpts, taggedRoot
}
-func (_ARMContract *ARMContractSession) IsBlessed(taggedRoot IRMNTaggedRoot) (bool, error) {
- return _ARMContract.Contract.IsBlessed(&_ARMContract.CallOpts, taggedRoot)
+func (_RMNContract *RMNContractSession) IsBlessed(taggedRoot IRMNTaggedRoot) (bool, error) {
+ return _RMNContract.Contract.IsBlessed(&_RMNContract.CallOpts, taggedRoot)
}
-func (_ARMContract *ARMContractCallerSession) IsBlessed(taggedRoot IRMNTaggedRoot) (bool, error) {
- return _ARMContract.Contract.IsBlessed(&_ARMContract.CallOpts, taggedRoot)
+func (_RMNContract *RMNContractCallerSession) IsBlessed(taggedRoot IRMNTaggedRoot) (bool, error) {
+ return _RMNContract.Contract.IsBlessed(&_RMNContract.CallOpts, taggedRoot)
}
-func (_ARMContract *ARMContractCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) {
+func (_RMNContract *RMNContractCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "isCursed", subject)
+ err := _RMNContract.contract.Call(opts, &out, "isCursed", subject)
if err != nil {
return *new(bool), err
@@ -427,17 +427,17 @@ func (_ARMContract *ARMContractCaller) IsCursed(opts *bind.CallOpts, subject [16
}
-func (_ARMContract *ARMContractSession) IsCursed(subject [16]byte) (bool, error) {
- return _ARMContract.Contract.IsCursed(&_ARMContract.CallOpts, subject)
+func (_RMNContract *RMNContractSession) IsCursed(subject [16]byte) (bool, error) {
+ return _RMNContract.Contract.IsCursed(&_RMNContract.CallOpts, subject)
}
-func (_ARMContract *ARMContractCallerSession) IsCursed(subject [16]byte) (bool, error) {
- return _ARMContract.Contract.IsCursed(&_ARMContract.CallOpts, subject)
+func (_RMNContract *RMNContractCallerSession) IsCursed(subject [16]byte) (bool, error) {
+ return _RMNContract.Contract.IsCursed(&_RMNContract.CallOpts, subject)
}
-func (_ARMContract *ARMContractCaller) IsCursed0(opts *bind.CallOpts) (bool, error) {
+func (_RMNContract *RMNContractCaller) IsCursed0(opts *bind.CallOpts) (bool, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "isCursed0")
+ err := _RMNContract.contract.Call(opts, &out, "isCursed0")
if err != nil {
return *new(bool), err
@@ -449,17 +449,17 @@ func (_ARMContract *ARMContractCaller) IsCursed0(opts *bind.CallOpts) (bool, err
}
-func (_ARMContract *ARMContractSession) IsCursed0() (bool, error) {
- return _ARMContract.Contract.IsCursed0(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractSession) IsCursed0() (bool, error) {
+ return _RMNContract.Contract.IsCursed0(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) IsCursed0() (bool, error) {
- return _ARMContract.Contract.IsCursed0(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractCallerSession) IsCursed0() (bool, error) {
+ return _RMNContract.Contract.IsCursed0(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
+func (_RMNContract *RMNContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "owner")
+ err := _RMNContract.contract.Call(opts, &out, "owner")
if err != nil {
return *new(common.Address), err
@@ -471,17 +471,17 @@ func (_ARMContract *ARMContractCaller) Owner(opts *bind.CallOpts) (common.Addres
}
-func (_ARMContract *ARMContractSession) Owner() (common.Address, error) {
- return _ARMContract.Contract.Owner(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractSession) Owner() (common.Address, error) {
+ return _RMNContract.Contract.Owner(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) Owner() (common.Address, error) {
- return _ARMContract.Contract.Owner(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractCallerSession) Owner() (common.Address, error) {
+ return _RMNContract.Contract.Owner(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
+func (_RMNContract *RMNContractCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
var out []interface{}
- err := _ARMContract.contract.Call(opts, &out, "typeAndVersion")
+ err := _RMNContract.contract.Call(opts, &out, "typeAndVersion")
if err != nil {
return *new(string), err
@@ -493,136 +493,136 @@ func (_ARMContract *ARMContractCaller) TypeAndVersion(opts *bind.CallOpts) (stri
}
-func (_ARMContract *ARMContractSession) TypeAndVersion() (string, error) {
- return _ARMContract.Contract.TypeAndVersion(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractSession) TypeAndVersion() (string, error) {
+ return _RMNContract.Contract.TypeAndVersion(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractCallerSession) TypeAndVersion() (string, error) {
- return _ARMContract.Contract.TypeAndVersion(&_ARMContract.CallOpts)
+func (_RMNContract *RMNContractCallerSession) TypeAndVersion() (string, error) {
+ return _RMNContract.Contract.TypeAndVersion(&_RMNContract.CallOpts)
}
-func (_ARMContract *ARMContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "acceptOwnership")
+func (_RMNContract *RMNContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "acceptOwnership")
}
-func (_ARMContract *ARMContractSession) AcceptOwnership() (*types.Transaction, error) {
- return _ARMContract.Contract.AcceptOwnership(&_ARMContract.TransactOpts)
+func (_RMNContract *RMNContractSession) AcceptOwnership() (*types.Transaction, error) {
+ return _RMNContract.Contract.AcceptOwnership(&_RMNContract.TransactOpts)
}
-func (_ARMContract *ARMContractTransactorSession) AcceptOwnership() (*types.Transaction, error) {
- return _ARMContract.Contract.AcceptOwnership(&_ARMContract.TransactOpts)
+func (_RMNContract *RMNContractTransactorSession) AcceptOwnership() (*types.Transaction, error) {
+ return _RMNContract.Contract.AcceptOwnership(&_RMNContract.TransactOpts)
}
-func (_ARMContract *ARMContractTransactor) OwnerCurse(opts *bind.TransactOpts, curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "ownerCurse", curseId, subjects)
+func (_RMNContract *RMNContractTransactor) OwnerCurse(opts *bind.TransactOpts, curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "ownerCurse", curseId, subjects)
}
-func (_ARMContract *ARMContractSession) OwnerCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerCurse(&_ARMContract.TransactOpts, curseId, subjects)
+func (_RMNContract *RMNContractSession) OwnerCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerCurse(&_RMNContract.TransactOpts, curseId, subjects)
}
-func (_ARMContract *ARMContractTransactorSession) OwnerCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerCurse(&_ARMContract.TransactOpts, curseId, subjects)
+func (_RMNContract *RMNContractTransactorSession) OwnerCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerCurse(&_RMNContract.TransactOpts, curseId, subjects)
}
-func (_ARMContract *ARMContractTransactor) OwnerRemoveThenAddPermaBlessedCommitStores(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "ownerRemoveThenAddPermaBlessedCommitStores", removes, adds)
+func (_RMNContract *RMNContractTransactor) OwnerRemoveThenAddPermaBlessedCommitStores(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "ownerRemoveThenAddPermaBlessedCommitStores", removes, adds)
}
-func (_ARMContract *ARMContractSession) OwnerRemoveThenAddPermaBlessedCommitStores(removes []common.Address, adds []common.Address) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerRemoveThenAddPermaBlessedCommitStores(&_ARMContract.TransactOpts, removes, adds)
+func (_RMNContract *RMNContractSession) OwnerRemoveThenAddPermaBlessedCommitStores(removes []common.Address, adds []common.Address) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerRemoveThenAddPermaBlessedCommitStores(&_RMNContract.TransactOpts, removes, adds)
}
-func (_ARMContract *ARMContractTransactorSession) OwnerRemoveThenAddPermaBlessedCommitStores(removes []common.Address, adds []common.Address) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerRemoveThenAddPermaBlessedCommitStores(&_ARMContract.TransactOpts, removes, adds)
+func (_RMNContract *RMNContractTransactorSession) OwnerRemoveThenAddPermaBlessedCommitStores(removes []common.Address, adds []common.Address) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerRemoveThenAddPermaBlessedCommitStores(&_RMNContract.TransactOpts, removes, adds)
}
-func (_ARMContract *ARMContractTransactor) OwnerResetBlessVotes(opts *bind.TransactOpts, taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "ownerResetBlessVotes", taggedRoots)
+func (_RMNContract *RMNContractTransactor) OwnerResetBlessVotes(opts *bind.TransactOpts, taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "ownerResetBlessVotes", taggedRoots)
}
-func (_ARMContract *ARMContractSession) OwnerResetBlessVotes(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerResetBlessVotes(&_ARMContract.TransactOpts, taggedRoots)
+func (_RMNContract *RMNContractSession) OwnerResetBlessVotes(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerResetBlessVotes(&_RMNContract.TransactOpts, taggedRoots)
}
-func (_ARMContract *ARMContractTransactorSession) OwnerResetBlessVotes(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerResetBlessVotes(&_ARMContract.TransactOpts, taggedRoots)
+func (_RMNContract *RMNContractTransactorSession) OwnerResetBlessVotes(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerResetBlessVotes(&_RMNContract.TransactOpts, taggedRoots)
}
-func (_ARMContract *ARMContractTransactor) OwnerUnvoteToCurse(opts *bind.TransactOpts, ownerUnvoteToCurseRequests []RMNOwnerUnvoteToCurseRequest) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "ownerUnvoteToCurse", ownerUnvoteToCurseRequests)
+func (_RMNContract *RMNContractTransactor) OwnerUnvoteToCurse(opts *bind.TransactOpts, ownerUnvoteToCurseRequests []RMNOwnerUnvoteToCurseRequest) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "ownerUnvoteToCurse", ownerUnvoteToCurseRequests)
}
-func (_ARMContract *ARMContractSession) OwnerUnvoteToCurse(ownerUnvoteToCurseRequests []RMNOwnerUnvoteToCurseRequest) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerUnvoteToCurse(&_ARMContract.TransactOpts, ownerUnvoteToCurseRequests)
+func (_RMNContract *RMNContractSession) OwnerUnvoteToCurse(ownerUnvoteToCurseRequests []RMNOwnerUnvoteToCurseRequest) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerUnvoteToCurse(&_RMNContract.TransactOpts, ownerUnvoteToCurseRequests)
}
-func (_ARMContract *ARMContractTransactorSession) OwnerUnvoteToCurse(ownerUnvoteToCurseRequests []RMNOwnerUnvoteToCurseRequest) (*types.Transaction, error) {
- return _ARMContract.Contract.OwnerUnvoteToCurse(&_ARMContract.TransactOpts, ownerUnvoteToCurseRequests)
+func (_RMNContract *RMNContractTransactorSession) OwnerUnvoteToCurse(ownerUnvoteToCurseRequests []RMNOwnerUnvoteToCurseRequest) (*types.Transaction, error) {
+ return _RMNContract.Contract.OwnerUnvoteToCurse(&_RMNContract.TransactOpts, ownerUnvoteToCurseRequests)
}
-func (_ARMContract *ARMContractTransactor) SetConfig(opts *bind.TransactOpts, config RMNConfig) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "setConfig", config)
+func (_RMNContract *RMNContractTransactor) SetConfig(opts *bind.TransactOpts, config RMNConfig) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "setConfig", config)
}
-func (_ARMContract *ARMContractSession) SetConfig(config RMNConfig) (*types.Transaction, error) {
- return _ARMContract.Contract.SetConfig(&_ARMContract.TransactOpts, config)
+func (_RMNContract *RMNContractSession) SetConfig(config RMNConfig) (*types.Transaction, error) {
+ return _RMNContract.Contract.SetConfig(&_RMNContract.TransactOpts, config)
}
-func (_ARMContract *ARMContractTransactorSession) SetConfig(config RMNConfig) (*types.Transaction, error) {
- return _ARMContract.Contract.SetConfig(&_ARMContract.TransactOpts, config)
+func (_RMNContract *RMNContractTransactorSession) SetConfig(config RMNConfig) (*types.Transaction, error) {
+ return _RMNContract.Contract.SetConfig(&_RMNContract.TransactOpts, config)
}
-func (_ARMContract *ARMContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "transferOwnership", to)
+func (_RMNContract *RMNContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "transferOwnership", to)
}
-func (_ARMContract *ARMContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _ARMContract.Contract.TransferOwnership(&_ARMContract.TransactOpts, to)
+func (_RMNContract *RMNContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _RMNContract.Contract.TransferOwnership(&_RMNContract.TransactOpts, to)
}
-func (_ARMContract *ARMContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _ARMContract.Contract.TransferOwnership(&_ARMContract.TransactOpts, to)
+func (_RMNContract *RMNContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _RMNContract.Contract.TransferOwnership(&_RMNContract.TransactOpts, to)
}
-func (_ARMContract *ARMContractTransactor) UnvoteToCurse(opts *bind.TransactOpts, unvoteToCurseRequests []RMNUnvoteToCurseRequest) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "unvoteToCurse", unvoteToCurseRequests)
+func (_RMNContract *RMNContractTransactor) UnvoteToCurse(opts *bind.TransactOpts, unvoteToCurseRequests []RMNUnvoteToCurseRequest) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "unvoteToCurse", unvoteToCurseRequests)
}
-func (_ARMContract *ARMContractSession) UnvoteToCurse(unvoteToCurseRequests []RMNUnvoteToCurseRequest) (*types.Transaction, error) {
- return _ARMContract.Contract.UnvoteToCurse(&_ARMContract.TransactOpts, unvoteToCurseRequests)
+func (_RMNContract *RMNContractSession) UnvoteToCurse(unvoteToCurseRequests []RMNUnvoteToCurseRequest) (*types.Transaction, error) {
+ return _RMNContract.Contract.UnvoteToCurse(&_RMNContract.TransactOpts, unvoteToCurseRequests)
}
-func (_ARMContract *ARMContractTransactorSession) UnvoteToCurse(unvoteToCurseRequests []RMNUnvoteToCurseRequest) (*types.Transaction, error) {
- return _ARMContract.Contract.UnvoteToCurse(&_ARMContract.TransactOpts, unvoteToCurseRequests)
+func (_RMNContract *RMNContractTransactorSession) UnvoteToCurse(unvoteToCurseRequests []RMNUnvoteToCurseRequest) (*types.Transaction, error) {
+ return _RMNContract.Contract.UnvoteToCurse(&_RMNContract.TransactOpts, unvoteToCurseRequests)
}
-func (_ARMContract *ARMContractTransactor) VoteToBless(opts *bind.TransactOpts, taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "voteToBless", taggedRoots)
+func (_RMNContract *RMNContractTransactor) VoteToBless(opts *bind.TransactOpts, taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "voteToBless", taggedRoots)
}
-func (_ARMContract *ARMContractSession) VoteToBless(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
- return _ARMContract.Contract.VoteToBless(&_ARMContract.TransactOpts, taggedRoots)
+func (_RMNContract *RMNContractSession) VoteToBless(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
+ return _RMNContract.Contract.VoteToBless(&_RMNContract.TransactOpts, taggedRoots)
}
-func (_ARMContract *ARMContractTransactorSession) VoteToBless(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
- return _ARMContract.Contract.VoteToBless(&_ARMContract.TransactOpts, taggedRoots)
+func (_RMNContract *RMNContractTransactorSession) VoteToBless(taggedRoots []IRMNTaggedRoot) (*types.Transaction, error) {
+ return _RMNContract.Contract.VoteToBless(&_RMNContract.TransactOpts, taggedRoots)
}
-func (_ARMContract *ARMContractTransactor) VoteToCurse(opts *bind.TransactOpts, curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
- return _ARMContract.contract.Transact(opts, "voteToCurse", curseId, subjects)
+func (_RMNContract *RMNContractTransactor) VoteToCurse(opts *bind.TransactOpts, curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
+ return _RMNContract.contract.Transact(opts, "voteToCurse", curseId, subjects)
}
-func (_ARMContract *ARMContractSession) VoteToCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
- return _ARMContract.Contract.VoteToCurse(&_ARMContract.TransactOpts, curseId, subjects)
+func (_RMNContract *RMNContractSession) VoteToCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
+ return _RMNContract.Contract.VoteToCurse(&_RMNContract.TransactOpts, curseId, subjects)
}
-func (_ARMContract *ARMContractTransactorSession) VoteToCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
- return _ARMContract.Contract.VoteToCurse(&_ARMContract.TransactOpts, curseId, subjects)
+func (_RMNContract *RMNContractTransactorSession) VoteToCurse(curseId [16]byte, subjects [][16]byte) (*types.Transaction, error) {
+ return _RMNContract.Contract.VoteToCurse(&_RMNContract.TransactOpts, curseId, subjects)
}
-type ARMContractAlreadyBlessedIterator struct {
- Event *ARMContractAlreadyBlessed
+type RMNContractAlreadyBlessedIterator struct {
+ Event *RMNContractAlreadyBlessed
contract *bind.BoundContract
event string
@@ -633,7 +633,7 @@ type ARMContractAlreadyBlessedIterator struct {
fail error
}
-func (it *ARMContractAlreadyBlessedIterator) Next() bool {
+func (it *RMNContractAlreadyBlessedIterator) Next() bool {
if it.fail != nil {
return false
@@ -642,7 +642,7 @@ func (it *ARMContractAlreadyBlessedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractAlreadyBlessed)
+ it.Event = new(RMNContractAlreadyBlessed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -657,7 +657,7 @@ func (it *ARMContractAlreadyBlessedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractAlreadyBlessed)
+ it.Event = new(RMNContractAlreadyBlessed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -672,23 +672,23 @@ func (it *ARMContractAlreadyBlessedIterator) Next() bool {
}
}
-func (it *ARMContractAlreadyBlessedIterator) Error() error {
+func (it *RMNContractAlreadyBlessedIterator) Error() error {
return it.fail
}
-func (it *ARMContractAlreadyBlessedIterator) Close() error {
+func (it *RMNContractAlreadyBlessedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractAlreadyBlessed struct {
+type RMNContractAlreadyBlessed struct {
ConfigVersion uint32
Voter common.Address
TaggedRoot IRMNTaggedRoot
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterAlreadyBlessed(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractAlreadyBlessedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterAlreadyBlessed(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractAlreadyBlessedIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -699,14 +699,14 @@ func (_ARMContract *ARMContractFilterer) FilterAlreadyBlessed(opts *bind.FilterO
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "AlreadyBlessed", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "AlreadyBlessed", configVersionRule, voterRule)
if err != nil {
return nil, err
}
- return &ARMContractAlreadyBlessedIterator{contract: _ARMContract.contract, event: "AlreadyBlessed", logs: logs, sub: sub}, nil
+ return &RMNContractAlreadyBlessedIterator{contract: _RMNContract.contract, event: "AlreadyBlessed", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchAlreadyBlessed(opts *bind.WatchOpts, sink chan<- *ARMContractAlreadyBlessed, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchAlreadyBlessed(opts *bind.WatchOpts, sink chan<- *RMNContractAlreadyBlessed, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -717,7 +717,7 @@ func (_ARMContract *ARMContractFilterer) WatchAlreadyBlessed(opts *bind.WatchOpt
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "AlreadyBlessed", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "AlreadyBlessed", configVersionRule, voterRule)
if err != nil {
return nil, err
}
@@ -727,8 +727,8 @@ func (_ARMContract *ARMContractFilterer) WatchAlreadyBlessed(opts *bind.WatchOpt
select {
case log := <-logs:
- event := new(ARMContractAlreadyBlessed)
- if err := _ARMContract.contract.UnpackLog(event, "AlreadyBlessed", log); err != nil {
+ event := new(RMNContractAlreadyBlessed)
+ if err := _RMNContract.contract.UnpackLog(event, "AlreadyBlessed", log); err != nil {
return err
}
event.Raw = log
@@ -749,17 +749,17 @@ func (_ARMContract *ARMContractFilterer) WatchAlreadyBlessed(opts *bind.WatchOpt
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseAlreadyBlessed(log types.Log) (*ARMContractAlreadyBlessed, error) {
- event := new(ARMContractAlreadyBlessed)
- if err := _ARMContract.contract.UnpackLog(event, "AlreadyBlessed", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseAlreadyBlessed(log types.Log) (*RMNContractAlreadyBlessed, error) {
+ event := new(RMNContractAlreadyBlessed)
+ if err := _RMNContract.contract.UnpackLog(event, "AlreadyBlessed", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractAlreadyVotedToBlessIterator struct {
- Event *ARMContractAlreadyVotedToBless
+type RMNContractAlreadyVotedToBlessIterator struct {
+ Event *RMNContractAlreadyVotedToBless
contract *bind.BoundContract
event string
@@ -770,7 +770,7 @@ type ARMContractAlreadyVotedToBlessIterator struct {
fail error
}
-func (it *ARMContractAlreadyVotedToBlessIterator) Next() bool {
+func (it *RMNContractAlreadyVotedToBlessIterator) Next() bool {
if it.fail != nil {
return false
@@ -779,7 +779,7 @@ func (it *ARMContractAlreadyVotedToBlessIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractAlreadyVotedToBless)
+ it.Event = new(RMNContractAlreadyVotedToBless)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -794,7 +794,7 @@ func (it *ARMContractAlreadyVotedToBlessIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractAlreadyVotedToBless)
+ it.Event = new(RMNContractAlreadyVotedToBless)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -809,23 +809,23 @@ func (it *ARMContractAlreadyVotedToBlessIterator) Next() bool {
}
}
-func (it *ARMContractAlreadyVotedToBlessIterator) Error() error {
+func (it *RMNContractAlreadyVotedToBlessIterator) Error() error {
return it.fail
}
-func (it *ARMContractAlreadyVotedToBlessIterator) Close() error {
+func (it *RMNContractAlreadyVotedToBlessIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractAlreadyVotedToBless struct {
+type RMNContractAlreadyVotedToBless struct {
ConfigVersion uint32
Voter common.Address
TaggedRoot IRMNTaggedRoot
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterAlreadyVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractAlreadyVotedToBlessIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterAlreadyVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractAlreadyVotedToBlessIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -836,14 +836,14 @@ func (_ARMContract *ARMContractFilterer) FilterAlreadyVotedToBless(opts *bind.Fi
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "AlreadyVotedToBless", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "AlreadyVotedToBless", configVersionRule, voterRule)
if err != nil {
return nil, err
}
- return &ARMContractAlreadyVotedToBlessIterator{contract: _ARMContract.contract, event: "AlreadyVotedToBless", logs: logs, sub: sub}, nil
+ return &RMNContractAlreadyVotedToBlessIterator{contract: _RMNContract.contract, event: "AlreadyVotedToBless", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchAlreadyVotedToBless(opts *bind.WatchOpts, sink chan<- *ARMContractAlreadyVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchAlreadyVotedToBless(opts *bind.WatchOpts, sink chan<- *RMNContractAlreadyVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -854,7 +854,7 @@ func (_ARMContract *ARMContractFilterer) WatchAlreadyVotedToBless(opts *bind.Wat
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "AlreadyVotedToBless", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "AlreadyVotedToBless", configVersionRule, voterRule)
if err != nil {
return nil, err
}
@@ -864,8 +864,8 @@ func (_ARMContract *ARMContractFilterer) WatchAlreadyVotedToBless(opts *bind.Wat
select {
case log := <-logs:
- event := new(ARMContractAlreadyVotedToBless)
- if err := _ARMContract.contract.UnpackLog(event, "AlreadyVotedToBless", log); err != nil {
+ event := new(RMNContractAlreadyVotedToBless)
+ if err := _RMNContract.contract.UnpackLog(event, "AlreadyVotedToBless", log); err != nil {
return err
}
event.Raw = log
@@ -886,17 +886,17 @@ func (_ARMContract *ARMContractFilterer) WatchAlreadyVotedToBless(opts *bind.Wat
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseAlreadyVotedToBless(log types.Log) (*ARMContractAlreadyVotedToBless, error) {
- event := new(ARMContractAlreadyVotedToBless)
- if err := _ARMContract.contract.UnpackLog(event, "AlreadyVotedToBless", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseAlreadyVotedToBless(log types.Log) (*RMNContractAlreadyVotedToBless, error) {
+ event := new(RMNContractAlreadyVotedToBless)
+ if err := _RMNContract.contract.UnpackLog(event, "AlreadyVotedToBless", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractConfigSetIterator struct {
- Event *ARMContractConfigSet
+type RMNContractConfigSetIterator struct {
+ Event *RMNContractConfigSet
contract *bind.BoundContract
event string
@@ -907,7 +907,7 @@ type ARMContractConfigSetIterator struct {
fail error
}
-func (it *ARMContractConfigSetIterator) Next() bool {
+func (it *RMNContractConfigSetIterator) Next() bool {
if it.fail != nil {
return false
@@ -916,7 +916,7 @@ func (it *ARMContractConfigSetIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractConfigSet)
+ it.Event = new(RMNContractConfigSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -931,7 +931,7 @@ func (it *ARMContractConfigSetIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractConfigSet)
+ it.Event = new(RMNContractConfigSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -946,43 +946,43 @@ func (it *ARMContractConfigSetIterator) Next() bool {
}
}
-func (it *ARMContractConfigSetIterator) Error() error {
+func (it *RMNContractConfigSetIterator) Error() error {
return it.fail
}
-func (it *ARMContractConfigSetIterator) Close() error {
+func (it *RMNContractConfigSetIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractConfigSet struct {
+type RMNContractConfigSet struct {
ConfigVersion uint32
Config RMNConfig
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterConfigSet(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractConfigSetIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterConfigSet(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractConfigSetIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "ConfigSet", configVersionRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "ConfigSet", configVersionRule)
if err != nil {
return nil, err
}
- return &ARMContractConfigSetIterator{contract: _ARMContract.contract, event: "ConfigSet", logs: logs, sub: sub}, nil
+ return &RMNContractConfigSetIterator{contract: _RMNContract.contract, event: "ConfigSet", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *ARMContractConfigSet, configVersion []uint32) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNContractConfigSet, configVersion []uint32) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "ConfigSet", configVersionRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "ConfigSet", configVersionRule)
if err != nil {
return nil, err
}
@@ -992,8 +992,8 @@ func (_ARMContract *ARMContractFilterer) WatchConfigSet(opts *bind.WatchOpts, si
select {
case log := <-logs:
- event := new(ARMContractConfigSet)
- if err := _ARMContract.contract.UnpackLog(event, "ConfigSet", log); err != nil {
+ event := new(RMNContractConfigSet)
+ if err := _RMNContract.contract.UnpackLog(event, "ConfigSet", log); err != nil {
return err
}
event.Raw = log
@@ -1014,17 +1014,17 @@ func (_ARMContract *ARMContractFilterer) WatchConfigSet(opts *bind.WatchOpts, si
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseConfigSet(log types.Log) (*ARMContractConfigSet, error) {
- event := new(ARMContractConfigSet)
- if err := _ARMContract.contract.UnpackLog(event, "ConfigSet", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseConfigSet(log types.Log) (*RMNContractConfigSet, error) {
+ event := new(RMNContractConfigSet)
+ if err := _RMNContract.contract.UnpackLog(event, "ConfigSet", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractCurseLiftedIterator struct {
- Event *ARMContractCurseLifted
+type RMNContractCurseLiftedIterator struct {
+ Event *RMNContractCurseLifted
contract *bind.BoundContract
event string
@@ -1035,7 +1035,7 @@ type ARMContractCurseLiftedIterator struct {
fail error
}
-func (it *ARMContractCurseLiftedIterator) Next() bool {
+func (it *RMNContractCurseLiftedIterator) Next() bool {
if it.fail != nil {
return false
@@ -1044,7 +1044,7 @@ func (it *ARMContractCurseLiftedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractCurseLifted)
+ it.Event = new(RMNContractCurseLifted)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1059,7 +1059,7 @@ func (it *ARMContractCurseLiftedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractCurseLifted)
+ it.Event = new(RMNContractCurseLifted)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1074,32 +1074,32 @@ func (it *ARMContractCurseLiftedIterator) Next() bool {
}
}
-func (it *ARMContractCurseLiftedIterator) Error() error {
+func (it *RMNContractCurseLiftedIterator) Error() error {
return it.fail
}
-func (it *ARMContractCurseLiftedIterator) Close() error {
+func (it *RMNContractCurseLiftedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractCurseLifted struct {
+type RMNContractCurseLifted struct {
Subject [16]byte
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterCurseLifted(opts *bind.FilterOpts) (*ARMContractCurseLiftedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterCurseLifted(opts *bind.FilterOpts) (*RMNContractCurseLiftedIterator, error) {
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "CurseLifted")
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "CurseLifted")
if err != nil {
return nil, err
}
- return &ARMContractCurseLiftedIterator{contract: _ARMContract.contract, event: "CurseLifted", logs: logs, sub: sub}, nil
+ return &RMNContractCurseLiftedIterator{contract: _RMNContract.contract, event: "CurseLifted", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchCurseLifted(opts *bind.WatchOpts, sink chan<- *ARMContractCurseLifted) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchCurseLifted(opts *bind.WatchOpts, sink chan<- *RMNContractCurseLifted) (event.Subscription, error) {
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "CurseLifted")
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "CurseLifted")
if err != nil {
return nil, err
}
@@ -1109,8 +1109,8 @@ func (_ARMContract *ARMContractFilterer) WatchCurseLifted(opts *bind.WatchOpts,
select {
case log := <-logs:
- event := new(ARMContractCurseLifted)
- if err := _ARMContract.contract.UnpackLog(event, "CurseLifted", log); err != nil {
+ event := new(RMNContractCurseLifted)
+ if err := _RMNContract.contract.UnpackLog(event, "CurseLifted", log); err != nil {
return err
}
event.Raw = log
@@ -1131,17 +1131,17 @@ func (_ARMContract *ARMContractFilterer) WatchCurseLifted(opts *bind.WatchOpts,
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseCurseLifted(log types.Log) (*ARMContractCurseLifted, error) {
- event := new(ARMContractCurseLifted)
- if err := _ARMContract.contract.UnpackLog(event, "CurseLifted", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseCurseLifted(log types.Log) (*RMNContractCurseLifted, error) {
+ event := new(RMNContractCurseLifted)
+ if err := _RMNContract.contract.UnpackLog(event, "CurseLifted", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractCursedIterator struct {
- Event *ARMContractCursed
+type RMNContractCursedIterator struct {
+ Event *RMNContractCursed
contract *bind.BoundContract
event string
@@ -1152,7 +1152,7 @@ type ARMContractCursedIterator struct {
fail error
}
-func (it *ARMContractCursedIterator) Next() bool {
+func (it *RMNContractCursedIterator) Next() bool {
if it.fail != nil {
return false
@@ -1161,7 +1161,7 @@ func (it *ARMContractCursedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractCursed)
+ it.Event = new(RMNContractCursed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1176,7 +1176,7 @@ func (it *ARMContractCursedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractCursed)
+ it.Event = new(RMNContractCursed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1191,44 +1191,44 @@ func (it *ARMContractCursedIterator) Next() bool {
}
}
-func (it *ARMContractCursedIterator) Error() error {
+func (it *RMNContractCursedIterator) Error() error {
return it.fail
}
-func (it *ARMContractCursedIterator) Close() error {
+func (it *RMNContractCursedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractCursed struct {
+type RMNContractCursed struct {
ConfigVersion uint32
Subject [16]byte
BlockTimestamp uint64
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterCursed(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractCursedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterCursed(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractCursedIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "Cursed", configVersionRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "Cursed", configVersionRule)
if err != nil {
return nil, err
}
- return &ARMContractCursedIterator{contract: _ARMContract.contract, event: "Cursed", logs: logs, sub: sub}, nil
+ return &RMNContractCursedIterator{contract: _RMNContract.contract, event: "Cursed", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchCursed(opts *bind.WatchOpts, sink chan<- *ARMContractCursed, configVersion []uint32) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNContractCursed, configVersion []uint32) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "Cursed", configVersionRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "Cursed", configVersionRule)
if err != nil {
return nil, err
}
@@ -1238,8 +1238,8 @@ func (_ARMContract *ARMContractFilterer) WatchCursed(opts *bind.WatchOpts, sink
select {
case log := <-logs:
- event := new(ARMContractCursed)
- if err := _ARMContract.contract.UnpackLog(event, "Cursed", log); err != nil {
+ event := new(RMNContractCursed)
+ if err := _RMNContract.contract.UnpackLog(event, "Cursed", log); err != nil {
return err
}
event.Raw = log
@@ -1260,17 +1260,17 @@ func (_ARMContract *ARMContractFilterer) WatchCursed(opts *bind.WatchOpts, sink
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseCursed(log types.Log) (*ARMContractCursed, error) {
- event := new(ARMContractCursed)
- if err := _ARMContract.contract.UnpackLog(event, "Cursed", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseCursed(log types.Log) (*RMNContractCursed, error) {
+ event := new(RMNContractCursed)
+ if err := _RMNContract.contract.UnpackLog(event, "Cursed", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractOwnershipTransferRequestedIterator struct {
- Event *ARMContractOwnershipTransferRequested
+type RMNContractOwnershipTransferRequestedIterator struct {
+ Event *RMNContractOwnershipTransferRequested
contract *bind.BoundContract
event string
@@ -1281,7 +1281,7 @@ type ARMContractOwnershipTransferRequestedIterator struct {
fail error
}
-func (it *ARMContractOwnershipTransferRequestedIterator) Next() bool {
+func (it *RMNContractOwnershipTransferRequestedIterator) Next() bool {
if it.fail != nil {
return false
@@ -1290,7 +1290,7 @@ func (it *ARMContractOwnershipTransferRequestedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractOwnershipTransferRequested)
+ it.Event = new(RMNContractOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1305,7 +1305,7 @@ func (it *ARMContractOwnershipTransferRequestedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractOwnershipTransferRequested)
+ it.Event = new(RMNContractOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1320,22 +1320,22 @@ func (it *ARMContractOwnershipTransferRequestedIterator) Next() bool {
}
}
-func (it *ARMContractOwnershipTransferRequestedIterator) Error() error {
+func (it *RMNContractOwnershipTransferRequestedIterator) Error() error {
return it.fail
}
-func (it *ARMContractOwnershipTransferRequestedIterator) Close() error {
+func (it *RMNContractOwnershipTransferRequestedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractOwnershipTransferRequested struct {
+type RMNContractOwnershipTransferRequested struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMContractOwnershipTransferRequestedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNContractOwnershipTransferRequestedIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1346,14 +1346,14 @@ func (_ARMContract *ARMContractFilterer) FilterOwnershipTransferRequested(opts *
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
- return &ARMContractOwnershipTransferRequestedIterator{contract: _ARMContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
+ return &RMNContractOwnershipTransferRequestedIterator{contract: _RMNContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ARMContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1364,7 +1364,7 @@ func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferRequested(opts *b
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -1374,8 +1374,8 @@ func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferRequested(opts *b
select {
case log := <-logs:
- event := new(ARMContractOwnershipTransferRequested)
- if err := _ARMContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+ event := new(RMNContractOwnershipTransferRequested)
+ if err := _RMNContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return err
}
event.Raw = log
@@ -1396,17 +1396,17 @@ func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferRequested(opts *b
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*ARMContractOwnershipTransferRequested, error) {
- event := new(ARMContractOwnershipTransferRequested)
- if err := _ARMContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNContractOwnershipTransferRequested, error) {
+ event := new(RMNContractOwnershipTransferRequested)
+ if err := _RMNContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractOwnershipTransferredIterator struct {
- Event *ARMContractOwnershipTransferred
+type RMNContractOwnershipTransferredIterator struct {
+ Event *RMNContractOwnershipTransferred
contract *bind.BoundContract
event string
@@ -1417,7 +1417,7 @@ type ARMContractOwnershipTransferredIterator struct {
fail error
}
-func (it *ARMContractOwnershipTransferredIterator) Next() bool {
+func (it *RMNContractOwnershipTransferredIterator) Next() bool {
if it.fail != nil {
return false
@@ -1426,7 +1426,7 @@ func (it *ARMContractOwnershipTransferredIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractOwnershipTransferred)
+ it.Event = new(RMNContractOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1441,7 +1441,7 @@ func (it *ARMContractOwnershipTransferredIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractOwnershipTransferred)
+ it.Event = new(RMNContractOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1456,22 +1456,22 @@ func (it *ARMContractOwnershipTransferredIterator) Next() bool {
}
}
-func (it *ARMContractOwnershipTransferredIterator) Error() error {
+func (it *RMNContractOwnershipTransferredIterator) Error() error {
return it.fail
}
-func (it *ARMContractOwnershipTransferredIterator) Close() error {
+func (it *RMNContractOwnershipTransferredIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractOwnershipTransferred struct {
+type RMNContractOwnershipTransferred struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMContractOwnershipTransferredIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNContractOwnershipTransferredIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1482,14 +1482,14 @@ func (_ARMContract *ARMContractFilterer) FilterOwnershipTransferred(opts *bind.F
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
- return &ARMContractOwnershipTransferredIterator{contract: _ARMContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+ return &RMNContractOwnershipTransferredIterator{contract: _RMNContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ARMContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -1500,7 +1500,7 @@ func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferred(opts *bind.Wa
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -1510,8 +1510,8 @@ func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferred(opts *bind.Wa
select {
case log := <-logs:
- event := new(ARMContractOwnershipTransferred)
- if err := _ARMContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ event := new(RMNContractOwnershipTransferred)
+ if err := _RMNContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return err
}
event.Raw = log
@@ -1532,17 +1532,17 @@ func (_ARMContract *ARMContractFilterer) WatchOwnershipTransferred(opts *bind.Wa
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseOwnershipTransferred(log types.Log) (*ARMContractOwnershipTransferred, error) {
- event := new(ARMContractOwnershipTransferred)
- if err := _ARMContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseOwnershipTransferred(log types.Log) (*RMNContractOwnershipTransferred, error) {
+ event := new(RMNContractOwnershipTransferred)
+ if err := _RMNContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractPermaBlessedCommitStoreAddedIterator struct {
- Event *ARMContractPermaBlessedCommitStoreAdded
+type RMNContractPermaBlessedCommitStoreAddedIterator struct {
+ Event *RMNContractPermaBlessedCommitStoreAdded
contract *bind.BoundContract
event string
@@ -1553,7 +1553,7 @@ type ARMContractPermaBlessedCommitStoreAddedIterator struct {
fail error
}
-func (it *ARMContractPermaBlessedCommitStoreAddedIterator) Next() bool {
+func (it *RMNContractPermaBlessedCommitStoreAddedIterator) Next() bool {
if it.fail != nil {
return false
@@ -1562,7 +1562,7 @@ func (it *ARMContractPermaBlessedCommitStoreAddedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractPermaBlessedCommitStoreAdded)
+ it.Event = new(RMNContractPermaBlessedCommitStoreAdded)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1577,7 +1577,7 @@ func (it *ARMContractPermaBlessedCommitStoreAddedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractPermaBlessedCommitStoreAdded)
+ it.Event = new(RMNContractPermaBlessedCommitStoreAdded)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1592,32 +1592,32 @@ func (it *ARMContractPermaBlessedCommitStoreAddedIterator) Next() bool {
}
}
-func (it *ARMContractPermaBlessedCommitStoreAddedIterator) Error() error {
+func (it *RMNContractPermaBlessedCommitStoreAddedIterator) Error() error {
return it.fail
}
-func (it *ARMContractPermaBlessedCommitStoreAddedIterator) Close() error {
+func (it *RMNContractPermaBlessedCommitStoreAddedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractPermaBlessedCommitStoreAdded struct {
+type RMNContractPermaBlessedCommitStoreAdded struct {
CommitStore common.Address
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterPermaBlessedCommitStoreAdded(opts *bind.FilterOpts) (*ARMContractPermaBlessedCommitStoreAddedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterPermaBlessedCommitStoreAdded(opts *bind.FilterOpts) (*RMNContractPermaBlessedCommitStoreAddedIterator, error) {
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "PermaBlessedCommitStoreAdded")
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "PermaBlessedCommitStoreAdded")
if err != nil {
return nil, err
}
- return &ARMContractPermaBlessedCommitStoreAddedIterator{contract: _ARMContract.contract, event: "PermaBlessedCommitStoreAdded", logs: logs, sub: sub}, nil
+ return &RMNContractPermaBlessedCommitStoreAddedIterator{contract: _RMNContract.contract, event: "PermaBlessedCommitStoreAdded", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchPermaBlessedCommitStoreAdded(opts *bind.WatchOpts, sink chan<- *ARMContractPermaBlessedCommitStoreAdded) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchPermaBlessedCommitStoreAdded(opts *bind.WatchOpts, sink chan<- *RMNContractPermaBlessedCommitStoreAdded) (event.Subscription, error) {
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "PermaBlessedCommitStoreAdded")
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "PermaBlessedCommitStoreAdded")
if err != nil {
return nil, err
}
@@ -1627,8 +1627,8 @@ func (_ARMContract *ARMContractFilterer) WatchPermaBlessedCommitStoreAdded(opts
select {
case log := <-logs:
- event := new(ARMContractPermaBlessedCommitStoreAdded)
- if err := _ARMContract.contract.UnpackLog(event, "PermaBlessedCommitStoreAdded", log); err != nil {
+ event := new(RMNContractPermaBlessedCommitStoreAdded)
+ if err := _RMNContract.contract.UnpackLog(event, "PermaBlessedCommitStoreAdded", log); err != nil {
return err
}
event.Raw = log
@@ -1649,17 +1649,17 @@ func (_ARMContract *ARMContractFilterer) WatchPermaBlessedCommitStoreAdded(opts
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParsePermaBlessedCommitStoreAdded(log types.Log) (*ARMContractPermaBlessedCommitStoreAdded, error) {
- event := new(ARMContractPermaBlessedCommitStoreAdded)
- if err := _ARMContract.contract.UnpackLog(event, "PermaBlessedCommitStoreAdded", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParsePermaBlessedCommitStoreAdded(log types.Log) (*RMNContractPermaBlessedCommitStoreAdded, error) {
+ event := new(RMNContractPermaBlessedCommitStoreAdded)
+ if err := _RMNContract.contract.UnpackLog(event, "PermaBlessedCommitStoreAdded", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractPermaBlessedCommitStoreRemovedIterator struct {
- Event *ARMContractPermaBlessedCommitStoreRemoved
+type RMNContractPermaBlessedCommitStoreRemovedIterator struct {
+ Event *RMNContractPermaBlessedCommitStoreRemoved
contract *bind.BoundContract
event string
@@ -1670,7 +1670,7 @@ type ARMContractPermaBlessedCommitStoreRemovedIterator struct {
fail error
}
-func (it *ARMContractPermaBlessedCommitStoreRemovedIterator) Next() bool {
+func (it *RMNContractPermaBlessedCommitStoreRemovedIterator) Next() bool {
if it.fail != nil {
return false
@@ -1679,7 +1679,7 @@ func (it *ARMContractPermaBlessedCommitStoreRemovedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractPermaBlessedCommitStoreRemoved)
+ it.Event = new(RMNContractPermaBlessedCommitStoreRemoved)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1694,7 +1694,7 @@ func (it *ARMContractPermaBlessedCommitStoreRemovedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractPermaBlessedCommitStoreRemoved)
+ it.Event = new(RMNContractPermaBlessedCommitStoreRemoved)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1709,32 +1709,32 @@ func (it *ARMContractPermaBlessedCommitStoreRemovedIterator) Next() bool {
}
}
-func (it *ARMContractPermaBlessedCommitStoreRemovedIterator) Error() error {
+func (it *RMNContractPermaBlessedCommitStoreRemovedIterator) Error() error {
return it.fail
}
-func (it *ARMContractPermaBlessedCommitStoreRemovedIterator) Close() error {
+func (it *RMNContractPermaBlessedCommitStoreRemovedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractPermaBlessedCommitStoreRemoved struct {
+type RMNContractPermaBlessedCommitStoreRemoved struct {
CommitStore common.Address
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterPermaBlessedCommitStoreRemoved(opts *bind.FilterOpts) (*ARMContractPermaBlessedCommitStoreRemovedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterPermaBlessedCommitStoreRemoved(opts *bind.FilterOpts) (*RMNContractPermaBlessedCommitStoreRemovedIterator, error) {
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "PermaBlessedCommitStoreRemoved")
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "PermaBlessedCommitStoreRemoved")
if err != nil {
return nil, err
}
- return &ARMContractPermaBlessedCommitStoreRemovedIterator{contract: _ARMContract.contract, event: "PermaBlessedCommitStoreRemoved", logs: logs, sub: sub}, nil
+ return &RMNContractPermaBlessedCommitStoreRemovedIterator{contract: _RMNContract.contract, event: "PermaBlessedCommitStoreRemoved", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchPermaBlessedCommitStoreRemoved(opts *bind.WatchOpts, sink chan<- *ARMContractPermaBlessedCommitStoreRemoved) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchPermaBlessedCommitStoreRemoved(opts *bind.WatchOpts, sink chan<- *RMNContractPermaBlessedCommitStoreRemoved) (event.Subscription, error) {
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "PermaBlessedCommitStoreRemoved")
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "PermaBlessedCommitStoreRemoved")
if err != nil {
return nil, err
}
@@ -1744,8 +1744,8 @@ func (_ARMContract *ARMContractFilterer) WatchPermaBlessedCommitStoreRemoved(opt
select {
case log := <-logs:
- event := new(ARMContractPermaBlessedCommitStoreRemoved)
- if err := _ARMContract.contract.UnpackLog(event, "PermaBlessedCommitStoreRemoved", log); err != nil {
+ event := new(RMNContractPermaBlessedCommitStoreRemoved)
+ if err := _RMNContract.contract.UnpackLog(event, "PermaBlessedCommitStoreRemoved", log); err != nil {
return err
}
event.Raw = log
@@ -1766,17 +1766,17 @@ func (_ARMContract *ARMContractFilterer) WatchPermaBlessedCommitStoreRemoved(opt
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParsePermaBlessedCommitStoreRemoved(log types.Log) (*ARMContractPermaBlessedCommitStoreRemoved, error) {
- event := new(ARMContractPermaBlessedCommitStoreRemoved)
- if err := _ARMContract.contract.UnpackLog(event, "PermaBlessedCommitStoreRemoved", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParsePermaBlessedCommitStoreRemoved(log types.Log) (*RMNContractPermaBlessedCommitStoreRemoved, error) {
+ event := new(RMNContractPermaBlessedCommitStoreRemoved)
+ if err := _RMNContract.contract.UnpackLog(event, "PermaBlessedCommitStoreRemoved", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractSkippedUnvoteToCurseIterator struct {
- Event *ARMContractSkippedUnvoteToCurse
+type RMNContractSkippedUnvoteToCurseIterator struct {
+ Event *RMNContractSkippedUnvoteToCurse
contract *bind.BoundContract
event string
@@ -1787,7 +1787,7 @@ type ARMContractSkippedUnvoteToCurseIterator struct {
fail error
}
-func (it *ARMContractSkippedUnvoteToCurseIterator) Next() bool {
+func (it *RMNContractSkippedUnvoteToCurseIterator) Next() bool {
if it.fail != nil {
return false
@@ -1796,7 +1796,7 @@ func (it *ARMContractSkippedUnvoteToCurseIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractSkippedUnvoteToCurse)
+ it.Event = new(RMNContractSkippedUnvoteToCurse)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1811,7 +1811,7 @@ func (it *ARMContractSkippedUnvoteToCurseIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractSkippedUnvoteToCurse)
+ it.Event = new(RMNContractSkippedUnvoteToCurse)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1826,16 +1826,16 @@ func (it *ARMContractSkippedUnvoteToCurseIterator) Next() bool {
}
}
-func (it *ARMContractSkippedUnvoteToCurseIterator) Error() error {
+func (it *RMNContractSkippedUnvoteToCurseIterator) Error() error {
return it.fail
}
-func (it *ARMContractSkippedUnvoteToCurseIterator) Close() error {
+func (it *RMNContractSkippedUnvoteToCurseIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractSkippedUnvoteToCurse struct {
+type RMNContractSkippedUnvoteToCurse struct {
Voter common.Address
Subject [16]byte
OnchainCursesHash [28]byte
@@ -1843,28 +1843,28 @@ type ARMContractSkippedUnvoteToCurse struct {
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterSkippedUnvoteToCurse(opts *bind.FilterOpts, voter []common.Address) (*ARMContractSkippedUnvoteToCurseIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterSkippedUnvoteToCurse(opts *bind.FilterOpts, voter []common.Address) (*RMNContractSkippedUnvoteToCurseIterator, error) {
var voterRule []interface{}
for _, voterItem := range voter {
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "SkippedUnvoteToCurse", voterRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "SkippedUnvoteToCurse", voterRule)
if err != nil {
return nil, err
}
- return &ARMContractSkippedUnvoteToCurseIterator{contract: _ARMContract.contract, event: "SkippedUnvoteToCurse", logs: logs, sub: sub}, nil
+ return &RMNContractSkippedUnvoteToCurseIterator{contract: _RMNContract.contract, event: "SkippedUnvoteToCurse", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchSkippedUnvoteToCurse(opts *bind.WatchOpts, sink chan<- *ARMContractSkippedUnvoteToCurse, voter []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchSkippedUnvoteToCurse(opts *bind.WatchOpts, sink chan<- *RMNContractSkippedUnvoteToCurse, voter []common.Address) (event.Subscription, error) {
var voterRule []interface{}
for _, voterItem := range voter {
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "SkippedUnvoteToCurse", voterRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "SkippedUnvoteToCurse", voterRule)
if err != nil {
return nil, err
}
@@ -1874,8 +1874,8 @@ func (_ARMContract *ARMContractFilterer) WatchSkippedUnvoteToCurse(opts *bind.Wa
select {
case log := <-logs:
- event := new(ARMContractSkippedUnvoteToCurse)
- if err := _ARMContract.contract.UnpackLog(event, "SkippedUnvoteToCurse", log); err != nil {
+ event := new(RMNContractSkippedUnvoteToCurse)
+ if err := _RMNContract.contract.UnpackLog(event, "SkippedUnvoteToCurse", log); err != nil {
return err
}
event.Raw = log
@@ -1896,17 +1896,17 @@ func (_ARMContract *ARMContractFilterer) WatchSkippedUnvoteToCurse(opts *bind.Wa
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseSkippedUnvoteToCurse(log types.Log) (*ARMContractSkippedUnvoteToCurse, error) {
- event := new(ARMContractSkippedUnvoteToCurse)
- if err := _ARMContract.contract.UnpackLog(event, "SkippedUnvoteToCurse", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseSkippedUnvoteToCurse(log types.Log) (*RMNContractSkippedUnvoteToCurse, error) {
+ event := new(RMNContractSkippedUnvoteToCurse)
+ if err := _RMNContract.contract.UnpackLog(event, "SkippedUnvoteToCurse", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractTaggedRootBlessVotesResetIterator struct {
- Event *ARMContractTaggedRootBlessVotesReset
+type RMNContractTaggedRootBlessVotesResetIterator struct {
+ Event *RMNContractTaggedRootBlessVotesReset
contract *bind.BoundContract
event string
@@ -1917,7 +1917,7 @@ type ARMContractTaggedRootBlessVotesResetIterator struct {
fail error
}
-func (it *ARMContractTaggedRootBlessVotesResetIterator) Next() bool {
+func (it *RMNContractTaggedRootBlessVotesResetIterator) Next() bool {
if it.fail != nil {
return false
@@ -1926,7 +1926,7 @@ func (it *ARMContractTaggedRootBlessVotesResetIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractTaggedRootBlessVotesReset)
+ it.Event = new(RMNContractTaggedRootBlessVotesReset)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1941,7 +1941,7 @@ func (it *ARMContractTaggedRootBlessVotesResetIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractTaggedRootBlessVotesReset)
+ it.Event = new(RMNContractTaggedRootBlessVotesReset)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -1956,44 +1956,44 @@ func (it *ARMContractTaggedRootBlessVotesResetIterator) Next() bool {
}
}
-func (it *ARMContractTaggedRootBlessVotesResetIterator) Error() error {
+func (it *RMNContractTaggedRootBlessVotesResetIterator) Error() error {
return it.fail
}
-func (it *ARMContractTaggedRootBlessVotesResetIterator) Close() error {
+func (it *RMNContractTaggedRootBlessVotesResetIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractTaggedRootBlessVotesReset struct {
+type RMNContractTaggedRootBlessVotesReset struct {
ConfigVersion uint32
TaggedRoot IRMNTaggedRoot
WasBlessed bool
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterTaggedRootBlessVotesReset(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractTaggedRootBlessVotesResetIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterTaggedRootBlessVotesReset(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractTaggedRootBlessVotesResetIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "TaggedRootBlessVotesReset", configVersionRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "TaggedRootBlessVotesReset", configVersionRule)
if err != nil {
return nil, err
}
- return &ARMContractTaggedRootBlessVotesResetIterator{contract: _ARMContract.contract, event: "TaggedRootBlessVotesReset", logs: logs, sub: sub}, nil
+ return &RMNContractTaggedRootBlessVotesResetIterator{contract: _RMNContract.contract, event: "TaggedRootBlessVotesReset", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchTaggedRootBlessVotesReset(opts *bind.WatchOpts, sink chan<- *ARMContractTaggedRootBlessVotesReset, configVersion []uint32) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchTaggedRootBlessVotesReset(opts *bind.WatchOpts, sink chan<- *RMNContractTaggedRootBlessVotesReset, configVersion []uint32) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "TaggedRootBlessVotesReset", configVersionRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "TaggedRootBlessVotesReset", configVersionRule)
if err != nil {
return nil, err
}
@@ -2003,8 +2003,8 @@ func (_ARMContract *ARMContractFilterer) WatchTaggedRootBlessVotesReset(opts *bi
select {
case log := <-logs:
- event := new(ARMContractTaggedRootBlessVotesReset)
- if err := _ARMContract.contract.UnpackLog(event, "TaggedRootBlessVotesReset", log); err != nil {
+ event := new(RMNContractTaggedRootBlessVotesReset)
+ if err := _RMNContract.contract.UnpackLog(event, "TaggedRootBlessVotesReset", log); err != nil {
return err
}
event.Raw = log
@@ -2025,17 +2025,17 @@ func (_ARMContract *ARMContractFilterer) WatchTaggedRootBlessVotesReset(opts *bi
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseTaggedRootBlessVotesReset(log types.Log) (*ARMContractTaggedRootBlessVotesReset, error) {
- event := new(ARMContractTaggedRootBlessVotesReset)
- if err := _ARMContract.contract.UnpackLog(event, "TaggedRootBlessVotesReset", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseTaggedRootBlessVotesReset(log types.Log) (*RMNContractTaggedRootBlessVotesReset, error) {
+ event := new(RMNContractTaggedRootBlessVotesReset)
+ if err := _RMNContract.contract.UnpackLog(event, "TaggedRootBlessVotesReset", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractTaggedRootBlessedIterator struct {
- Event *ARMContractTaggedRootBlessed
+type RMNContractTaggedRootBlessedIterator struct {
+ Event *RMNContractTaggedRootBlessed
contract *bind.BoundContract
event string
@@ -2046,7 +2046,7 @@ type ARMContractTaggedRootBlessedIterator struct {
fail error
}
-func (it *ARMContractTaggedRootBlessedIterator) Next() bool {
+func (it *RMNContractTaggedRootBlessedIterator) Next() bool {
if it.fail != nil {
return false
@@ -2055,7 +2055,7 @@ func (it *ARMContractTaggedRootBlessedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractTaggedRootBlessed)
+ it.Event = new(RMNContractTaggedRootBlessed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2070,7 +2070,7 @@ func (it *ARMContractTaggedRootBlessedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractTaggedRootBlessed)
+ it.Event = new(RMNContractTaggedRootBlessed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2085,44 +2085,44 @@ func (it *ARMContractTaggedRootBlessedIterator) Next() bool {
}
}
-func (it *ARMContractTaggedRootBlessedIterator) Error() error {
+func (it *RMNContractTaggedRootBlessedIterator) Error() error {
return it.fail
}
-func (it *ARMContractTaggedRootBlessedIterator) Close() error {
+func (it *RMNContractTaggedRootBlessedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractTaggedRootBlessed struct {
+type RMNContractTaggedRootBlessed struct {
ConfigVersion uint32
TaggedRoot IRMNTaggedRoot
AccumulatedWeight uint16
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterTaggedRootBlessed(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractTaggedRootBlessedIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterTaggedRootBlessed(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractTaggedRootBlessedIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "TaggedRootBlessed", configVersionRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "TaggedRootBlessed", configVersionRule)
if err != nil {
return nil, err
}
- return &ARMContractTaggedRootBlessedIterator{contract: _ARMContract.contract, event: "TaggedRootBlessed", logs: logs, sub: sub}, nil
+ return &RMNContractTaggedRootBlessedIterator{contract: _RMNContract.contract, event: "TaggedRootBlessed", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchTaggedRootBlessed(opts *bind.WatchOpts, sink chan<- *ARMContractTaggedRootBlessed, configVersion []uint32) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchTaggedRootBlessed(opts *bind.WatchOpts, sink chan<- *RMNContractTaggedRootBlessed, configVersion []uint32) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
configVersionRule = append(configVersionRule, configVersionItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "TaggedRootBlessed", configVersionRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "TaggedRootBlessed", configVersionRule)
if err != nil {
return nil, err
}
@@ -2132,8 +2132,8 @@ func (_ARMContract *ARMContractFilterer) WatchTaggedRootBlessed(opts *bind.Watch
select {
case log := <-logs:
- event := new(ARMContractTaggedRootBlessed)
- if err := _ARMContract.contract.UnpackLog(event, "TaggedRootBlessed", log); err != nil {
+ event := new(RMNContractTaggedRootBlessed)
+ if err := _RMNContract.contract.UnpackLog(event, "TaggedRootBlessed", log); err != nil {
return err
}
event.Raw = log
@@ -2154,17 +2154,17 @@ func (_ARMContract *ARMContractFilterer) WatchTaggedRootBlessed(opts *bind.Watch
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseTaggedRootBlessed(log types.Log) (*ARMContractTaggedRootBlessed, error) {
- event := new(ARMContractTaggedRootBlessed)
- if err := _ARMContract.contract.UnpackLog(event, "TaggedRootBlessed", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseTaggedRootBlessed(log types.Log) (*RMNContractTaggedRootBlessed, error) {
+ event := new(RMNContractTaggedRootBlessed)
+ if err := _RMNContract.contract.UnpackLog(event, "TaggedRootBlessed", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractUnvotedToCurseIterator struct {
- Event *ARMContractUnvotedToCurse
+type RMNContractUnvotedToCurseIterator struct {
+ Event *RMNContractUnvotedToCurse
contract *bind.BoundContract
event string
@@ -2175,7 +2175,7 @@ type ARMContractUnvotedToCurseIterator struct {
fail error
}
-func (it *ARMContractUnvotedToCurseIterator) Next() bool {
+func (it *RMNContractUnvotedToCurseIterator) Next() bool {
if it.fail != nil {
return false
@@ -2184,7 +2184,7 @@ func (it *ARMContractUnvotedToCurseIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractUnvotedToCurse)
+ it.Event = new(RMNContractUnvotedToCurse)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2199,7 +2199,7 @@ func (it *ARMContractUnvotedToCurseIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractUnvotedToCurse)
+ it.Event = new(RMNContractUnvotedToCurse)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2214,16 +2214,16 @@ func (it *ARMContractUnvotedToCurseIterator) Next() bool {
}
}
-func (it *ARMContractUnvotedToCurseIterator) Error() error {
+func (it *RMNContractUnvotedToCurseIterator) Error() error {
return it.fail
}
-func (it *ARMContractUnvotedToCurseIterator) Close() error {
+func (it *RMNContractUnvotedToCurseIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractUnvotedToCurse struct {
+type RMNContractUnvotedToCurse struct {
ConfigVersion uint32
Voter common.Address
Subject [16]byte
@@ -2233,7 +2233,7 @@ type ARMContractUnvotedToCurse struct {
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterUnvotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractUnvotedToCurseIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterUnvotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractUnvotedToCurseIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -2244,14 +2244,14 @@ func (_ARMContract *ARMContractFilterer) FilterUnvotedToCurse(opts *bind.FilterO
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "UnvotedToCurse", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "UnvotedToCurse", configVersionRule, voterRule)
if err != nil {
return nil, err
}
- return &ARMContractUnvotedToCurseIterator{contract: _ARMContract.contract, event: "UnvotedToCurse", logs: logs, sub: sub}, nil
+ return &RMNContractUnvotedToCurseIterator{contract: _RMNContract.contract, event: "UnvotedToCurse", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchUnvotedToCurse(opts *bind.WatchOpts, sink chan<- *ARMContractUnvotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchUnvotedToCurse(opts *bind.WatchOpts, sink chan<- *RMNContractUnvotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -2262,7 +2262,7 @@ func (_ARMContract *ARMContractFilterer) WatchUnvotedToCurse(opts *bind.WatchOpt
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "UnvotedToCurse", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "UnvotedToCurse", configVersionRule, voterRule)
if err != nil {
return nil, err
}
@@ -2272,8 +2272,8 @@ func (_ARMContract *ARMContractFilterer) WatchUnvotedToCurse(opts *bind.WatchOpt
select {
case log := <-logs:
- event := new(ARMContractUnvotedToCurse)
- if err := _ARMContract.contract.UnpackLog(event, "UnvotedToCurse", log); err != nil {
+ event := new(RMNContractUnvotedToCurse)
+ if err := _RMNContract.contract.UnpackLog(event, "UnvotedToCurse", log); err != nil {
return err
}
event.Raw = log
@@ -2294,17 +2294,17 @@ func (_ARMContract *ARMContractFilterer) WatchUnvotedToCurse(opts *bind.WatchOpt
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseUnvotedToCurse(log types.Log) (*ARMContractUnvotedToCurse, error) {
- event := new(ARMContractUnvotedToCurse)
- if err := _ARMContract.contract.UnpackLog(event, "UnvotedToCurse", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseUnvotedToCurse(log types.Log) (*RMNContractUnvotedToCurse, error) {
+ event := new(RMNContractUnvotedToCurse)
+ if err := _RMNContract.contract.UnpackLog(event, "UnvotedToCurse", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractVotedToBlessIterator struct {
- Event *ARMContractVotedToBless
+type RMNContractVotedToBlessIterator struct {
+ Event *RMNContractVotedToBless
contract *bind.BoundContract
event string
@@ -2315,7 +2315,7 @@ type ARMContractVotedToBlessIterator struct {
fail error
}
-func (it *ARMContractVotedToBlessIterator) Next() bool {
+func (it *RMNContractVotedToBlessIterator) Next() bool {
if it.fail != nil {
return false
@@ -2324,7 +2324,7 @@ func (it *ARMContractVotedToBlessIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractVotedToBless)
+ it.Event = new(RMNContractVotedToBless)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2339,7 +2339,7 @@ func (it *ARMContractVotedToBlessIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractVotedToBless)
+ it.Event = new(RMNContractVotedToBless)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2354,16 +2354,16 @@ func (it *ARMContractVotedToBlessIterator) Next() bool {
}
}
-func (it *ARMContractVotedToBlessIterator) Error() error {
+func (it *RMNContractVotedToBlessIterator) Error() error {
return it.fail
}
-func (it *ARMContractVotedToBlessIterator) Close() error {
+func (it *RMNContractVotedToBlessIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractVotedToBless struct {
+type RMNContractVotedToBless struct {
ConfigVersion uint32
Voter common.Address
TaggedRoot IRMNTaggedRoot
@@ -2371,7 +2371,7 @@ type ARMContractVotedToBless struct {
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractVotedToBlessIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractVotedToBlessIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -2382,14 +2382,14 @@ func (_ARMContract *ARMContractFilterer) FilterVotedToBless(opts *bind.FilterOpt
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "VotedToBless", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "VotedToBless", configVersionRule, voterRule)
if err != nil {
return nil, err
}
- return &ARMContractVotedToBlessIterator{contract: _ARMContract.contract, event: "VotedToBless", logs: logs, sub: sub}, nil
+ return &RMNContractVotedToBlessIterator{contract: _RMNContract.contract, event: "VotedToBless", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchVotedToBless(opts *bind.WatchOpts, sink chan<- *ARMContractVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchVotedToBless(opts *bind.WatchOpts, sink chan<- *RMNContractVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -2400,7 +2400,7 @@ func (_ARMContract *ARMContractFilterer) WatchVotedToBless(opts *bind.WatchOpts,
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "VotedToBless", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "VotedToBless", configVersionRule, voterRule)
if err != nil {
return nil, err
}
@@ -2410,8 +2410,8 @@ func (_ARMContract *ARMContractFilterer) WatchVotedToBless(opts *bind.WatchOpts,
select {
case log := <-logs:
- event := new(ARMContractVotedToBless)
- if err := _ARMContract.contract.UnpackLog(event, "VotedToBless", log); err != nil {
+ event := new(RMNContractVotedToBless)
+ if err := _RMNContract.contract.UnpackLog(event, "VotedToBless", log); err != nil {
return err
}
event.Raw = log
@@ -2432,17 +2432,17 @@ func (_ARMContract *ARMContractFilterer) WatchVotedToBless(opts *bind.WatchOpts,
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseVotedToBless(log types.Log) (*ARMContractVotedToBless, error) {
- event := new(ARMContractVotedToBless)
- if err := _ARMContract.contract.UnpackLog(event, "VotedToBless", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseVotedToBless(log types.Log) (*RMNContractVotedToBless, error) {
+ event := new(RMNContractVotedToBless)
+ if err := _RMNContract.contract.UnpackLog(event, "VotedToBless", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMContractVotedToCurseIterator struct {
- Event *ARMContractVotedToCurse
+type RMNContractVotedToCurseIterator struct {
+ Event *RMNContractVotedToCurse
contract *bind.BoundContract
event string
@@ -2453,7 +2453,7 @@ type ARMContractVotedToCurseIterator struct {
fail error
}
-func (it *ARMContractVotedToCurseIterator) Next() bool {
+func (it *RMNContractVotedToCurseIterator) Next() bool {
if it.fail != nil {
return false
@@ -2462,7 +2462,7 @@ func (it *ARMContractVotedToCurseIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMContractVotedToCurse)
+ it.Event = new(RMNContractVotedToCurse)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2477,7 +2477,7 @@ func (it *ARMContractVotedToCurseIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMContractVotedToCurse)
+ it.Event = new(RMNContractVotedToCurse)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -2492,16 +2492,16 @@ func (it *ARMContractVotedToCurseIterator) Next() bool {
}
}
-func (it *ARMContractVotedToCurseIterator) Error() error {
+func (it *RMNContractVotedToCurseIterator) Error() error {
return it.fail
}
-func (it *ARMContractVotedToCurseIterator) Close() error {
+func (it *RMNContractVotedToCurseIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMContractVotedToCurse struct {
+type RMNContractVotedToCurse struct {
ConfigVersion uint32
Voter common.Address
Subject [16]byte
@@ -2513,7 +2513,7 @@ type ARMContractVotedToCurse struct {
Raw types.Log
}
-func (_ARMContract *ARMContractFilterer) FilterVotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractVotedToCurseIterator, error) {
+func (_RMNContract *RMNContractFilterer) FilterVotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractVotedToCurseIterator, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -2524,14 +2524,14 @@ func (_ARMContract *ARMContractFilterer) FilterVotedToCurse(opts *bind.FilterOpt
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.FilterLogs(opts, "VotedToCurse", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.FilterLogs(opts, "VotedToCurse", configVersionRule, voterRule)
if err != nil {
return nil, err
}
- return &ARMContractVotedToCurseIterator{contract: _ARMContract.contract, event: "VotedToCurse", logs: logs, sub: sub}, nil
+ return &RMNContractVotedToCurseIterator{contract: _RMNContract.contract, event: "VotedToCurse", logs: logs, sub: sub}, nil
}
-func (_ARMContract *ARMContractFilterer) WatchVotedToCurse(opts *bind.WatchOpts, sink chan<- *ARMContractVotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
+func (_RMNContract *RMNContractFilterer) WatchVotedToCurse(opts *bind.WatchOpts, sink chan<- *RMNContractVotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error) {
var configVersionRule []interface{}
for _, configVersionItem := range configVersion {
@@ -2542,7 +2542,7 @@ func (_ARMContract *ARMContractFilterer) WatchVotedToCurse(opts *bind.WatchOpts,
voterRule = append(voterRule, voterItem)
}
- logs, sub, err := _ARMContract.contract.WatchLogs(opts, "VotedToCurse", configVersionRule, voterRule)
+ logs, sub, err := _RMNContract.contract.WatchLogs(opts, "VotedToCurse", configVersionRule, voterRule)
if err != nil {
return nil, err
}
@@ -2552,8 +2552,8 @@ func (_ARMContract *ARMContractFilterer) WatchVotedToCurse(opts *bind.WatchOpts,
select {
case log := <-logs:
- event := new(ARMContractVotedToCurse)
- if err := _ARMContract.contract.UnpackLog(event, "VotedToCurse", log); err != nil {
+ event := new(RMNContractVotedToCurse)
+ if err := _RMNContract.contract.UnpackLog(event, "VotedToCurse", log); err != nil {
return err
}
event.Raw = log
@@ -2574,9 +2574,9 @@ func (_ARMContract *ARMContractFilterer) WatchVotedToCurse(opts *bind.WatchOpts,
}), nil
}
-func (_ARMContract *ARMContractFilterer) ParseVotedToCurse(log types.Log) (*ARMContractVotedToCurse, error) {
- event := new(ARMContractVotedToCurse)
- if err := _ARMContract.contract.UnpackLog(event, "VotedToCurse", log); err != nil {
+func (_RMNContract *RMNContractFilterer) ParseVotedToCurse(log types.Log) (*RMNContractVotedToCurse, error) {
+ event := new(RMNContractVotedToCurse)
+ if err := _RMNContract.contract.UnpackLog(event, "VotedToCurse", log); err != nil {
return nil, err
}
event.Raw = log
@@ -2600,109 +2600,109 @@ type GetCurseProgress struct {
Cursed bool
}
-func (_ARMContract *ARMContract) ParseLog(log types.Log) (generated.AbigenLog, error) {
+func (_RMNContract *RMNContract) ParseLog(log types.Log) (generated.AbigenLog, error) {
switch log.Topics[0] {
- case _ARMContract.abi.Events["AlreadyBlessed"].ID:
- return _ARMContract.ParseAlreadyBlessed(log)
- case _ARMContract.abi.Events["AlreadyVotedToBless"].ID:
- return _ARMContract.ParseAlreadyVotedToBless(log)
- case _ARMContract.abi.Events["ConfigSet"].ID:
- return _ARMContract.ParseConfigSet(log)
- case _ARMContract.abi.Events["CurseLifted"].ID:
- return _ARMContract.ParseCurseLifted(log)
- case _ARMContract.abi.Events["Cursed"].ID:
- return _ARMContract.ParseCursed(log)
- case _ARMContract.abi.Events["OwnershipTransferRequested"].ID:
- return _ARMContract.ParseOwnershipTransferRequested(log)
- case _ARMContract.abi.Events["OwnershipTransferred"].ID:
- return _ARMContract.ParseOwnershipTransferred(log)
- case _ARMContract.abi.Events["PermaBlessedCommitStoreAdded"].ID:
- return _ARMContract.ParsePermaBlessedCommitStoreAdded(log)
- case _ARMContract.abi.Events["PermaBlessedCommitStoreRemoved"].ID:
- return _ARMContract.ParsePermaBlessedCommitStoreRemoved(log)
- case _ARMContract.abi.Events["SkippedUnvoteToCurse"].ID:
- return _ARMContract.ParseSkippedUnvoteToCurse(log)
- case _ARMContract.abi.Events["TaggedRootBlessVotesReset"].ID:
- return _ARMContract.ParseTaggedRootBlessVotesReset(log)
- case _ARMContract.abi.Events["TaggedRootBlessed"].ID:
- return _ARMContract.ParseTaggedRootBlessed(log)
- case _ARMContract.abi.Events["UnvotedToCurse"].ID:
- return _ARMContract.ParseUnvotedToCurse(log)
- case _ARMContract.abi.Events["VotedToBless"].ID:
- return _ARMContract.ParseVotedToBless(log)
- case _ARMContract.abi.Events["VotedToCurse"].ID:
- return _ARMContract.ParseVotedToCurse(log)
+ case _RMNContract.abi.Events["AlreadyBlessed"].ID:
+ return _RMNContract.ParseAlreadyBlessed(log)
+ case _RMNContract.abi.Events["AlreadyVotedToBless"].ID:
+ return _RMNContract.ParseAlreadyVotedToBless(log)
+ case _RMNContract.abi.Events["ConfigSet"].ID:
+ return _RMNContract.ParseConfigSet(log)
+ case _RMNContract.abi.Events["CurseLifted"].ID:
+ return _RMNContract.ParseCurseLifted(log)
+ case _RMNContract.abi.Events["Cursed"].ID:
+ return _RMNContract.ParseCursed(log)
+ case _RMNContract.abi.Events["OwnershipTransferRequested"].ID:
+ return _RMNContract.ParseOwnershipTransferRequested(log)
+ case _RMNContract.abi.Events["OwnershipTransferred"].ID:
+ return _RMNContract.ParseOwnershipTransferred(log)
+ case _RMNContract.abi.Events["PermaBlessedCommitStoreAdded"].ID:
+ return _RMNContract.ParsePermaBlessedCommitStoreAdded(log)
+ case _RMNContract.abi.Events["PermaBlessedCommitStoreRemoved"].ID:
+ return _RMNContract.ParsePermaBlessedCommitStoreRemoved(log)
+ case _RMNContract.abi.Events["SkippedUnvoteToCurse"].ID:
+ return _RMNContract.ParseSkippedUnvoteToCurse(log)
+ case _RMNContract.abi.Events["TaggedRootBlessVotesReset"].ID:
+ return _RMNContract.ParseTaggedRootBlessVotesReset(log)
+ case _RMNContract.abi.Events["TaggedRootBlessed"].ID:
+ return _RMNContract.ParseTaggedRootBlessed(log)
+ case _RMNContract.abi.Events["UnvotedToCurse"].ID:
+ return _RMNContract.ParseUnvotedToCurse(log)
+ case _RMNContract.abi.Events["VotedToBless"].ID:
+ return _RMNContract.ParseVotedToBless(log)
+ case _RMNContract.abi.Events["VotedToCurse"].ID:
+ return _RMNContract.ParseVotedToCurse(log)
default:
return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
}
}
-func (ARMContractAlreadyBlessed) Topic() common.Hash {
+func (RMNContractAlreadyBlessed) Topic() common.Hash {
return common.HexToHash("0x274d6d5b916b0a53974b7ab86c844b97a2e03a60f658cd9a4b1c028b604d7bf1")
}
-func (ARMContractAlreadyVotedToBless) Topic() common.Hash {
+func (RMNContractAlreadyVotedToBless) Topic() common.Hash {
return common.HexToHash("0x6dfbb745226fa630aeb1b9557d17d508ddb789a04f0cb873ec16e58beb8beead")
}
-func (ARMContractConfigSet) Topic() common.Hash {
+func (RMNContractConfigSet) Topic() common.Hash {
return common.HexToHash("0x8c49fda8177c5c8c768eb39634bc6773695c7181711537b822451c12b2efd2a9")
}
-func (ARMContractCurseLifted) Topic() common.Hash {
+func (RMNContractCurseLifted) Topic() common.Hash {
return common.HexToHash("0x65d0e78c3625f0956f58610cf0fb157eaf627683258875ef29af2f71d25ac8fd")
}
-func (ARMContractCursed) Topic() common.Hash {
+func (RMNContractCursed) Topic() common.Hash {
return common.HexToHash("0xcfdbfd8ce9a56b5f7c202c0e102184d24f47ca87121dc165063fc4c290957bde")
}
-func (ARMContractOwnershipTransferRequested) Topic() common.Hash {
+func (RMNContractOwnershipTransferRequested) Topic() common.Hash {
return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
}
-func (ARMContractOwnershipTransferred) Topic() common.Hash {
+func (RMNContractOwnershipTransferred) Topic() common.Hash {
return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
}
-func (ARMContractPermaBlessedCommitStoreAdded) Topic() common.Hash {
+func (RMNContractPermaBlessedCommitStoreAdded) Topic() common.Hash {
return common.HexToHash("0x66b4b4752c65ae8cd2f3a0a48c7dc8b2118c60d5ea15514992eb2ddf56c9cb15")
}
-func (ARMContractPermaBlessedCommitStoreRemoved) Topic() common.Hash {
+func (RMNContractPermaBlessedCommitStoreRemoved) Topic() common.Hash {
return common.HexToHash("0xdca892154bbc36d0c05ccd01b3d0411875cb1b841fcdeebb384e5d0d6eb06b44")
}
-func (ARMContractSkippedUnvoteToCurse) Topic() common.Hash {
+func (RMNContractSkippedUnvoteToCurse) Topic() common.Hash {
return common.HexToHash("0xbabb0d7099e6ca14a29fad2a2cfb4fda2bd30f97cb3c27e546174bfb4277c1cc")
}
-func (ARMContractTaggedRootBlessVotesReset) Topic() common.Hash {
+func (RMNContractTaggedRootBlessVotesReset) Topic() common.Hash {
return common.HexToHash("0x7d15a6eebaa019ea7d5b7d38937c51ebd3befbfdf51bb630a694fd28635bbcba")
}
-func (ARMContractTaggedRootBlessed) Topic() common.Hash {
+func (RMNContractTaggedRootBlessed) Topic() common.Hash {
return common.HexToHash("0x8257378aa73bf8e4ada848713526584a3dcee0fd3db3beed7397f7a7f5067cc9")
}
-func (ARMContractUnvotedToCurse) Topic() common.Hash {
+func (RMNContractUnvotedToCurse) Topic() common.Hash {
return common.HexToHash("0xa96a155bd67c927a6c056befbd979b78465e2b2f1276bf7d4e90a31d4f430aa8")
}
-func (ARMContractVotedToBless) Topic() common.Hash {
+func (RMNContractVotedToBless) Topic() common.Hash {
return common.HexToHash("0x2a08a2bd2798f0aae9a843f0f4ad4de488c1b3d5f04049940cfed736ad69fb97")
}
-func (ARMContractVotedToCurse) Topic() common.Hash {
+func (RMNContractVotedToCurse) Topic() common.Hash {
return common.HexToHash("0x8137bc8a8d712aaa27bfc6506d5566ac405618bd53f9831b8ca6b6fe5442ee7a")
}
-func (_ARMContract *ARMContract) Address() common.Address {
- return _ARMContract.address
+func (_RMNContract *RMNContract) Address() common.Address {
+ return _RMNContract.address
}
-type ARMContractInterface interface {
+type RMNContractInterface interface {
GetBlessProgress(opts *bind.CallOpts, taggedRoot IRMNTaggedRoot) (GetBlessProgress,
error)
@@ -2753,95 +2753,95 @@ type ARMContractInterface interface {
VoteToCurse(opts *bind.TransactOpts, curseId [16]byte, subjects [][16]byte) (*types.Transaction, error)
- FilterAlreadyBlessed(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractAlreadyBlessedIterator, error)
+ FilterAlreadyBlessed(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractAlreadyBlessedIterator, error)
- WatchAlreadyBlessed(opts *bind.WatchOpts, sink chan<- *ARMContractAlreadyBlessed, configVersion []uint32, voter []common.Address) (event.Subscription, error)
+ WatchAlreadyBlessed(opts *bind.WatchOpts, sink chan<- *RMNContractAlreadyBlessed, configVersion []uint32, voter []common.Address) (event.Subscription, error)
- ParseAlreadyBlessed(log types.Log) (*ARMContractAlreadyBlessed, error)
+ ParseAlreadyBlessed(log types.Log) (*RMNContractAlreadyBlessed, error)
- FilterAlreadyVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractAlreadyVotedToBlessIterator, error)
+ FilterAlreadyVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractAlreadyVotedToBlessIterator, error)
- WatchAlreadyVotedToBless(opts *bind.WatchOpts, sink chan<- *ARMContractAlreadyVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error)
+ WatchAlreadyVotedToBless(opts *bind.WatchOpts, sink chan<- *RMNContractAlreadyVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error)
- ParseAlreadyVotedToBless(log types.Log) (*ARMContractAlreadyVotedToBless, error)
+ ParseAlreadyVotedToBless(log types.Log) (*RMNContractAlreadyVotedToBless, error)
- FilterConfigSet(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractConfigSetIterator, error)
+ FilterConfigSet(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractConfigSetIterator, error)
- WatchConfigSet(opts *bind.WatchOpts, sink chan<- *ARMContractConfigSet, configVersion []uint32) (event.Subscription, error)
+ WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNContractConfigSet, configVersion []uint32) (event.Subscription, error)
- ParseConfigSet(log types.Log) (*ARMContractConfigSet, error)
+ ParseConfigSet(log types.Log) (*RMNContractConfigSet, error)
- FilterCurseLifted(opts *bind.FilterOpts) (*ARMContractCurseLiftedIterator, error)
+ FilterCurseLifted(opts *bind.FilterOpts) (*RMNContractCurseLiftedIterator, error)
- WatchCurseLifted(opts *bind.WatchOpts, sink chan<- *ARMContractCurseLifted) (event.Subscription, error)
+ WatchCurseLifted(opts *bind.WatchOpts, sink chan<- *RMNContractCurseLifted) (event.Subscription, error)
- ParseCurseLifted(log types.Log) (*ARMContractCurseLifted, error)
+ ParseCurseLifted(log types.Log) (*RMNContractCurseLifted, error)
- FilterCursed(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractCursedIterator, error)
+ FilterCursed(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractCursedIterator, error)
- WatchCursed(opts *bind.WatchOpts, sink chan<- *ARMContractCursed, configVersion []uint32) (event.Subscription, error)
+ WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNContractCursed, configVersion []uint32) (event.Subscription, error)
- ParseCursed(log types.Log) (*ARMContractCursed, error)
+ ParseCursed(log types.Log) (*RMNContractCursed, error)
- FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMContractOwnershipTransferRequestedIterator, error)
+ FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNContractOwnershipTransferRequestedIterator, error)
- WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ARMContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferRequested(log types.Log) (*ARMContractOwnershipTransferRequested, error)
+ ParseOwnershipTransferRequested(log types.Log) (*RMNContractOwnershipTransferRequested, error)
- FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMContractOwnershipTransferredIterator, error)
+ FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNContractOwnershipTransferredIterator, error)
- WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ARMContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferred(log types.Log) (*ARMContractOwnershipTransferred, error)
+ ParseOwnershipTransferred(log types.Log) (*RMNContractOwnershipTransferred, error)
- FilterPermaBlessedCommitStoreAdded(opts *bind.FilterOpts) (*ARMContractPermaBlessedCommitStoreAddedIterator, error)
+ FilterPermaBlessedCommitStoreAdded(opts *bind.FilterOpts) (*RMNContractPermaBlessedCommitStoreAddedIterator, error)
- WatchPermaBlessedCommitStoreAdded(opts *bind.WatchOpts, sink chan<- *ARMContractPermaBlessedCommitStoreAdded) (event.Subscription, error)
+ WatchPermaBlessedCommitStoreAdded(opts *bind.WatchOpts, sink chan<- *RMNContractPermaBlessedCommitStoreAdded) (event.Subscription, error)
- ParsePermaBlessedCommitStoreAdded(log types.Log) (*ARMContractPermaBlessedCommitStoreAdded, error)
+ ParsePermaBlessedCommitStoreAdded(log types.Log) (*RMNContractPermaBlessedCommitStoreAdded, error)
- FilterPermaBlessedCommitStoreRemoved(opts *bind.FilterOpts) (*ARMContractPermaBlessedCommitStoreRemovedIterator, error)
+ FilterPermaBlessedCommitStoreRemoved(opts *bind.FilterOpts) (*RMNContractPermaBlessedCommitStoreRemovedIterator, error)
- WatchPermaBlessedCommitStoreRemoved(opts *bind.WatchOpts, sink chan<- *ARMContractPermaBlessedCommitStoreRemoved) (event.Subscription, error)
+ WatchPermaBlessedCommitStoreRemoved(opts *bind.WatchOpts, sink chan<- *RMNContractPermaBlessedCommitStoreRemoved) (event.Subscription, error)
- ParsePermaBlessedCommitStoreRemoved(log types.Log) (*ARMContractPermaBlessedCommitStoreRemoved, error)
+ ParsePermaBlessedCommitStoreRemoved(log types.Log) (*RMNContractPermaBlessedCommitStoreRemoved, error)
- FilterSkippedUnvoteToCurse(opts *bind.FilterOpts, voter []common.Address) (*ARMContractSkippedUnvoteToCurseIterator, error)
+ FilterSkippedUnvoteToCurse(opts *bind.FilterOpts, voter []common.Address) (*RMNContractSkippedUnvoteToCurseIterator, error)
- WatchSkippedUnvoteToCurse(opts *bind.WatchOpts, sink chan<- *ARMContractSkippedUnvoteToCurse, voter []common.Address) (event.Subscription, error)
+ WatchSkippedUnvoteToCurse(opts *bind.WatchOpts, sink chan<- *RMNContractSkippedUnvoteToCurse, voter []common.Address) (event.Subscription, error)
- ParseSkippedUnvoteToCurse(log types.Log) (*ARMContractSkippedUnvoteToCurse, error)
+ ParseSkippedUnvoteToCurse(log types.Log) (*RMNContractSkippedUnvoteToCurse, error)
- FilterTaggedRootBlessVotesReset(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractTaggedRootBlessVotesResetIterator, error)
+ FilterTaggedRootBlessVotesReset(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractTaggedRootBlessVotesResetIterator, error)
- WatchTaggedRootBlessVotesReset(opts *bind.WatchOpts, sink chan<- *ARMContractTaggedRootBlessVotesReset, configVersion []uint32) (event.Subscription, error)
+ WatchTaggedRootBlessVotesReset(opts *bind.WatchOpts, sink chan<- *RMNContractTaggedRootBlessVotesReset, configVersion []uint32) (event.Subscription, error)
- ParseTaggedRootBlessVotesReset(log types.Log) (*ARMContractTaggedRootBlessVotesReset, error)
+ ParseTaggedRootBlessVotesReset(log types.Log) (*RMNContractTaggedRootBlessVotesReset, error)
- FilterTaggedRootBlessed(opts *bind.FilterOpts, configVersion []uint32) (*ARMContractTaggedRootBlessedIterator, error)
+ FilterTaggedRootBlessed(opts *bind.FilterOpts, configVersion []uint32) (*RMNContractTaggedRootBlessedIterator, error)
- WatchTaggedRootBlessed(opts *bind.WatchOpts, sink chan<- *ARMContractTaggedRootBlessed, configVersion []uint32) (event.Subscription, error)
+ WatchTaggedRootBlessed(opts *bind.WatchOpts, sink chan<- *RMNContractTaggedRootBlessed, configVersion []uint32) (event.Subscription, error)
- ParseTaggedRootBlessed(log types.Log) (*ARMContractTaggedRootBlessed, error)
+ ParseTaggedRootBlessed(log types.Log) (*RMNContractTaggedRootBlessed, error)
- FilterUnvotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractUnvotedToCurseIterator, error)
+ FilterUnvotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractUnvotedToCurseIterator, error)
- WatchUnvotedToCurse(opts *bind.WatchOpts, sink chan<- *ARMContractUnvotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error)
+ WatchUnvotedToCurse(opts *bind.WatchOpts, sink chan<- *RMNContractUnvotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error)
- ParseUnvotedToCurse(log types.Log) (*ARMContractUnvotedToCurse, error)
+ ParseUnvotedToCurse(log types.Log) (*RMNContractUnvotedToCurse, error)
- FilterVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractVotedToBlessIterator, error)
+ FilterVotedToBless(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractVotedToBlessIterator, error)
- WatchVotedToBless(opts *bind.WatchOpts, sink chan<- *ARMContractVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error)
+ WatchVotedToBless(opts *bind.WatchOpts, sink chan<- *RMNContractVotedToBless, configVersion []uint32, voter []common.Address) (event.Subscription, error)
- ParseVotedToBless(log types.Log) (*ARMContractVotedToBless, error)
+ ParseVotedToBless(log types.Log) (*RMNContractVotedToBless, error)
- FilterVotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*ARMContractVotedToCurseIterator, error)
+ FilterVotedToCurse(opts *bind.FilterOpts, configVersion []uint32, voter []common.Address) (*RMNContractVotedToCurseIterator, error)
- WatchVotedToCurse(opts *bind.WatchOpts, sink chan<- *ARMContractVotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error)
+ WatchVotedToCurse(opts *bind.WatchOpts, sink chan<- *RMNContractVotedToCurse, configVersion []uint32, voter []common.Address) (event.Subscription, error)
- ParseVotedToCurse(log types.Log) (*ARMContractVotedToCurse, error)
+ ParseVotedToCurse(log types.Log) (*RMNContractVotedToCurse, error)
ParseLog(log types.Log) (generated.AbigenLog, error)
diff --git a/core/gethwrappers/ccip/generated/arm_proxy_contract/arm_proxy_contract.go b/core/gethwrappers/ccip/generated/rmn_proxy_contract/rmn_proxy_contract.go
similarity index 60%
rename from core/gethwrappers/ccip/generated/arm_proxy_contract/arm_proxy_contract.go
rename to core/gethwrappers/ccip/generated/rmn_proxy_contract/rmn_proxy_contract.go
index e2ba9246216..18fd9898d81 100644
--- a/core/gethwrappers/ccip/generated/arm_proxy_contract/arm_proxy_contract.go
+++ b/core/gethwrappers/ccip/generated/rmn_proxy_contract/rmn_proxy_contract.go
@@ -1,7 +1,7 @@
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.
-package arm_proxy_contract
+package rmn_proxy_contract
import (
"errors"
@@ -30,17 +30,17 @@ var (
_ = abi.ConvertType
)
-var ARMProxyContractMetaData = &bind.MetaData{
+var RMNProxyContractMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arm\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"arm\",\"type\":\"address\"}],\"name\":\"ARMSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getARM\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arm\",\"type\":\"address\"}],\"name\":\"setARM\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
Bin: "0x608060405234801561001057600080fd5b5060405161084138038061084183398101604081905261002f91610255565b33806000816100855760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156100b5576100b5816100cd565b5050506100c78161017660201b60201c565b50610285565b336001600160a01b038216036101255760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007c565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61017e6101f9565b6001600160a01b0381166101a5576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab9060200160405180910390a150565b6000546001600160a01b031633146102535760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161007c565b565b60006020828403121561026757600080fd5b81516001600160a01b038116811461027e57600080fd5b9392505050565b6105ad806102946000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806379ba50971161005057806379ba5097146101615780638da5cb5b14610169578063f2fde38b1461018757610072565b8063181f5a77146100bb5780632e90aa211461010d578063458fec3b1461014c575b60025473ffffffffffffffffffffffffffffffffffffffff16803b61009657600080fd5b366000803760008036600080855af13d6000803e80156100b5573d6000f35b503d6000fd5b6100f76040518060400160405280600e81526020017f41524d50726f787920312e302e3000000000000000000000000000000000000081525081565b60405161010491906104f6565b60405180910390f35b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b61015f61015a366004610563565b61019a565b005b61015f610268565b60005473ffffffffffffffffffffffffffffffffffffffff16610127565b61015f610195366004610563565b61036a565b6101a261037e565b73ffffffffffffffffffffffffffffffffffffffff81166101ef576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab9060200160405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61037261037e565b61037b81610401565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102e5565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102e5565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006020808352835180602085015260005b8181101561052457858101830151858201604001528201610508565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006020828403121561057557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461059957600080fd5b939250505056fea164736f6c6343000818000a",
}
-var ARMProxyContractABI = ARMProxyContractMetaData.ABI
+var RMNProxyContractABI = RMNProxyContractMetaData.ABI
-var ARMProxyContractBin = ARMProxyContractMetaData.Bin
+var RMNProxyContractBin = RMNProxyContractMetaData.Bin
-func DeployARMProxyContract(auth *bind.TransactOpts, backend bind.ContractBackend, arm common.Address) (common.Address, *types.Transaction, *ARMProxyContract, error) {
- parsed, err := ARMProxyContractMetaData.GetAbi()
+func DeployRMNProxyContract(auth *bind.TransactOpts, backend bind.ContractBackend, arm common.Address) (common.Address, *types.Transaction, *RMNProxyContract, error) {
+ parsed, err := RMNProxyContractMetaData.GetAbi()
if err != nil {
return common.Address{}, nil, nil, err
}
@@ -48,132 +48,132 @@ func DeployARMProxyContract(auth *bind.TransactOpts, backend bind.ContractBacken
return common.Address{}, nil, nil, errors.New("GetABI returned nil")
}
- address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ARMProxyContractBin), backend, arm)
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNProxyContractBin), backend, arm)
if err != nil {
return common.Address{}, nil, nil, err
}
- return address, tx, &ARMProxyContract{address: address, abi: *parsed, ARMProxyContractCaller: ARMProxyContractCaller{contract: contract}, ARMProxyContractTransactor: ARMProxyContractTransactor{contract: contract}, ARMProxyContractFilterer: ARMProxyContractFilterer{contract: contract}}, nil
+ return address, tx, &RMNProxyContract{address: address, abi: *parsed, RMNProxyContractCaller: RMNProxyContractCaller{contract: contract}, RMNProxyContractTransactor: RMNProxyContractTransactor{contract: contract}, RMNProxyContractFilterer: RMNProxyContractFilterer{contract: contract}}, nil
}
-type ARMProxyContract struct {
+type RMNProxyContract struct {
address common.Address
abi abi.ABI
- ARMProxyContractCaller
- ARMProxyContractTransactor
- ARMProxyContractFilterer
+ RMNProxyContractCaller
+ RMNProxyContractTransactor
+ RMNProxyContractFilterer
}
-type ARMProxyContractCaller struct {
+type RMNProxyContractCaller struct {
contract *bind.BoundContract
}
-type ARMProxyContractTransactor struct {
+type RMNProxyContractTransactor struct {
contract *bind.BoundContract
}
-type ARMProxyContractFilterer struct {
+type RMNProxyContractFilterer struct {
contract *bind.BoundContract
}
-type ARMProxyContractSession struct {
- Contract *ARMProxyContract
+type RMNProxyContractSession struct {
+ Contract *RMNProxyContract
CallOpts bind.CallOpts
TransactOpts bind.TransactOpts
}
-type ARMProxyContractCallerSession struct {
- Contract *ARMProxyContractCaller
+type RMNProxyContractCallerSession struct {
+ Contract *RMNProxyContractCaller
CallOpts bind.CallOpts
}
-type ARMProxyContractTransactorSession struct {
- Contract *ARMProxyContractTransactor
+type RMNProxyContractTransactorSession struct {
+ Contract *RMNProxyContractTransactor
TransactOpts bind.TransactOpts
}
-type ARMProxyContractRaw struct {
- Contract *ARMProxyContract
+type RMNProxyContractRaw struct {
+ Contract *RMNProxyContract
}
-type ARMProxyContractCallerRaw struct {
- Contract *ARMProxyContractCaller
+type RMNProxyContractCallerRaw struct {
+ Contract *RMNProxyContractCaller
}
-type ARMProxyContractTransactorRaw struct {
- Contract *ARMProxyContractTransactor
+type RMNProxyContractTransactorRaw struct {
+ Contract *RMNProxyContractTransactor
}
-func NewARMProxyContract(address common.Address, backend bind.ContractBackend) (*ARMProxyContract, error) {
- abi, err := abi.JSON(strings.NewReader(ARMProxyContractABI))
+func NewRMNProxyContract(address common.Address, backend bind.ContractBackend) (*RMNProxyContract, error) {
+ abi, err := abi.JSON(strings.NewReader(RMNProxyContractABI))
if err != nil {
return nil, err
}
- contract, err := bindARMProxyContract(address, backend, backend, backend)
+ contract, err := bindRMNProxyContract(address, backend, backend, backend)
if err != nil {
return nil, err
}
- return &ARMProxyContract{address: address, abi: abi, ARMProxyContractCaller: ARMProxyContractCaller{contract: contract}, ARMProxyContractTransactor: ARMProxyContractTransactor{contract: contract}, ARMProxyContractFilterer: ARMProxyContractFilterer{contract: contract}}, nil
+ return &RMNProxyContract{address: address, abi: abi, RMNProxyContractCaller: RMNProxyContractCaller{contract: contract}, RMNProxyContractTransactor: RMNProxyContractTransactor{contract: contract}, RMNProxyContractFilterer: RMNProxyContractFilterer{contract: contract}}, nil
}
-func NewARMProxyContractCaller(address common.Address, caller bind.ContractCaller) (*ARMProxyContractCaller, error) {
- contract, err := bindARMProxyContract(address, caller, nil, nil)
+func NewRMNProxyContractCaller(address common.Address, caller bind.ContractCaller) (*RMNProxyContractCaller, error) {
+ contract, err := bindRMNProxyContract(address, caller, nil, nil)
if err != nil {
return nil, err
}
- return &ARMProxyContractCaller{contract: contract}, nil
+ return &RMNProxyContractCaller{contract: contract}, nil
}
-func NewARMProxyContractTransactor(address common.Address, transactor bind.ContractTransactor) (*ARMProxyContractTransactor, error) {
- contract, err := bindARMProxyContract(address, nil, transactor, nil)
+func NewRMNProxyContractTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNProxyContractTransactor, error) {
+ contract, err := bindRMNProxyContract(address, nil, transactor, nil)
if err != nil {
return nil, err
}
- return &ARMProxyContractTransactor{contract: contract}, nil
+ return &RMNProxyContractTransactor{contract: contract}, nil
}
-func NewARMProxyContractFilterer(address common.Address, filterer bind.ContractFilterer) (*ARMProxyContractFilterer, error) {
- contract, err := bindARMProxyContract(address, nil, nil, filterer)
+func NewRMNProxyContractFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNProxyContractFilterer, error) {
+ contract, err := bindRMNProxyContract(address, nil, nil, filterer)
if err != nil {
return nil, err
}
- return &ARMProxyContractFilterer{contract: contract}, nil
+ return &RMNProxyContractFilterer{contract: contract}, nil
}
-func bindARMProxyContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
- parsed, err := ARMProxyContractMetaData.GetAbi()
+func bindRMNProxyContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+ parsed, err := RMNProxyContractMetaData.GetAbi()
if err != nil {
return nil, err
}
return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}
-func (_ARMProxyContract *ARMProxyContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _ARMProxyContract.Contract.ARMProxyContractCaller.contract.Call(opts, result, method, params...)
+func (_RMNProxyContract *RMNProxyContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _RMNProxyContract.Contract.RMNProxyContractCaller.contract.Call(opts, result, method, params...)
}
-func (_ARMProxyContract *ARMProxyContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.ARMProxyContractTransactor.contract.Transfer(opts)
+func (_RMNProxyContract *RMNProxyContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.RMNProxyContractTransactor.contract.Transfer(opts)
}
-func (_ARMProxyContract *ARMProxyContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.ARMProxyContractTransactor.contract.Transact(opts, method, params...)
+func (_RMNProxyContract *RMNProxyContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.RMNProxyContractTransactor.contract.Transact(opts, method, params...)
}
-func (_ARMProxyContract *ARMProxyContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
- return _ARMProxyContract.Contract.contract.Call(opts, result, method, params...)
+func (_RMNProxyContract *RMNProxyContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _RMNProxyContract.Contract.contract.Call(opts, result, method, params...)
}
-func (_ARMProxyContract *ARMProxyContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.contract.Transfer(opts)
+func (_RMNProxyContract *RMNProxyContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.contract.Transfer(opts)
}
-func (_ARMProxyContract *ARMProxyContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.contract.Transact(opts, method, params...)
+func (_RMNProxyContract *RMNProxyContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.contract.Transact(opts, method, params...)
}
-func (_ARMProxyContract *ARMProxyContractCaller) GetARM(opts *bind.CallOpts) (common.Address, error) {
+func (_RMNProxyContract *RMNProxyContractCaller) GetARM(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
- err := _ARMProxyContract.contract.Call(opts, &out, "getARM")
+ err := _RMNProxyContract.contract.Call(opts, &out, "getARM")
if err != nil {
return *new(common.Address), err
@@ -185,17 +185,17 @@ func (_ARMProxyContract *ARMProxyContractCaller) GetARM(opts *bind.CallOpts) (co
}
-func (_ARMProxyContract *ARMProxyContractSession) GetARM() (common.Address, error) {
- return _ARMProxyContract.Contract.GetARM(&_ARMProxyContract.CallOpts)
+func (_RMNProxyContract *RMNProxyContractSession) GetARM() (common.Address, error) {
+ return _RMNProxyContract.Contract.GetARM(&_RMNProxyContract.CallOpts)
}
-func (_ARMProxyContract *ARMProxyContractCallerSession) GetARM() (common.Address, error) {
- return _ARMProxyContract.Contract.GetARM(&_ARMProxyContract.CallOpts)
+func (_RMNProxyContract *RMNProxyContractCallerSession) GetARM() (common.Address, error) {
+ return _RMNProxyContract.Contract.GetARM(&_RMNProxyContract.CallOpts)
}
-func (_ARMProxyContract *ARMProxyContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
+func (_RMNProxyContract *RMNProxyContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
- err := _ARMProxyContract.contract.Call(opts, &out, "owner")
+ err := _RMNProxyContract.contract.Call(opts, &out, "owner")
if err != nil {
return *new(common.Address), err
@@ -207,17 +207,17 @@ func (_ARMProxyContract *ARMProxyContractCaller) Owner(opts *bind.CallOpts) (com
}
-func (_ARMProxyContract *ARMProxyContractSession) Owner() (common.Address, error) {
- return _ARMProxyContract.Contract.Owner(&_ARMProxyContract.CallOpts)
+func (_RMNProxyContract *RMNProxyContractSession) Owner() (common.Address, error) {
+ return _RMNProxyContract.Contract.Owner(&_RMNProxyContract.CallOpts)
}
-func (_ARMProxyContract *ARMProxyContractCallerSession) Owner() (common.Address, error) {
- return _ARMProxyContract.Contract.Owner(&_ARMProxyContract.CallOpts)
+func (_RMNProxyContract *RMNProxyContractCallerSession) Owner() (common.Address, error) {
+ return _RMNProxyContract.Contract.Owner(&_RMNProxyContract.CallOpts)
}
-func (_ARMProxyContract *ARMProxyContractCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
+func (_RMNProxyContract *RMNProxyContractCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) {
var out []interface{}
- err := _ARMProxyContract.contract.Call(opts, &out, "typeAndVersion")
+ err := _RMNProxyContract.contract.Call(opts, &out, "typeAndVersion")
if err != nil {
return *new(string), err
@@ -229,64 +229,64 @@ func (_ARMProxyContract *ARMProxyContractCaller) TypeAndVersion(opts *bind.CallO
}
-func (_ARMProxyContract *ARMProxyContractSession) TypeAndVersion() (string, error) {
- return _ARMProxyContract.Contract.TypeAndVersion(&_ARMProxyContract.CallOpts)
+func (_RMNProxyContract *RMNProxyContractSession) TypeAndVersion() (string, error) {
+ return _RMNProxyContract.Contract.TypeAndVersion(&_RMNProxyContract.CallOpts)
}
-func (_ARMProxyContract *ARMProxyContractCallerSession) TypeAndVersion() (string, error) {
- return _ARMProxyContract.Contract.TypeAndVersion(&_ARMProxyContract.CallOpts)
+func (_RMNProxyContract *RMNProxyContractCallerSession) TypeAndVersion() (string, error) {
+ return _RMNProxyContract.Contract.TypeAndVersion(&_RMNProxyContract.CallOpts)
}
-func (_ARMProxyContract *ARMProxyContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
- return _ARMProxyContract.contract.Transact(opts, "acceptOwnership")
+func (_RMNProxyContract *RMNProxyContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _RMNProxyContract.contract.Transact(opts, "acceptOwnership")
}
-func (_ARMProxyContract *ARMProxyContractSession) AcceptOwnership() (*types.Transaction, error) {
- return _ARMProxyContract.Contract.AcceptOwnership(&_ARMProxyContract.TransactOpts)
+func (_RMNProxyContract *RMNProxyContractSession) AcceptOwnership() (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.AcceptOwnership(&_RMNProxyContract.TransactOpts)
}
-func (_ARMProxyContract *ARMProxyContractTransactorSession) AcceptOwnership() (*types.Transaction, error) {
- return _ARMProxyContract.Contract.AcceptOwnership(&_ARMProxyContract.TransactOpts)
+func (_RMNProxyContract *RMNProxyContractTransactorSession) AcceptOwnership() (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.AcceptOwnership(&_RMNProxyContract.TransactOpts)
}
-func (_ARMProxyContract *ARMProxyContractTransactor) SetARM(opts *bind.TransactOpts, arm common.Address) (*types.Transaction, error) {
- return _ARMProxyContract.contract.Transact(opts, "setARM", arm)
+func (_RMNProxyContract *RMNProxyContractTransactor) SetARM(opts *bind.TransactOpts, arm common.Address) (*types.Transaction, error) {
+ return _RMNProxyContract.contract.Transact(opts, "setARM", arm)
}
-func (_ARMProxyContract *ARMProxyContractSession) SetARM(arm common.Address) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.SetARM(&_ARMProxyContract.TransactOpts, arm)
+func (_RMNProxyContract *RMNProxyContractSession) SetARM(arm common.Address) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.SetARM(&_RMNProxyContract.TransactOpts, arm)
}
-func (_ARMProxyContract *ARMProxyContractTransactorSession) SetARM(arm common.Address) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.SetARM(&_ARMProxyContract.TransactOpts, arm)
+func (_RMNProxyContract *RMNProxyContractTransactorSession) SetARM(arm common.Address) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.SetARM(&_RMNProxyContract.TransactOpts, arm)
}
-func (_ARMProxyContract *ARMProxyContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
- return _ARMProxyContract.contract.Transact(opts, "transferOwnership", to)
+func (_RMNProxyContract *RMNProxyContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
+ return _RMNProxyContract.contract.Transact(opts, "transferOwnership", to)
}
-func (_ARMProxyContract *ARMProxyContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.TransferOwnership(&_ARMProxyContract.TransactOpts, to)
+func (_RMNProxyContract *RMNProxyContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.TransferOwnership(&_RMNProxyContract.TransactOpts, to)
}
-func (_ARMProxyContract *ARMProxyContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.TransferOwnership(&_ARMProxyContract.TransactOpts, to)
+func (_RMNProxyContract *RMNProxyContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.TransferOwnership(&_RMNProxyContract.TransactOpts, to)
}
-func (_ARMProxyContract *ARMProxyContractTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
- return _ARMProxyContract.contract.RawTransact(opts, calldata)
+func (_RMNProxyContract *RMNProxyContractTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
+ return _RMNProxyContract.contract.RawTransact(opts, calldata)
}
-func (_ARMProxyContract *ARMProxyContractSession) Fallback(calldata []byte) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.Fallback(&_ARMProxyContract.TransactOpts, calldata)
+func (_RMNProxyContract *RMNProxyContractSession) Fallback(calldata []byte) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.Fallback(&_RMNProxyContract.TransactOpts, calldata)
}
-func (_ARMProxyContract *ARMProxyContractTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
- return _ARMProxyContract.Contract.Fallback(&_ARMProxyContract.TransactOpts, calldata)
+func (_RMNProxyContract *RMNProxyContractTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
+ return _RMNProxyContract.Contract.Fallback(&_RMNProxyContract.TransactOpts, calldata)
}
-type ARMProxyContractARMSetIterator struct {
- Event *ARMProxyContractARMSet
+type RMNProxyContractARMSetIterator struct {
+ Event *RMNProxyContractARMSet
contract *bind.BoundContract
event string
@@ -297,7 +297,7 @@ type ARMProxyContractARMSetIterator struct {
fail error
}
-func (it *ARMProxyContractARMSetIterator) Next() bool {
+func (it *RMNProxyContractARMSetIterator) Next() bool {
if it.fail != nil {
return false
@@ -306,7 +306,7 @@ func (it *ARMProxyContractARMSetIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMProxyContractARMSet)
+ it.Event = new(RMNProxyContractARMSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -321,7 +321,7 @@ func (it *ARMProxyContractARMSetIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMProxyContractARMSet)
+ it.Event = new(RMNProxyContractARMSet)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -336,32 +336,32 @@ func (it *ARMProxyContractARMSetIterator) Next() bool {
}
}
-func (it *ARMProxyContractARMSetIterator) Error() error {
+func (it *RMNProxyContractARMSetIterator) Error() error {
return it.fail
}
-func (it *ARMProxyContractARMSetIterator) Close() error {
+func (it *RMNProxyContractARMSetIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMProxyContractARMSet struct {
+type RMNProxyContractARMSet struct {
Arm common.Address
Raw types.Log
}
-func (_ARMProxyContract *ARMProxyContractFilterer) FilterARMSet(opts *bind.FilterOpts) (*ARMProxyContractARMSetIterator, error) {
+func (_RMNProxyContract *RMNProxyContractFilterer) FilterARMSet(opts *bind.FilterOpts) (*RMNProxyContractARMSetIterator, error) {
- logs, sub, err := _ARMProxyContract.contract.FilterLogs(opts, "ARMSet")
+ logs, sub, err := _RMNProxyContract.contract.FilterLogs(opts, "ARMSet")
if err != nil {
return nil, err
}
- return &ARMProxyContractARMSetIterator{contract: _ARMProxyContract.contract, event: "ARMSet", logs: logs, sub: sub}, nil
+ return &RMNProxyContractARMSetIterator{contract: _RMNProxyContract.contract, event: "ARMSet", logs: logs, sub: sub}, nil
}
-func (_ARMProxyContract *ARMProxyContractFilterer) WatchARMSet(opts *bind.WatchOpts, sink chan<- *ARMProxyContractARMSet) (event.Subscription, error) {
+func (_RMNProxyContract *RMNProxyContractFilterer) WatchARMSet(opts *bind.WatchOpts, sink chan<- *RMNProxyContractARMSet) (event.Subscription, error) {
- logs, sub, err := _ARMProxyContract.contract.WatchLogs(opts, "ARMSet")
+ logs, sub, err := _RMNProxyContract.contract.WatchLogs(opts, "ARMSet")
if err != nil {
return nil, err
}
@@ -371,8 +371,8 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchARMSet(opts *bind.WatchO
select {
case log := <-logs:
- event := new(ARMProxyContractARMSet)
- if err := _ARMProxyContract.contract.UnpackLog(event, "ARMSet", log); err != nil {
+ event := new(RMNProxyContractARMSet)
+ if err := _RMNProxyContract.contract.UnpackLog(event, "ARMSet", log); err != nil {
return err
}
event.Raw = log
@@ -393,17 +393,17 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchARMSet(opts *bind.WatchO
}), nil
}
-func (_ARMProxyContract *ARMProxyContractFilterer) ParseARMSet(log types.Log) (*ARMProxyContractARMSet, error) {
- event := new(ARMProxyContractARMSet)
- if err := _ARMProxyContract.contract.UnpackLog(event, "ARMSet", log); err != nil {
+func (_RMNProxyContract *RMNProxyContractFilterer) ParseARMSet(log types.Log) (*RMNProxyContractARMSet, error) {
+ event := new(RMNProxyContractARMSet)
+ if err := _RMNProxyContract.contract.UnpackLog(event, "ARMSet", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMProxyContractOwnershipTransferRequestedIterator struct {
- Event *ARMProxyContractOwnershipTransferRequested
+type RMNProxyContractOwnershipTransferRequestedIterator struct {
+ Event *RMNProxyContractOwnershipTransferRequested
contract *bind.BoundContract
event string
@@ -414,7 +414,7 @@ type ARMProxyContractOwnershipTransferRequestedIterator struct {
fail error
}
-func (it *ARMProxyContractOwnershipTransferRequestedIterator) Next() bool {
+func (it *RMNProxyContractOwnershipTransferRequestedIterator) Next() bool {
if it.fail != nil {
return false
@@ -423,7 +423,7 @@ func (it *ARMProxyContractOwnershipTransferRequestedIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMProxyContractOwnershipTransferRequested)
+ it.Event = new(RMNProxyContractOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -438,7 +438,7 @@ func (it *ARMProxyContractOwnershipTransferRequestedIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMProxyContractOwnershipTransferRequested)
+ it.Event = new(RMNProxyContractOwnershipTransferRequested)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -453,22 +453,22 @@ func (it *ARMProxyContractOwnershipTransferRequestedIterator) Next() bool {
}
}
-func (it *ARMProxyContractOwnershipTransferRequestedIterator) Error() error {
+func (it *RMNProxyContractOwnershipTransferRequestedIterator) Error() error {
return it.fail
}
-func (it *ARMProxyContractOwnershipTransferRequestedIterator) Close() error {
+func (it *RMNProxyContractOwnershipTransferRequestedIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMProxyContractOwnershipTransferRequested struct {
+type RMNProxyContractOwnershipTransferRequested struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_ARMProxyContract *ARMProxyContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMProxyContractOwnershipTransferRequestedIterator, error) {
+func (_RMNProxyContract *RMNProxyContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferRequestedIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -479,14 +479,14 @@ func (_ARMProxyContract *ARMProxyContractFilterer) FilterOwnershipTransferReques
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMProxyContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _RMNProxyContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
- return &ARMProxyContractOwnershipTransferRequestedIterator{contract: _ARMProxyContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
+ return &RMNProxyContractOwnershipTransferRequestedIterator{contract: _RMNProxyContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil
}
-func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ARMProxyContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_RMNProxyContract *RMNProxyContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -497,7 +497,7 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferRequest
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMProxyContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
+ logs, sub, err := _RMNProxyContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -507,8 +507,8 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferRequest
select {
case log := <-logs:
- event := new(ARMProxyContractOwnershipTransferRequested)
- if err := _ARMProxyContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+ event := new(RMNProxyContractOwnershipTransferRequested)
+ if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return err
}
event.Raw = log
@@ -529,17 +529,17 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferRequest
}), nil
}
-func (_ARMProxyContract *ARMProxyContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*ARMProxyContractOwnershipTransferRequested, error) {
- event := new(ARMProxyContractOwnershipTransferRequested)
- if err := _ARMProxyContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
+func (_RMNProxyContract *RMNProxyContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNProxyContractOwnershipTransferRequested, error) {
+ event := new(RMNProxyContractOwnershipTransferRequested)
+ if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-type ARMProxyContractOwnershipTransferredIterator struct {
- Event *ARMProxyContractOwnershipTransferred
+type RMNProxyContractOwnershipTransferredIterator struct {
+ Event *RMNProxyContractOwnershipTransferred
contract *bind.BoundContract
event string
@@ -550,7 +550,7 @@ type ARMProxyContractOwnershipTransferredIterator struct {
fail error
}
-func (it *ARMProxyContractOwnershipTransferredIterator) Next() bool {
+func (it *RMNProxyContractOwnershipTransferredIterator) Next() bool {
if it.fail != nil {
return false
@@ -559,7 +559,7 @@ func (it *ARMProxyContractOwnershipTransferredIterator) Next() bool {
if it.done {
select {
case log := <-it.logs:
- it.Event = new(ARMProxyContractOwnershipTransferred)
+ it.Event = new(RMNProxyContractOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -574,7 +574,7 @@ func (it *ARMProxyContractOwnershipTransferredIterator) Next() bool {
select {
case log := <-it.logs:
- it.Event = new(ARMProxyContractOwnershipTransferred)
+ it.Event = new(RMNProxyContractOwnershipTransferred)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err
return false
@@ -589,22 +589,22 @@ func (it *ARMProxyContractOwnershipTransferredIterator) Next() bool {
}
}
-func (it *ARMProxyContractOwnershipTransferredIterator) Error() error {
+func (it *RMNProxyContractOwnershipTransferredIterator) Error() error {
return it.fail
}
-func (it *ARMProxyContractOwnershipTransferredIterator) Close() error {
+func (it *RMNProxyContractOwnershipTransferredIterator) Close() error {
it.sub.Unsubscribe()
return nil
}
-type ARMProxyContractOwnershipTransferred struct {
+type RMNProxyContractOwnershipTransferred struct {
From common.Address
To common.Address
Raw types.Log
}
-func (_ARMProxyContract *ARMProxyContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMProxyContractOwnershipTransferredIterator, error) {
+func (_RMNProxyContract *RMNProxyContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferredIterator, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -615,14 +615,14 @@ func (_ARMProxyContract *ARMProxyContractFilterer) FilterOwnershipTransferred(op
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMProxyContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _RMNProxyContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
- return &ARMProxyContractOwnershipTransferredIterator{contract: _ARMProxyContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+ return &RMNProxyContractOwnershipTransferredIterator{contract: _RMNProxyContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}
-func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ARMProxyContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
+func (_RMNProxyContract *RMNProxyContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) {
var fromRule []interface{}
for _, fromItem := range from {
@@ -633,7 +633,7 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferred(opt
toRule = append(toRule, toItem)
}
- logs, sub, err := _ARMProxyContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
+ logs, sub, err := _RMNProxyContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule)
if err != nil {
return nil, err
}
@@ -643,8 +643,8 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferred(opt
select {
case log := <-logs:
- event := new(ARMProxyContractOwnershipTransferred)
- if err := _ARMProxyContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ event := new(RMNProxyContractOwnershipTransferred)
+ if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return err
}
event.Raw = log
@@ -665,46 +665,46 @@ func (_ARMProxyContract *ARMProxyContractFilterer) WatchOwnershipTransferred(opt
}), nil
}
-func (_ARMProxyContract *ARMProxyContractFilterer) ParseOwnershipTransferred(log types.Log) (*ARMProxyContractOwnershipTransferred, error) {
- event := new(ARMProxyContractOwnershipTransferred)
- if err := _ARMProxyContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+func (_RMNProxyContract *RMNProxyContractFilterer) ParseOwnershipTransferred(log types.Log) (*RMNProxyContractOwnershipTransferred, error) {
+ event := new(RMNProxyContractOwnershipTransferred)
+ if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
return nil, err
}
event.Raw = log
return event, nil
}
-func (_ARMProxyContract *ARMProxyContract) ParseLog(log types.Log) (generated.AbigenLog, error) {
+func (_RMNProxyContract *RMNProxyContract) ParseLog(log types.Log) (generated.AbigenLog, error) {
switch log.Topics[0] {
- case _ARMProxyContract.abi.Events["ARMSet"].ID:
- return _ARMProxyContract.ParseARMSet(log)
- case _ARMProxyContract.abi.Events["OwnershipTransferRequested"].ID:
- return _ARMProxyContract.ParseOwnershipTransferRequested(log)
- case _ARMProxyContract.abi.Events["OwnershipTransferred"].ID:
- return _ARMProxyContract.ParseOwnershipTransferred(log)
+ case _RMNProxyContract.abi.Events["ARMSet"].ID:
+ return _RMNProxyContract.ParseARMSet(log)
+ case _RMNProxyContract.abi.Events["OwnershipTransferRequested"].ID:
+ return _RMNProxyContract.ParseOwnershipTransferRequested(log)
+ case _RMNProxyContract.abi.Events["OwnershipTransferred"].ID:
+ return _RMNProxyContract.ParseOwnershipTransferred(log)
default:
return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0])
}
}
-func (ARMProxyContractARMSet) Topic() common.Hash {
+func (RMNProxyContractARMSet) Topic() common.Hash {
return common.HexToHash("0xef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab")
}
-func (ARMProxyContractOwnershipTransferRequested) Topic() common.Hash {
+func (RMNProxyContractOwnershipTransferRequested) Topic() common.Hash {
return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
}
-func (ARMProxyContractOwnershipTransferred) Topic() common.Hash {
+func (RMNProxyContractOwnershipTransferred) Topic() common.Hash {
return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0")
}
-func (_ARMProxyContract *ARMProxyContract) Address() common.Address {
- return _ARMProxyContract.address
+func (_RMNProxyContract *RMNProxyContract) Address() common.Address {
+ return _RMNProxyContract.address
}
-type ARMProxyContractInterface interface {
+type RMNProxyContractInterface interface {
GetARM(opts *bind.CallOpts) (common.Address, error)
Owner(opts *bind.CallOpts) (common.Address, error)
@@ -719,23 +719,23 @@ type ARMProxyContractInterface interface {
Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error)
- FilterARMSet(opts *bind.FilterOpts) (*ARMProxyContractARMSetIterator, error)
+ FilterARMSet(opts *bind.FilterOpts) (*RMNProxyContractARMSetIterator, error)
- WatchARMSet(opts *bind.WatchOpts, sink chan<- *ARMProxyContractARMSet) (event.Subscription, error)
+ WatchARMSet(opts *bind.WatchOpts, sink chan<- *RMNProxyContractARMSet) (event.Subscription, error)
- ParseARMSet(log types.Log) (*ARMProxyContractARMSet, error)
+ ParseARMSet(log types.Log) (*RMNProxyContractARMSet, error)
- FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMProxyContractOwnershipTransferRequestedIterator, error)
+ FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferRequestedIterator, error)
- WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ARMProxyContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferRequested(log types.Log) (*ARMProxyContractOwnershipTransferRequested, error)
+ ParseOwnershipTransferRequested(log types.Log) (*RMNProxyContractOwnershipTransferRequested, error)
- FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ARMProxyContractOwnershipTransferredIterator, error)
+ FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferredIterator, error)
- WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ARMProxyContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
+ WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error)
- ParseOwnershipTransferred(log types.Log) (*ARMProxyContractOwnershipTransferred, error)
+ ParseOwnershipTransferred(log types.Log) (*RMNProxyContractOwnershipTransferred, error)
ParseLog(log types.Log) (generated.AbigenLog, error)
diff --git a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go
index d6e2db6bf37..755b4183fe5 100644
--- a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go
+++ b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go
@@ -44,8 +44,8 @@ type ClientEVMTokenAmount struct {
}
var SelfFundedPingPongMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x60a06040523480156200001157600080fd5b506040516200182238038062001822833981016040819052620000349162000291565b828233806000846001600160a01b0381166200006b576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000062565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fc57620000fc81620001cd565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001989190620002ea565b505050806002620001aa919062000315565b600360146101000a81548160ff021916908360ff16021790555050505062000347565b336001600160a01b03821603620002275760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000062565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200028e57600080fd5b50565b600080600060608486031215620002a757600080fd5b8351620002b48162000278565b6020850151909350620002c78162000278565b604085015190925060ff81168114620002df57600080fd5b809150509250925092565b600060208284031215620002fd57600080fd5b815180151581146200030e57600080fd5b9392505050565b60ff81811683821602908116908181146200034057634e487b7160e01b600052601160045260246000fd5b5092915050565b6080516114aa62000378600039600081816102970152818161063f0152818161072c0152610c2201526114aa6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80638f491cba116100cd578063bee518a411610081578063e6c725f511610066578063e6c725f51461034d578063ef686d8e1461037d578063f2fde38b1461039057600080fd5b8063bee518a4146102f1578063ca709a251461032f57600080fd5b8063b0f479a1116100b2578063b0f479a114610295578063b187bd26146102bb578063b5a11011146102de57600080fd5b80638f491cba1461026f5780639d2aede51461028257600080fd5b80632874d8bf1161012457806379ba50971161010957806379ba50971461023657806385572ffb1461023e5780638da5cb5b1461025157600080fd5b80632874d8bf146101ef5780632b6e5d63146101f757600080fd5b806301ffc9a71461015657806316c38b3c1461017e578063181f5a77146101935780631892b906146101dc575b600080fd5b610169610164366004610e24565b6103a3565b60405190151581526020015b60405180910390f35b61019161018c366004610e6d565b61043c565b005b6101cf6040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b6040516101759190610ef3565b6101916101ea366004610f23565b61048e565b6101916104e9565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b610191610525565b61019161024c366004610f3e565b610627565b60005473ffffffffffffffffffffffffffffffffffffffff16610211565b61019161027d366004610f79565b6106ac565b610191610290366004610fb4565b61088b565b7f0000000000000000000000000000000000000000000000000000000000000000610211565b60025474010000000000000000000000000000000000000000900460ff16610169565b6101916102ec366004610fd1565b6108da565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff9091168152602001610175565b60035473ffffffffffffffffffffffffffffffffffffffff16610211565b60035474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610175565b61019161038b366004611008565b61097c565b61019161039e366004610fb4565b610a04565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061043657507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610444610a15565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b610496610a15565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104f1610a15565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556105236001610a96565b565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610698576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016105a2565b6106a96106a482611230565b610cd9565b50565b60035474010000000000000000000000000000000000000000900460ff1615806106f2575060035474010000000000000000000000000000000000000000900460ff1681105b156106fa5750565b6003546001906107259074010000000000000000000000000000000000000000900460ff16836112dd565b116106a9577f00000000000000000000000000000000000000000000000000000000000000006001546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190611318565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a150565b610893610a15565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108e2610a15565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b610984610a15565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b610a0c610a15565b6106a981610d2f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105a2565b80600116600103610ad9576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1610b0d565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b610b16816106ac565b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001610b6e91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015610be857816020015b6040805180820190915260008082526020820152815260200190600190039081610bc15790505b50815260035473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600160149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401610c91929190611335565b6020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd4919061144a565b505050565b60008160600151806020019051810190610cf3919061144a565b60025490915074010000000000000000000000000000000000000000900460ff16610d2b57610d2b610d26826001611463565b610a96565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610dae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105a2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610e3657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e6657600080fd5b9392505050565b600060208284031215610e7f57600080fd5b81358015158114610e6657600080fd5b6000815180845260005b81811015610eb557602081850181015186830182015201610e99565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610e666020830184610e8f565b803567ffffffffffffffff81168114610f1e57600080fd5b919050565b600060208284031215610f3557600080fd5b610e6682610f06565b600060208284031215610f5057600080fd5b813567ffffffffffffffff811115610f6757600080fd5b820160a08185031215610e6657600080fd5b600060208284031215610f8b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146106a957600080fd5b600060208284031215610fc657600080fd5b8135610e6681610f92565b60008060408385031215610fe457600080fd5b610fed83610f06565b91506020830135610ffd81610f92565b809150509250929050565b60006020828403121561101a57600080fd5b813560ff81168114610e6657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561107d5761107d61102b565b60405290565b60405160a0810167ffffffffffffffff8111828210171561107d5761107d61102b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156110ed576110ed61102b565b604052919050565b600082601f83011261110657600080fd5b813567ffffffffffffffff8111156111205761112061102b565b61115160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016110a6565b81815284602083860101111561116657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261119457600080fd5b8135602067ffffffffffffffff8211156111b0576111b061102b565b6111be818360051b016110a6565b82815260069290921b840181019181810190868411156111dd57600080fd5b8286015b8481101561122557604081890312156111fa5760008081fd5b61120261105a565b813561120d81610f92565b815281850135858201528352918301916040016111e1565b509695505050505050565b600060a0823603121561124257600080fd5b61124a611083565b8235815261125a60208401610f06565b6020820152604083013567ffffffffffffffff8082111561127a57600080fd5b611286368387016110f5565b6040840152606085013591508082111561129f57600080fd5b6112ab368387016110f5565b606084015260808501359150808211156112c457600080fd5b506112d136828601611183565b60808301525092915050565b600082611313577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561132a57600080fd5b8151610e6681610f92565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261136460e0860182610e8f565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087840301606088015261139f8383610e8f565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015611400578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906113c1565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a0152955061143c8187610e8f565b9a9950505050505050505050565b60006020828403121561145c57600080fd5b5051919050565b80820180821115610436577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
+ Bin: "0x60a06040523480156200001157600080fd5b506040516200190938038062001909833981016040819052620000349162000291565b828233806000846001600160a01b0381166200006b576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000062565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fc57620000fc81620001cd565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001989190620002ea565b505050806002620001aa919062000315565b600360156101000a81548160ff021916908360ff16021790555050505062000347565b336001600160a01b03821603620002275760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000062565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200028e57600080fd5b50565b600080600060608486031215620002a757600080fd5b8351620002b48162000278565b6020850151909350620002c78162000278565b604085015190925060ff81168114620002df57600080fd5b809150509250925092565b600060208284031215620002fd57600080fd5b815180151581146200030e57600080fd5b9392505050565b60ff81811683821602908116908181146200034057634e487b7160e01b600052601160045260246000fd5b5092915050565b60805161159162000378600039600081816102f301528181610728015281816108180152610d0901526115916000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638f491cba116100d8578063b5a110111161008c578063e6c725f511610066578063e6c725f5146103a9578063ef686d8e146103da578063f2fde38b146103ed57600080fd5b8063b5a110111461033a578063bee518a41461034d578063ca709a251461038b57600080fd5b8063ae90de55116100bd578063ae90de55146102ce578063b0f479a1146102f1578063b187bd261461031757600080fd5b80638f491cba146102a85780639d2aede5146102bb57600080fd5b80632b6e5d631161012f57806379ba50971161011457806379ba50971461026f57806385572ffb146102775780638da5cb5b1461028a57600080fd5b80632b6e5d631461021d578063665ed5371461025c57600080fd5b8063181f5a7711610160578063181f5a77146101b95780631892b906146102025780632874d8bf1461021557600080fd5b806301ffc9a71461017c57806316c38b3c146101a4575b600080fd5b61018f61018a366004610f0b565b610400565b60405190151581526020015b60405180910390f35b6101b76101b2366004610f54565b610499565b005b6101f56040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e322e30000000000000000081525081565b60405161019b9190610fda565b6101b761021036600461100a565b6104eb565b6101b7610546565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101b761026a366004610f54565b610582565b6101b761060e565b6101b7610285366004611025565b610710565b60005473ffffffffffffffffffffffffffffffffffffffff16610237565b6101b76102b6366004611060565b610795565b6101b76102c936600461109b565b610977565b60035474010000000000000000000000000000000000000000900460ff1661018f565b7f0000000000000000000000000000000000000000000000000000000000000000610237565b60025474010000000000000000000000000000000000000000900460ff1661018f565b6101b76103483660046110b8565b6109c6565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161019b565b60035473ffffffffffffffffffffffffffffffffffffffff16610237565b6003547501000000000000000000000000000000000000000000900460ff1660405160ff909116815260200161019b565b6101b76103e83660046110ef565b610a68565b6101b76103fb36600461109b565b610aeb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061049357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6104a1610afc565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104f3610afc565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61054e610afc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556105806001610b7d565b565b61058a610afc565b6003805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99061060390831515815260200190565b60405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff163314610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610781576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161068b565b61079261078d82611317565b610dc0565b50565b6003547501000000000000000000000000000000000000000000900460ff1615806107dd57506003547501000000000000000000000000000000000000000000900460ff1681105b156107e55750565b600354600190610811907501000000000000000000000000000000000000000000900460ff16836113c4565b11610792577f00000000000000000000000000000000000000000000000000000000000000006001546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906113ff565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a150565b61097f610afc565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6109ce610afc565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b610a70610afc565b600380547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf390602001610603565b610af3610afc565b61079281610e16565b60005473ffffffffffffffffffffffffffffffffffffffff163314610580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161068b565b80600116600103610bc0576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1610bf4565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b610bfd81610795565b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001610c5591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015610ccf57816020015b6040805180820190915260008082526020820152815260200190600190039081610ca85790505b50815260035473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600160149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401610d7892919061141c565b6020604051808303816000875af1158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611531565b505050565b60008160600151806020019051810190610dda9190611531565b60025490915074010000000000000000000000000000000000000000900460ff16610e1257610e12610e0d82600161154a565b610b7d565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161068b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610f1d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4d57600080fd5b9392505050565b600060208284031215610f6657600080fd5b81358015158114610f4d57600080fd5b6000815180845260005b81811015610f9c57602081850181015186830182015201610f80565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610f4d6020830184610f76565b803567ffffffffffffffff8116811461100557600080fd5b919050565b60006020828403121561101c57600080fd5b610f4d82610fed565b60006020828403121561103757600080fd5b813567ffffffffffffffff81111561104e57600080fd5b820160a08185031215610f4d57600080fd5b60006020828403121561107257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461079257600080fd5b6000602082840312156110ad57600080fd5b8135610f4d81611079565b600080604083850312156110cb57600080fd5b6110d483610fed565b915060208301356110e481611079565b809150509250929050565b60006020828403121561110157600080fd5b813560ff81168114610f4d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561116457611164611112565b60405290565b60405160a0810167ffffffffffffffff8111828210171561116457611164611112565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156111d4576111d4611112565b604052919050565b600082601f8301126111ed57600080fd5b813567ffffffffffffffff81111561120757611207611112565b61123860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161118d565b81815284602083860101111561124d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261127b57600080fd5b8135602067ffffffffffffffff82111561129757611297611112565b6112a5818360051b0161118d565b82815260069290921b840181019181810190868411156112c457600080fd5b8286015b8481101561130c57604081890312156112e15760008081fd5b6112e9611141565b81356112f481611079565b815281850135858201528352918301916040016112c8565b509695505050505050565b600060a0823603121561132957600080fd5b61133161116a565b8235815261134160208401610fed565b6020820152604083013567ffffffffffffffff8082111561136157600080fd5b61136d368387016111dc565b6040840152606085013591508082111561138657600080fd5b611392368387016111dc565b606084015260808501359150808211156113ab57600080fd5b506113b83682860161126a565b60808301525092915050565b6000826113fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561141157600080fd5b8151610f4d81611079565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261144b60e0860182610f76565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808784030160608801526114868383610f76565b6040890151888203830160808a01528051808352908601945060009350908501905b808410156114e7578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906114a8565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506115238187610f76565b9a9950505050505050505050565b60006020828403121561154357600080fd5b5051919050565b80820180821115610493577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a",
}
var SelfFundedPingPongABI = SelfFundedPingPongMetaData.ABI
@@ -272,6 +272,28 @@ func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetFeeToken() (commo
return _SelfFundedPingPong.Contract.GetFeeToken(&_SelfFundedPingPong.CallOpts)
}
+func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) {
+ var out []interface{}
+ err := _SelfFundedPingPong.contract.Call(opts, &out, "getOutOfOrderExecution")
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongSession) GetOutOfOrderExecution() (bool, error) {
+ return _SelfFundedPingPong.Contract.GetOutOfOrderExecution(&_SelfFundedPingPong.CallOpts)
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetOutOfOrderExecution() (bool, error) {
+ return _SelfFundedPingPong.Contract.GetOutOfOrderExecution(&_SelfFundedPingPong.CallOpts)
+}
+
func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) {
var out []interface{}
err := _SelfFundedPingPong.contract.Call(opts, &out, "getRouter")
@@ -466,6 +488,18 @@ func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartCh
return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, chainSelector)
}
+func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) {
+ return _SelfFundedPingPong.contract.Transact(opts, "setOutOfOrderExecution", outOfOrderExecution)
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongSession) SetOutOfOrderExecution(outOfOrderExecution bool) (*types.Transaction, error) {
+ return _SelfFundedPingPong.Contract.SetOutOfOrderExecution(&_SelfFundedPingPong.TransactOpts, outOfOrderExecution)
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetOutOfOrderExecution(outOfOrderExecution bool) (*types.Transaction, error) {
+ return _SelfFundedPingPong.Contract.SetOutOfOrderExecution(&_SelfFundedPingPong.TransactOpts, outOfOrderExecution)
+}
+
func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) {
return _SelfFundedPingPong.contract.Transact(opts, "setPaused", pause)
}
@@ -735,6 +769,123 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseFunded(log types.Log
return event, nil
}
+type SelfFundedPingPongOutOfOrderExecutionChangeIterator struct {
+ Event *SelfFundedPingPongOutOfOrderExecutionChange
+
+ contract *bind.BoundContract
+ event string
+
+ logs chan types.Log
+ sub ethereum.Subscription
+ done bool
+ fail error
+}
+
+func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Next() bool {
+
+ if it.fail != nil {
+ return false
+ }
+
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(SelfFundedPingPongOutOfOrderExecutionChange)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+
+ select {
+ case log := <-it.logs:
+ it.Event = new(SelfFundedPingPongOutOfOrderExecutionChange)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Error() error {
+ return it.fail
+}
+
+func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+type SelfFundedPingPongOutOfOrderExecutionChange struct {
+ IsOutOfOrder bool
+ Raw types.Log
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*SelfFundedPingPongOutOfOrderExecutionChangeIterator, error) {
+
+ logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OutOfOrderExecutionChange")
+ if err != nil {
+ return nil, err
+ }
+ return &SelfFundedPingPongOutOfOrderExecutionChangeIterator{contract: _SelfFundedPingPong.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOutOfOrderExecutionChange) (event.Subscription, error) {
+
+ logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OutOfOrderExecutionChange")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+
+ event := new(SelfFundedPingPongOutOfOrderExecutionChange)
+ if err := _SelfFundedPingPong.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*SelfFundedPingPongOutOfOrderExecutionChange, error) {
+ event := new(SelfFundedPingPongOutOfOrderExecutionChange)
+ if err := _SelfFundedPingPong.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
type SelfFundedPingPongOwnershipTransferRequestedIterator struct {
Event *SelfFundedPingPongOwnershipTransferRequested
@@ -1247,6 +1398,8 @@ func (_SelfFundedPingPong *SelfFundedPingPong) ParseLog(log types.Log) (generate
return _SelfFundedPingPong.ParseCountIncrBeforeFundingSet(log)
case _SelfFundedPingPong.abi.Events["Funded"].ID:
return _SelfFundedPingPong.ParseFunded(log)
+ case _SelfFundedPingPong.abi.Events["OutOfOrderExecutionChange"].ID:
+ return _SelfFundedPingPong.ParseOutOfOrderExecutionChange(log)
case _SelfFundedPingPong.abi.Events["OwnershipTransferRequested"].ID:
return _SelfFundedPingPong.ParseOwnershipTransferRequested(log)
case _SelfFundedPingPong.abi.Events["OwnershipTransferred"].ID:
@@ -1269,6 +1422,10 @@ func (SelfFundedPingPongFunded) Topic() common.Hash {
return common.HexToHash("0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c")
}
+func (SelfFundedPingPongOutOfOrderExecutionChange) Topic() common.Hash {
+ return common.HexToHash("0x05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd9")
+}
+
func (SelfFundedPingPongOwnershipTransferRequested) Topic() common.Hash {
return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278")
}
@@ -1298,6 +1455,8 @@ type SelfFundedPingPongInterface interface {
GetFeeToken(opts *bind.CallOpts) (common.Address, error)
+ GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error)
+
GetRouter(opts *bind.CallOpts) (common.Address, error)
IsPaused(opts *bind.CallOpts) (bool, error)
@@ -1322,6 +1481,8 @@ type SelfFundedPingPongInterface interface {
SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error)
+ SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error)
+
SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error)
StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error)
@@ -1340,6 +1501,12 @@ type SelfFundedPingPongInterface interface {
ParseFunded(log types.Log) (*SelfFundedPingPongFunded, error)
+ FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*SelfFundedPingPongOutOfOrderExecutionChangeIterator, error)
+
+ WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOutOfOrderExecutionChange) (event.Subscription, error)
+
+ ParseOutOfOrderExecutionChange(log types.Log) (*SelfFundedPingPongOutOfOrderExecutionChange, error)
+
FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*SelfFundedPingPongOwnershipTransferRequestedIterator, error)
WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error)
diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt
index c9562db7d94..13c88b9c511 100644
--- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt
+++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt
@@ -1,22 +1,18 @@
GETH_VERSION: 1.13.8
-arm_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin 8b45b0fb08631c6b582fd3c0b4052a79cc2b4e091e6286af1ab131bef63661f9
-arm_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454
burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.bin 1e60c28ad796a220a38043b369dec8d9bffe23e1c7d9895760e30672872afd06
burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin 3e8e3358f0bb520af069a7d37ea625940a88461a54418b1d5925eabced8c74df
-burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin 524c72699d2666cf3b3effecfe67441854f62f153baef209258c9a5562680fca
+burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin 717c079d5d13300cf3c3ee871c6e5bf9af904411f204fb081a9f3b263cca1391
burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 6333d0314d0bd29e75ea5e05fe62a4516ade0c6db91c30b6f93645035db52ed8
-burn_with_from_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.bin 84a4d9f45c51c7ae87b32d42ddc15665c92aaa3de4672227448a9b766b15ef7c
-ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin a92a9ae55b235f47ac58af942e43a20dc7df31cfba9178c133e5b3e273816503
-ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin fcced2263564f51b5bf086c221e813ec06a71d2bb2e246b4e28cd60098a6de6f
+burn_with_from_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.bin 08ed1235dda921ce8841b26aa18d0c0f36db4884779dd7670857159801b6d597
+ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin 213d4adc8634671aea16fb4207989375b1aac919b04d608f4767c29592affbf5
+ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin a5b0275dcf502f73d72f6bc53bff774e25fcca01a74cc019536bdee6a42ac655
commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin 274d87db70b643e00ab0a7e7845bb4b791f3b613bfc87708d33fc5a8369e2a41
commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin f7128dcc2ee6dbcbc976288abcc16970ffb19b59412c5202ef6b259d2007f801
ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de
-evm_2_evm_multi_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.bin b913487363418c368ca412c4cc4a3b1e411395b3c6b8b982b1c48cdab5c7b10c
-evm_2_evm_multi_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.bin 15cd5695049ab4be1f396ec1d7b609738b2bcefa3740a7a48316e1f72506a34a
evm_2_evm_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.bin b0d77babbe635cd6ba04c2af049badc9e9d28a4b6ed6bb75f830ad902a618beb
evm_2_evm_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.bin 5c02c2b167946b3467636ff2bb58594cb4652fc63d8bdfee2488ed562e2a3e50
lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin e6a8ec9e8faccb1da7d90e0f702ed72975964f97dc3222b54cfcca0a0ba3fea2
-lock_release_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.bin 9afb4cf8621b5e60ac70c1b95fcc28d735119bdbc8c702bc9931d30e712e29f3
+lock_release_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.bin e632b08be0fbd1d013e8b3a9d75293d0d532b83071c531ff2be1deec1fa48ec1
maybe_revert_message_receiver: ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin d73956c26232ebcc4a5444429fa99cbefed960e323be9b5a24925885c2e477d5
message_hasher: ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.abi ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.bin 1d5146d43e1b99cd2d6f9f06475be19087e4349f7cee0fdbbf134ba65e967c93
mock_usdc_token_messenger: ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.bin d976651d36b33ac2196b32b9d2f4fa6690c6a18d41b621365659fce1c1d1e737
@@ -26,12 +22,16 @@ multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRate
multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin aa299e0c2659d53aad4eace4d66be0e734b1366008593669cf30361ff529da6a
nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536
ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487
-ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 1588313bb5e781d181a825247d30828f59007700f36b4b9b00391592b06ff4b4
+offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 76ec9676116368ab7c7c7ed45191698a12e4d975633caea32d821a1125633589
+onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 123e949bc9607289382534c4432ecebe5b1da5ca92c1c6c8cc6b9be56c3352c6
+ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 4e51d70bdb6d951041518a3d7fd3b33ba8d3954bcc3d078318055b833b880324
price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin 8f4bdaa4d8239429ae4e047ab06d445bad42234a05bb7c99ba6141bd811e1722
registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353
-report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin c07af8433bf8dbc7981725b18922a9c4e2dea068dd204bc62adc0e926cb499c3
+report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 20292ddaba15096fe8060567cf56cda673b947df27241d0c49d2debc838feb24
+rmn_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin 8b45b0fb08631c6b582fd3c0b4052a79cc2b4e091e6286af1ab131bef63661f9
+rmn_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454
router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 2e4f0a7826c8abb49d882bb49fc5ff20a186dbd3137624b9097ffed903ae4888
-self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 86e169636e5633854ed0b709c804066b615040bceba25aa5137450fbe6f76fa3
+self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 4f339db2b670b88214b738efb7a714be9d50fa32c8008710b607d58670b22074
token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin 942be7d1681ac102e0615bee13f76838ebb0b261697cf1270d2bf82c12e57aeb
token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 7c01fd89f5153baa4d7409d14beabb3f861abfbf8880d3c6d06802cc398570f9
usdc_token_pool: ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin 8e7eae4c7277ce4a0092cca815c046cc49094028c23d2d113de9335fa4358030
diff --git a/core/gethwrappers/ccip/go_generate.go b/core/gethwrappers/ccip/go_generate.go
index 197aa627cbb..a41b01c7abd 100644
--- a/core/gethwrappers/ccip/go_generate.go
+++ b/core/gethwrappers/ccip/go_generate.go
@@ -4,14 +4,14 @@ package ccip
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin CommitStore commit_store
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin CommitStoreHelper commit_store_helper
-//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin ARMContract arm_contract
-//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin ARMProxyContract arm_proxy_contract
+//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin RMNContract rmn_contract
+//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin RMNProxyContract rmn_proxy_contract
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin TokenAdminRegistry token_admin_registry
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin RegistryModuleOwnerCustom registry_module_owner_custom
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.bin EVM2EVMOnRamp evm_2_evm_onramp
-//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOnRamp/EVM2EVMMultiOnRamp.bin EVM2EVMMultiOnRamp evm_2_evm_multi_onramp
+//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin OnRamp onramp
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.bin EVM2EVMOffRamp evm_2_evm_offramp
-//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMMultiOffRamp/EVM2EVMMultiOffRamp.bin EVM2EVMMultiOffRamp evm_2_evm_multi_offramp
+//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin OffRamp offramp
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin MultiAggregateRateLimiter multi_aggregate_rate_limiter
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin Router router
//go:generate go run ../generation/generate/wrap.go ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin PriceRegistry price_registry
diff --git a/core/internal/features/features_test.go b/core/internal/features/features_test.go
index 1135c5a4eb8..12595973791 100644
--- a/core/internal/features/features_test.go
+++ b/core/internal/features/features_test.go
@@ -57,7 +57,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/multiwordconsumer_wrapper"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/operator_wrapper"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
@@ -74,6 +73,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/static"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/web"
webauth "github.com/smartcontractkit/chainlink/v2/core/web/auth"
)
diff --git a/core/internal/features/ocr2/features_ocr2_test.go b/core/internal/features/ocr2/features_ocr2_test.go
index d0f157d8bd4..9160310261f 100644
--- a/core/internal/features/ocr2/features_ocr2_test.go
+++ b/core/internal/features/ocr2/features_ocr2_test.go
@@ -43,7 +43,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/authorized_forwarder"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/link_token_interface"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
@@ -54,6 +53,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/ocrbootstrap"
"github.com/smartcontractkit/chainlink/v2/core/services/relay/evm"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
type ocr2Node struct {
diff --git a/core/scripts/ccip/liquiditymanager/util.go b/core/scripts/ccip/liquiditymanager/util.go
index 26165b580d3..45aa69ddb8a 100644
--- a/core/scripts/ccip/liquiditymanager/util.go
+++ b/core/scripts/ccip/liquiditymanager/util.go
@@ -19,9 +19,9 @@ import (
"github.com/smartcontractkit/chainlink/core/scripts/ccip/liquiditymanager/multienv"
"github.com/smartcontractkit/chainlink/core/scripts/ccip/liquiditymanager/opstack"
helpers "github.com/smartcontractkit/chainlink/core/scripts/common"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
cciprouter "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/arbitrum_l1_bridge_adapter"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/arbitrum_l2_bridge_adapter"
@@ -282,17 +282,17 @@ func deployTokenPoolAndRebalancer(
func deployArm(
transactor *bind.TransactOpts,
client *ethclient.Client,
- chainID uint64) (*mock_arm_contract.MockARMContract, *arm_proxy_contract.ARMProxyContract) {
- _, tx, _, err := mock_arm_contract.DeployMockARMContract(transactor, client)
+ chainID uint64) (*mock_rmn_contract.MockRMNContract, *rmn_proxy_contract.RMNProxyContract) {
+ _, tx, _, err := mock_rmn_contract.DeployMockRMNContract(transactor, client)
helpers.PanicErr(err)
armAddress := helpers.ConfirmContractDeployed(context.Background(), client, tx, int64(chainID))
- arm, err := mock_arm_contract.NewMockARMContract(armAddress, client)
+ arm, err := mock_rmn_contract.NewMockRMNContract(armAddress, client)
helpers.PanicErr(err)
- _, tx, _, err = arm_proxy_contract.DeployARMProxyContract(transactor, client, arm.Address())
+ _, tx, _, err = rmn_proxy_contract.DeployRMNProxyContract(transactor, client, arm.Address())
helpers.PanicErr(err)
armProxyAddress := helpers.ConfirmContractDeployed(context.Background(), client, tx, int64(chainID))
- armProxy, err := arm_proxy_contract.NewARMProxyContract(armProxyAddress, client)
+ armProxy, err := rmn_proxy_contract.NewRMNProxyContract(armProxyAddress, client)
helpers.PanicErr(err)
return arm, armProxy
diff --git a/core/scripts/ccip/revert-reason/handler/reason.go b/core/scripts/ccip/revert-reason/handler/reason.go
index b28248de7b2..2e41935ffaa 100644
--- a/core/scripts/ccip/revert-reason/handler/reason.go
+++ b/core/scripts/ccip/revert-reason/handler/reason.go
@@ -14,18 +14,18 @@ import (
"github.com/ethereum/go-ethereum/ethclient"
"github.com/pkg/errors"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/burn_mint_token_pool"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/burn_mint_token_pool_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_offramp"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_multi_onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool_1_4_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/usdc_token_pool"
@@ -133,7 +133,7 @@ func DecodeErrorStringFromABI(errorString string) (string, error) {
func getAllABIs() []string {
return []string{
- arm_contract.ARMContractABI,
+ rmn_contract.RMNContractABI,
lock_release_token_pool_1_4_0.LockReleaseTokenPoolABI,
burn_mint_token_pool_1_2_0.BurnMintTokenPoolABI,
usdc_token_pool_1_4_0.USDCTokenPoolABI,
@@ -148,8 +148,8 @@ func getAllABIs() []string {
evm_2_evm_onramp.EVM2EVMOnRampABI,
evm_2_evm_offramp.EVM2EVMOffRampABI,
router.RouterABI,
- evm_2_evm_multi_onramp.EVM2EVMMultiOnRampABI,
- evm_2_evm_multi_offramp.EVM2EVMMultiOffRampABI,
+ onramp.OnRampABI,
+ offramp.OffRampABI,
maybe_revert_message_receiver.MaybeRevertMessageReceiverABI,
}
}
diff --git a/core/scripts/go.mod b/core/scripts/go.mod
index 8fd3e5373c4..13ed1c4aa9d 100644
--- a/core/scripts/go.mod
+++ b/core/scripts/go.mod
@@ -274,7 +274,7 @@ require (
github.com/sethvargo/go-retry v0.2.4 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/shirou/gopsutil/v3 v3.24.3 // indirect
- github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb // indirect
+ github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f // indirect
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 // indirect
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240718160222-2dc0c8136bfa // indirect
github.com/smartcontractkit/chainlink-feeds v0.0.0-20240710170203-5b41615da827 // indirect
diff --git a/core/scripts/go.sum b/core/scripts/go.sum
index 846fd926085..468c13a6709 100644
--- a/core/scripts/go.sum
+++ b/core/scripts/go.sum
@@ -568,8 +568,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
-github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
+github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
+github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
@@ -1070,8 +1070,8 @@ github.com/smartcontractkit/chain-selectors v1.0.21 h1:KCR9SA7PhOexaBzFieHoLv1Wo
github.com/smartcontractkit/chain-selectors v1.0.21/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb h1:iXBb4Zg/3jh/dWa6DVz1pFwc0eGfqVY2Pgs2N91BWs0=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f h1:lQZBOjeYFpCdk0mGQUhbrJipd00tu49xK4zSijC/9Co=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834 h1:pTf4xdcmiWBqWZ6rTy2RMTDBzhHk89VC1pM7jXKQztI=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834/go.mod h1:fh9eBbrReCmv31bfz52ENCAMa7nTKQbdhb2B3+S2VGo=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 h1:NBQLtqk8zsyY4qTJs+NElI3aDFTcAo83JHvqD04EvB0=
diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go
index 4143bcbd50f..e9ed223b9b3 100644
--- a/core/services/chainlink/config_test.go
+++ b/core/services/chainlink/config_test.go
@@ -554,19 +554,20 @@ func TestConfig_Marshal(t *testing.T) {
},
},
- LinkContractAddress: mustAddress("0x538aAaB4ea120b2bC2fe5D296852D948F07D849e"),
- LogBackfillBatchSize: ptr[uint32](17),
- LogPollInterval: &minute,
- LogKeepBlocksDepth: ptr[uint32](100000),
- LogPrunePageSize: ptr[uint32](10000),
- BackupLogPollerBlockDelay: ptr[uint64](532),
- MinContractPayment: commonassets.NewLinkFromJuels(math.MaxInt64),
- MinIncomingConfirmations: ptr[uint32](13),
- NonceAutoSync: ptr(true),
- NoNewHeadsThreshold: &minute,
- OperatorFactoryAddress: mustAddress("0xa5B85635Be42F21f94F28034B7DA440EeFF0F418"),
- RPCDefaultBatchSize: ptr[uint32](17),
- RPCBlockQueryDelay: ptr[uint16](10),
+ LinkContractAddress: mustAddress("0x538aAaB4ea120b2bC2fe5D296852D948F07D849e"),
+ LogBackfillBatchSize: ptr[uint32](17),
+ LogPollInterval: &minute,
+ LogKeepBlocksDepth: ptr[uint32](100000),
+ LogPrunePageSize: ptr[uint32](10000),
+ BackupLogPollerBlockDelay: ptr[uint64](532),
+ MinContractPayment: commonassets.NewLinkFromJuels(math.MaxInt64),
+ MinIncomingConfirmations: ptr[uint32](13),
+ NonceAutoSync: ptr(true),
+ NoNewHeadsThreshold: &minute,
+ OperatorFactoryAddress: mustAddress("0xa5B85635Be42F21f94F28034B7DA440EeFF0F418"),
+ RPCDefaultBatchSize: ptr[uint32](17),
+ RPCBlockQueryDelay: ptr[uint16](10),
+ NoNewFinalizedHeadsThreshold: &hour,
Transactions: evmcfg.Transactions{
MaxInFlight: ptr[uint32](19),
@@ -998,6 +999,7 @@ OperatorFactoryAddress = '0xa5B85635Be42F21f94F28034B7DA440EeFF0F418'
RPCDefaultBatchSize = 17
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 16
+NoNewFinalizedHeadsThreshold = '1h0m0s'
[EVM.Transactions]
ForwardersEnabled = true
@@ -1302,7 +1304,7 @@ func TestConfig_Validate(t *testing.T) {
- 1: 10 errors:
- ChainType: invalid value (Foo): must not be set with this chain id
- Nodes: missing: must have at least one node
- - ChainType: invalid value (Foo): must be one of arbitrum, celo, gnosis, kroma, metis, optimismBedrock, scroll, wemix, xlayer, zkevm, zksync or omitted
+ - ChainType: invalid value (Foo): must be one of arbitrum, astar, celo, gnosis, hedera, kroma, metis, optimismBedrock, scroll, wemix, xlayer, zkevm, zksync or omitted
- HeadTracker.HistoryDepth: invalid value (30): must be greater than or equal to FinalizedBlockOffset
- GasEstimator.BumpThreshold: invalid value (0): cannot be 0 if auto-purge feature is enabled for Foo
- Transactions.AutoPurge.Threshold: missing: needs to be set if auto-purge feature is enabled for Foo
@@ -1315,7 +1317,7 @@ func TestConfig_Validate(t *testing.T) {
- 2: 5 errors:
- ChainType: invalid value (Arbitrum): only "optimismBedrock" can be used with this chain id
- Nodes: missing: must have at least one node
- - ChainType: invalid value (Arbitrum): must be one of arbitrum, celo, gnosis, kroma, metis, optimismBedrock, scroll, wemix, xlayer, zkevm, zksync or omitted
+ - ChainType: invalid value (Arbitrum): must be one of arbitrum, astar, celo, gnosis, hedera, kroma, metis, optimismBedrock, scroll, wemix, xlayer, zkevm, zksync or omitted
- FinalityDepth: invalid value (0): must be greater than or equal to 1
- MinIncomingConfirmations: invalid value (0): must be greater than or equal to 1
- 3.Nodes: 5 errors:
diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml
index c166657a60e..9df2e705081 100644
--- a/core/services/chainlink/testdata/config-full.toml
+++ b/core/services/chainlink/testdata/config-full.toml
@@ -291,6 +291,7 @@ OperatorFactoryAddress = '0xa5B85635Be42F21f94F28034B7DA440EeFF0F418'
RPCDefaultBatchSize = 17
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 16
+NoNewFinalizedHeadsThreshold = '1h0m0s'
[EVM.Transactions]
ForwardersEnabled = true
diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml
index 3aedc0dc9b3..e560099c2c3 100644
--- a/core/services/chainlink/testdata/config-multi-chain-effective.toml
+++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml
@@ -278,6 +278,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 12
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false
@@ -377,6 +378,7 @@ OperatorFactoryAddress = '0x8007e24251b1D2Fc518Eb843A701d9cD21fe0aA3'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[EVM.Transactions]
ForwardersEnabled = false
@@ -470,6 +472,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '6m0s'
[EVM.Transactions]
ForwardersEnabled = false
diff --git a/core/services/fluxmonitorv2/flux_monitor_test.go b/core/services/fluxmonitorv2/flux_monitor_test.go
index b3a5bcee6b9..87ed4e3053d 100644
--- a/core/services/fluxmonitorv2/flux_monitor_test.go
+++ b/core/services/fluxmonitorv2/flux_monitor_test.go
@@ -29,7 +29,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/txmgr"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/flux_aggregator_wrapper"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/mocks"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest"
@@ -42,6 +41,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ethkey"
"github.com/smartcontractkit/chainlink/v2/core/services/pipeline"
pipelinemocks "github.com/smartcontractkit/chainlink/v2/core/services/pipeline/mocks"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
const oracleCount uint8 = 17
diff --git a/core/services/fluxmonitorv2/integrations_test.go b/core/services/fluxmonitorv2/integrations_test.go
index 2dacac54281..908d9fb73d0 100644
--- a/core/services/fluxmonitorv2/integrations_test.go
+++ b/core/services/fluxmonitorv2/integrations_test.go
@@ -35,7 +35,6 @@ import (
faw "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/flux_aggregator_wrapper"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/link_token_interface"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
"github.com/smartcontractkit/chainlink/v2/core/logger"
@@ -45,6 +44,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/pipeline"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/web"
)
diff --git a/core/services/job/job_orm_test.go b/core/services/job/job_orm_test.go
index 348d29747d2..c26cf828ccd 100644
--- a/core/services/job/job_orm_test.go
+++ b/core/services/job/job_orm_test.go
@@ -28,7 +28,6 @@ import (
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
@@ -50,6 +49,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrfcommon"
"github.com/smartcontractkit/chainlink/v2/core/services/webhook"
"github.com/smartcontractkit/chainlink/v2/core/testdata/testspecs"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
const mercuryOracleTOML = `name = 'LINK / ETH | 0x0000000000000000000000000000000000000000000000000000000000000001 | verifier_proxy 0x0000000000000000000000000000000000000001'
diff --git a/core/services/keeper/integration_test.go b/core/services/keeper/integration_test.go
index cbbe89b3f21..455f5bb5060 100644
--- a/core/services/keeper/integration_test.go
+++ b/core/services/keeper/integration_test.go
@@ -30,12 +30,12 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/keeper_registry_wrapper1_3"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/mock_v3_aggregator_contract"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
"github.com/smartcontractkit/chainlink/v2/core/services/keeper"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
webpresenters "github.com/smartcontractkit/chainlink/v2/core/web/presenters"
)
diff --git a/core/services/ocr/contract_tracker.go b/core/services/ocr/contract_tracker.go
index 11dfacd1d1a..d7199874a9f 100644
--- a/core/services/ocr/contract_tracker.go
+++ b/core/services/ocr/contract_tracker.go
@@ -399,7 +399,7 @@ func (t *OCRContractTracker) LatestBlockHeight(ctx context.Context) (blockheight
// care about the block height; we have no way of getting the L1 block
// height anyway
return 0, nil
- case "", chaintype.ChainArbitrum, chaintype.ChainCelo, chaintype.ChainGnosis, chaintype.ChainKroma, chaintype.ChainOptimismBedrock, chaintype.ChainScroll, chaintype.ChainWeMix, chaintype.ChainXLayer, chaintype.ChainZkEvm, chaintype.ChainZkSync:
+ case "", chaintype.ChainArbitrum, chaintype.ChainAstar, chaintype.ChainCelo, chaintype.ChainGnosis, chaintype.ChainHedera, chaintype.ChainKroma, chaintype.ChainOptimismBedrock, chaintype.ChainScroll, chaintype.ChainWeMix, chaintype.ChainXLayer, chaintype.ChainZkEvm, chaintype.ChainZkSync:
// continue
}
latestBlockHeight := t.getLatestBlockHeight()
diff --git a/core/services/ocr2/plugins/ccip/LICENSE.md b/core/services/ocr2/plugins/ccip/LICENSE.md
index b127e1a823a..96fdb2b1392 100644
--- a/core/services/ocr2/plugins/ccip/LICENSE.md
+++ b/core/services/ocr2/plugins/ccip/LICENSE.md
@@ -9,12 +9,12 @@ Parameters
Licensor: SmartContract Chainlink Limited SEZC
-Licensed Work: Cross-Chain Interoperability Protocol v1.4
+Licensed Work: Cross-Chain Interoperability Protocol v1.5
The Licensed Work is (c) 2023 SmartContract Chainlink Limited SEZC
-Additional Use Grant: Any uses listed and defined at [v1.4-CCIP-License-grants](../../../../../contracts/src/v0.8/ccip/v1.4-CCIP-License-grants)
+Additional Use Grant: Any uses listed and defined at [v1.5-CCIP-License-grants](../../../../../contracts/src/v0.8/ccip/v1.5-CCIP-License-grants.md)
-Change Date: May 23, 2027
+Change Date: Aug 16, 2028
Change License: MIT
diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/commit_store_reader_test.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/commit_store_reader_test.go
index 4e134b1f175..7f6b1c1bb75 100644
--- a/core/services/ocr2/plugins/ccip/internal/ccipdata/commit_store_reader_test.go
+++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/commit_store_reader_test.go
@@ -27,7 +27,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_helper_1_0_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_helper_1_2_0"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry_1_0_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
@@ -167,7 +167,7 @@ func TestCommitStoreReaders(t *testing.T) {
MerkleRoot: common.HexToHash("0x1"),
}
er := big.NewInt(1)
- armAddr, _, arm, err := mock_arm_contract.DeployMockARMContract(user, ec)
+ armAddr, _, arm, err := mock_rmn_contract.DeployMockRMNContract(user, ec)
require.NoError(t, err)
addr, _, ch, err := commit_store_helper_1_0_0.DeployCommitStoreHelper(user, ec, commit_store_helper_1_0_0.CommitStoreStaticConfig{
ChainSelector: testutils.SimulatedChainID.Uint64(),
diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/offramp_reader_test.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/offramp_reader_test.go
index 1aaa1750bb8..f5711422bdf 100644
--- a/core/services/ocr2/plugins/ccip/internal/ccipdata/offramp_reader_test.go
+++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/offramp_reader_test.go
@@ -24,7 +24,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp_1_0_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp_1_2_0"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest"
"github.com/smartcontractkit/chainlink/v2/core/logger"
@@ -320,7 +320,7 @@ func deployMockArm(
user *bind.TransactOpts,
bc *client.SimulatedBackendClient,
) common.Address {
- armAddr, tx, _, err := mock_arm_contract.DeployMockARMContract(user, bc)
+ armAddr, tx, _, err := mock_rmn_contract.DeployMockRMNContract(user, bc)
require.NoError(t, err)
bc.Commit()
ccipdata.AssertNonRevert(t, tx, bc, user)
diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_0_0/onramp.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_0_0/onramp.go
index 29cb357223b..6737abe64c4 100644
--- a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_0_0/onramp.go
+++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_0_0/onramp.go
@@ -13,8 +13,8 @@ import (
cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccip"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp_1_0_0"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
@@ -43,7 +43,7 @@ type OnRamp struct {
// Static config can be cached, because it's never expected to change.
// The only way to change that is through the contract's constructor (redeployment)
cachedStaticConfig cache.OnceCtxFunction[evm_2_evm_onramp_1_0_0.EVM2EVMOnRampStaticConfig]
- cachedRmnContract cache.OnceCtxFunction[*arm_contract.ARMContract]
+ cachedRmnContract cache.OnceCtxFunction[*rmn_contract.RMNContract]
}
func NewOnRamp(lggr logger.Logger, sourceSelector, destSelector uint64, onRampAddress common.Address, sourceLP logpoller.LogPoller, source client.Client) (*OnRamp, error) {
@@ -71,13 +71,13 @@ func NewOnRamp(lggr logger.Logger, sourceSelector, destSelector uint64, onRampAd
cachedStaticConfig := cache.OnceCtxFunction[evm_2_evm_onramp_1_0_0.EVM2EVMOnRampStaticConfig](func(ctx context.Context) (evm_2_evm_onramp_1_0_0.EVM2EVMOnRampStaticConfig, error) {
return onRamp.GetStaticConfig(&bind.CallOpts{Context: ctx})
})
- cachedRmnContract := cache.OnceCtxFunction[*arm_contract.ARMContract](func(ctx context.Context) (*arm_contract.ARMContract, error) {
+ cachedRmnContract := cache.OnceCtxFunction[*rmn_contract.RMNContract](func(ctx context.Context) (*rmn_contract.RMNContract, error) {
staticConfig, err := cachedStaticConfig(ctx)
if err != nil {
return nil, err
}
- return arm_contract.NewARMContract(staticConfig.ArmProxy, source)
+ return rmn_contract.NewRMNContract(staticConfig.ArmProxy, source)
})
return &OnRamp{
lggr: lggr,
diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/onramp.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/onramp.go
index f727d7fd5fa..29396823479 100644
--- a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/onramp.go
+++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/onramp.go
@@ -14,8 +14,8 @@ import (
cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccip"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp_1_2_0"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
@@ -62,7 +62,7 @@ type OnRamp struct {
// Static config can be cached, because it's never expected to change.
// The only way to change that is through the contract's constructor (redeployment)
cachedStaticConfig cache.OnceCtxFunction[evm_2_evm_onramp_1_2_0.EVM2EVMOnRampStaticConfig]
- cachedRmnContract cache.OnceCtxFunction[*arm_contract.ARMContract]
+ cachedRmnContract cache.OnceCtxFunction[*rmn_contract.RMNContract]
}
func NewOnRamp(lggr logger.Logger, sourceSelector, destSelector uint64, onRampAddress common.Address, sourceLP logpoller.LogPoller, source client.Client) (*OnRamp, error) {
@@ -89,13 +89,13 @@ func NewOnRamp(lggr logger.Logger, sourceSelector, destSelector uint64, onRampAd
cachedStaticConfig := cache.OnceCtxFunction[evm_2_evm_onramp_1_2_0.EVM2EVMOnRampStaticConfig](func(ctx context.Context) (evm_2_evm_onramp_1_2_0.EVM2EVMOnRampStaticConfig, error) {
return onRamp.GetStaticConfig(&bind.CallOpts{Context: ctx})
})
- cachedRmnContract := cache.OnceCtxFunction[*arm_contract.ARMContract](func(ctx context.Context) (*arm_contract.ARMContract, error) {
+ cachedRmnContract := cache.OnceCtxFunction[*rmn_contract.RMNContract](func(ctx context.Context) (*rmn_contract.RMNContract, error) {
staticConfig, err := cachedStaticConfig(ctx)
if err != nil {
return nil, err
}
- return arm_contract.NewARMContract(staticConfig.ArmProxy, source)
+ return rmn_contract.NewRMNContract(staticConfig.ArmProxy, source)
})
return &OnRamp{
lggr: lggr,
diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp.go
index 481933f89ad..354a5defdde 100644
--- a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp.go
+++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp.go
@@ -15,8 +15,8 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/internal/cache"
@@ -64,7 +64,7 @@ type OnRamp struct {
// Static config can be cached, because it's never expected to change.
// The only way to change that is through the contract's constructor (redeployment)
cachedStaticConfig cache.OnceCtxFunction[evm_2_evm_onramp.EVM2EVMOnRampStaticConfig]
- cachedRmnContract cache.OnceCtxFunction[*arm_contract.ARMContract]
+ cachedRmnContract cache.OnceCtxFunction[*rmn_contract.RMNContract]
}
func NewOnRamp(lggr logger.Logger, sourceSelector, destSelector uint64, onRampAddress common.Address, sourceLP logpoller.LogPoller, source client.Client) (*OnRamp, error) {
@@ -92,13 +92,13 @@ func NewOnRamp(lggr logger.Logger, sourceSelector, destSelector uint64, onRampAd
cachedStaticConfig := cache.OnceCtxFunction[evm_2_evm_onramp.EVM2EVMOnRampStaticConfig](func(ctx context.Context) (evm_2_evm_onramp.EVM2EVMOnRampStaticConfig, error) {
return onRamp.GetStaticConfig(&bind.CallOpts{Context: ctx})
})
- cachedRmnContract := cache.OnceCtxFunction[*arm_contract.ARMContract](func(ctx context.Context) (*arm_contract.ARMContract, error) {
+ cachedRmnContract := cache.OnceCtxFunction[*rmn_contract.RMNContract](func(ctx context.Context) (*rmn_contract.RMNContract, error) {
staticConfig, err := cachedStaticConfig(ctx)
if err != nil {
return nil, err
}
- return arm_contract.NewARMContract(staticConfig.RmnProxy, source)
+ return rmn_contract.NewRMNContract(staticConfig.RmnProxy, source)
})
return &OnRamp{
diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp_test.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp_test.go
index 0f09f2190b1..65fccb7821c 100644
--- a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp_test.go
+++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_5_0/onramp_test.go
@@ -17,7 +17,7 @@ import (
evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers"
@@ -105,7 +105,7 @@ func Test_ProperlyRecognizesPerLaneCurses(t *testing.T) {
assert.True(t, isCursed)
// Uncursing the chain selector
- _, err = mockRMN.OwnerUnvoteToCurse(user, []mock_arm_contract.RMNUnvoteToCurseRecord{}, ccipcommon.SelectorToBytes(destChainSelector))
+ _, err = mockRMN.OwnerUnvoteToCurse(user, []mock_rmn_contract.RMNUnvoteToCurseRecord{}, ccipcommon.SelectorToBytes(destChainSelector))
require.NoError(t, err)
bc.Commit()
@@ -129,8 +129,8 @@ func BenchmarkIsSourceCursedWithCache(b *testing.B) {
}
}
-func setupOnRampV1_5_0(t testing.TB, user *bind.TransactOpts, bc *client.SimulatedBackendClient) (common.Address, *mock_arm_contract.MockARMContract, common.Address) {
- rmnAddress, transaction, rmnContract, err := mock_arm_contract.DeployMockARMContract(user, bc)
+func setupOnRampV1_5_0(t testing.TB, user *bind.TransactOpts, bc *client.SimulatedBackendClient) (common.Address, *mock_rmn_contract.MockRMNContract, common.Address) {
+ rmnAddress, transaction, rmnContract, err := mock_rmn_contract.DeployMockRMNContract(user, bc)
bc.Commit()
require.NoError(t, err)
ccipdata.AssertNonRevert(t, transaction, bc, user)
diff --git a/core/services/ocr2/plugins/ccip/testhelpers/ccip_contracts.go b/core/services/ocr2/plugins/ccip/testhelpers/ccip_contracts.go
index 66c65b5c3a6..e1aed590533 100644
--- a/core/services/ocr2/plugins/ccip/testhelpers/ccip_contracts.go
+++ b/core/services/ocr2/plugins/ccip/testhelpers/ccip_contracts.go
@@ -29,7 +29,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_helper"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_helper_1_2_0"
@@ -38,8 +37,9 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry_1_2_0"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9"
@@ -175,8 +175,8 @@ type Common struct {
CustomToken *link_token_interface.LinkToken
WrappedNative *weth9.WETH9
WrappedNativePool *lock_release_token_pool.LockReleaseTokenPool
- ARM *mock_arm_contract.MockARMContract
- ARMProxy *arm_proxy_contract.ARMProxyContract
+ ARM *mock_rmn_contract.MockRMNContract
+ ARMProxy *rmn_proxy_contract.RMNProxyContract
PriceRegistry *price_registry_1_2_0.PriceRegistry
TokenAdminRegistry *token_admin_registry.TokenAdminRegistry
}
@@ -660,38 +660,38 @@ func SetupCCIPContracts(t *testing.T, sourceChainID, sourceChainSelector, destCh
// │ Deploy RMN │
// ================================================================
- armSourceAddress, _, _, err := mock_arm_contract.DeployMockARMContract(
+ armSourceAddress, _, _, err := mock_rmn_contract.DeployMockRMNContract(
sourceUser,
sourceChain,
)
require.NoError(t, err)
- sourceARM, err := mock_arm_contract.NewMockARMContract(armSourceAddress, sourceChain)
+ sourceARM, err := mock_rmn_contract.NewMockRMNContract(armSourceAddress, sourceChain)
require.NoError(t, err)
- armProxySourceAddress, _, _, err := arm_proxy_contract.DeployARMProxyContract(
+ armProxySourceAddress, _, _, err := rmn_proxy_contract.DeployRMNProxyContract(
sourceUser,
sourceChain,
armSourceAddress,
)
require.NoError(t, err)
- sourceARMProxy, err := arm_proxy_contract.NewARMProxyContract(armProxySourceAddress, sourceChain)
+ sourceARMProxy, err := rmn_proxy_contract.NewRMNProxyContract(armProxySourceAddress, sourceChain)
require.NoError(t, err)
sourceChain.Commit()
- armDestAddress, _, _, err := mock_arm_contract.DeployMockARMContract(
+ armDestAddress, _, _, err := mock_rmn_contract.DeployMockRMNContract(
destUser,
destChain,
)
require.NoError(t, err)
- armProxyDestAddress, _, _, err := arm_proxy_contract.DeployARMProxyContract(
+ armProxyDestAddress, _, _, err := rmn_proxy_contract.DeployRMNProxyContract(
destUser,
destChain,
armDestAddress,
)
require.NoError(t, err)
destChain.Commit()
- destARM, err := mock_arm_contract.NewMockARMContract(armDestAddress, destChain)
+ destARM, err := mock_rmn_contract.NewMockRMNContract(armDestAddress, destChain)
require.NoError(t, err)
- destARMProxy, err := arm_proxy_contract.NewARMProxyContract(armProxyDestAddress, destChain)
+ destARMProxy, err := rmn_proxy_contract.NewRMNProxyContract(armProxyDestAddress, destChain)
require.NoError(t, err)
// ================================================================
diff --git a/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go b/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go
index ad42078248a..35401b0316e 100644
--- a/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go
+++ b/core/services/ocr2/plugins/ccip/testhelpers/integration/chainlink.go
@@ -47,7 +47,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/logger/audit"
@@ -72,6 +71,7 @@ import (
evmrelay "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm"
clutils "github.com/smartcontractkit/chainlink/v2/core/utils"
"github.com/smartcontractkit/chainlink/v2/core/utils/crypto"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/plugins"
)
diff --git a/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/ccip_contracts_1_4_0.go b/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/ccip_contracts_1_4_0.go
index 47eb8bc62ce..b8db2dfff7f 100644
--- a/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/ccip_contracts_1_4_0.go
+++ b/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/ccip_contracts_1_4_0.go
@@ -28,7 +28,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract"
burn_mint_token_pool "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/burn_mint_token_pool_1_4_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_1_2_0"
evm_2_evm_offramp "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp_1_2_0"
@@ -37,8 +36,9 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool_1_0_0"
lock_release_token_pool "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool_1_4_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry_1_2_0"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/link_token_interface"
@@ -182,8 +182,8 @@ type Common struct {
CustomToken *link_token_interface.LinkToken
WrappedNative *weth9.WETH9
WrappedNativePool *lock_release_token_pool_1_0_0.LockReleaseTokenPool
- ARM *mock_arm_contract.MockARMContract
- ARMProxy *arm_proxy_contract.ARMProxyContract
+ ARM *mock_rmn_contract.MockRMNContract
+ ARMProxy *rmn_proxy_contract.RMNProxyContract
PriceRegistry *price_registry_1_2_0.PriceRegistry
}
@@ -789,38 +789,38 @@ func SetupCCIPContracts(t *testing.T, sourceChainID, sourceChainSelector, destCh
sourceChain, sourceUser := testhelpers.SetupChain(t)
destChain, destUser := testhelpers.SetupChain(t)
- armSourceAddress, _, _, err := mock_arm_contract.DeployMockARMContract(
+ armSourceAddress, _, _, err := mock_rmn_contract.DeployMockRMNContract(
sourceUser,
sourceChain,
)
require.NoError(t, err)
- sourceARM, err := mock_arm_contract.NewMockARMContract(armSourceAddress, sourceChain)
+ sourceARM, err := mock_rmn_contract.NewMockRMNContract(armSourceAddress, sourceChain)
require.NoError(t, err)
- armProxySourceAddress, _, _, err := arm_proxy_contract.DeployARMProxyContract(
+ armProxySourceAddress, _, _, err := rmn_proxy_contract.DeployRMNProxyContract(
sourceUser,
sourceChain,
armSourceAddress,
)
require.NoError(t, err)
- sourceARMProxy, err := arm_proxy_contract.NewARMProxyContract(armProxySourceAddress, sourceChain)
+ sourceARMProxy, err := rmn_proxy_contract.NewRMNProxyContract(armProxySourceAddress, sourceChain)
require.NoError(t, err)
sourceChain.Commit()
- armDestAddress, _, _, err := mock_arm_contract.DeployMockARMContract(
+ armDestAddress, _, _, err := mock_rmn_contract.DeployMockRMNContract(
destUser,
destChain,
)
require.NoError(t, err)
- armProxyDestAddress, _, _, err := arm_proxy_contract.DeployARMProxyContract(
+ armProxyDestAddress, _, _, err := rmn_proxy_contract.DeployRMNProxyContract(
destUser,
destChain,
armDestAddress,
)
require.NoError(t, err)
destChain.Commit()
- destARM, err := mock_arm_contract.NewMockARMContract(armDestAddress, destChain)
+ destARM, err := mock_rmn_contract.NewMockRMNContract(armDestAddress, destChain)
require.NoError(t, err)
- destARMProxy, err := arm_proxy_contract.NewARMProxyContract(armProxyDestAddress, destChain)
+ destARMProxy, err := rmn_proxy_contract.NewRMNProxyContract(armProxyDestAddress, destChain)
require.NoError(t, err)
// Deploy link token and pool on source chain
diff --git a/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/chainlink.go b/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/chainlink.go
index f406ea0e94a..5099a4b57e5 100644
--- a/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/chainlink.go
+++ b/core/services/ocr2/plugins/ccip/testhelpers/testhelpers_1_4_0/chainlink.go
@@ -47,7 +47,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp_1_2_0"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/logger/audit"
@@ -72,6 +71,7 @@ import (
evmrelay "github.com/smartcontractkit/chainlink/v2/core/services/relay/evm"
clutils "github.com/smartcontractkit/chainlink/v2/core/utils"
"github.com/smartcontractkit/chainlink/v2/core/utils/crypto"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/plugins"
)
diff --git a/core/services/ocr2/plugins/functions/integration_tests/v1/internal/testutils.go b/core/services/ocr2/plugins/functions/integration_tests/v1/internal/testutils.go
index 6d704b50f97..49a79463a57 100644
--- a/core/services/ocr2/plugins/functions/integration_tests/v1/internal/testutils.go
+++ b/core/services/ocr2/plugins/functions/integration_tests/v1/internal/testutils.go
@@ -39,7 +39,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/link_token_interface"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/mock_v3_aggregator_contract"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/functions"
@@ -50,6 +49,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/validate"
"github.com/smartcontractkit/chainlink/v2/core/services/ocrbootstrap"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
var nilOpts *bind.CallOpts
diff --git a/core/services/ocr2/plugins/liquiditymanager/internal/integration_test.go b/core/services/ocr2/plugins/liquiditymanager/internal/integration_test.go
index 5701d29375a..765366a5c34 100644
--- a/core/services/ocr2/plugins/liquiditymanager/internal/integration_test.go
+++ b/core/services/ocr2/plugins/liquiditymanager/internal/integration_test.go
@@ -35,14 +35,13 @@ import (
v2toml "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/toml"
evmutils "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/chains/legacyevm"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/liquiditymanager"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/mock_l1_bridge_adapter"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/logger/audit"
@@ -54,6 +53,7 @@ import (
integrationtesthelpers "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/liquiditymanager/testhelpers/integration"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/validate"
"github.com/smartcontractkit/chainlink/v2/core/services/ocrbootstrap"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/utils"
"github.com/smartcontractkit/chainlink/v2/plugins"
@@ -644,11 +644,11 @@ func deployContracts(
// deploy arm and arm proxy.
// required by the token pool
// otherwise not used by this test.
- armAddress, _, _, err := mock_arm_contract.DeployMockARMContract(owner, backend)
- require.NoError(t, err, "failed to deploy MockARMContract contract")
+ armAddress, _, _, err := mock_rmn_contract.DeployMockRMNContract(owner, backend)
+ require.NoError(t, err, "failed to deploy MockRMNContract contract")
backend.Commit()
- armProxyAddress, _, _, err := arm_proxy_contract.DeployARMProxyContract(owner, backend, armAddress)
- require.NoError(t, err, "failed to deploy ARMProxyContract contract")
+ armProxyAddress, _, _, err := rmn_proxy_contract.DeployRMNProxyContract(owner, backend, armAddress)
+ require.NoError(t, err, "failed to deploy RMNProxyContract contract")
backend.Commit()
routerAddress, _, _, err := router.DeployRouter(owner, backend, wethAddress, armProxyAddress)
diff --git a/core/services/ocr2/plugins/liquiditymanager/ocr3impls/multichain_config_tracker_test.go b/core/services/ocr2/plugins/liquiditymanager/ocr3impls/multichain_config_tracker_test.go
index 6b929398e8c..13dd88d1f24 100644
--- a/core/services/ocr2/plugins/liquiditymanager/ocr3impls/multichain_config_tracker_test.go
+++ b/core/services/ocr2/plugins/liquiditymanager/ocr3impls/multichain_config_tracker_test.go
@@ -18,7 +18,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/headtracker"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/no_op_ocr3"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest"
"github.com/smartcontractkit/chainlink/v2/core/logger"
@@ -27,6 +26,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/liquiditymanager/models"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/liquiditymanager/ocr3impls"
"github.com/smartcontractkit/chainlink/v2/core/services/relay"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func setupLogPoller[RI ocr3impls.MultichainMeta](t *testing.T, db *sqlx.DB, bs *keyringsAndSigners[RI]) (logpoller.LogPoller, testUniverse[RI]) {
diff --git a/core/services/ocr2/plugins/mercury/helpers_test.go b/core/services/ocr2/plugins/mercury/helpers_test.go
index 43d709453b7..3637b806dee 100644
--- a/core/services/ocr2/plugins/mercury/helpers_test.go
+++ b/core/services/ocr2/plugins/mercury/helpers_test.go
@@ -29,7 +29,6 @@ import (
commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/keystest"
"github.com/smartcontractkit/chainlink/v2/core/logger"
@@ -42,6 +41,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/ocrbootstrap"
"github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/mercury"
"github.com/smartcontractkit/chainlink/v2/core/services/relay/evm/mercury/wsrpc/pb"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
var _ pb.MercuryServer = &mercuryServer{}
diff --git a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go
index cdd800071da..475963c575d 100644
--- a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go
+++ b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go
@@ -25,12 +25,12 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/log_upkeep_counter_wrapper"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
evmregistry21 "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func TestIntegration_LogEventProvider(t *testing.T) {
diff --git a/core/services/ocr2/plugins/ocr2keeper/integration_test.go b/core/services/ocr2/plugins/ocr2keeper/integration_test.go
index 2ce9ff3d243..4796c43569a 100644
--- a/core/services/ocr2/plugins/ocr2keeper/integration_test.go
+++ b/core/services/ocr2/plugins/ocr2keeper/integration_test.go
@@ -44,7 +44,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/link_token_interface"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/mock_v3_aggregator_contract"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
@@ -59,6 +58,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/ocrbootstrap"
"github.com/smartcontractkit/chainlink/v2/core/services/relay/evm"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
const (
diff --git a/core/services/pg/lease_lock_test.go b/core/services/pg/lease_lock_test.go
index 1b4116b5bf9..65bbe3b8610 100644
--- a/core/services/pg/lease_lock_test.go
+++ b/core/services/pg/lease_lock_test.go
@@ -12,11 +12,11 @@ import (
"github.com/jmoiron/sqlx"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/pg"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func newLeaseLock(t *testing.T, db *sqlx.DB, cfg pg.LeaseLockConfig) pg.LeaseLock {
diff --git a/core/services/pipeline/orm_test.go b/core/services/pipeline/orm_test.go
index 877aa9e4aa5..f3d529d87e6 100644
--- a/core/services/pipeline/orm_test.go
+++ b/core/services/pipeline/orm_test.go
@@ -21,7 +21,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/bridges"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest"
@@ -30,6 +29,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/job"
"github.com/smartcontractkit/chainlink/v2/core/services/pipeline"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
type testOnlyORM interface {
diff --git a/core/services/vrf/v1/integration_test.go b/core/services/vrf/v1/integration_test.go
index 74006639c6e..d7f791ad295 100644
--- a/core/services/vrf/v1/integration_test.go
+++ b/core/services/vrf/v1/integration_test.go
@@ -20,7 +20,6 @@ import (
ubig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/solidity_vrf_coordinator_interface"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
@@ -30,6 +29,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrfcommon"
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrftesthelpers"
"github.com/smartcontractkit/chainlink/v2/core/testdata/testspecs"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func TestIntegration_VRF_JPV2(t *testing.T) {
diff --git a/core/services/vrf/v2/bhs_feeder_test.go b/core/services/vrf/v2/bhs_feeder_test.go
index b39fd0dec7f..d3e0008f18b 100644
--- a/core/services/vrf/v2/bhs_feeder_test.go
+++ b/core/services/vrf/v2/bhs_feeder_test.go
@@ -12,10 +12,10 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/toml"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/types"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrftesthelpers"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func TestStartHeartbeats(t *testing.T) {
diff --git a/core/services/vrf/v2/integration_helpers_test.go b/core/services/vrf/v2/integration_helpers_test.go
index d61779c5714..2fccdb2b2e3 100644
--- a/core/services/vrf/v2/integration_helpers_test.go
+++ b/core/services/vrf/v2/integration_helpers_test.go
@@ -30,7 +30,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_external_sub_owner_example"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrfv2_transparent_upgradeable_proxy"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
@@ -41,6 +40,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrftesthelpers"
"github.com/smartcontractkit/chainlink/v2/core/testdata/testspecs"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
func testSingleConsumerHappyPath(
diff --git a/core/services/vrf/v2/integration_v2_plus_test.go b/core/services/vrf/v2/integration_v2_plus_test.go
index 53baaa0eda3..3aa2302e55d 100644
--- a/core/services/vrf/v2/integration_v2_plus_test.go
+++ b/core/services/vrf/v2/integration_v2_plus_test.go
@@ -40,7 +40,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrfv2plus_consumer_example"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrfv2plus_reverting_example"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
@@ -51,6 +50,7 @@ import (
v22 "github.com/smartcontractkit/chainlink/v2/core/services/vrf/v2"
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrfcommon"
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrftesthelpers"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
type coordinatorV2PlusUniverse struct {
diff --git a/core/services/vrf/v2/integration_v2_reverted_txns_test.go b/core/services/vrf/v2/integration_v2_reverted_txns_test.go
index 25e3afcf751..6682fe9e88a 100644
--- a/core/services/vrf/v2/integration_v2_reverted_txns_test.go
+++ b/core/services/vrf/v2/integration_v2_reverted_txns_test.go
@@ -27,7 +27,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_coordinator_v2"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_external_sub_owner_example"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
"github.com/smartcontractkit/chainlink/v2/core/services/job"
@@ -37,6 +36,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrfcommon"
"github.com/smartcontractkit/chainlink/v2/core/testdata/testspecs"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
var (
diff --git a/core/services/vrf/v2/integration_v2_test.go b/core/services/vrf/v2/integration_v2_test.go
index e9ae908565a..becee19aaa5 100644
--- a/core/services/vrf/v2/integration_v2_test.go
+++ b/core/services/vrf/v2/integration_v2_test.go
@@ -63,7 +63,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrfv2_wrapper"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrfv2_wrapper_consumer_example"
"github.com/smartcontractkit/chainlink/v2/core/internal/cltest"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/evmtest"
@@ -83,6 +82,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/vrf/vrftesthelpers"
"github.com/smartcontractkit/chainlink/v2/core/testdata/testspecs"
"github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
var defaultMaxGasPrice = uint64(1e12)
diff --git a/core/store/migrate/migrate_test.go b/core/store/migrate/migrate_test.go
index 9a8bf96573e..4138e0d2667 100644
--- a/core/store/migrate/migrate_test.go
+++ b/core/store/migrate/migrate_test.go
@@ -19,7 +19,6 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller"
ubig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
"github.com/smartcontractkit/chainlink/v2/core/config/env"
- "github.com/smartcontractkit/chainlink/v2/core/internal/cltest/heavyweight"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils/configtest"
"github.com/smartcontractkit/chainlink/v2/core/logger"
@@ -28,6 +27,7 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/services/pipeline"
"github.com/smartcontractkit/chainlink/v2/core/store/migrate"
"github.com/smartcontractkit/chainlink/v2/core/store/models"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
)
type OffchainReporting2OracleSpec100 struct {
diff --git a/core/internal/cltest/heavyweight/orm.go b/core/utils/testutils/heavyweight/orm.go
similarity index 100%
rename from core/internal/cltest/heavyweight/orm.go
rename to core/utils/testutils/heavyweight/orm.go
diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml
index 506f542cf11..c5547f8698b 100644
--- a/core/web/resolver/testdata/config-full.toml
+++ b/core/web/resolver/testdata/config-full.toml
@@ -291,6 +291,7 @@ OperatorFactoryAddress = '0xa5B85635Be42F21f94F28034B7DA440EeFF0F418'
RPCDefaultBatchSize = 17
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '15m0s'
[EVM.Transactions]
ForwardersEnabled = true
diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml
index faa18fd4073..8c063d0e9e7 100644
--- a/core/web/resolver/testdata/config-multi-chain-effective.toml
+++ b/core/web/resolver/testdata/config-multi-chain-effective.toml
@@ -278,6 +278,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false
@@ -377,6 +378,7 @@ OperatorFactoryAddress = '0x8007e24251b1D2Fc518Eb843A701d9cD21fe0aA3'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[EVM.Transactions]
ForwardersEnabled = false
@@ -470,6 +472,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '6m0s'
[EVM.Transactions]
ForwardersEnabled = false
diff --git a/docs/CONFIG.md b/docs/CONFIG.md
index 1e0ebbf9489..e18abcf811a 100644
--- a/docs/CONFIG.md
+++ b/docs/CONFIG.md
@@ -1793,6 +1793,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[Transactions]
ForwardersEnabled = false
@@ -1886,6 +1887,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -1979,6 +1981,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2072,6 +2075,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2166,6 +2170,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '13m0s'
[Transactions]
ForwardersEnabled = false
@@ -2259,6 +2264,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2352,6 +2358,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2446,6 +2453,7 @@ OperatorFactoryAddress = '0x8007e24251b1D2Fc518Eb843A701d9cD21fe0aA3'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2539,6 +2547,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '45s'
[Transactions]
ForwardersEnabled = false
@@ -2631,6 +2640,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2723,6 +2733,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2815,6 +2826,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -2908,6 +2920,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '40s'
[Transactions]
ForwardersEnabled = false
@@ -3002,6 +3015,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '2m0s'
[Transactions]
ForwardersEnabled = false
@@ -3095,6 +3109,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3188,6 +3203,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '6m0s'
[Transactions]
ForwardersEnabled = false
@@ -3281,6 +3297,7 @@ NoNewHeadsThreshold = '12m0s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 15
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3374,6 +3391,7 @@ NoNewHeadsThreshold = '6m0s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 15
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3467,6 +3485,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3560,6 +3579,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3653,6 +3673,7 @@ NoNewHeadsThreshold = '1m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3746,6 +3767,7 @@ NoNewHeadsThreshold = '1m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3839,6 +3861,7 @@ NoNewHeadsThreshold = '1m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -3933,6 +3956,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4026,6 +4050,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4118,6 +4143,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4211,6 +4237,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4304,6 +4331,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4397,6 +4425,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4490,6 +4519,7 @@ NoNewHeadsThreshold = '6m0s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 15
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4583,6 +4613,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '40s'
[Transactions]
ForwardersEnabled = false
@@ -4676,6 +4707,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '40s'
[Transactions]
ForwardersEnabled = false
@@ -4768,6 +4800,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4861,6 +4894,7 @@ NoNewHeadsThreshold = '12m0s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -4954,6 +4988,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5047,6 +5082,7 @@ NoNewHeadsThreshold = '12m0s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5140,6 +5176,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5233,6 +5270,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5326,6 +5364,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5419,6 +5458,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '15m0s'
[Transactions]
ForwardersEnabled = false
@@ -5512,6 +5552,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '2m0s'
[Transactions]
ForwardersEnabled = false
@@ -5606,6 +5647,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5700,6 +5742,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5793,6 +5836,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5888,6 +5932,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -5981,6 +6026,7 @@ NoNewHeadsThreshold = '1m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '1m0s'
[Transactions]
ForwardersEnabled = false
@@ -6074,6 +6120,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '1m0s'
[Transactions]
ForwardersEnabled = false
@@ -6167,6 +6214,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '1m0s'
[Transactions]
ForwardersEnabled = false
@@ -6260,6 +6308,7 @@ NoNewHeadsThreshold = '1m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '1m0s'
[Transactions]
ForwardersEnabled = false
@@ -6352,6 +6401,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -6444,6 +6494,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -6536,6 +6587,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -6629,6 +6681,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -6722,6 +6775,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 2
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -6815,6 +6869,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -6907,6 +6962,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 100
RPCBlockQueryDelay = 10
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '12m0s'
[Transactions]
ForwardersEnabled = false
@@ -7000,6 +7056,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7094,6 +7151,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7188,6 +7246,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '12m0s'
[Transactions]
ForwardersEnabled = false
@@ -7282,6 +7341,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7376,6 +7436,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7470,6 +7531,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7563,6 +7625,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7656,6 +7719,7 @@ NoNewHeadsThreshold = '0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7749,6 +7813,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -7842,6 +7907,7 @@ NoNewHeadsThreshold = '40s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '15m0s'
[Transactions]
ForwardersEnabled = false
@@ -7935,6 +8001,7 @@ NoNewHeadsThreshold = '3m0s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -8029,6 +8096,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -8122,6 +8190,7 @@ NoNewHeadsThreshold = '30s'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '0s'
[Transactions]
ForwardersEnabled = false
@@ -8231,7 +8300,7 @@ BlockBackfillSkip enables skipping of very long backfills.
ChainType = 'arbitrum' # Example
```
ChainType is automatically detected from chain ID. Set this to force a certain chain type regardless of chain ID.
-Available types: `arbitrum`, `celo`, `gnosis`, `kroma`, `metis`, `optimismBedrock`, `scroll`, `wemix`, `xlayer`, `zksync`
+Available types: `arbitrum`, `celo`, `gnosis`, `hedera`, `kroma`, `metis`, `optimismBedrock`, `scroll`, `wemix`, `xlayer`, `zksync`
### FinalityDepth
```toml
@@ -8383,6 +8452,15 @@ The latest finalized block on chain is 64, so block 63 is the latest finalized f
Block 64 will be treated as finalized by CL Node only when chain's latest finalized block is 65. As chain finalizes blocks in batches of 32,
CL Node has to wait for a whole new batch to be finalized to treat block 64 as finalized.
+### NoNewFinalizedHeadsThreshold
+```toml
+NoNewFinalizedHeadsThreshold = '0' # Default
+```
+NoNewFinalizedHeadsThreshold controls how long to wait for new finalized block before `NodePool` marks rpc endpoints as
+out-of-sync. Only applicable if `FinalityTagEnabled=true`
+
+Set to zero to disable.
+
## EVM.Transactions
```toml
[EVM.Transactions]
diff --git a/go.mod b/go.mod
index 08e1acdee22..683793cb534 100644
--- a/go.mod
+++ b/go.mod
@@ -74,7 +74,7 @@ require (
github.com/shopspring/decimal v1.4.0
github.com/smartcontractkit/chain-selectors v1.0.21
github.com/smartcontractkit/chainlink-automation v1.0.4
- github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb
+ github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240718160222-2dc0c8136bfa
@@ -224,7 +224,6 @@ require (
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-tpm v0.9.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
- github.com/googleapis/gax-go/v2 v2.12.2 // indirect
github.com/gorilla/context v1.1.1 // indirect
github.com/grafana/pyroscope-go/godeltaprof v0.1.6 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
diff --git a/go.sum b/go.sum
index 654a21faa2f..5ad6772ecd4 100644
--- a/go.sum
+++ b/go.sum
@@ -533,8 +533,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
-github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
+github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
+github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
@@ -1027,8 +1027,8 @@ github.com/smartcontractkit/chain-selectors v1.0.21 h1:KCR9SA7PhOexaBzFieHoLv1Wo
github.com/smartcontractkit/chain-selectors v1.0.21/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb h1:iXBb4Zg/3jh/dWa6DVz1pFwc0eGfqVY2Pgs2N91BWs0=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f h1:lQZBOjeYFpCdk0mGQUhbrJipd00tu49xK4zSijC/9Co=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834 h1:pTf4xdcmiWBqWZ6rTy2RMTDBzhHk89VC1pM7jXKQztI=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834/go.mod h1:fh9eBbrReCmv31bfz52ENCAMa7nTKQbdhb2B3+S2VGo=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 h1:NBQLtqk8zsyY4qTJs+NElI3aDFTcAo83JHvqD04EvB0=
diff --git a/integration-tests/.golangci.yml b/integration-tests/.golangci.yml
index 897c72d1ecb..8969110d988 100644
--- a/integration-tests/.golangci.yml
+++ b/integration-tests/.golangci.yml
@@ -46,7 +46,7 @@ linters-settings:
- name: errorf
- name: empty-block
- name: superfluous-else
- - name: unused-parameter
+ #- name: unused-parameter
- name: unreachable-code
- name: redefines-builtin-id
- name: waitgroup-by-value
diff --git a/integration-tests/ccip-tests/actions/ccip_helpers.go b/integration-tests/ccip-tests/actions/ccip_helpers.go
index 384b240649d..e89f75baad8 100644
--- a/integration-tests/ccip-tests/actions/ccip_helpers.go
+++ b/integration-tests/ccip-tests/actions/ccip_helpers.go
@@ -52,13 +52,13 @@ import (
"github.com/smartcontractkit/chainlink/integration-tests/client"
"github.com/smartcontractkit/chainlink/integration-tests/docker/test_env"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_onramp_1_2_0"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_pool"
"github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/config"
@@ -165,7 +165,7 @@ type CCIPCommon struct {
NoOfTokensNeedingDynamicPrice int
BridgeTokenPools []*contracts.TokenPool
RateLimiterConfig contracts.RateLimiterConfig
- ARMContract *common.Address
+ RMNContract *common.Address
ARM *contracts.ARM // populate only if the ARM contracts is not a mock and can be used to verify various ARM events; keep this nil for mock ARM
Router *contracts.Router
PriceRegistry *contracts.PriceRegistry
@@ -202,10 +202,10 @@ func (ccipModule *CCIPCommon) UnvoteToCurseARM() error {
if ccipModule.ARM != nil {
return fmt.Errorf("real ARM deployed. cannot curse through test")
}
- if ccipModule.ARMContract == nil {
+ if ccipModule.RMNContract == nil {
return fmt.Errorf("no ARM contract is set")
}
- arm, err := mock_arm_contract.NewMockARMContract(*ccipModule.ARMContract, ccipModule.ChainClient.Backend())
+ arm, err := mock_rmn_contract.NewMockRMNContract(*ccipModule.RMNContract, ccipModule.ChainClient.Backend())
if err != nil {
return fmt.Errorf("error instantiating arm %w", err)
}
@@ -213,7 +213,7 @@ func (ccipModule *CCIPCommon) UnvoteToCurseARM() error {
if err != nil {
return fmt.Errorf("error getting owners for ARM OwnerUnvoteToCurse %w", err)
}
- tx, err := arm.OwnerUnvoteToCurse0(opts, []mock_arm_contract.RMNUnvoteToCurseRecord{})
+ tx, err := arm.OwnerUnvoteToCurse0(opts, []mock_rmn_contract.RMNUnvoteToCurseRecord{})
if err != nil {
return fmt.Errorf("error in calling OwnerUnvoteToCurse %w", err)
}
@@ -231,10 +231,10 @@ func (ccipModule *CCIPCommon) IsCursed() (bool, error) {
if ccipModule.ARM != nil {
return false, fmt.Errorf("real ARM deployed. cannot validate cursing")
}
- if ccipModule.ARMContract == nil {
+ if ccipModule.RMNContract == nil {
return false, fmt.Errorf("no ARM contract is set")
}
- arm, err := mock_arm_contract.NewMockARMContract(*ccipModule.ARMContract, ccipModule.ChainClient.Backend())
+ arm, err := mock_rmn_contract.NewMockRMNContract(*ccipModule.RMNContract, ccipModule.ChainClient.Backend())
if err != nil {
return false, fmt.Errorf("error instantiating arm %w", err)
}
@@ -245,10 +245,10 @@ func (ccipModule *CCIPCommon) CurseARM() (*types.Transaction, error) {
if ccipModule.ARM != nil {
return nil, fmt.Errorf("real ARM deployed. cannot curse through test")
}
- if ccipModule.ARMContract == nil {
+ if ccipModule.RMNContract == nil {
return nil, fmt.Errorf("no ARM contract is set")
}
- arm, err := mock_arm_contract.NewMockARMContract(*ccipModule.ARMContract, ccipModule.ChainClient.Backend())
+ arm, err := mock_rmn_contract.NewMockRMNContract(*ccipModule.RMNContract, ccipModule.ChainClient.Backend())
if err != nil {
return nil, fmt.Errorf("error instantiating arm %w", err)
}
@@ -291,7 +291,7 @@ func (ccipModule *CCIPCommon) LoadContractAddresses(conf *laneconfig.LaneConfig,
}
if common.IsHexAddress(conf.ARM) {
addr := common.HexToAddress(conf.ARM)
- ccipModule.ARMContract = &addr
+ ccipModule.RMNContract = &addr
if !conf.IsMockARM {
ccipModule.ARM = &contracts.ARM{
EthAddress: addr,
@@ -729,7 +729,7 @@ func (ccipModule *CCIPCommon) WriteLaneConfig(conf *laneconfig.LaneConfig) {
FeeToken: ccipModule.FeeToken.Address(),
BridgeTokens: btAddresses,
BridgeTokenPools: btpAddresses,
- ARM: ccipModule.ARMContract.Hex(),
+ ARM: ccipModule.RMNContract.Hex(),
Router: ccipModule.Router.Address(),
PriceRegistry: ccipModule.PriceRegistry.Address(),
PriceAggregators: priceAggrs,
@@ -783,18 +783,18 @@ func (ccipModule *CCIPCommon) DeployContracts(
ccipModule.LoadContractAddresses(conf, &noOfTokens)
if ccipModule.ARM != nil {
- arm, err := cd.NewARMContract(ccipModule.ARM.EthAddress)
+ arm, err := cd.NewRMNContract(ccipModule.ARM.EthAddress)
if err != nil {
return fmt.Errorf("getting new ARM contract shouldn't fail %w", err)
}
ccipModule.ARM = arm
} else {
// deploy a mock ARM contract
- if ccipModule.ARMContract == nil {
+ if ccipModule.RMNContract == nil {
if ccipModule.ExistingDeployment {
return fmt.Errorf("ARM contract address is not provided in lane config")
}
- ccipModule.ARMContract, err = cd.DeployMockARMContract()
+ ccipModule.RMNContract, err = cd.DeployMockRMNContract()
if err != nil {
return fmt.Errorf("deploying mock ARM contract shouldn't fail %w", err)
}
@@ -827,7 +827,7 @@ func (ccipModule *CCIPCommon) DeployContracts(
if ccipModule.ExistingDeployment {
return fmt.Errorf("router contract address is not provided in lane config")
}
- ccipModule.Router, err = cd.DeployRouter(ccipModule.WrappedNative, *ccipModule.ARMContract)
+ ccipModule.Router, err = cd.DeployRouter(ccipModule.WrappedNative, *ccipModule.RMNContract)
if err != nil {
return fmt.Errorf("deploying router shouldn't fail %w", err)
}
@@ -979,7 +979,7 @@ func (ccipModule *CCIPCommon) DeployContracts(
if ccipModule.TokenTransmitter == nil {
return fmt.Errorf("TokenTransmitter contract address is not provided")
}
- usdcPool, err := ccipModule.tokenDeployer.DeployUSDCTokenPoolContract(token.Address(), *ccipModule.TokenMessenger, *ccipModule.ARMContract, ccipModule.Router.Instance.Address())
+ usdcPool, err := ccipModule.tokenDeployer.DeployUSDCTokenPoolContract(token.Address(), *ccipModule.TokenMessenger, *ccipModule.RMNContract, ccipModule.Router.Instance.Address())
if err != nil {
return fmt.Errorf("deploying bridge Token pool(usdc) shouldn't fail %w", err)
}
@@ -987,7 +987,7 @@ func (ccipModule *CCIPCommon) DeployContracts(
ccipModule.BridgeTokenPools = append(ccipModule.BridgeTokenPools, usdcPool)
} else {
// deploy lock release token pool in case of non-usdc deployment
- btp, err := ccipModule.tokenDeployer.DeployLockReleaseTokenPoolContract(token.Address(), *ccipModule.ARMContract, ccipModule.Router.Instance.Address())
+ btp, err := ccipModule.tokenDeployer.DeployLockReleaseTokenPoolContract(token.Address(), *ccipModule.RMNContract, ccipModule.Router.Instance.Address())
if err != nil {
return fmt.Errorf("deploying bridge Token pool(lock&release) shouldn't fail %w", err)
}
@@ -1178,7 +1178,7 @@ func NewCCIPCommonFromConfig(
}
var arm *contracts.ARM
if newCCIPModule.ARM != nil {
- arm, err = newCD.NewARMContract(*newCCIPModule.ARMContract)
+ arm, err = newCD.NewRMNContract(*newCCIPModule.RMNContract)
if err != nil {
return nil, err
}
@@ -1414,7 +1414,7 @@ func (sourceCCIP *SourceCCIPModule) DeployContracts(lane *laneconfig.LaneConfig)
sourceChainSelector,
sourceCCIP.DestChainSelector,
tokensAndPools,
- *sourceCCIP.Common.ARMContract,
+ *sourceCCIP.Common.RMNContract,
sourceCCIP.Common.Router.EthAddress,
sourceCCIP.Common.PriceRegistry.EthAddress,
tokenAdminReg,
@@ -2025,7 +2025,7 @@ func (destCCIP *DestCCIPModule) DeployContracts(
destCCIP.SourceChainSelector,
destChainSelector,
sourceCCIP.OnRamp.EthAddress,
- *destCCIP.Common.ARMContract,
+ *destCCIP.Common.RMNContract,
)
if err != nil {
return fmt.Errorf("deploying commitstore shouldn't fail %w", err)
@@ -2070,7 +2070,7 @@ func (destCCIP *DestCCIPModule) DeployContracts(
destCCIP.Common.RateLimiterConfig,
[]common.Address{},
[]common.Address{},
- *destCCIP.Common.ARMContract,
+ *destCCIP.Common.RMNContract,
tokenAdminReg,
)
if err != nil {
@@ -3394,7 +3394,7 @@ func (lane *CCIPLane) StartEventWatchers() error {
}(reportAccSub)
if lane.Dest.Common.ARM != nil {
- reportBlessedEvent := make(chan *arm_contract.ARMContractTaggedRootBlessed)
+ reportBlessedEvent := make(chan *rmn_contract.RMNContractTaggedRootBlessed)
blessedSub := event.Resubscribe(DefaultResubscriptionTimeout, func(_ context.Context) (event.Subscription, error) {
sub, err := lane.Dest.Common.ARM.Instance.WatchTaggedRootBlessed(nil, reportBlessedEvent, nil)
if err != nil {
diff --git a/integration-tests/ccip-tests/contracts/contract_deployer.go b/integration-tests/ccip-tests/contracts/contract_deployer.go
index 3332fcda499..c051531fb92 100644
--- a/integration-tests/ccip-tests/contracts/contract_deployer.go
+++ b/integration-tests/ccip-tests/contracts/contract_deployer.go
@@ -27,7 +27,6 @@ import (
"github.com/smartcontractkit/chainlink/integration-tests/client"
"github.com/smartcontractkit/chainlink/integration-tests/contracts"
"github.com/smartcontractkit/chainlink/integration-tests/wrappers"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
@@ -37,11 +36,12 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool_1_4_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_usdc_token_messenger"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_usdc_token_transmitter"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_v3_aggregator_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry_1_2_0"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_pool"
@@ -541,18 +541,18 @@ func (e *CCIPContractsDeployer) DeployLockReleaseTokenPoolContract(tokenAddr str
}
}
-func (e *CCIPContractsDeployer) DeployMockARMContract() (*common.Address, error) {
+func (e *CCIPContractsDeployer) DeployMockRMNContract() (*common.Address, error) {
address, _, _, err := e.evmClient.DeployContract("Mock ARM Contract", func(
auth *bind.TransactOpts,
_ bind.ContractBackend,
) (common.Address, *types.Transaction, interface{}, error) {
- return mock_arm_contract.DeployMockARMContract(auth, wrappers.MustNewWrappedContractBackend(e.evmClient, nil))
+ return mock_rmn_contract.DeployMockRMNContract(auth, wrappers.MustNewWrappedContractBackend(e.evmClient, nil))
})
return address, err
}
-func (e *CCIPContractsDeployer) NewARMContract(addr common.Address) (*ARM, error) {
- arm, err := arm_contract.NewARMContract(addr, wrappers.MustNewWrappedContractBackend(e.evmClient, nil))
+func (e *CCIPContractsDeployer) NewRMNContract(addr common.Address) (*ARM, error) {
+ arm, err := rmn_contract.NewRMNContract(addr, wrappers.MustNewWrappedContractBackend(e.evmClient, nil))
if err != nil {
return nil, err
}
diff --git a/integration-tests/ccip-tests/contracts/contract_models.go b/integration-tests/ccip-tests/contracts/contract_models.go
index 1c2f3651b03..26794816dd5 100644
--- a/integration-tests/ccip-tests/contracts/contract_models.go
+++ b/integration-tests/ccip-tests/contracts/contract_models.go
@@ -21,7 +21,6 @@ import (
"github.com/smartcontractkit/chainlink/integration-tests/wrappers"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/commit_store_1_2_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/evm_2_evm_offramp"
@@ -31,11 +30,12 @@ import (
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/lock_release_token_pool_1_4_0"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_arm_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_usdc_token_transmitter"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_v3_aggregator_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry_1_2_0"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_pool"
@@ -944,7 +944,7 @@ func (pool *TokenPool) GetRebalancer() (common.Address, error) {
type ARM struct {
client blockchain.EVMClient
- Instance *arm_contract.ARMContract
+ Instance *rmn_contract.RMNContract
EthAddress common.Address
}
@@ -954,7 +954,7 @@ func (arm *ARM) Address() string {
type MockARM struct {
client blockchain.EVMClient
- Instance *mock_arm_contract.MockARMContract
+ Instance *mock_rmn_contract.MockRMNContract
EthAddress common.Address
}
diff --git a/integration-tests/ccip-tests/contracts/lm_contracts.go b/integration-tests/ccip-tests/contracts/lm_contracts.go
index cb3b8ac388f..2ee5078aa7f 100644
--- a/integration-tests/ccip-tests/contracts/lm_contracts.go
+++ b/integration-tests/ccip-tests/contracts/lm_contracts.go
@@ -13,7 +13,7 @@ import (
"github.com/smartcontractkit/chainlink-testing-framework/blockchain"
- "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/arm_proxy_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/arbitrum_l1_bridge_adapter"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/arbitrum_l2_bridge_adapter"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/liquiditymanager/generated/liquiditymanager"
@@ -25,7 +25,7 @@ import (
type ArmProxy struct {
client blockchain.EVMClient
- Instance *arm_proxy_contract.ARMProxyContract
+ Instance *rmn_proxy_contract.RMNProxyContract
EthAddress *common.Address
}
@@ -34,7 +34,7 @@ func (e *CCIPContractsDeployer) DeployArmProxy(arm common.Address) (*ArmProxy, e
auth *bind.TransactOpts,
_ bind.ContractBackend,
) (common.Address, *types.Transaction, interface{}, error) {
- return arm_proxy_contract.DeployARMProxyContract(
+ return rmn_proxy_contract.DeployRMNProxyContract(
auth,
wrappers.MustNewWrappedContractBackend(e.evmClient, nil),
arm,
@@ -45,7 +45,7 @@ func (e *CCIPContractsDeployer) DeployArmProxy(arm common.Address) (*ArmProxy, e
}
return &ArmProxy{
client: e.evmClient,
- Instance: instance.(*arm_proxy_contract.ARMProxyContract),
+ Instance: instance.(*rmn_proxy_contract.RMNProxyContract),
EthAddress: address,
}, err
}
diff --git a/integration-tests/ccip-tests/testconfig/tomls/ccip1.4-stress/baseline.toml b/integration-tests/ccip-tests/testconfig/tomls/ccip1.4-stress/baseline.toml
index d48c0b0f797..02ca2f4d9fd 100644
--- a/integration-tests/ccip-tests/testconfig/tomls/ccip1.4-stress/baseline.toml
+++ b/integration-tests/ccip-tests/testconfig/tomls/ccip1.4-stress/baseline.toml
@@ -1,5 +1,5 @@
## Baseline performance test on simulated environment (with chaos)
-## 40 chains / 400 lanes
+## 30 chains / 300 lanes
## historyDepth 200 / finalityDepth 200
## block_time = 1s
## throughput 1msg / 5s
@@ -19,7 +19,7 @@ TokenPool = '1.4.0'
CommitStore = '1.2.0'
[CCIP.Env]
-TTL = '8h'
+TTL = '10h'
[CCIP.Env.Network]
selected_networks= ['PRIVATE-CHAIN-1', 'PRIVATE-CHAIN-2']
@@ -66,7 +66,7 @@ block_time = 1
[CCIP.Env.NewCLCluster]
NoOfNodes = 17
NodeMemory = '10Gi'
-NodeCPU = '6'
+NodeCPU = '4'
DBMemory = '16Gi'
DBCPU = '4'
DBStorageClass = 'gp3'
@@ -124,6 +124,8 @@ DeltaReconcile = '5s'
"""
CommonChainConfigTOML = """
+LogPollInterval = '1s'
+
[HeadTracker]
HistoryDepth = 200
@@ -139,9 +141,9 @@ KeepEnvAlive = true
NoOfCommitNodes = 16
PhaseTimeout = '40m'
NodeFunding = 1000.0
-NoOfRoutersPerPair = 2
-NoOfNetworks = 40
-MaxNoOfLanes = 400
+NoOfRoutersPerPair = 1
+NoOfNetworks = 30
+MaxNoOfLanes = 300
[CCIP.Groups.load.OffRampConfig]
BatchGasLimit = 11000000
@@ -154,7 +156,7 @@ DynamicPriceUpdateInterval ='15s'
CCIPOwnerTokens = true
[CCIP.Groups.load.LoadProfile]
-TestDuration = '4h'
+TestDuration = '6h'
TimeUnit = '5s'
RequestPerUnitTime = [1]
OptimizeSpace = true
diff --git a/integration-tests/ccip-tests/testsetups/lm_setup.go b/integration-tests/ccip-tests/testsetups/lm_setup.go
index dbc2135f1e1..9884d9661c9 100644
--- a/integration-tests/ccip-tests/testsetups/lm_setup.go
+++ b/integration-tests/ccip-tests/testsetups/lm_setup.go
@@ -348,21 +348,21 @@ func (o *LMTestSetupOutputs) DeployLMChainContracts(
// Deploy Mock ARM contract
lggr.Info().Msg("Deploying Mock ARM contract")
- mockARMContract, err := cd.DeployMockARMContract()
+ mockRMNContract, err := cd.DeployMockRMNContract()
if err != nil {
return errors.WithStack(fmt.Errorf("failed to deploy Mock ARM contract: %w", err))
}
- lggr.Info().Str("Address", mockARMContract.String()).Msg("Deployed Mock ARM contract")
- lmCommon.MockArm = mockARMContract
+ lggr.Info().Str("Address", mockRMNContract.String()).Msg("Deployed Mock ARM contract")
+ lmCommon.MockArm = mockRMNContract
// Deploy ARM Proxy contract
lggr.Info().Msg("Deploying ARM Proxy contract")
- armProxyContract, err := cd.DeployArmProxy(*mockARMContract)
+ RMNProxyContract, err := cd.DeployArmProxy(*mockRMNContract)
if err != nil {
return errors.WithStack(fmt.Errorf("failed to deploy ARM Proxy contract: %w", err))
}
- lggr.Info().Str("Address", armProxyContract.EthAddress.String()).Msg("Deployed ARM Proxy contract")
- lmCommon.ArmProxy = armProxyContract
+ lggr.Info().Str("Address", RMNProxyContract.EthAddress.String()).Msg("Deployed ARM Proxy contract")
+ lmCommon.ArmProxy = RMNProxyContract
// Deploy CCIP Router contract
lggr.Info().Msg("Deploying CCIP Router contract")
diff --git a/integration-tests/deployment/address_book.go b/integration-tests/deployment/address_book.go
new file mode 100644
index 00000000000..0003f48420a
--- /dev/null
+++ b/integration-tests/deployment/address_book.go
@@ -0,0 +1,152 @@
+package deployment
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/Masterminds/semver/v3"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/pkg/errors"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+)
+
+var (
+ ErrInvalidChainSelector = fmt.Errorf("invalid chain selector")
+ ErrInvalidAddress = fmt.Errorf("invalid address")
+)
+
+// ContractType is a simple string type for identifying contract types.
+type ContractType string
+
+var (
+ Version1_0_0 = *semver.MustParse("1.0.0")
+ Version1_1_0 = *semver.MustParse("1.1.0")
+ Version1_2_0 = *semver.MustParse("1.2.0")
+ Version1_5_0 = *semver.MustParse("1.5.0")
+ Version1_6_0_dev = *semver.MustParse("1.6.0-dev")
+)
+
+type TypeAndVersion struct {
+ Type ContractType
+ Version semver.Version
+}
+
+func (tv TypeAndVersion) String() string {
+ return fmt.Sprintf("%s %s", tv.Type, tv.Version.String())
+}
+
+func (tv TypeAndVersion) Equal(other TypeAndVersion) bool {
+ return tv.String() == other.String()
+}
+
+func MustTypeAndVersionFromString(s string) TypeAndVersion {
+ tv, err := TypeAndVersionFromString(s)
+ if err != nil {
+ panic(err)
+ }
+ return tv
+}
+
+// Note this will become useful for validation. When we want
+// to assert an onchain call to typeAndVersion yields whats expected.
+func TypeAndVersionFromString(s string) (TypeAndVersion, error) {
+ parts := strings.Split(s, " ")
+ if len(parts) != 2 {
+ return TypeAndVersion{}, fmt.Errorf("invalid type and version string: %s", s)
+ }
+ v, err := semver.NewVersion(parts[1])
+ if err != nil {
+ return TypeAndVersion{}, err
+ }
+ return TypeAndVersion{
+ Type: ContractType(parts[0]),
+ Version: *v,
+ }, nil
+}
+
+func NewTypeAndVersion(t ContractType, v semver.Version) TypeAndVersion {
+ return TypeAndVersion{
+ Type: t,
+ Version: v,
+ }
+}
+
+// AddressBook is a simple interface for storing and retrieving contract addresses across
+// chains. It is family agnostic as the keys are chain selectors.
+// We store rather than derive typeAndVersion as some contracts do not support it.
+// For ethereum addresses are always stored in EIP55 format.
+type AddressBook interface {
+ Save(chainSelector uint64, address string, tv TypeAndVersion) error
+ Addresses() (map[uint64]map[string]TypeAndVersion, error)
+ AddressesForChain(chain uint64) (map[string]TypeAndVersion, error)
+ // Allows for merging address books (e.g. new deployments with existing ones)
+ Merge(other AddressBook) error
+}
+
+type AddressBookMap struct {
+ AddressesByChain map[uint64]map[string]TypeAndVersion
+}
+
+func (m *AddressBookMap) Save(chainSelector uint64, address string, typeAndVersion TypeAndVersion) error {
+ _, exists := chainsel.ChainBySelector(chainSelector)
+ if !exists {
+ return errors.Wrapf(ErrInvalidChainSelector, "chain selector %d not found", chainSelector)
+ }
+ if address == "" || address == common.HexToAddress("0x0").Hex() {
+ return errors.Wrap(ErrInvalidAddress, "address cannot be empty")
+ }
+ if common.IsHexAddress(address) {
+ // IMPORTANT: WE ALWAYS STANDARDIZE ETHEREUM ADDRESS STRINGS TO EIP55
+ address = common.HexToAddress(address).Hex()
+ } else {
+ return errors.Wrapf(ErrInvalidAddress, "address %s is not a valid Ethereum address, only Ethereum addresses supported", address)
+ }
+ if typeAndVersion.Type == "" {
+ return fmt.Errorf("type cannot be empty")
+ }
+ if _, exists := m.AddressesByChain[chainSelector]; !exists {
+ // First time chain add, create map
+ m.AddressesByChain[chainSelector] = make(map[string]TypeAndVersion)
+ }
+ if _, exists := m.AddressesByChain[chainSelector][address]; exists {
+ return fmt.Errorf("address %s already exists for chain %d", address, chainSelector)
+ }
+ m.AddressesByChain[chainSelector][address] = typeAndVersion
+ return nil
+}
+
+func (m *AddressBookMap) Addresses() (map[uint64]map[string]TypeAndVersion, error) {
+ return m.AddressesByChain, nil
+}
+
+func (m *AddressBookMap) AddressesForChain(chain uint64) (map[string]TypeAndVersion, error) {
+ if _, exists := m.AddressesByChain[chain]; !exists {
+ return nil, fmt.Errorf("chain %d not found", chain)
+ }
+ return m.AddressesByChain[chain], nil
+}
+
+// Attention this will mutate existing book
+func (m *AddressBookMap) Merge(ab AddressBook) error {
+ addresses, err := ab.Addresses()
+ if err != nil {
+ return err
+ }
+ for chain, chainAddresses := range addresses {
+ for address, typeAndVersions := range chainAddresses {
+ if err := m.Save(chain, address, typeAndVersions); err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+// TODO: Maybe could add an environment argument
+// which would ensure only mainnet/testnet chain selectors are used
+// for further safety?
+func NewMemoryAddressBook() *AddressBookMap {
+ return &AddressBookMap{
+ AddressesByChain: make(map[uint64]map[string]TypeAndVersion),
+ }
+}
diff --git a/integration-tests/deployment/address_book_test.go b/integration-tests/deployment/address_book_test.go
new file mode 100644
index 00000000000..7703b941e46
--- /dev/null
+++ b/integration-tests/deployment/address_book_test.go
@@ -0,0 +1,93 @@
+package deployment
+
+import (
+ "errors"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/common"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+ "github.com/stretchr/testify/require"
+ "gotest.tools/v3/assert"
+)
+
+func TestAddressBook_Save(t *testing.T) {
+ ab := NewMemoryAddressBook()
+ onRamp100 := NewTypeAndVersion("OnRamp", Version1_0_0)
+ onRamp110 := NewTypeAndVersion("OnRamp", Version1_1_0)
+ offRamp100 := NewTypeAndVersion("OffRamp", Version1_0_0)
+ addr1 := common.HexToAddress("0x1").String()
+ addr2 := common.HexToAddress("0x2").String()
+ addr3 := common.HexToAddress("0x3").String()
+
+ err := ab.Save(chainsel.TEST_90000001.Selector, addr1, onRamp100)
+ require.NoError(t, err)
+
+ // Check input validation
+ err = ab.Save(chainsel.TEST_90000001.Selector, "asdlfkj", onRamp100)
+ require.Error(t, err)
+ assert.Equal(t, errors.Is(err, ErrInvalidAddress), true, "err %s", err)
+ err = ab.Save(0, addr1, onRamp100)
+ require.Error(t, err)
+ assert.Equal(t, errors.Is(err, ErrInvalidChainSelector), true)
+ // Duplicate
+ err = ab.Save(chainsel.TEST_90000001.Selector, addr1, onRamp100)
+ require.Error(t, err)
+ // Zero address
+ err = ab.Save(chainsel.TEST_90000001.Selector, common.HexToAddress("0x0").Hex(), onRamp100)
+ require.Error(t, err)
+
+ // Distinct address same TV will not
+ err = ab.Save(chainsel.TEST_90000001.Selector, addr2, onRamp100)
+ require.NoError(t, err)
+ // Same address different chain will not error
+ err = ab.Save(chainsel.TEST_90000002.Selector, addr1, onRamp100)
+ require.NoError(t, err)
+ // We can save different versions of the same contract
+ err = ab.Save(chainsel.TEST_90000002.Selector, addr2, onRamp110)
+ require.NoError(t, err)
+
+ addresses, err := ab.Addresses()
+ require.NoError(t, err)
+ assert.DeepEqual(t, addresses, map[uint64]map[string]TypeAndVersion{
+ chainsel.TEST_90000001.Selector: {
+ addr1: onRamp100,
+ addr2: onRamp100,
+ },
+ chainsel.TEST_90000002.Selector: {
+ addr1: onRamp100,
+ addr2: onRamp110,
+ },
+ })
+
+ // Test merge
+ ab2 := NewMemoryAddressBook()
+ require.NoError(t, ab2.Save(chainsel.TEST_90000003.Selector, addr3, onRamp100))
+ require.NoError(t, ab.Merge(ab2))
+ // Other address book should remain unchanged.
+ addresses, err = ab2.Addresses()
+ require.NoError(t, err)
+ assert.DeepEqual(t, addresses, map[uint64]map[string]TypeAndVersion{
+ chainsel.TEST_90000003.Selector: {
+ addr3: onRamp100,
+ },
+ })
+ // Existing addressbook should contain the new elements.
+ addresses, err = ab.Addresses()
+ require.NoError(t, err)
+ assert.DeepEqual(t, addresses, map[uint64]map[string]TypeAndVersion{
+ chainsel.TEST_90000001.Selector: {
+ addr1: onRamp100,
+ addr2: onRamp100,
+ },
+ chainsel.TEST_90000002.Selector: {
+ addr1: onRamp100,
+ addr2: onRamp110,
+ },
+ chainsel.TEST_90000003.Selector: {
+ addr3: onRamp100,
+ },
+ })
+
+ // Merge to an existing chain.
+ require.NoError(t, ab2.Save(chainsel.TEST_90000002.Selector, addr3, offRamp100))
+}
diff --git a/integration-tests/deployment/ccip/deploy.go b/integration-tests/deployment/ccip/deploy.go
new file mode 100644
index 00000000000..3385551a22d
--- /dev/null
+++ b/integration-tests/deployment/ccip/deploy.go
@@ -0,0 +1,561 @@
+package ccipdeployment
+
+import (
+ "encoding/hex"
+ "fmt"
+ "math/big"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
+ owner_helpers "github.com/smartcontractkit/ccip-owner-contracts/gethwrappers"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_config"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
+
+ "github.com/smartcontractkit/chainlink-common/pkg/logger"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/nonce_manager"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/onramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/shared/generated/burn_mint_erc677"
+)
+
+var (
+ MockARM deployment.ContractType = "MockRMN"
+ LinkToken deployment.ContractType = "LinkToken"
+ ARMProxy deployment.ContractType = "ARMProxy"
+ WETH9 deployment.ContractType = "WETH9"
+ Router deployment.ContractType = "Router"
+ TokenAdminRegistry deployment.ContractType = "TokenAdminRegistry"
+ NonceManager deployment.ContractType = "NonceManager"
+ PriceRegistry deployment.ContractType = "PriceRegistry"
+ ManyChainMultisig deployment.ContractType = "ManyChainMultiSig"
+ CCIPConfig deployment.ContractType = "CCIPConfig"
+ RBACTimelock deployment.ContractType = "RBACTimelock"
+ OnRamp deployment.ContractType = "OnRamp"
+ OffRamp deployment.ContractType = "OffRamp"
+ CCIPReceiver deployment.ContractType = "CCIPReceiver"
+ CapabilitiesRegistry deployment.ContractType = "CapabilitiesRegistry"
+)
+
+type Contracts interface {
+ *capabilities_registry.CapabilitiesRegistry |
+ *rmn_proxy_contract.RMNProxyContract |
+ *ccip_config.CCIPConfig |
+ *nonce_manager.NonceManager |
+ *price_registry.PriceRegistry |
+ *router.Router |
+ *token_admin_registry.TokenAdminRegistry |
+ *weth9.WETH9 |
+ *mock_rmn_contract.MockRMNContract |
+ *owner_helpers.ManyChainMultiSig |
+ *owner_helpers.RBACTimelock |
+ *offramp.OffRamp |
+ *onramp.OnRamp |
+ *burn_mint_erc677.BurnMintERC677 |
+ *maybe_revert_message_receiver.MaybeRevertMessageReceiver
+}
+
+type ContractDeploy[C Contracts] struct {
+ // We just keep all the deploy return values
+ // since some will be empty if there's an error.
+ Address common.Address
+ Contract C
+ Tx *types.Transaction
+ Tv deployment.TypeAndVersion
+ Err error
+}
+
+// TODO: pull up to general deployment pkg somehow
+// without exposing all product specific contracts?
+func deployContract[C Contracts](
+ lggr logger.Logger,
+ chain deployment.Chain,
+ addressBook deployment.AddressBook,
+ deploy func(chain deployment.Chain) ContractDeploy[C],
+) (*ContractDeploy[C], error) {
+ contractDeploy := deploy(chain)
+ if contractDeploy.Err != nil {
+ lggr.Errorw("Failed to deploy contract", "err", contractDeploy.Err)
+ return nil, contractDeploy.Err
+ }
+ err := chain.Confirm(contractDeploy.Tx.Hash())
+ if err != nil {
+ lggr.Errorw("Failed to confirm deployment", "err", err)
+ return nil, err
+ }
+ err = addressBook.Save(chain.Selector, contractDeploy.Address.String(), contractDeploy.Tv)
+ if err != nil {
+ lggr.Errorw("Failed to save contract address", "err", err)
+ return nil, err
+ }
+ return &contractDeploy, nil
+}
+
+type DeployCCIPContractConfig struct {
+ HomeChainSel uint64
+ // Existing contracts which we want to skip deployment
+ // Leave empty if we want to deploy everything
+ // TODO: Add skips to deploy function.
+ CCIPOnChainState
+}
+
+// TODO: Likely we'll want to further parameterize the deployment
+// For example a list of contracts to skip deploying if they already exist.
+// Or mock vs real RMN.
+// Deployment produces an address book of everything it deployed.
+func DeployCCIPContracts(e deployment.Environment, c DeployCCIPContractConfig) (deployment.AddressBook, error) {
+ ab := deployment.NewMemoryAddressBook()
+ nodes, err := deployment.NodeInfo(e.NodeIDs, e.Offchain)
+ if err != nil || len(nodes) == 0 {
+ e.Logger.Errorw("Failed to get node info", "err", err)
+ return ab, err
+ }
+ if _, ok := c.CapabilityRegistry[c.HomeChainSel]; !ok {
+ return ab, fmt.Errorf("Capability registry not found for home chain %d, needs to be deployed first", c.HomeChainSel)
+ }
+ cr, err := c.CapabilityRegistry[c.HomeChainSel].GetHashedCapabilityId(
+ &bind.CallOpts{}, CapabilityLabelledName, CapabilityVersion)
+ if err != nil {
+ e.Logger.Errorw("Failed to get hashed capability id", "err", err)
+ return ab, err
+ }
+ // Signal to CR that our nodes support CCIP capability.
+ if err := AddNodes(
+ c.CapabilityRegistry[c.HomeChainSel],
+ e.Chains[c.HomeChainSel],
+ nodes.PeerIDs(c.HomeChainSel), // Doesn't actually matter which sel here
+ [][32]byte{cr},
+ ); err != nil {
+ return ab, err
+ }
+
+ for sel, chain := range e.Chains {
+ ccipReceiver, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*maybe_revert_message_receiver.MaybeRevertMessageReceiver] {
+ receiverAddr, tx, receiver, err2 := maybe_revert_message_receiver.DeployMaybeRevertMessageReceiver(
+ chain.DeployerKey,
+ chain.Client,
+ false,
+ )
+ return ContractDeploy[*maybe_revert_message_receiver.MaybeRevertMessageReceiver]{
+ receiverAddr, receiver, tx, deployment.NewTypeAndVersion(CCIPReceiver, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy receiver", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed receiver", "addr", ccipReceiver.Address)
+
+ // TODO: Still waiting for RMNRemote/RMNHome contracts etc.
+ mockARM, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*mock_rmn_contract.MockRMNContract] {
+ mockARMAddr, tx, mockARM, err2 := mock_rmn_contract.DeployMockRMNContract(
+ chain.DeployerKey,
+ chain.Client,
+ )
+ return ContractDeploy[*mock_rmn_contract.MockRMNContract]{
+ mockARMAddr, mockARM, tx, deployment.NewTypeAndVersion(MockARM, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy mockARM", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed mockARM", "addr", mockARM)
+
+ mcm, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*owner_helpers.ManyChainMultiSig] {
+ mcmAddr, tx, mcm, err2 := owner_helpers.DeployManyChainMultiSig(
+ chain.DeployerKey,
+ chain.Client,
+ )
+ return ContractDeploy[*owner_helpers.ManyChainMultiSig]{
+ mcmAddr, mcm, tx, deployment.NewTypeAndVersion(ManyChainMultisig, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy mcm", "err", err)
+ return ab, err
+ }
+ // TODO: Address soon
+ e.Logger.Infow("deployed mcm", "addr", mcm.Address)
+
+ _, err = deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*owner_helpers.RBACTimelock] {
+ timelock, tx, cc, err2 := owner_helpers.DeployRBACTimelock(
+ chain.DeployerKey,
+ chain.Client,
+ big.NewInt(0), // minDelay
+ mcm.Address,
+ []common.Address{mcm.Address}, // proposers
+ []common.Address{chain.DeployerKey.From}, //executors
+ []common.Address{mcm.Address}, // cancellers
+ []common.Address{mcm.Address}, // bypassers
+ )
+ return ContractDeploy[*owner_helpers.RBACTimelock]{
+ timelock, cc, tx, deployment.NewTypeAndVersion(RBACTimelock, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy timelock", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed timelock", "addr", mcm.Address)
+
+ armProxy, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*rmn_proxy_contract.RMNProxyContract] {
+ armProxyAddr, tx, armProxy, err2 := rmn_proxy_contract.DeployRMNProxyContract(
+ chain.DeployerKey,
+ chain.Client,
+ mockARM.Address,
+ )
+ return ContractDeploy[*rmn_proxy_contract.RMNProxyContract]{
+ armProxyAddr, armProxy, tx, deployment.NewTypeAndVersion(ARMProxy, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy armProxy", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed armProxy", "addr", armProxy.Address)
+
+ weth9, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*weth9.WETH9] {
+ weth9Addr, tx, weth9c, err2 := weth9.DeployWETH9(
+ chain.DeployerKey,
+ chain.Client,
+ )
+ return ContractDeploy[*weth9.WETH9]{
+ weth9Addr, weth9c, tx, deployment.NewTypeAndVersion(WETH9, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy weth9", "err", err)
+ return ab, err
+ }
+
+ linkToken, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*burn_mint_erc677.BurnMintERC677] {
+ linkTokenAddr, tx, linkToken, err2 := burn_mint_erc677.DeployBurnMintERC677(
+ chain.DeployerKey,
+ chain.Client,
+ "Link Token",
+ "LINK",
+ uint8(18),
+ big.NewInt(0).Mul(big.NewInt(1e9), big.NewInt(1e18)),
+ )
+ return ContractDeploy[*burn_mint_erc677.BurnMintERC677]{
+ linkTokenAddr, linkToken, tx, deployment.NewTypeAndVersion(LinkToken, deployment.Version1_0_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy linkToken", "err", err)
+ return ab, err
+ }
+
+ routerContract, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*router.Router] {
+ routerAddr, tx, routerC, err2 := router.DeployRouter(
+ chain.DeployerKey,
+ chain.Client,
+ weth9.Address,
+ armProxy.Address,
+ )
+ return ContractDeploy[*router.Router]{
+ routerAddr, routerC, tx, deployment.NewTypeAndVersion(Router, deployment.Version1_2_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy router", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed router", "addr", routerContract)
+
+ tokenAdminRegistry, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*token_admin_registry.TokenAdminRegistry] {
+ tokenAdminRegistryAddr, tx, tokenAdminRegistry, err2 := token_admin_registry.DeployTokenAdminRegistry(
+ chain.DeployerKey,
+ chain.Client)
+ return ContractDeploy[*token_admin_registry.TokenAdminRegistry]{
+ tokenAdminRegistryAddr, tokenAdminRegistry, tx, deployment.NewTypeAndVersion(TokenAdminRegistry, deployment.Version1_5_0), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy token admin registry", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed tokenAdminRegistry", "addr", tokenAdminRegistry)
+
+ nonceManager, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*nonce_manager.NonceManager] {
+ nonceManagerAddr, tx, nonceManager, err2 := nonce_manager.DeployNonceManager(
+ chain.DeployerKey,
+ chain.Client,
+ []common.Address{}, // Need to add onRamp after
+ )
+ return ContractDeploy[*nonce_manager.NonceManager]{
+ nonceManagerAddr, nonceManager, tx, deployment.NewTypeAndVersion(NonceManager, deployment.Version1_6_0_dev), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy router", "err", err)
+ return ab, err
+ }
+
+ priceRegistry, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*price_registry.PriceRegistry] {
+ prAddr, tx, pr, err2 := price_registry.DeployPriceRegistry(
+ chain.DeployerKey,
+ chain.Client,
+ price_registry.PriceRegistryStaticConfig{
+ MaxFeeJuelsPerMsg: big.NewInt(0).Mul(big.NewInt(2e2), big.NewInt(1e18)),
+ LinkToken: linkToken.Address,
+ StalenessThreshold: uint32(24 * 60 * 60),
+ },
+ []common.Address{}, // ramps added after
+ []common.Address{weth9.Address, linkToken.Address}, // fee tokens
+ []price_registry.PriceRegistryTokenPriceFeedUpdate{},
+ []price_registry.PriceRegistryTokenTransferFeeConfigArgs{}, // TODO: tokens
+ []price_registry.PriceRegistryPremiumMultiplierWeiPerEthArgs{
+ {
+ PremiumMultiplierWeiPerEth: 9e17, // 0.9 ETH
+ Token: linkToken.Address,
+ },
+ {
+ PremiumMultiplierWeiPerEth: 1e18,
+ Token: weth9.Address,
+ },
+ },
+ []price_registry.PriceRegistryDestChainConfigArgs{},
+ )
+ return ContractDeploy[*price_registry.PriceRegistry]{
+ prAddr, pr, tx, deployment.NewTypeAndVersion(PriceRegistry, deployment.Version1_6_0_dev), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy price registry", "err", err)
+ return ab, err
+ }
+
+ onRamp, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*onramp.OnRamp] {
+ onRampAddr, tx, onRamp, err2 := onramp.DeployOnRamp(
+ chain.DeployerKey,
+ chain.Client,
+ onramp.OnRampStaticConfig{
+ ChainSelector: sel,
+ RmnProxy: armProxy.Address,
+ NonceManager: nonceManager.Address,
+ TokenAdminRegistry: tokenAdminRegistry.Address,
+ },
+ onramp.OnRampDynamicConfig{
+ PriceRegistry: priceRegistry.Address,
+ FeeAggregator: common.HexToAddress("0x1"), // TODO real fee aggregator
+ },
+ []onramp.OnRampDestChainConfigArgs{},
+ )
+ return ContractDeploy[*onramp.OnRamp]{
+ onRampAddr, onRamp, tx, deployment.NewTypeAndVersion(OnRamp, deployment.Version1_6_0_dev), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy onramp", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed onramp", "addr", onRamp.Address)
+
+ offRamp, err := deployContract(e.Logger, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*offramp.OffRamp] {
+ offRampAddr, tx, offRamp, err2 := offramp.DeployOffRamp(
+ chain.DeployerKey,
+ chain.Client,
+ offramp.OffRampStaticConfig{
+ ChainSelector: sel,
+ RmnProxy: armProxy.Address,
+ NonceManager: nonceManager.Address,
+ TokenAdminRegistry: tokenAdminRegistry.Address,
+ },
+ offramp.OffRampDynamicConfig{
+ PriceRegistry: priceRegistry.Address,
+ PermissionLessExecutionThresholdSeconds: uint32(86400),
+ MaxTokenTransferGas: uint32(200_000),
+ MaxPoolReleaseOrMintGas: uint32(200_000),
+ },
+ []offramp.OffRampSourceChainConfigArgs{},
+ )
+ return ContractDeploy[*offramp.OffRamp]{
+ offRampAddr, offRamp, tx, deployment.NewTypeAndVersion(OffRamp, deployment.Version1_6_0_dev), err2,
+ }
+ })
+ if err != nil {
+ e.Logger.Errorw("Failed to deploy offramp", "err", err)
+ return ab, err
+ }
+ e.Logger.Infow("deployed offramp", "addr", offRamp)
+
+ // Enable ramps on price registry/nonce manager
+ tx, err := priceRegistry.Contract.ApplyAuthorizedCallerUpdates(chain.DeployerKey, price_registry.AuthorizedCallersAuthorizedCallerArgs{
+ // TODO: We enable the deployer initially to set prices
+ AddedCallers: []common.Address{offRamp.Address, chain.DeployerKey.From},
+ })
+ if err := deployment.ConfirmIfNoError(chain, tx, err); err != nil {
+ e.Logger.Errorw("Failed to confirm price registry authorized caller update", "err", err)
+ return ab, err
+ }
+
+ tx, err = nonceManager.Contract.ApplyAuthorizedCallerUpdates(chain.DeployerKey, nonce_manager.AuthorizedCallersAuthorizedCallerArgs{
+ AddedCallers: []common.Address{offRamp.Address, onRamp.Address},
+ })
+ if err := deployment.ConfirmIfNoError(chain, tx, err); err != nil {
+ e.Logger.Errorw("Failed to update nonce manager with ramps", "err", err)
+ return ab, err
+ }
+
+ // Add chain config for each chain.
+ _, err = AddChainConfig(e.Logger,
+ e.Chains[c.HomeChainSel],
+ c.CCIPOnChainState.CCIPConfig[c.HomeChainSel],
+ chain.Selector,
+ nodes.PeerIDs(chain.Selector),
+ uint8(len(nodes)/3))
+ if err != nil {
+ return ab, err
+ }
+
+ // For each chain, we create a DON on the home chain.
+ if err := AddDON(e.Logger,
+ cr,
+ c.CapabilityRegistry[c.HomeChainSel],
+ c.CCIPConfig[c.HomeChainSel],
+ offRamp.Contract,
+ chain,
+ e.Chains[c.HomeChainSel],
+ uint8(len(nodes)/3),
+ nodes.BootstrapPeerIDs(chain.Selector)[0],
+ nodes.PeerIDs(chain.Selector),
+ nodes,
+ ); err != nil {
+ e.Logger.Errorw("Failed to add DON", "err", err)
+ return ab, err
+ }
+ }
+
+ return ab, nil
+}
+
+func AddLane(e deployment.Environment, state CCIPOnChainState, from, to uint64) error {
+ // TODO: Batch
+ tx, err := state.Routers[from].ApplyRampUpdates(e.Chains[from].DeployerKey, []router.RouterOnRamp{
+ {
+ DestChainSelector: to,
+ OnRamp: state.EvmOnRampsV160[from].Address(),
+ },
+ }, []router.RouterOffRamp{}, []router.RouterOffRamp{})
+ if err := deployment.ConfirmIfNoError(e.Chains[from], tx, err); err != nil {
+ return err
+ }
+ tx, err = state.EvmOnRampsV160[from].ApplyDestChainConfigUpdates(e.Chains[from].DeployerKey,
+ []onramp.OnRampDestChainConfigArgs{
+ {
+ DestChainSelector: to,
+ Router: state.Routers[from].Address(),
+ },
+ })
+ if err := deployment.ConfirmIfNoError(e.Chains[from], tx, err); err != nil {
+ return err
+ }
+
+ _, err = state.PriceRegistries[from].UpdatePrices(
+ e.Chains[from].DeployerKey, price_registry.InternalPriceUpdates{
+ TokenPriceUpdates: []price_registry.InternalTokenPriceUpdate{
+ {
+ SourceToken: state.LinkTokens[from].Address(),
+ UsdPerToken: deployment.E18Mult(20),
+ },
+ {
+ SourceToken: state.Weth9s[from].Address(),
+ UsdPerToken: deployment.E18Mult(4000),
+ },
+ },
+ GasPriceUpdates: []price_registry.InternalGasPriceUpdate{
+ {
+ DestChainSelector: to,
+ UsdPerUnitGas: big.NewInt(2e12),
+ },
+ }})
+ if err := deployment.ConfirmIfNoError(e.Chains[from], tx, err); err != nil {
+ return err
+ }
+
+ // Enable dest in price registry
+ tx, err = state.PriceRegistries[from].ApplyDestChainConfigUpdates(e.Chains[from].DeployerKey,
+ []price_registry.PriceRegistryDestChainConfigArgs{
+ {
+ DestChainSelector: to,
+ DestChainConfig: defaultPriceRegistryDestChainConfig(),
+ },
+ })
+ if err := deployment.ConfirmIfNoError(e.Chains[from], tx, err); err != nil {
+ return err
+ }
+
+ tx, err = state.EvmOffRampsV160[to].ApplySourceChainConfigUpdates(e.Chains[to].DeployerKey,
+ []offramp.OffRampSourceChainConfigArgs{
+ {
+ Router: state.Routers[to].Address(),
+ SourceChainSelector: from,
+ IsEnabled: true,
+ OnRamp: common.LeftPadBytes(state.EvmOnRampsV160[from].Address().Bytes(), 32),
+ },
+ })
+ if err := deployment.ConfirmIfNoError(e.Chains[to], tx, err); err != nil {
+ return err
+ }
+ tx, err = state.Routers[to].ApplyRampUpdates(e.Chains[to].DeployerKey, []router.RouterOnRamp{}, []router.RouterOffRamp{}, []router.RouterOffRamp{
+ {
+ SourceChainSelector: from,
+ OffRamp: state.EvmOffRampsV160[to].Address(),
+ },
+ })
+ return deployment.ConfirmIfNoError(e.Chains[to], tx, err)
+}
+
+func defaultPriceRegistryDestChainConfig() price_registry.PriceRegistryDestChainConfig {
+ // https://github.com/smartcontractkit/ccip/blob/c4856b64bd766f1ddbaf5d13b42d3c4b12efde3a/contracts/src/v0.8/ccip/libraries/Internal.sol#L337-L337
+ /*
+ ```Solidity
+ // bytes4(keccak256("CCIP ChainFamilySelector EVM"))
+ bytes4 public constant CHAIN_FAMILY_SELECTOR_EVM = 0x2812d52c;
+ ```
+ */
+ evmFamilySelector, _ := hex.DecodeString("2812d52c")
+ return price_registry.PriceRegistryDestChainConfig{
+ IsEnabled: true,
+ MaxNumberOfTokensPerMsg: 10,
+ MaxDataBytes: 256,
+ MaxPerMsgGasLimit: 3_000_000,
+ DestGasOverhead: 50_000,
+ DefaultTokenFeeUSDCents: 1,
+ DestGasPerPayloadByte: 10,
+ DestDataAvailabilityOverheadGas: 0,
+ DestGasPerDataAvailabilityByte: 100,
+ DestDataAvailabilityMultiplierBps: 1,
+ DefaultTokenDestGasOverhead: 125_000,
+ DefaultTokenDestBytesOverhead: 32,
+ DefaultTxGasLimit: 200_000,
+ GasMultiplierWeiPerEth: 1,
+ NetworkFeeUSDCents: 1,
+ ChainFamilySelector: [4]byte(evmFamilySelector),
+ }
+}
diff --git a/integration-tests/deployment/ccip/deploy_home_chain.go b/integration-tests/deployment/ccip/deploy_home_chain.go
new file mode 100644
index 00000000000..eb7aba2ec8d
--- /dev/null
+++ b/integration-tests/deployment/ccip/deploy_home_chain.go
@@ -0,0 +1,401 @@
+package ccipdeployment
+
+import (
+ "bytes"
+ "context"
+ "errors"
+ "sort"
+ "time"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/common"
+ confighelper2 "github.com/smartcontractkit/libocr/offchainreporting2plus/confighelper"
+ "github.com/smartcontractkit/libocr/offchainreporting2plus/ocr3confighelper"
+
+ "github.com/smartcontractkit/chainlink-ccip/chainconfig"
+ "github.com/smartcontractkit/chainlink-ccip/pluginconfig"
+ commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config"
+ "github.com/smartcontractkit/chainlink-common/pkg/logger"
+ "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+ cctypes "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_config"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ocr3_config_encoder"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry"
+)
+
+const (
+ NodeOperatorID = 1
+ CapabilityLabelledName = "ccip"
+ CapabilityVersion = "v1.0.0"
+
+ FirstBlockAge = 8 * time.Hour
+ RemoteGasPriceBatchWriteFrequency = 30 * time.Minute
+ BatchGasLimit = 6_500_000
+ RelativeBoostPerWaitHour = 1.5
+ InflightCacheExpiry = 10 * time.Minute
+ RootSnoozeTime = 30 * time.Minute
+ BatchingStrategyID = 0
+ DeltaProgress = 30 * time.Second
+ DeltaResend = 10 * time.Second
+ DeltaInitial = 20 * time.Second
+ DeltaRound = 2 * time.Second
+ DeltaGrace = 2 * time.Second
+ DeltaCertifiedCommitRequest = 10 * time.Second
+ DeltaStage = 10 * time.Second
+ Rmax = 3
+ MaxDurationQuery = 50 * time.Millisecond
+ MaxDurationObservation = 5 * time.Second
+ MaxDurationShouldAcceptAttestedReport = 10 * time.Second
+ MaxDurationShouldTransmitAcceptedReport = 10 * time.Second
+)
+
+func DeployCapReg(lggr logger.Logger, chains map[uint64]deployment.Chain, chainSel uint64) (deployment.AddressBook, error) {
+ ab := deployment.NewMemoryAddressBook()
+ chain := chains[chainSel]
+ capReg, err := deployContract(lggr, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*capabilities_registry.CapabilitiesRegistry] {
+ crAddr, tx, cr, err2 := capabilities_registry.DeployCapabilitiesRegistry(
+ chain.DeployerKey,
+ chain.Client,
+ )
+ return ContractDeploy[*capabilities_registry.CapabilitiesRegistry]{
+ Address: crAddr, Contract: cr, Tv: deployment.NewTypeAndVersion(CapabilitiesRegistry, deployment.Version1_0_0), Tx: tx, Err: err2,
+ }
+ })
+ if err != nil {
+ lggr.Errorw("Failed to deploy capreg", "err", err)
+ return ab, err
+ }
+ lggr.Infow("deployed capreg", "addr", capReg.Address)
+ ccipConfig, err := deployContract(
+ lggr, chain, ab,
+ func(chain deployment.Chain) ContractDeploy[*ccip_config.CCIPConfig] {
+ ccAddr, tx, cc, err2 := ccip_config.DeployCCIPConfig(
+ chain.DeployerKey,
+ chain.Client,
+ capReg.Address,
+ )
+ return ContractDeploy[*ccip_config.CCIPConfig]{
+ Address: ccAddr, Tv: deployment.NewTypeAndVersion(CCIPConfig, deployment.Version1_6_0_dev), Tx: tx, Err: err2, Contract: cc,
+ }
+ })
+ if err != nil {
+ lggr.Errorw("Failed to deploy ccip config", "err", err)
+ return ab, err
+ }
+ lggr.Infow("deployed ccip config", "addr", ccipConfig.Address)
+
+ tx, err := capReg.Contract.AddCapabilities(chain.DeployerKey, []capabilities_registry.CapabilitiesRegistryCapability{
+ {
+ LabelledName: CapabilityLabelledName,
+ Version: CapabilityVersion,
+ CapabilityType: 2, // consensus. not used (?)
+ ResponseType: 0, // report. not used (?)
+ ConfigurationContract: ccipConfig.Address,
+ },
+ })
+ if err := deployment.ConfirmIfNoError(chain, tx, err); err != nil {
+ lggr.Errorw("Failed to add capabilities", "err", err)
+ return ab, err
+ }
+ // TODO: Just one for testing.
+ tx, err = capReg.Contract.AddNodeOperators(chain.DeployerKey, []capabilities_registry.CapabilitiesRegistryNodeOperator{
+ {
+ Admin: chain.DeployerKey.From,
+ Name: "NodeOperator",
+ },
+ })
+ if err := deployment.ConfirmIfNoError(chain, tx, err); err != nil {
+ lggr.Errorw("Failed to add node operators", "err", err)
+ return ab, err
+ }
+ return ab, nil
+}
+
+func sortP2PIDS(p2pIDs [][32]byte) {
+ sort.Slice(p2pIDs, func(i, j int) bool {
+ return bytes.Compare(p2pIDs[i][:], p2pIDs[j][:]) < 0
+ })
+}
+
+func AddNodes(
+ capReg *capabilities_registry.CapabilitiesRegistry,
+ chain deployment.Chain,
+ p2pIDs [][32]byte,
+ capabilityIDs [][32]byte,
+) error {
+ // Need to sort, otherwise _checkIsValidUniqueSubset onChain will fail
+ sortP2PIDS(p2pIDs)
+ var nodeParams []capabilities_registry.CapabilitiesRegistryNodeParams
+ for _, p2pID := range p2pIDs {
+ nodeParam := capabilities_registry.CapabilitiesRegistryNodeParams{
+ NodeOperatorId: NodeOperatorID,
+ Signer: p2pID, // Not used in tests
+ P2pId: p2pID,
+ HashedCapabilityIds: capabilityIDs,
+ }
+ nodeParams = append(nodeParams, nodeParam)
+ }
+ tx, err := capReg.AddNodes(chain.DeployerKey, nodeParams)
+ if err != nil {
+ return err
+ }
+ return chain.Confirm(tx.Hash())
+}
+
+func SetupConfigInfo(chainSelector uint64, readers [][32]byte, fChain uint8, cfg []byte) ccip_config.CCIPConfigTypesChainConfigInfo {
+ return ccip_config.CCIPConfigTypesChainConfigInfo{
+ ChainSelector: chainSelector,
+ ChainConfig: ccip_config.CCIPConfigTypesChainConfig{
+ Readers: readers,
+ FChain: fChain,
+ Config: cfg,
+ },
+ }
+}
+
+func AddChainConfig(
+ lggr logger.Logger,
+ h deployment.Chain,
+ ccipConfig *ccip_config.CCIPConfig,
+ chainSelector uint64,
+ p2pIDs [][32]byte,
+ f uint8,
+) (ccip_config.CCIPConfigTypesChainConfigInfo, error) {
+ // Need to sort, otherwise _checkIsValidUniqueSubset onChain will fail
+ sortP2PIDS(p2pIDs)
+ // First Add ChainConfig that includes all p2pIDs as readers
+ encodedExtraChainConfig, err := chainconfig.EncodeChainConfig(chainconfig.ChainConfig{
+ GasPriceDeviationPPB: ccipocr3.NewBigIntFromInt64(1000),
+ DAGasPriceDeviationPPB: ccipocr3.NewBigIntFromInt64(0),
+ FinalityDepth: 10,
+ OptimisticConfirmations: 1,
+ })
+ if err != nil {
+ return ccip_config.CCIPConfigTypesChainConfigInfo{}, err
+ }
+ chainConfig := SetupConfigInfo(chainSelector, p2pIDs, f, encodedExtraChainConfig)
+ inputConfig := []ccip_config.CCIPConfigTypesChainConfigInfo{
+ chainConfig,
+ }
+ tx, err := ccipConfig.ApplyChainConfigUpdates(h.DeployerKey, nil, inputConfig)
+ if err := deployment.ConfirmIfNoError(h, tx, err); err != nil {
+ return ccip_config.CCIPConfigTypesChainConfigInfo{}, err
+ }
+ lggr.Infow("Applied chain config updates", "chainConfig", chainConfig)
+ return chainConfig, nil
+}
+
+func AddDON(
+ lggr logger.Logger,
+ ccipCapabilityID [32]byte,
+ capReg *capabilities_registry.CapabilitiesRegistry,
+ ccipConfig *ccip_config.CCIPConfig,
+ offRamp *offramp.OffRamp,
+ dest deployment.Chain,
+ home deployment.Chain,
+ f uint8,
+ bootstrapP2PID [32]byte,
+ p2pIDs [][32]byte,
+ nodes []deployment.Node,
+) error {
+ sortP2PIDS(p2pIDs)
+ // Get OCR3 Config from helper
+ var schedule []int
+ var oracles []confighelper2.OracleIdentityExtra
+ for _, node := range nodes {
+ schedule = append(schedule, 1)
+ cfg := node.SelToOCRConfig[dest.Selector]
+ oracles = append(oracles, confighelper2.OracleIdentityExtra{
+ OracleIdentity: confighelper2.OracleIdentity{
+ OnchainPublicKey: cfg.OnchainPublicKey,
+ TransmitAccount: cfg.TransmitAccount,
+ OffchainPublicKey: cfg.OffchainPublicKey,
+ PeerID: cfg.PeerID.String()[4:],
+ }, ConfigEncryptionPublicKey: cfg.ConfigEncryptionPublicKey,
+ })
+ }
+
+ tabi, err := ocr3_config_encoder.IOCR3ConfigEncoderMetaData.GetAbi()
+ if err != nil {
+ return err
+ }
+
+ // Add DON on capability registry contract
+ var ocr3Configs []ocr3_config_encoder.CCIPConfigTypesOCR3Config
+ for _, pluginType := range []cctypes.PluginType{cctypes.PluginTypeCCIPCommit, cctypes.PluginTypeCCIPExec} {
+ var encodedOffchainConfig []byte
+ var err2 error
+ if pluginType == cctypes.PluginTypeCCIPCommit {
+ encodedOffchainConfig, err2 = pluginconfig.EncodeCommitOffchainConfig(pluginconfig.CommitOffchainConfig{
+ RemoteGasPriceBatchWriteFrequency: *commonconfig.MustNewDuration(RemoteGasPriceBatchWriteFrequency),
+ // TODO: implement token price writes
+ // TokenPriceBatchWriteFrequency: *commonconfig.MustNewDuration(tokenPriceBatchWriteFrequency),
+ })
+ } else {
+ encodedOffchainConfig, err2 = pluginconfig.EncodeExecuteOffchainConfig(pluginconfig.ExecuteOffchainConfig{
+ BatchGasLimit: BatchGasLimit,
+ RelativeBoostPerWaitHour: RelativeBoostPerWaitHour,
+ MessageVisibilityInterval: *commonconfig.MustNewDuration(FirstBlockAge),
+ InflightCacheExpiry: *commonconfig.MustNewDuration(InflightCacheExpiry),
+ RootSnoozeTime: *commonconfig.MustNewDuration(RootSnoozeTime),
+ BatchingStrategyID: BatchingStrategyID,
+ })
+ }
+ if err2 != nil {
+ return err2
+ }
+ signers, transmitters, configF, _, offchainConfigVersion, offchainConfig, err2 := ocr3confighelper.ContractSetConfigArgsForTests(
+ DeltaProgress,
+ DeltaResend,
+ DeltaInitial,
+ DeltaRound,
+ DeltaGrace,
+ DeltaCertifiedCommitRequest,
+ DeltaStage,
+ Rmax,
+ schedule,
+ oracles,
+ encodedOffchainConfig,
+ MaxDurationQuery,
+ MaxDurationObservation,
+ MaxDurationShouldAcceptAttestedReport,
+ MaxDurationShouldTransmitAcceptedReport,
+ int(f),
+ []byte{}, // empty OnChainConfig
+ )
+ if err2 != nil {
+ return err2
+ }
+
+ signersBytes := make([][]byte, len(signers))
+ for i, signer := range signers {
+ signersBytes[i] = signer
+ }
+
+ transmittersBytes := make([][]byte, len(transmitters))
+ for i, transmitter := range transmitters {
+ parsed, err2 := common.ParseHexOrString(string(transmitter))
+ if err2 != nil {
+ return err2
+ }
+ transmittersBytes[i] = parsed
+ }
+
+ ocr3Configs = append(ocr3Configs, ocr3_config_encoder.CCIPConfigTypesOCR3Config{
+ PluginType: uint8(pluginType),
+ ChainSelector: dest.Selector,
+ F: configF,
+ OffchainConfigVersion: offchainConfigVersion,
+ OfframpAddress: offRamp.Address().Bytes(),
+ BootstrapP2PIds: [][32]byte{bootstrapP2PID},
+ P2pIds: p2pIDs,
+ Signers: signersBytes,
+ Transmitters: transmittersBytes,
+ OffchainConfig: offchainConfig,
+ })
+ }
+
+ encodedCall, err := tabi.Pack("exposeOCR3Config", ocr3Configs)
+ if err != nil {
+ return err
+ }
+
+ // Trim first four bytes to remove function selector.
+ encodedConfigs := encodedCall[4:]
+
+ tx, err := capReg.AddDON(home.DeployerKey, p2pIDs, []capabilities_registry.CapabilitiesRegistryCapabilityConfiguration{
+ {
+ CapabilityId: ccipCapabilityID,
+ Config: encodedConfigs,
+ },
+ }, false, false, f)
+ if err := deployment.ConfirmIfNoError(home, tx, err); err != nil {
+ return err
+ }
+
+ latestBlock, err := home.Client.HeaderByNumber(context.Background(), nil)
+ if err != nil {
+ return err
+ }
+ endBlock := latestBlock.Number.Uint64()
+ iter, err := capReg.FilterConfigSet(&bind.FilterOpts{
+ Start: endBlock - 1,
+ End: &endBlock,
+ })
+ if err != nil {
+ return err
+ }
+ var donID uint32
+ for iter.Next() {
+ donID = iter.Event.DonId
+ break
+ }
+ if donID == 0 {
+ return errors.New("failed to get donID")
+ }
+
+ var signerAddresses []common.Address
+ for _, oracle := range oracles {
+ signerAddresses = append(signerAddresses, common.BytesToAddress(oracle.OnchainPublicKey))
+ }
+
+ var transmitterAddresses []common.Address
+ for _, oracle := range oracles {
+ transmitterAddresses = append(transmitterAddresses, common.HexToAddress(string(oracle.TransmitAccount)))
+ }
+
+ // get the config digest from the ccip config contract and set config on the offramp.
+ var offrampOCR3Configs []offramp.MultiOCR3BaseOCRConfigArgs
+ for _, pluginType := range []cctypes.PluginType{cctypes.PluginTypeCCIPCommit, cctypes.PluginTypeCCIPExec} {
+ ocrConfig, err2 := ccipConfig.GetOCRConfig(&bind.CallOpts{
+ Context: context.Background(),
+ }, donID, uint8(pluginType))
+ if err2 != nil {
+ return err2
+ }
+ if len(ocrConfig) != 1 {
+ return errors.New("expected exactly one OCR3 config")
+ }
+
+ offrampOCR3Configs = append(offrampOCR3Configs, offramp.MultiOCR3BaseOCRConfigArgs{
+ ConfigDigest: ocrConfig[0].ConfigDigest,
+ OcrPluginType: uint8(pluginType),
+ F: f,
+ IsSignatureVerificationEnabled: pluginType == cctypes.PluginTypeCCIPCommit,
+ Signers: signerAddresses,
+ Transmitters: transmitterAddresses,
+ })
+ }
+
+ tx, err = offRamp.SetOCR3Configs(dest.DeployerKey, offrampOCR3Configs)
+ if err := deployment.ConfirmIfNoError(dest, tx, err); err != nil {
+ return err
+ }
+
+ for _, pluginType := range []cctypes.PluginType{cctypes.PluginTypeCCIPCommit, cctypes.PluginTypeCCIPExec} {
+ _, err = offRamp.LatestConfigDetails(&bind.CallOpts{
+ Context: context.Background(),
+ }, uint8(pluginType))
+ if err != nil {
+ //return err
+ return deployment.MaybeDataErr(err)
+ }
+ // TODO: assertions to be done as part of full state
+ // resprentation validation CCIP-3047
+ //require.Equalf(t, offrampOCR3Configs[pluginType].ConfigDigest, ocrConfig.ConfigInfo.ConfigDigest, "%s OCR3 config digest mismatch", pluginType.String())
+ //require.Equalf(t, offrampOCR3Configs[pluginType].F, ocrConfig.ConfigInfo.F, "%s OCR3 config F mismatch", pluginType.String())
+ //require.Equalf(t, offrampOCR3Configs[pluginType].IsSignatureVerificationEnabled, ocrConfig.ConfigInfo.IsSignatureVerificationEnabled, "%s OCR3 config signature verification mismatch", pluginType.String())
+ //if pluginType == cctypes.PluginTypeCCIPCommit {
+ // // only commit will set signers, exec doesn't need them.
+ // require.Equalf(t, offrampOCR3Configs[pluginType].Signers, ocrConfig.Signers, "%s OCR3 config signers mismatch", pluginType.String())
+ //}
+ //require.Equalf(t, offrampOCR3Configs[pluginType].TransmittersByEVMChainID, ocrConfig.TransmittersByEVMChainID, "%s OCR3 config transmitters mismatch", pluginType.String())
+ }
+
+ lggr.Infof("set ocr3 config on the offramp, signers: %+v, transmitters: %+v", signerAddresses, transmitterAddresses)
+ return nil
+}
diff --git a/integration-tests/deployment/ccip/deploy_test.go b/integration-tests/deployment/ccip/deploy_test.go
new file mode 100644
index 00000000000..49684536a47
--- /dev/null
+++ b/integration-tests/deployment/ccip/deploy_test.go
@@ -0,0 +1,58 @@
+package ccipdeployment
+
+import (
+ "encoding/json"
+ "fmt"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap/zapcore"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment/memory"
+
+ "github.com/smartcontractkit/chainlink/v2/core/logger"
+)
+
+func TestDeployCCIPContracts(t *testing.T) {
+ lggr := logger.TestLogger(t)
+ e := memory.NewMemoryEnvironment(t, lggr, zapcore.InfoLevel, memory.MemoryEnvironmentConfig{
+ Bootstraps: 1,
+ Chains: 1,
+ Nodes: 4,
+ })
+ // Deploy all the CCIP contracts.
+ homeChain := e.AllChainSelectors()[0]
+ capRegAddresses, err := DeployCapReg(lggr, e.Chains, homeChain)
+ require.NoError(t, err)
+ s, err := GenerateOnchainState(e, capRegAddresses)
+ require.NoError(t, err)
+ ab, err := DeployCCIPContracts(e, DeployCCIPContractConfig{
+ HomeChainSel: homeChain,
+ CCIPOnChainState: s,
+ })
+ require.NoError(t, err)
+ state, err := GenerateOnchainState(e, ab)
+ require.NoError(t, err)
+ snap, err := state.Snapshot(e.AllChainSelectors())
+ require.NoError(t, err)
+
+ // Assert expect every deployed address to be in the address book.
+ // TODO (CCIP-3047): Add the rest of CCIPv2 representation
+ b, err := json.MarshalIndent(snap, "", " ")
+ require.NoError(t, err)
+ fmt.Println(string(b))
+}
+
+func TestJobSpecGeneration(t *testing.T) {
+ lggr := logger.TestLogger(t)
+ e := memory.NewMemoryEnvironment(t, lggr, zapcore.InfoLevel, memory.MemoryEnvironmentConfig{
+ Chains: 1,
+ Nodes: 1,
+ })
+ js, err := NewCCIPJobSpecs(e.NodeIDs, e.Offchain)
+ require.NoError(t, err)
+ for node, jb := range js {
+ fmt.Println(node, jb)
+ }
+ // TODO: Add job assertions
+}
diff --git a/integration-tests/deployment/ccip/jobs.go b/integration-tests/deployment/ccip/jobs.go
new file mode 100644
index 00000000000..f45fe4c553d
--- /dev/null
+++ b/integration-tests/deployment/ccip/jobs.go
@@ -0,0 +1,70 @@
+package ccipdeployment
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+ nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1"
+ "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/validate"
+ "github.com/smartcontractkit/chainlink/v2/core/services/relay"
+)
+
+// In our case, the only address needed is the cap registry which is actually an env var.
+// and will pre-exist for our deployment. So the job specs only depend on the environment operators.
+func NewCCIPJobSpecs(nodeIds []string, oc deployment.OffchainClient) (map[string][]string, error) {
+ // Generate a set of brand new job specs for CCIP for a specific environment
+ // (including NOPs) and new addresses.
+ // We want to assign one CCIP capability job to each node. And node with
+ // an addr we'll list as bootstrapper.
+ // Find the bootstrap nodes
+ bootstrapMp := make(map[string]struct{})
+ for _, node := range nodeIds {
+ // TODO: Filter should accept multiple nodes
+ nodeChainConfigs, err := oc.ListNodeChainConfigs(context.Background(), &nodev1.ListNodeChainConfigsRequest{Filter: &nodev1.ListNodeChainConfigsRequest_Filter{
+ NodeId: node,
+ }})
+ if err != nil {
+ return nil, err
+ }
+ for _, chainConfig := range nodeChainConfigs.ChainConfigs {
+ if chainConfig.Ocr2Config.IsBootstrap {
+ bootstrapMp[fmt.Sprintf("%s@%s",
+ // p2p_12D3... -> 12D3...
+ chainConfig.Ocr2Config.P2PKeyBundle.PeerId[4:], chainConfig.Ocr2Config.Multiaddr)] = struct{}{}
+ }
+ }
+ }
+ var bootstraps []string
+ for b := range bootstrapMp {
+ bootstraps = append(bootstraps, b)
+ }
+ nodesToJobSpecs := make(map[string][]string)
+ for _, node := range nodeIds {
+ // TODO: Filter should accept multiple.
+ nodeChainConfigs, err := oc.ListNodeChainConfigs(context.Background(), &nodev1.ListNodeChainConfigsRequest{Filter: &nodev1.ListNodeChainConfigsRequest_Filter{
+ NodeId: node,
+ }})
+ if err != nil {
+ return nil, err
+ }
+ spec, err := validate.NewCCIPSpecToml(validate.SpecArgs{
+ P2PV2Bootstrappers: bootstraps,
+ CapabilityVersion: CapabilityVersion,
+ CapabilityLabelledName: CapabilityLabelledName,
+ OCRKeyBundleIDs: map[string]string{
+ // TODO: Validate that that all EVM chains are using the same keybundle.
+ relay.NetworkEVM: nodeChainConfigs.ChainConfigs[0].Ocr2Config.OcrKeyBundle.BundleId,
+ },
+ // TODO: validate that all EVM chains are using the same keybundle
+ P2PKeyID: nodeChainConfigs.ChainConfigs[0].Ocr2Config.P2PKeyBundle.PeerId,
+ RelayConfigs: nil,
+ PluginConfig: map[string]any{},
+ })
+ if err != nil {
+ return nil, err
+ }
+ nodesToJobSpecs[node] = append(nodesToJobSpecs[node], spec)
+ }
+ return nodesToJobSpecs, nil
+}
diff --git a/integration-tests/deployment/ccip/migrations/1_initial_deploy.go b/integration-tests/deployment/ccip/migrations/1_initial_deploy.go
new file mode 100644
index 00000000000..e92d7c0e8b5
--- /dev/null
+++ b/integration-tests/deployment/ccip/migrations/1_initial_deploy.go
@@ -0,0 +1,34 @@
+package migrations
+
+import (
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+
+ ccipdeployment "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip"
+)
+
+// We expect the migration input to be unique per migration.
+// TODO: Maybe there's a generics approach here?
+// Note if the migration is a deployment and it fails we have 2 options:
+// - Just throw away the addresses, fix issue and try again (potentially expensive on mainnet)
+// - Roll forward with another migration completing the deployment
+func Apply0001(env deployment.Environment, c ccipdeployment.DeployCCIPContractConfig) (deployment.MigrationOutput, error) {
+ ab, err := ccipdeployment.DeployCCIPContracts(env, c)
+ if err != nil {
+ env.Logger.Errorw("Failed to deploy CCIP contracts", "err", err, "addresses", ab)
+ return deployment.MigrationOutput{}, err
+ }
+ js, err := ccipdeployment.NewCCIPJobSpecs(env.NodeIDs, env.Offchain)
+ if err != nil {
+ return deployment.MigrationOutput{}, err
+ }
+ proposal, err := ccipdeployment.GenerateAcceptOwnershipProposal(env, env.AllChainSelectors(), ab)
+ if err != nil {
+ return deployment.MigrationOutput{}, err
+ }
+ return deployment.MigrationOutput{
+ Proposals: []deployment.Proposal{proposal},
+ AddressBook: ab,
+ // Mapping of which nodes get which jobs.
+ JobSpecs: js,
+ }, nil
+}
diff --git a/integration-tests/deployment/ccip/migrations/1_initial_deploy_test.go b/integration-tests/deployment/ccip/migrations/1_initial_deploy_test.go
new file mode 100644
index 00000000000..c8f388eb451
--- /dev/null
+++ b/integration-tests/deployment/ccip/migrations/1_initial_deploy_test.go
@@ -0,0 +1,293 @@
+package migrations
+
+import (
+ "context"
+ "sync"
+ "testing"
+ "time"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
+ "github.com/ethereum/go-ethereum/common"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap/zapcore"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+
+ "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3"
+
+ jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
+
+ ccipdeployment "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip"
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment/memory"
+
+ "github.com/smartcontractkit/chainlink/v2/core/logger"
+)
+
+// Context returns a context with the test's deadline, if available.
+func Context(tb testing.TB) context.Context {
+ ctx := context.Background()
+ var cancel func()
+ switch t := tb.(type) {
+ case *testing.T:
+ if d, ok := t.Deadline(); ok {
+ ctx, cancel = context.WithDeadline(ctx, d)
+ }
+ }
+ if cancel == nil {
+ ctx, cancel = context.WithCancel(ctx)
+ }
+ tb.Cleanup(cancel)
+ return ctx
+}
+
+func Test0001_InitialDeploy(t *testing.T) {
+ lggr := logger.TestLogger(t)
+ ctx := Context(t)
+ chains := memory.NewMemoryChains(t, 3)
+ homeChainSel := uint64(0)
+ homeChainEVM := uint64(0)
+ // First chain is home chain.
+ for chainSel := range chains {
+ homeChainEVM, _ = chainsel.ChainIdFromSelector(chainSel)
+ homeChainSel = chainSel
+ break
+ }
+ ab, err := ccipdeployment.DeployCapReg(lggr, chains, homeChainSel)
+ require.NoError(t, err)
+
+ addrs, err := ab.AddressesForChain(homeChainSel)
+ require.NoError(t, err)
+ require.Len(t, addrs, 2)
+ capReg := common.Address{}
+ for addr := range addrs {
+ capReg = common.HexToAddress(addr)
+ break
+ }
+ nodes := memory.NewNodes(t, zapcore.InfoLevel, chains, 4, 1, memory.RegistryConfig{
+ EVMChainID: homeChainEVM,
+ Contract: capReg,
+ })
+ for _, node := range nodes {
+ require.NoError(t, node.App.Start(ctx))
+ }
+
+ e := memory.NewMemoryEnvironmentFromChainsNodes(t, lggr, chains, nodes)
+ state, err := ccipdeployment.GenerateOnchainState(e, ab)
+ require.NoError(t, err)
+
+ capabilities, err := state.CapabilityRegistry[homeChainSel].GetCapabilities(nil)
+ require.NoError(t, err)
+ require.Len(t, capabilities, 1)
+ ccipCap, err := state.CapabilityRegistry[homeChainSel].GetHashedCapabilityId(nil,
+ ccipdeployment.CapabilityLabelledName, ccipdeployment.CapabilityVersion)
+ require.NoError(t, err)
+ _, err = state.CapabilityRegistry[homeChainSel].GetCapability(nil, ccipCap)
+ require.NoError(t, err)
+
+ // Apply migration
+ output, err := Apply0001(e, ccipdeployment.DeployCCIPContractConfig{
+ HomeChainSel: homeChainSel,
+ // Capreg/config already exist.
+ CCIPOnChainState: state,
+ })
+ require.NoError(t, err)
+ // Get new state after migration.
+ state, err = ccipdeployment.GenerateOnchainState(e, output.AddressBook)
+ require.NoError(t, err)
+
+ // Ensure capreg logs are up to date.
+ require.NoError(t, ReplayAllLogs(nodes, chains))
+
+ // Apply the jobs.
+ for nodeID, jobs := range output.JobSpecs {
+ for _, job := range jobs {
+ // Note these auto-accept
+ _, err := e.Offchain.ProposeJob(ctx,
+ &jobv1.ProposeJobRequest{
+ NodeId: nodeID,
+ Spec: job,
+ })
+ require.NoError(t, err)
+ }
+ }
+ // Wait for plugins to register filters?
+ // TODO: Investigate how to avoid.
+ time.Sleep(30 * time.Second)
+
+ // Ensure job related logs are up to date.
+ require.NoError(t, ReplayAllLogs(nodes, chains))
+
+ // Send a request from every router
+ // Add all lanes
+ for source := range e.Chains {
+ for dest := range e.Chains {
+ if source != dest {
+ require.NoError(t, ccipdeployment.AddLane(e, state, source, dest))
+ }
+ }
+ }
+
+ // Send a message from each chain to every other chain.
+ for src, srcChain := range e.Chains {
+ for dest := range e.Chains {
+ if src == dest {
+ continue
+ }
+ msg := router.ClientEVM2AnyMessage{
+ Receiver: common.LeftPadBytes(state.Receivers[dest].Address().Bytes(), 32),
+ Data: []byte("hello"),
+ TokenAmounts: nil, // TODO: no tokens for now
+ FeeToken: state.Weth9s[src].Address(),
+ ExtraArgs: nil, // TODO: no extra args for now, falls back to default
+ }
+ fee, err := state.Routers[src].GetFee(
+ &bind.CallOpts{Context: context.Background()}, dest, msg)
+ require.NoError(t, err, deployment.MaybeDataErr(err))
+ tx, err := state.Weth9s[src].Deposit(&bind.TransactOpts{
+ From: e.Chains[src].DeployerKey.From,
+ Signer: e.Chains[src].DeployerKey.Signer,
+ Value: fee,
+ })
+ require.NoError(t, err)
+ require.NoError(t, srcChain.Confirm(tx.Hash()))
+
+ // TODO: should be able to avoid this by using native?
+ tx, err = state.Weth9s[src].Approve(e.Chains[src].DeployerKey,
+ state.Routers[src].Address(), fee)
+ require.NoError(t, err)
+ require.NoError(t, srcChain.Confirm(tx.Hash()))
+
+ t.Logf("Sending CCIP request from chain selector %d to chain selector %d",
+ src, dest)
+ tx, err = state.Routers[src].CcipSend(e.Chains[src].DeployerKey, dest, msg)
+ require.NoError(t, err)
+ require.NoError(t, srcChain.Confirm(tx.Hash()))
+ }
+ }
+
+ // Wait for all commit reports to land.
+ var wg sync.WaitGroup
+ for src, srcChain := range e.Chains {
+ for dest, dstChain := range e.Chains {
+ if src == dest {
+ continue
+ }
+ srcChain := srcChain
+ dstChain := dstChain
+ wg.Add(1)
+ go func(src, dest uint64) {
+ defer wg.Done()
+ waitForCommitWithInterval(t, srcChain, dstChain, state.EvmOffRampsV160[dest], ccipocr3.SeqNumRange{1, 1})
+ }(src, dest)
+ }
+ }
+ wg.Wait()
+
+ // Wait for all exec reports to land
+ for src, srcChain := range e.Chains {
+ for dest, dstChain := range e.Chains {
+ if src == dest {
+ continue
+ }
+ srcChain := srcChain
+ dstChain := dstChain
+ wg.Add(1)
+ go func(src, dest deployment.Chain) {
+ defer wg.Done()
+ waitForExecWithSeqNr(t, src, dest, state.EvmOffRampsV160[dest.Selector], 1)
+ }(srcChain, dstChain)
+ }
+ }
+ wg.Wait()
+
+ // TODO: Apply the proposal.
+}
+
+func ReplayAllLogs(nodes map[string]memory.Node, chains map[uint64]deployment.Chain) error {
+ for _, node := range nodes {
+ for sel := range chains {
+ if err := node.ReplayLogs(map[uint64]uint64{sel: 1}); err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+func waitForCommitWithInterval(
+ t *testing.T,
+ src deployment.Chain,
+ dest deployment.Chain,
+ offRamp *offramp.OffRamp,
+ expectedSeqNumRange ccipocr3.SeqNumRange,
+) {
+ sink := make(chan *offramp.OffRampCommitReportAccepted)
+ subscription, err := offRamp.WatchCommitReportAccepted(&bind.WatchOpts{
+ Context: context.Background(),
+ }, sink)
+ require.NoError(t, err)
+ ticker := time.NewTicker(1 * time.Second)
+ defer ticker.Stop()
+
+ //revive:disable
+ for {
+ select {
+ case <-ticker.C:
+ src.Client.(*backends.SimulatedBackend).Commit()
+ dest.Client.(*backends.SimulatedBackend).Commit()
+ t.Logf("Waiting for commit report on chain selector %d from source selector %d expected seq nr range %s",
+ dest.Selector, src.Selector, expectedSeqNumRange.String())
+ case subErr := <-subscription.Err():
+ t.Fatalf("Subscription error: %+v", subErr)
+ case report := <-sink:
+ if len(report.Report.MerkleRoots) > 0 {
+ // Check the interval of sequence numbers and make sure it matches
+ // the expected range.
+ for _, mr := range report.Report.MerkleRoots {
+ if mr.SourceChainSelector == src.Selector &&
+ uint64(expectedSeqNumRange.Start()) == mr.Interval.Min &&
+ uint64(expectedSeqNumRange.End()) == mr.Interval.Max {
+ t.Logf("Received commit report on selector %d from source selector %d expected seq nr range %s",
+ dest.Selector, src.Selector, expectedSeqNumRange.String())
+ return
+ }
+ }
+ }
+ }
+ }
+}
+
+func waitForExecWithSeqNr(t *testing.T,
+ source, dest deployment.Chain,
+ offramp *offramp.OffRamp,
+ expectedSeqNr uint64) {
+ tick := time.NewTicker(5 * time.Second)
+ defer tick.Stop()
+ for range tick.C {
+ // TODO: Clean this up
+ source.Client.(*backends.SimulatedBackend).Commit()
+ dest.Client.(*backends.SimulatedBackend).Commit()
+ scc, err := offramp.GetSourceChainConfig(nil, source.Selector)
+ require.NoError(t, err)
+ t.Logf("Waiting for ExecutionStateChanged on chain %d from chain %d with expected sequence number %d, current onchain minSeqNr: %d",
+ dest.Selector, source.Selector, expectedSeqNr, scc.MinSeqNr)
+ iter, err := offramp.FilterExecutionStateChanged(nil,
+ []uint64{source.Selector}, []uint64{expectedSeqNr}, nil)
+ require.NoError(t, err)
+ var count int
+ for iter.Next() {
+ if iter.Event.SequenceNumber == expectedSeqNr && iter.Event.SourceChainSelector == source.Selector {
+ count++
+ }
+ }
+ if count == 1 {
+ t.Logf("Received ExecutionStateChanged on chain %d from chain %d with expected sequence number %d",
+ dest.Selector, source.Selector, expectedSeqNr)
+ return
+ }
+ }
+}
diff --git a/integration-tests/deployment/ccip/propose.go b/integration-tests/deployment/ccip/propose.go
new file mode 100644
index 00000000000..0dc42acc872
--- /dev/null
+++ b/integration-tests/deployment/ccip/propose.go
@@ -0,0 +1,64 @@
+package ccipdeployment
+
+import (
+ "math/big"
+ "time"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
+ owner_helpers "github.com/smartcontractkit/ccip-owner-contracts/gethwrappers"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+)
+
+// TODO: Pull up to deploy
+func SimTransactOpts() *bind.TransactOpts {
+ return &bind.TransactOpts{Signer: func(address common.Address, transaction *types.Transaction) (*types.Transaction, error) {
+ return transaction, nil
+ }, From: common.HexToAddress("0x0"), NoSend: true, GasLimit: 200_000}
+}
+
+func GenerateAcceptOwnershipProposal(
+ e deployment.Environment,
+ chains []uint64,
+ ab deployment.AddressBook,
+) (deployment.Proposal, error) {
+ state, err := GenerateOnchainState(e, ab)
+ if err != nil {
+ return deployment.Proposal{}, err
+ }
+ // TODO: Just onramp as an example
+ var ops []owner_helpers.ManyChainMultiSigOp
+ for _, sel := range chains {
+ opCount, err := state.Mcms[sel].GetOpCount(nil)
+ if err != nil {
+ return deployment.Proposal{}, err
+ }
+
+ txData, err := state.EvmOnRampsV160[sel].AcceptOwnership(SimTransactOpts())
+ if err != nil {
+ return deployment.Proposal{}, err
+ }
+ evmID, err := chainsel.ChainIdFromSelector(sel)
+ if err != nil {
+ return deployment.Proposal{}, err
+ }
+ ops = append(ops, owner_helpers.ManyChainMultiSigOp{
+ ChainId: big.NewInt(int64(evmID)),
+ MultiSig: state.McmsAddrs[sel],
+ Nonce: opCount,
+ To: state.EvmOnRampsV160[sel].Address(),
+ Value: big.NewInt(0),
+ Data: txData.Data(),
+ })
+ }
+ // TODO: Real valid until.
+ return deployment.Proposal{ValidUntil: uint32(time.Now().Unix()), Ops: ops}, nil
+}
+
+func ApplyProposal(env deployment.Environment, p deployment.Proposal, state CCIPOnChainState) error {
+ // TODO
+ return nil
+}
diff --git a/integration-tests/deployment/ccip/state.go b/integration-tests/deployment/ccip/state.go
new file mode 100644
index 00000000000..1e9c9047265
--- /dev/null
+++ b/integration-tests/deployment/ccip/state.go
@@ -0,0 +1,271 @@
+package ccipdeployment
+
+import (
+ "fmt"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/pkg/errors"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_config"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/maybe_revert_message_receiver"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/shared/generated/burn_mint_erc677"
+
+ owner_wrappers "github.com/smartcontractkit/ccip-owner-contracts/gethwrappers"
+
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/mock_rmn_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/nonce_manager"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/offramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/onramp"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/price_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_proxy_contract"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/router"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/token_admin_registry"
+ "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/weth9"
+)
+
+// Onchain state always derivable from an address book.
+// Offchain state always derivable from a list of nodeIds.
+// Note can translate this into Go struct needed for MCMS/Docs/UI.
+type CCIPOnChainState struct {
+ // Populated go bindings for the appropriate version for all contracts.
+ // We would hold 2 versions of each contract here. Once we upgrade we can phase out the old one.
+ // When generating bindings, make sure the package name corresponds to the version.
+ EvmOnRampsV160 map[uint64]*onramp.OnRamp
+ EvmOffRampsV160 map[uint64]*offramp.OffRamp
+ PriceRegistries map[uint64]*price_registry.PriceRegistry
+ ArmProxies map[uint64]*rmn_proxy_contract.RMNProxyContract
+ NonceManagers map[uint64]*nonce_manager.NonceManager
+ TokenAdminRegistries map[uint64]*token_admin_registry.TokenAdminRegistry
+ Routers map[uint64]*router.Router
+ Weth9s map[uint64]*weth9.WETH9
+ MockArms map[uint64]*mock_rmn_contract.MockRMNContract
+ // TODO: May need to support older link too
+ LinkTokens map[uint64]*burn_mint_erc677.BurnMintERC677
+ // Note we only expect one of these (on the home chain)
+ CapabilityRegistry map[uint64]*capabilities_registry.CapabilitiesRegistry
+ CCIPConfig map[uint64]*ccip_config.CCIPConfig
+ Mcms map[uint64]*owner_wrappers.ManyChainMultiSig
+ // TODO: remove once we have Address() on wrappers
+ McmsAddrs map[uint64]common.Address
+ Timelocks map[uint64]*owner_wrappers.RBACTimelock
+
+ // Test contracts
+ Receivers map[uint64]*maybe_revert_message_receiver.MaybeRevertMessageReceiver
+}
+
+type CCIPSnapShot struct {
+ Chains map[string]Chain `json:"chains"`
+}
+
+type Contract struct {
+ TypeAndVersion string `json:"typeAndVersion"`
+ Address common.Address `json:"address"`
+}
+
+type TokenAdminRegistryView struct {
+ Contract
+ Tokens []common.Address `json:"tokens"`
+}
+
+type NonceManagerView struct {
+ Contract
+ AuthorizedCallers []common.Address `json:"authorizedCallers"`
+}
+
+type Chain struct {
+ // TODO: this will have to be versioned for getting state during upgrades.
+ TokenAdminRegistry TokenAdminRegistryView `json:"tokenAdminRegistry"`
+ NonceManager NonceManagerView `json:"nonceManager"`
+}
+
+func (s CCIPOnChainState) Snapshot(chains []uint64) (CCIPSnapShot, error) {
+ snapshot := CCIPSnapShot{
+ Chains: make(map[string]Chain),
+ }
+ for _, chainSelector := range chains {
+ // TODO: Need a utility for this
+ chainid, err := chainsel.ChainIdFromSelector(chainSelector)
+ if err != nil {
+ return snapshot, err
+ }
+ chainName, err := chainsel.NameFromChainId(chainid)
+ if err != nil {
+ return snapshot, err
+ }
+ var c Chain
+ if ta, ok := s.TokenAdminRegistries[chainSelector]; ok {
+ tokens, err := ta.GetAllConfiguredTokens(nil, 0, 10)
+ if err != nil {
+ return snapshot, err
+ }
+ tv, err := ta.TypeAndVersion(nil)
+ if err != nil {
+ return snapshot, err
+ }
+ c.TokenAdminRegistry = TokenAdminRegistryView{
+ Contract: Contract{
+ TypeAndVersion: tv,
+ Address: ta.Address(),
+ },
+ Tokens: tokens,
+ }
+ }
+ if nm, ok := s.NonceManagers[chainSelector]; ok {
+ authorizedCallers, err := nm.GetAllAuthorizedCallers(nil)
+ if err != nil {
+ return snapshot, err
+ }
+ tv, err := nm.TypeAndVersion(nil)
+ if err != nil {
+ return snapshot, err
+ }
+ c.NonceManager = NonceManagerView{
+ Contract: Contract{
+ TypeAndVersion: tv,
+ Address: nm.Address(),
+ },
+ // TODO: these can be resolved using an address book
+ AuthorizedCallers: authorizedCallers,
+ }
+ }
+ snapshot.Chains[chainName] = c
+ }
+ return snapshot, nil
+}
+
+func SnapshotState(e deployment.Environment, ab deployment.AddressBook) (CCIPSnapShot, error) {
+ state, err := GenerateOnchainState(e, ab)
+ if err != nil {
+ return CCIPSnapShot{}, err
+ }
+ return state.Snapshot(e.AllChainSelectors())
+}
+
+func GenerateOnchainState(e deployment.Environment, ab deployment.AddressBook) (CCIPOnChainState, error) {
+ state := CCIPOnChainState{
+ EvmOnRampsV160: make(map[uint64]*onramp.OnRamp),
+ EvmOffRampsV160: make(map[uint64]*offramp.OffRamp),
+ PriceRegistries: make(map[uint64]*price_registry.PriceRegistry),
+ ArmProxies: make(map[uint64]*rmn_proxy_contract.RMNProxyContract),
+ NonceManagers: make(map[uint64]*nonce_manager.NonceManager),
+ TokenAdminRegistries: make(map[uint64]*token_admin_registry.TokenAdminRegistry),
+ Routers: make(map[uint64]*router.Router),
+ MockArms: make(map[uint64]*mock_rmn_contract.MockRMNContract),
+ LinkTokens: make(map[uint64]*burn_mint_erc677.BurnMintERC677),
+ Weth9s: make(map[uint64]*weth9.WETH9),
+ Mcms: make(map[uint64]*owner_wrappers.ManyChainMultiSig),
+ McmsAddrs: make(map[uint64]common.Address),
+ Timelocks: make(map[uint64]*owner_wrappers.RBACTimelock),
+ CapabilityRegistry: make(map[uint64]*capabilities_registry.CapabilitiesRegistry),
+ CCIPConfig: make(map[uint64]*ccip_config.CCIPConfig),
+ Receivers: make(map[uint64]*maybe_revert_message_receiver.MaybeRevertMessageReceiver),
+ }
+ // Get all the onchain state
+ addresses, err := ab.Addresses()
+ if err != nil {
+ return state, errors.Wrap(err, "could not get addresses")
+ }
+ for chainSelector, addresses := range addresses {
+ for address, tvStr := range addresses {
+ switch tvStr.String() {
+ case deployment.NewTypeAndVersion(RBACTimelock, deployment.Version1_0_0).String():
+ tl, err := owner_wrappers.NewRBACTimelock(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.Timelocks[chainSelector] = tl
+ case deployment.NewTypeAndVersion(ManyChainMultisig, deployment.Version1_0_0).String():
+ mcms, err := owner_wrappers.NewManyChainMultiSig(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.Mcms[chainSelector] = mcms
+ state.McmsAddrs[chainSelector] = common.HexToAddress(address)
+ case deployment.NewTypeAndVersion(CapabilitiesRegistry, deployment.Version1_0_0).String():
+ cr, err := capabilities_registry.NewCapabilitiesRegistry(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.CapabilityRegistry[chainSelector] = cr
+ case deployment.NewTypeAndVersion(OnRamp, deployment.Version1_6_0_dev).String():
+ onRamp, err := onramp.NewOnRamp(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.EvmOnRampsV160[chainSelector] = onRamp
+ case deployment.NewTypeAndVersion(OffRamp, deployment.Version1_6_0_dev).String():
+ offRamp, err := offramp.NewOffRamp(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.EvmOffRampsV160[chainSelector] = offRamp
+ case deployment.NewTypeAndVersion(ARMProxy, deployment.Version1_0_0).String():
+ armProxy, err := rmn_proxy_contract.NewRMNProxyContract(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.ArmProxies[chainSelector] = armProxy
+ case deployment.NewTypeAndVersion(MockARM, deployment.Version1_0_0).String():
+ mockARM, err := mock_rmn_contract.NewMockRMNContract(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.MockArms[chainSelector] = mockARM
+ case deployment.NewTypeAndVersion(WETH9, deployment.Version1_0_0).String():
+ weth9, err := weth9.NewWETH9(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.Weth9s[chainSelector] = weth9
+ case deployment.NewTypeAndVersion(NonceManager, deployment.Version1_6_0_dev).String():
+ nm, err := nonce_manager.NewNonceManager(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.NonceManagers[chainSelector] = nm
+ case deployment.NewTypeAndVersion(TokenAdminRegistry, deployment.Version1_5_0).String():
+ tm, err := token_admin_registry.NewTokenAdminRegistry(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.TokenAdminRegistries[chainSelector] = tm
+ case deployment.NewTypeAndVersion(Router, deployment.Version1_2_0).String():
+ r, err := router.NewRouter(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.Routers[chainSelector] = r
+ case deployment.NewTypeAndVersion(PriceRegistry, deployment.Version1_6_0_dev).String():
+ pr, err := price_registry.NewPriceRegistry(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.PriceRegistries[chainSelector] = pr
+ case deployment.NewTypeAndVersion(LinkToken, deployment.Version1_0_0).String():
+ lt, err := burn_mint_erc677.NewBurnMintERC677(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.LinkTokens[chainSelector] = lt
+ case deployment.NewTypeAndVersion(CCIPConfig, deployment.Version1_6_0_dev).String():
+ cc, err := ccip_config.NewCCIPConfig(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.CCIPConfig[chainSelector] = cc
+ case deployment.NewTypeAndVersion(CCIPReceiver, deployment.Version1_0_0).String():
+ mr, err := maybe_revert_message_receiver.NewMaybeRevertMessageReceiver(common.HexToAddress(address), e.Chains[chainSelector].Client)
+ if err != nil {
+ return state, err
+ }
+ state.Receivers[chainSelector] = mr
+ default:
+ return state, fmt.Errorf("unknown contract %s", tvStr)
+ }
+ }
+ }
+ return state, nil
+}
diff --git a/integration-tests/deployment/environment.go b/integration-tests/deployment/environment.go
new file mode 100644
index 00000000000..7d8fb6e6313
--- /dev/null
+++ b/integration-tests/deployment/environment.go
@@ -0,0 +1,195 @@
+package deployment
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "math/big"
+ "strconv"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/rpc"
+ chain_selectors "github.com/smartcontractkit/chain-selectors"
+ types2 "github.com/smartcontractkit/libocr/offchainreporting2/types"
+ types3 "github.com/smartcontractkit/libocr/offchainreporting2plus/types"
+
+ jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1"
+ nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1"
+ "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/p2pkey"
+
+ "github.com/smartcontractkit/chainlink-common/pkg/logger"
+)
+
+type OnchainClient interface {
+ // For EVM specifically we can use existing geth interface
+ // to abstract chain clients.
+ bind.ContractBackend
+}
+
+type OffchainClient interface {
+ // The job distributor grpc interface can be used to abstract offchain read/writes
+ jobv1.JobServiceClient
+ nodev1.NodeServiceClient
+}
+
+type Chain struct {
+ // Selectors used as canonical chain identifier.
+ Selector uint64
+ Client OnchainClient
+ // Note the Sign function can be abstract supporting a variety of key storage mechanisms (e.g. KMS etc).
+ DeployerKey *bind.TransactOpts
+ Confirm func(tx common.Hash) error
+}
+
+type Environment struct {
+ Name string
+ Chains map[uint64]Chain
+ Offchain OffchainClient
+ NodeIDs []string
+ Logger logger.Logger
+}
+
+func (e Environment) AllChainSelectors() []uint64 {
+ var selectors []uint64
+ for sel := range e.Chains {
+ selectors = append(selectors, sel)
+ }
+ return selectors
+}
+
+func ConfirmIfNoError(chain Chain, tx *types.Transaction, err error) error {
+ if err != nil {
+ //revive:disable
+ var d rpc.DataError
+ ok := errors.As(err, &d)
+ if ok {
+ return fmt.Errorf("got Data Error: %s", d.ErrorData())
+ }
+ return err
+ }
+ return chain.Confirm(tx.Hash())
+}
+
+func MaybeDataErr(err error) error {
+ //revive:disable
+ var d rpc.DataError
+ ok := errors.As(err, &d)
+ if ok {
+ return d
+ }
+ return err
+}
+
+func UBigInt(i uint64) *big.Int {
+ return new(big.Int).SetUint64(i)
+}
+
+func E18Mult(amount uint64) *big.Int {
+ return new(big.Int).Mul(UBigInt(amount), UBigInt(1e18))
+}
+
+type OCRConfig struct {
+ OffchainPublicKey types2.OffchainPublicKey
+ // For EVM-chains, this an *address*.
+ OnchainPublicKey types2.OnchainPublicKey
+ PeerID p2pkey.PeerID
+ TransmitAccount types2.Account
+ ConfigEncryptionPublicKey types3.ConfigEncryptionPublicKey
+ IsBootstrap bool
+ MultiAddr string // TODO: type
+}
+
+type Nodes []Node
+
+func (n Nodes) PeerIDs(chainSel uint64) [][32]byte {
+ var peerIDs [][32]byte
+ for _, node := range n {
+ cfg := node.SelToOCRConfig[chainSel]
+ // NOTE: Assume same peerID for all chains.
+ // Might make sense to change proto as peerID is 1-1 with node?
+ peerIDs = append(peerIDs, cfg.PeerID)
+ }
+ return peerIDs
+}
+
+func (n Nodes) BootstrapPeerIDs(chainSel uint64) [][32]byte {
+ var peerIDs [][32]byte
+ for _, node := range n {
+ cfg := node.SelToOCRConfig[chainSel]
+ if !cfg.IsBootstrap {
+ continue
+ }
+ peerIDs = append(peerIDs, cfg.PeerID)
+ }
+ return peerIDs
+}
+
+// OffchainPublicKey types.OffchainPublicKey
+// // For EVM-chains, this an *address*.
+// OnchainPublicKey types.OnchainPublicKey
+// PeerID string
+// TransmitAccount types.Account
+type Node struct {
+ SelToOCRConfig map[uint64]OCRConfig
+}
+
+func MustPeerIDFromString(s string) p2pkey.PeerID {
+ p := p2pkey.PeerID{}
+ if err := p.UnmarshalString(s); err != nil {
+ panic(err)
+ }
+ return p
+}
+
+// Gathers all the node info through JD required to be able to set
+// OCR config for example.
+func NodeInfo(nodeIDs []string, oc OffchainClient) (Nodes, error) {
+ var nodes []Node
+ for _, node := range nodeIDs {
+ // TODO: Filter should accept multiple nodes
+ nodeChainConfigs, err := oc.ListNodeChainConfigs(context.Background(), &nodev1.ListNodeChainConfigsRequest{Filter: &nodev1.ListNodeChainConfigsRequest_Filter{
+ NodeId: node,
+ }})
+ if err != nil {
+ return nil, err
+ }
+ selToOCRConfig := make(map[uint64]OCRConfig)
+ for _, chainConfig := range nodeChainConfigs.ChainConfigs {
+ if chainConfig.Chain.Type == nodev1.ChainType_CHAIN_TYPE_SOLANA {
+ // Note supported for CCIP yet.
+ continue
+ }
+ evmChainID, err := strconv.Atoi(chainConfig.Chain.Id)
+ if err != nil {
+ return nil, err
+ }
+ sel, err := chain_selectors.SelectorFromChainId(uint64(evmChainID))
+ if err != nil {
+ return nil, err
+ }
+ b := common.Hex2Bytes(chainConfig.Ocr2Config.OcrKeyBundle.OffchainPublicKey)
+ var opk types2.OffchainPublicKey
+ copy(opk[:], b)
+
+ b = common.Hex2Bytes(chainConfig.Ocr2Config.OcrKeyBundle.ConfigPublicKey)
+ var cpk types3.ConfigEncryptionPublicKey
+ copy(cpk[:], b)
+
+ selToOCRConfig[sel] = OCRConfig{
+ OffchainPublicKey: opk,
+ OnchainPublicKey: common.HexToAddress(chainConfig.Ocr2Config.OcrKeyBundle.OnchainSigningAddress).Bytes(),
+ PeerID: MustPeerIDFromString(chainConfig.Ocr2Config.P2PKeyBundle.PeerId),
+ TransmitAccount: types2.Account(chainConfig.AccountAddress),
+ ConfigEncryptionPublicKey: cpk,
+ IsBootstrap: chainConfig.Ocr2Config.IsBootstrap,
+ MultiAddr: chainConfig.Ocr2Config.Multiaddr,
+ }
+ }
+ nodes = append(nodes, Node{
+ SelToOCRConfig: selToOCRConfig,
+ })
+ }
+ return nodes, nil
+}
diff --git a/integration-tests/deployment/jd/job/v1/job.pb.go b/integration-tests/deployment/jd/job/v1/job.pb.go
new file mode 100644
index 00000000000..deaf1ccf309
--- /dev/null
+++ b/integration-tests/deployment/jd/job/v1/job.pb.go
@@ -0,0 +1,1767 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.29.0
+// protoc v4.25.3
+// source: job/v1/job.proto
+
+package v1
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// ProposalStatus defines the possible states of a job proposal.
+type ProposalStatus int32
+
+const (
+ ProposalStatus_PROPOSAL_STATUS_UNSPECIFIED ProposalStatus = 0
+ ProposalStatus_PROPOSAL_STATUS_PROPOSED ProposalStatus = 1 // Proposal has been made but not yet decided upon.
+ ProposalStatus_PROPOSAL_STATUS_APPROVED ProposalStatus = 2 // Proposal has been accepted.
+ ProposalStatus_PROPOSAL_STATUS_REJECTED ProposalStatus = 3 // Proposal has been rejected.
+ ProposalStatus_PROPOSAL_STATUS_CANCELLED ProposalStatus = 4 // Proposal has been cancelled.
+ ProposalStatus_PROPOSAL_STATUS_PENDING ProposalStatus = 5 // Proposal is pending review.
+ ProposalStatus_PROPOSAL_STATUS_REVOKED ProposalStatus = 6 // Proposal has been revoked after being proposed.
+)
+
+// Enum value maps for ProposalStatus.
+var (
+ ProposalStatus_name = map[int32]string{
+ 0: "PROPOSAL_STATUS_UNSPECIFIED",
+ 1: "PROPOSAL_STATUS_PROPOSED",
+ 2: "PROPOSAL_STATUS_APPROVED",
+ 3: "PROPOSAL_STATUS_REJECTED",
+ 4: "PROPOSAL_STATUS_CANCELLED",
+ 5: "PROPOSAL_STATUS_PENDING",
+ 6: "PROPOSAL_STATUS_REVOKED",
+ }
+ ProposalStatus_value = map[string]int32{
+ "PROPOSAL_STATUS_UNSPECIFIED": 0,
+ "PROPOSAL_STATUS_PROPOSED": 1,
+ "PROPOSAL_STATUS_APPROVED": 2,
+ "PROPOSAL_STATUS_REJECTED": 3,
+ "PROPOSAL_STATUS_CANCELLED": 4,
+ "PROPOSAL_STATUS_PENDING": 5,
+ "PROPOSAL_STATUS_REVOKED": 6,
+ }
+)
+
+func (x ProposalStatus) Enum() *ProposalStatus {
+ p := new(ProposalStatus)
+ *p = x
+ return p
+}
+
+func (x ProposalStatus) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ProposalStatus) Descriptor() protoreflect.EnumDescriptor {
+ return file_job_v1_job_proto_enumTypes[0].Descriptor()
+}
+
+func (ProposalStatus) Type() protoreflect.EnumType {
+ return &file_job_v1_job_proto_enumTypes[0]
+}
+
+func (x ProposalStatus) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ProposalStatus.Descriptor instead.
+func (ProposalStatus) EnumDescriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{0}
+}
+
+// ProposalDeliveryStatus defines the delivery status of the proposal to the node.
+type ProposalDeliveryStatus int32
+
+const (
+ ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_UNSPECIFIED ProposalDeliveryStatus = 0
+ ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_DELIVERED ProposalDeliveryStatus = 1 // Delivered to the node.
+ ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_ACKNOWLEDGED ProposalDeliveryStatus = 2 // Acknowledged by the node.
+ ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_FAILED ProposalDeliveryStatus = 3 // Delivery failed.
+)
+
+// Enum value maps for ProposalDeliveryStatus.
+var (
+ ProposalDeliveryStatus_name = map[int32]string{
+ 0: "PROPOSAL_DELIVERY_STATUS_UNSPECIFIED",
+ 1: "PROPOSAL_DELIVERY_STATUS_DELIVERED",
+ 2: "PROPOSAL_DELIVERY_STATUS_ACKNOWLEDGED",
+ 3: "PROPOSAL_DELIVERY_STATUS_FAILED",
+ }
+ ProposalDeliveryStatus_value = map[string]int32{
+ "PROPOSAL_DELIVERY_STATUS_UNSPECIFIED": 0,
+ "PROPOSAL_DELIVERY_STATUS_DELIVERED": 1,
+ "PROPOSAL_DELIVERY_STATUS_ACKNOWLEDGED": 2,
+ "PROPOSAL_DELIVERY_STATUS_FAILED": 3,
+ }
+)
+
+func (x ProposalDeliveryStatus) Enum() *ProposalDeliveryStatus {
+ p := new(ProposalDeliveryStatus)
+ *p = x
+ return p
+}
+
+func (x ProposalDeliveryStatus) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ProposalDeliveryStatus) Descriptor() protoreflect.EnumDescriptor {
+ return file_job_v1_job_proto_enumTypes[1].Descriptor()
+}
+
+func (ProposalDeliveryStatus) Type() protoreflect.EnumType {
+ return &file_job_v1_job_proto_enumTypes[1]
+}
+
+func (x ProposalDeliveryStatus) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ProposalDeliveryStatus.Descriptor instead.
+func (ProposalDeliveryStatus) EnumDescriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{1}
+}
+
+// Job represents the structured data of a job within the system.
+type Job struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the job.
+ Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` // Universally unique identifier for the job.
+ NodeId string `protobuf:"bytes,3,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` // ID of the node associated with this job.
+ ProposalIds []string `protobuf:"bytes,4,rep,name=proposal_ids,json=proposalIds,proto3" json:"proposal_ids,omitempty"` // List of proposal IDs associated with this job.
+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Timestamp when the job was created.
+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Timestamp when the job was last updated.
+ DeletedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` // Timestamp when the job was deleted, if applicable.
+}
+
+func (x *Job) Reset() {
+ *x = Job{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Job) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Job) ProtoMessage() {}
+
+func (x *Job) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Job.ProtoReflect.Descriptor instead.
+func (*Job) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Job) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Job) GetUuid() string {
+ if x != nil {
+ return x.Uuid
+ }
+ return ""
+}
+
+func (x *Job) GetNodeId() string {
+ if x != nil {
+ return x.NodeId
+ }
+ return ""
+}
+
+func (x *Job) GetProposalIds() []string {
+ if x != nil {
+ return x.ProposalIds
+ }
+ return nil
+}
+
+func (x *Job) GetCreatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreatedAt
+ }
+ return nil
+}
+
+func (x *Job) GetUpdatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.UpdatedAt
+ }
+ return nil
+}
+
+func (x *Job) GetDeletedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.DeletedAt
+ }
+ return nil
+}
+
+// Proposal represents a job proposal.
+type Proposal struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the proposal.
+ Version int64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` // Version number of the proposal.
+ Status ProposalStatus `protobuf:"varint,3,opt,name=status,proto3,enum=api.job.v1.ProposalStatus" json:"status,omitempty"` // Current status of the proposal.
+ DeliveryStatus ProposalDeliveryStatus `protobuf:"varint,4,opt,name=delivery_status,json=deliveryStatus,proto3,enum=api.job.v1.ProposalDeliveryStatus" json:"delivery_status,omitempty"` // Delivery status of the proposal.
+ Spec string `protobuf:"bytes,5,opt,name=spec,proto3" json:"spec,omitempty"` // Specification of the job proposed.
+ JobId string `protobuf:"bytes,6,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` // ID of the job associated with this proposal.
+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Timestamp when the proposal was created.
+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Timestamp when the proposal was last updated.
+ AckedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=acked_at,json=ackedAt,proto3,oneof" json:"acked_at,omitempty"` // Timestamp when the proposal was acknowledged.
+ ResponseReceivedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=response_received_at,json=responseReceivedAt,proto3,oneof" json:"response_received_at,omitempty"` // Timestamp when a response was received.
+}
+
+func (x *Proposal) Reset() {
+ *x = Proposal{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Proposal) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Proposal) ProtoMessage() {}
+
+func (x *Proposal) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Proposal.ProtoReflect.Descriptor instead.
+func (*Proposal) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Proposal) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Proposal) GetVersion() int64 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+func (x *Proposal) GetStatus() ProposalStatus {
+ if x != nil {
+ return x.Status
+ }
+ return ProposalStatus_PROPOSAL_STATUS_UNSPECIFIED
+}
+
+func (x *Proposal) GetDeliveryStatus() ProposalDeliveryStatus {
+ if x != nil {
+ return x.DeliveryStatus
+ }
+ return ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_UNSPECIFIED
+}
+
+func (x *Proposal) GetSpec() string {
+ if x != nil {
+ return x.Spec
+ }
+ return ""
+}
+
+func (x *Proposal) GetJobId() string {
+ if x != nil {
+ return x.JobId
+ }
+ return ""
+}
+
+func (x *Proposal) GetCreatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreatedAt
+ }
+ return nil
+}
+
+func (x *Proposal) GetUpdatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.UpdatedAt
+ }
+ return nil
+}
+
+func (x *Proposal) GetAckedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.AckedAt
+ }
+ return nil
+}
+
+func (x *Proposal) GetResponseReceivedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ResponseReceivedAt
+ }
+ return nil
+}
+
+// GetJobRequest specifies the criteria for retrieving a job.
+type GetJobRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to IdOneof:
+ //
+ // *GetJobRequest_Id
+ // *GetJobRequest_Uuid
+ IdOneof isGetJobRequest_IdOneof `protobuf_oneof:"id_oneof"`
+}
+
+func (x *GetJobRequest) Reset() {
+ *x = GetJobRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetJobRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetJobRequest) ProtoMessage() {}
+
+func (x *GetJobRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetJobRequest.ProtoReflect.Descriptor instead.
+func (*GetJobRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{2}
+}
+
+func (m *GetJobRequest) GetIdOneof() isGetJobRequest_IdOneof {
+ if m != nil {
+ return m.IdOneof
+ }
+ return nil
+}
+
+func (x *GetJobRequest) GetId() string {
+ if x, ok := x.GetIdOneof().(*GetJobRequest_Id); ok {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *GetJobRequest) GetUuid() string {
+ if x, ok := x.GetIdOneof().(*GetJobRequest_Uuid); ok {
+ return x.Uuid
+ }
+ return ""
+}
+
+type isGetJobRequest_IdOneof interface {
+ isGetJobRequest_IdOneof()
+}
+
+type GetJobRequest_Id struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the job.
+}
+
+type GetJobRequest_Uuid struct {
+ Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the job.
+}
+
+func (*GetJobRequest_Id) isGetJobRequest_IdOneof() {}
+
+func (*GetJobRequest_Uuid) isGetJobRequest_IdOneof() {}
+
+// GetJobResponse contains the job details.
+type GetJobResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` // Details of the retrieved job.
+}
+
+func (x *GetJobResponse) Reset() {
+ *x = GetJobResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetJobResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetJobResponse) ProtoMessage() {}
+
+func (x *GetJobResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetJobResponse.ProtoReflect.Descriptor instead.
+func (*GetJobResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GetJobResponse) GetJob() *Job {
+ if x != nil {
+ return x.Job
+ }
+ return nil
+}
+
+// GetProposalRequest specifies the criteria for retrieving a proposal.
+type GetProposalRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the proposal to retrieve.
+}
+
+func (x *GetProposalRequest) Reset() {
+ *x = GetProposalRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetProposalRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetProposalRequest) ProtoMessage() {}
+
+func (x *GetProposalRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetProposalRequest.ProtoReflect.Descriptor instead.
+func (*GetProposalRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GetProposalRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+// GetProposalResponse contains the proposal details.
+type GetProposalResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Proposal *Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"` // Details of the retrieved proposal.
+}
+
+func (x *GetProposalResponse) Reset() {
+ *x = GetProposalResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetProposalResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetProposalResponse) ProtoMessage() {}
+
+func (x *GetProposalResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetProposalResponse.ProtoReflect.Descriptor instead.
+func (*GetProposalResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GetProposalResponse) GetProposal() *Proposal {
+ if x != nil {
+ return x.Proposal
+ }
+ return nil
+}
+
+// ListJobsRequest specifies filters for listing jobs.
+type ListJobsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Filter *ListJobsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` // Filters applied to the job listing.
+}
+
+func (x *ListJobsRequest) Reset() {
+ *x = ListJobsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListJobsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListJobsRequest) ProtoMessage() {}
+
+func (x *ListJobsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListJobsRequest.ProtoReflect.Descriptor instead.
+func (*ListJobsRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *ListJobsRequest) GetFilter() *ListJobsRequest_Filter {
+ if x != nil {
+ return x.Filter
+ }
+ return nil
+}
+
+// ListJobsResponse contains a list of jobs that match the filters.
+type ListJobsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Jobs []*Job `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` // List of jobs.
+}
+
+func (x *ListJobsResponse) Reset() {
+ *x = ListJobsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListJobsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListJobsResponse) ProtoMessage() {}
+
+func (x *ListJobsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListJobsResponse.ProtoReflect.Descriptor instead.
+func (*ListJobsResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *ListJobsResponse) GetJobs() []*Job {
+ if x != nil {
+ return x.Jobs
+ }
+ return nil
+}
+
+// ListProposalsRequest specifies filters for listing proposals.
+type ListProposalsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Filter *ListProposalsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` // Filters applied to the proposal listing.
+}
+
+func (x *ListProposalsRequest) Reset() {
+ *x = ListProposalsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListProposalsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListProposalsRequest) ProtoMessage() {}
+
+func (x *ListProposalsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListProposalsRequest.ProtoReflect.Descriptor instead.
+func (*ListProposalsRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ListProposalsRequest) GetFilter() *ListProposalsRequest_Filter {
+ if x != nil {
+ return x.Filter
+ }
+ return nil
+}
+
+// ListProposalsResponse contains a list of proposals that match the filters.
+type ListProposalsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Proposals []*Proposal `protobuf:"bytes,1,rep,name=proposals,proto3" json:"proposals,omitempty"` // List of proposals.
+}
+
+func (x *ListProposalsResponse) Reset() {
+ *x = ListProposalsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListProposalsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListProposalsResponse) ProtoMessage() {}
+
+func (x *ListProposalsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListProposalsResponse.ProtoReflect.Descriptor instead.
+func (*ListProposalsResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *ListProposalsResponse) GetProposals() []*Proposal {
+ if x != nil {
+ return x.Proposals
+ }
+ return nil
+}
+
+// ProposeJobRequest contains the information needed to submit a new job proposal.
+type ProposeJobRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` // ID of the node to which the job is proposed.
+ Spec string `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` // Specification of the job being proposed.
+}
+
+func (x *ProposeJobRequest) Reset() {
+ *x = ProposeJobRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ProposeJobRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProposeJobRequest) ProtoMessage() {}
+
+func (x *ProposeJobRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[10]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ProposeJobRequest.ProtoReflect.Descriptor instead.
+func (*ProposeJobRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *ProposeJobRequest) GetNodeId() string {
+ if x != nil {
+ return x.NodeId
+ }
+ return ""
+}
+
+func (x *ProposeJobRequest) GetSpec() string {
+ if x != nil {
+ return x.Spec
+ }
+ return ""
+}
+
+// ProposeJobResponse returns the newly created proposal.
+type ProposeJobResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Proposal *Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"` // Details of the newly created proposal.
+}
+
+func (x *ProposeJobResponse) Reset() {
+ *x = ProposeJobResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ProposeJobResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProposeJobResponse) ProtoMessage() {}
+
+func (x *ProposeJobResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ProposeJobResponse.ProtoReflect.Descriptor instead.
+func (*ProposeJobResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *ProposeJobResponse) GetProposal() *Proposal {
+ if x != nil {
+ return x.Proposal
+ }
+ return nil
+}
+
+// RevokeJobRequest specifies the criteria for revoking a job proposal.
+type RevokeJobRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to IdOneof:
+ //
+ // *RevokeJobRequest_Id
+ // *RevokeJobRequest_Uuid
+ IdOneof isRevokeJobRequest_IdOneof `protobuf_oneof:"id_oneof"`
+}
+
+func (x *RevokeJobRequest) Reset() {
+ *x = RevokeJobRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RevokeJobRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RevokeJobRequest) ProtoMessage() {}
+
+func (x *RevokeJobRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[12]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RevokeJobRequest.ProtoReflect.Descriptor instead.
+func (*RevokeJobRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{12}
+}
+
+func (m *RevokeJobRequest) GetIdOneof() isRevokeJobRequest_IdOneof {
+ if m != nil {
+ return m.IdOneof
+ }
+ return nil
+}
+
+func (x *RevokeJobRequest) GetId() string {
+ if x, ok := x.GetIdOneof().(*RevokeJobRequest_Id); ok {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *RevokeJobRequest) GetUuid() string {
+ if x, ok := x.GetIdOneof().(*RevokeJobRequest_Uuid); ok {
+ return x.Uuid
+ }
+ return ""
+}
+
+type isRevokeJobRequest_IdOneof interface {
+ isRevokeJobRequest_IdOneof()
+}
+
+type RevokeJobRequest_Id struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the proposal to revoke.
+}
+
+type RevokeJobRequest_Uuid struct {
+ Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the proposal to revoke.
+}
+
+func (*RevokeJobRequest_Id) isRevokeJobRequest_IdOneof() {}
+
+func (*RevokeJobRequest_Uuid) isRevokeJobRequest_IdOneof() {}
+
+// RevokeJobResponse returns the revoked proposal.
+type RevokeJobResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Proposal *Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"` // Details of the revoked proposal.
+}
+
+func (x *RevokeJobResponse) Reset() {
+ *x = RevokeJobResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RevokeJobResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RevokeJobResponse) ProtoMessage() {}
+
+func (x *RevokeJobResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RevokeJobResponse.ProtoReflect.Descriptor instead.
+func (*RevokeJobResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *RevokeJobResponse) GetProposal() *Proposal {
+ if x != nil {
+ return x.Proposal
+ }
+ return nil
+}
+
+// DeleteJobRequest specifies the criteria for deleting a job.
+type DeleteJobRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Types that are assignable to IdOneof:
+ //
+ // *DeleteJobRequest_Id
+ // *DeleteJobRequest_Uuid
+ IdOneof isDeleteJobRequest_IdOneof `protobuf_oneof:"id_oneof"`
+}
+
+func (x *DeleteJobRequest) Reset() {
+ *x = DeleteJobRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteJobRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteJobRequest) ProtoMessage() {}
+
+func (x *DeleteJobRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteJobRequest.ProtoReflect.Descriptor instead.
+func (*DeleteJobRequest) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{14}
+}
+
+func (m *DeleteJobRequest) GetIdOneof() isDeleteJobRequest_IdOneof {
+ if m != nil {
+ return m.IdOneof
+ }
+ return nil
+}
+
+func (x *DeleteJobRequest) GetId() string {
+ if x, ok := x.GetIdOneof().(*DeleteJobRequest_Id); ok {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *DeleteJobRequest) GetUuid() string {
+ if x, ok := x.GetIdOneof().(*DeleteJobRequest_Uuid); ok {
+ return x.Uuid
+ }
+ return ""
+}
+
+type isDeleteJobRequest_IdOneof interface {
+ isDeleteJobRequest_IdOneof()
+}
+
+type DeleteJobRequest_Id struct {
+ Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the job to delete.
+}
+
+type DeleteJobRequest_Uuid struct {
+ Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the job to delete.
+}
+
+func (*DeleteJobRequest_Id) isDeleteJobRequest_IdOneof() {}
+
+func (*DeleteJobRequest_Uuid) isDeleteJobRequest_IdOneof() {}
+
+// DeleteJobResponse returns details of the deleted job.
+type DeleteJobResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` // Details of the deleted job.
+}
+
+func (x *DeleteJobResponse) Reset() {
+ *x = DeleteJobResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DeleteJobResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteJobResponse) ProtoMessage() {}
+
+func (x *DeleteJobResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[15]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteJobResponse.ProtoReflect.Descriptor instead.
+func (*DeleteJobResponse) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *DeleteJobResponse) GetJob() *Job {
+ if x != nil {
+ return x.Job
+ }
+ return nil
+}
+
+type ListJobsRequest_Filter struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` // Filter by job IDs.
+ NodeIds []string `protobuf:"bytes,2,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` // Filter by node IDs.
+}
+
+func (x *ListJobsRequest_Filter) Reset() {
+ *x = ListJobsRequest_Filter{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListJobsRequest_Filter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListJobsRequest_Filter) ProtoMessage() {}
+
+func (x *ListJobsRequest_Filter) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[16]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListJobsRequest_Filter.ProtoReflect.Descriptor instead.
+func (*ListJobsRequest_Filter) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{6, 0}
+}
+
+func (x *ListJobsRequest_Filter) GetIds() []string {
+ if x != nil {
+ return x.Ids
+ }
+ return nil
+}
+
+func (x *ListJobsRequest_Filter) GetNodeIds() []string {
+ if x != nil {
+ return x.NodeIds
+ }
+ return nil
+}
+
+type ListProposalsRequest_Filter struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` // Filter by proposal IDs.
+ JobIds []string `protobuf:"bytes,2,rep,name=job_ids,json=jobIds,proto3" json:"job_ids,omitempty"` // Filter by job IDs.
+}
+
+func (x *ListProposalsRequest_Filter) Reset() {
+ *x = ListProposalsRequest_Filter{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_job_v1_job_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListProposalsRequest_Filter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListProposalsRequest_Filter) ProtoMessage() {}
+
+func (x *ListProposalsRequest_Filter) ProtoReflect() protoreflect.Message {
+ mi := &file_job_v1_job_proto_msgTypes[17]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListProposalsRequest_Filter.ProtoReflect.Descriptor instead.
+func (*ListProposalsRequest_Filter) Descriptor() ([]byte, []int) {
+ return file_job_v1_job_proto_rawDescGZIP(), []int{8, 0}
+}
+
+func (x *ListProposalsRequest_Filter) GetIds() []string {
+ if x != nil {
+ return x.Ids
+ }
+ return nil
+}
+
+func (x *ListProposalsRequest_Filter) GetJobIds() []string {
+ if x != nil {
+ return x.JobIds
+ }
+ return nil
+}
+
+var File_job_v1_job_proto protoreflect.FileDescriptor
+
+var file_job_v1_job_proto_rawDesc = []byte{
+ 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x12, 0x0a, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1f,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
+ 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
+ 0x96, 0x02, 0x0a, 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e,
+ 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f,
+ 0x64, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c,
+ 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70,
+ 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+ 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+ 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a,
+ 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x64,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x8b, 0x04, 0x0a, 0x08, 0x50, 0x72, 0x6f,
+ 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+ 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f,
+ 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x12, 0x4b, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x5f,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x61,
+ 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
+ 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+ 0x12, 0x12, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+ 0x73, 0x70, 0x65, 0x63, 0x12, 0x15, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41,
+ 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48,
+ 0x00, 0x52, 0x07, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a,
+ 0x14, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
+ 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x12, 0x72, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01,
+ 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x42, 0x17, 0x0a,
+ 0x15, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0x43, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69,
+ 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x42,
+ 0x0a, 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x33, 0x0a, 0x0e, 0x47,
+ 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a,
+ 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62,
+ 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f,
+ 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a,
+ 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f,
+ 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x22,
+ 0x84, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a,
+ 0x35, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e,
+ 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6e,
+ 0x6f, 0x64, 0x65, 0x49, 0x64, 0x73, 0x22, 0x37, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f,
+ 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x6a, 0x6f,
+ 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a,
+ 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22,
+ 0x8c, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a,
+ 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
+ 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65,
+ 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x33, 0x0a, 0x06, 0x46, 0x69, 0x6c,
+ 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x73, 0x22, 0x4b,
+ 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x70, 0x6f,
+ 0x73, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c,
+ 0x52, 0x09, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x22, 0x40, 0x0a, 0x11, 0x50,
+ 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x70, 0x65,
+ 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x46, 0x0a,
+ 0x12, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e,
+ 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f,
+ 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x22, 0x46, 0x0a, 0x10, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a,
+ 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x04, 0x75,
+ 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69,
+ 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x45, 0x0a,
+ 0x11, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76,
+ 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70,
+ 0x6f, 0x73, 0x61, 0x6c, 0x22, 0x46, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f,
+ 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75,
+ 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64,
+ 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x36, 0x0a, 0x11,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x21, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52,
+ 0x03, 0x6a, 0x6f, 0x62, 0x2a, 0xe4, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61,
+ 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x50, 0x4f,
+ 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
+ 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50,
+ 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x50,
+ 0x4f, 0x53, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53,
+ 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56,
+ 0x45, 0x44, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c,
+ 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44,
+ 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53,
+ 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10,
+ 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54,
+ 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1b,
+ 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55,
+ 0x53, 0x5f, 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0x06, 0x2a, 0xba, 0x01, 0x0a, 0x16,
+ 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79,
+ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53,
+ 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54,
+ 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
+ 0x12, 0x26, 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c,
+ 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x4c,
+ 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x50,
+ 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54,
+ 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x4b, 0x4e, 0x4f, 0x57, 0x4c, 0x45, 0x44, 0x47, 0x45,
+ 0x44, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f,
+ 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f,
+ 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xa9, 0x04, 0x0a, 0x0a, 0x4a, 0x6f, 0x62,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f,
+ 0x62, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47,
+ 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61,
+ 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0b, 0x47, 0x65,
+ 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
+ 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
+ 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x08,
+ 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a,
+ 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e,
+ 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f,
+ 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62,
+ 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a,
+ 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
+ 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a,
+ 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1d, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65,
+ 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a,
+ 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09,
+ 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f,
+ 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e,
+ 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31,
+ 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x42, 0x08, 0x5a, 0x06, 0x6a, 0x6f, 0x62, 0x2f, 0x76, 0x31, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_job_v1_job_proto_rawDescOnce sync.Once
+ file_job_v1_job_proto_rawDescData = file_job_v1_job_proto_rawDesc
+)
+
+func file_job_v1_job_proto_rawDescGZIP() []byte {
+ file_job_v1_job_proto_rawDescOnce.Do(func() {
+ file_job_v1_job_proto_rawDescData = protoimpl.X.CompressGZIP(file_job_v1_job_proto_rawDescData)
+ })
+ return file_job_v1_job_proto_rawDescData
+}
+
+var file_job_v1_job_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_job_v1_job_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
+var file_job_v1_job_proto_goTypes = []interface{}{
+ (ProposalStatus)(0), // 0: api.job.v1.ProposalStatus
+ (ProposalDeliveryStatus)(0), // 1: api.job.v1.ProposalDeliveryStatus
+ (*Job)(nil), // 2: api.job.v1.Job
+ (*Proposal)(nil), // 3: api.job.v1.Proposal
+ (*GetJobRequest)(nil), // 4: api.job.v1.GetJobRequest
+ (*GetJobResponse)(nil), // 5: api.job.v1.GetJobResponse
+ (*GetProposalRequest)(nil), // 6: api.job.v1.GetProposalRequest
+ (*GetProposalResponse)(nil), // 7: api.job.v1.GetProposalResponse
+ (*ListJobsRequest)(nil), // 8: api.job.v1.ListJobsRequest
+ (*ListJobsResponse)(nil), // 9: api.job.v1.ListJobsResponse
+ (*ListProposalsRequest)(nil), // 10: api.job.v1.ListProposalsRequest
+ (*ListProposalsResponse)(nil), // 11: api.job.v1.ListProposalsResponse
+ (*ProposeJobRequest)(nil), // 12: api.job.v1.ProposeJobRequest
+ (*ProposeJobResponse)(nil), // 13: api.job.v1.ProposeJobResponse
+ (*RevokeJobRequest)(nil), // 14: api.job.v1.RevokeJobRequest
+ (*RevokeJobResponse)(nil), // 15: api.job.v1.RevokeJobResponse
+ (*DeleteJobRequest)(nil), // 16: api.job.v1.DeleteJobRequest
+ (*DeleteJobResponse)(nil), // 17: api.job.v1.DeleteJobResponse
+ (*ListJobsRequest_Filter)(nil), // 18: api.job.v1.ListJobsRequest.Filter
+ (*ListProposalsRequest_Filter)(nil), // 19: api.job.v1.ListProposalsRequest.Filter
+ (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp
+}
+var file_job_v1_job_proto_depIdxs = []int32{
+ 20, // 0: api.job.v1.Job.created_at:type_name -> google.protobuf.Timestamp
+ 20, // 1: api.job.v1.Job.updated_at:type_name -> google.protobuf.Timestamp
+ 20, // 2: api.job.v1.Job.deleted_at:type_name -> google.protobuf.Timestamp
+ 0, // 3: api.job.v1.Proposal.status:type_name -> api.job.v1.ProposalStatus
+ 1, // 4: api.job.v1.Proposal.delivery_status:type_name -> api.job.v1.ProposalDeliveryStatus
+ 20, // 5: api.job.v1.Proposal.created_at:type_name -> google.protobuf.Timestamp
+ 20, // 6: api.job.v1.Proposal.updated_at:type_name -> google.protobuf.Timestamp
+ 20, // 7: api.job.v1.Proposal.acked_at:type_name -> google.protobuf.Timestamp
+ 20, // 8: api.job.v1.Proposal.response_received_at:type_name -> google.protobuf.Timestamp
+ 2, // 9: api.job.v1.GetJobResponse.job:type_name -> api.job.v1.Job
+ 3, // 10: api.job.v1.GetProposalResponse.proposal:type_name -> api.job.v1.Proposal
+ 18, // 11: api.job.v1.ListJobsRequest.filter:type_name -> api.job.v1.ListJobsRequest.Filter
+ 2, // 12: api.job.v1.ListJobsResponse.jobs:type_name -> api.job.v1.Job
+ 19, // 13: api.job.v1.ListProposalsRequest.filter:type_name -> api.job.v1.ListProposalsRequest.Filter
+ 3, // 14: api.job.v1.ListProposalsResponse.proposals:type_name -> api.job.v1.Proposal
+ 3, // 15: api.job.v1.ProposeJobResponse.proposal:type_name -> api.job.v1.Proposal
+ 3, // 16: api.job.v1.RevokeJobResponse.proposal:type_name -> api.job.v1.Proposal
+ 2, // 17: api.job.v1.DeleteJobResponse.job:type_name -> api.job.v1.Job
+ 4, // 18: api.job.v1.JobService.GetJob:input_type -> api.job.v1.GetJobRequest
+ 6, // 19: api.job.v1.JobService.GetProposal:input_type -> api.job.v1.GetProposalRequest
+ 8, // 20: api.job.v1.JobService.ListJobs:input_type -> api.job.v1.ListJobsRequest
+ 10, // 21: api.job.v1.JobService.ListProposals:input_type -> api.job.v1.ListProposalsRequest
+ 12, // 22: api.job.v1.JobService.ProposeJob:input_type -> api.job.v1.ProposeJobRequest
+ 14, // 23: api.job.v1.JobService.RevokeJob:input_type -> api.job.v1.RevokeJobRequest
+ 16, // 24: api.job.v1.JobService.DeleteJob:input_type -> api.job.v1.DeleteJobRequest
+ 5, // 25: api.job.v1.JobService.GetJob:output_type -> api.job.v1.GetJobResponse
+ 7, // 26: api.job.v1.JobService.GetProposal:output_type -> api.job.v1.GetProposalResponse
+ 9, // 27: api.job.v1.JobService.ListJobs:output_type -> api.job.v1.ListJobsResponse
+ 11, // 28: api.job.v1.JobService.ListProposals:output_type -> api.job.v1.ListProposalsResponse
+ 13, // 29: api.job.v1.JobService.ProposeJob:output_type -> api.job.v1.ProposeJobResponse
+ 15, // 30: api.job.v1.JobService.RevokeJob:output_type -> api.job.v1.RevokeJobResponse
+ 17, // 31: api.job.v1.JobService.DeleteJob:output_type -> api.job.v1.DeleteJobResponse
+ 25, // [25:32] is the sub-list for method output_type
+ 18, // [18:25] is the sub-list for method input_type
+ 18, // [18:18] is the sub-list for extension type_name
+ 18, // [18:18] is the sub-list for extension extendee
+ 0, // [0:18] is the sub-list for field type_name
+}
+
+func init() { file_job_v1_job_proto_init() }
+func file_job_v1_job_proto_init() {
+ if File_job_v1_job_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_job_v1_job_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Job); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Proposal); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetJobRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetJobResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetProposalRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetProposalResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListJobsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListJobsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListProposalsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListProposalsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ProposeJobRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ProposeJobResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RevokeJobRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RevokeJobResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteJobRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DeleteJobResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListJobsRequest_Filter); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_job_v1_job_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListProposalsRequest_Filter); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ file_job_v1_job_proto_msgTypes[1].OneofWrappers = []interface{}{}
+ file_job_v1_job_proto_msgTypes[2].OneofWrappers = []interface{}{
+ (*GetJobRequest_Id)(nil),
+ (*GetJobRequest_Uuid)(nil),
+ }
+ file_job_v1_job_proto_msgTypes[12].OneofWrappers = []interface{}{
+ (*RevokeJobRequest_Id)(nil),
+ (*RevokeJobRequest_Uuid)(nil),
+ }
+ file_job_v1_job_proto_msgTypes[14].OneofWrappers = []interface{}{
+ (*DeleteJobRequest_Id)(nil),
+ (*DeleteJobRequest_Uuid)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_job_v1_job_proto_rawDesc,
+ NumEnums: 2,
+ NumMessages: 18,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_job_v1_job_proto_goTypes,
+ DependencyIndexes: file_job_v1_job_proto_depIdxs,
+ EnumInfos: file_job_v1_job_proto_enumTypes,
+ MessageInfos: file_job_v1_job_proto_msgTypes,
+ }.Build()
+ File_job_v1_job_proto = out.File
+ file_job_v1_job_proto_rawDesc = nil
+ file_job_v1_job_proto_goTypes = nil
+ file_job_v1_job_proto_depIdxs = nil
+}
diff --git a/integration-tests/deployment/jd/job/v1/job_grpc.pb.go b/integration-tests/deployment/jd/job/v1/job_grpc.pb.go
new file mode 100644
index 00000000000..9b9207c0201
--- /dev/null
+++ b/integration-tests/deployment/jd/job/v1/job_grpc.pb.go
@@ -0,0 +1,345 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v4.25.3
+// source: job/v1/job.proto
+
+package v1
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ JobService_GetJob_FullMethodName = "/api.job.v1.JobService/GetJob"
+ JobService_GetProposal_FullMethodName = "/api.job.v1.JobService/GetProposal"
+ JobService_ListJobs_FullMethodName = "/api.job.v1.JobService/ListJobs"
+ JobService_ListProposals_FullMethodName = "/api.job.v1.JobService/ListProposals"
+ JobService_ProposeJob_FullMethodName = "/api.job.v1.JobService/ProposeJob"
+ JobService_RevokeJob_FullMethodName = "/api.job.v1.JobService/RevokeJob"
+ JobService_DeleteJob_FullMethodName = "/api.job.v1.JobService/DeleteJob"
+)
+
+// JobServiceClient is the client API for JobService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type JobServiceClient interface {
+ // GetJob retrieves the details of a specific job by its ID or UUID.
+ GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*GetJobResponse, error)
+ // GetProposal retrieves the details of a specific proposal by its ID.
+ GetProposal(ctx context.Context, in *GetProposalRequest, opts ...grpc.CallOption) (*GetProposalResponse, error)
+ // ListJobs returns a list of jobs, optionally filtered by IDs or node IDs.
+ ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error)
+ // ListProposals returns a list of proposals, optionally filtered by proposal or job IDs.
+ ListProposals(ctx context.Context, in *ListProposalsRequest, opts ...grpc.CallOption) (*ListProposalsResponse, error)
+ // ProposeJob submits a new job proposal to a node.
+ ProposeJob(ctx context.Context, in *ProposeJobRequest, opts ...grpc.CallOption) (*ProposeJobResponse, error)
+ // RevokeJob revokes an existing job proposal.
+ RevokeJob(ctx context.Context, in *RevokeJobRequest, opts ...grpc.CallOption) (*RevokeJobResponse, error)
+ // DeleteJob deletes a job from the system.
+ DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*DeleteJobResponse, error)
+}
+
+type jobServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewJobServiceClient(cc grpc.ClientConnInterface) JobServiceClient {
+ return &jobServiceClient{cc}
+}
+
+func (c *jobServiceClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*GetJobResponse, error) {
+ out := new(GetJobResponse)
+ err := c.cc.Invoke(ctx, JobService_GetJob_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *jobServiceClient) GetProposal(ctx context.Context, in *GetProposalRequest, opts ...grpc.CallOption) (*GetProposalResponse, error) {
+ out := new(GetProposalResponse)
+ err := c.cc.Invoke(ctx, JobService_GetProposal_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) {
+ out := new(ListJobsResponse)
+ err := c.cc.Invoke(ctx, JobService_ListJobs_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *jobServiceClient) ListProposals(ctx context.Context, in *ListProposalsRequest, opts ...grpc.CallOption) (*ListProposalsResponse, error) {
+ out := new(ListProposalsResponse)
+ err := c.cc.Invoke(ctx, JobService_ListProposals_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *jobServiceClient) ProposeJob(ctx context.Context, in *ProposeJobRequest, opts ...grpc.CallOption) (*ProposeJobResponse, error) {
+ out := new(ProposeJobResponse)
+ err := c.cc.Invoke(ctx, JobService_ProposeJob_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *jobServiceClient) RevokeJob(ctx context.Context, in *RevokeJobRequest, opts ...grpc.CallOption) (*RevokeJobResponse, error) {
+ out := new(RevokeJobResponse)
+ err := c.cc.Invoke(ctx, JobService_RevokeJob_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *jobServiceClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*DeleteJobResponse, error) {
+ out := new(DeleteJobResponse)
+ err := c.cc.Invoke(ctx, JobService_DeleteJob_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// JobServiceServer is the server API for JobService service.
+// All implementations must embed UnimplementedJobServiceServer
+// for forward compatibility
+type JobServiceServer interface {
+ // GetJob retrieves the details of a specific job by its ID or UUID.
+ GetJob(context.Context, *GetJobRequest) (*GetJobResponse, error)
+ // GetProposal retrieves the details of a specific proposal by its ID.
+ GetProposal(context.Context, *GetProposalRequest) (*GetProposalResponse, error)
+ // ListJobs returns a list of jobs, optionally filtered by IDs or node IDs.
+ ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error)
+ // ListProposals returns a list of proposals, optionally filtered by proposal or job IDs.
+ ListProposals(context.Context, *ListProposalsRequest) (*ListProposalsResponse, error)
+ // ProposeJob submits a new job proposal to a node.
+ ProposeJob(context.Context, *ProposeJobRequest) (*ProposeJobResponse, error)
+ // RevokeJob revokes an existing job proposal.
+ RevokeJob(context.Context, *RevokeJobRequest) (*RevokeJobResponse, error)
+ // DeleteJob deletes a job from the system.
+ DeleteJob(context.Context, *DeleteJobRequest) (*DeleteJobResponse, error)
+ mustEmbedUnimplementedJobServiceServer()
+}
+
+// UnimplementedJobServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedJobServiceServer struct {
+}
+
+func (UnimplementedJobServiceServer) GetJob(context.Context, *GetJobRequest) (*GetJobResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetJob not implemented")
+}
+func (UnimplementedJobServiceServer) GetProposal(context.Context, *GetProposalRequest) (*GetProposalResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetProposal not implemented")
+}
+func (UnimplementedJobServiceServer) ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListJobs not implemented")
+}
+func (UnimplementedJobServiceServer) ListProposals(context.Context, *ListProposalsRequest) (*ListProposalsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListProposals not implemented")
+}
+func (UnimplementedJobServiceServer) ProposeJob(context.Context, *ProposeJobRequest) (*ProposeJobResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ProposeJob not implemented")
+}
+func (UnimplementedJobServiceServer) RevokeJob(context.Context, *RevokeJobRequest) (*RevokeJobResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method RevokeJob not implemented")
+}
+func (UnimplementedJobServiceServer) DeleteJob(context.Context, *DeleteJobRequest) (*DeleteJobResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DeleteJob not implemented")
+}
+func (UnimplementedJobServiceServer) mustEmbedUnimplementedJobServiceServer() {}
+
+// UnsafeJobServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to JobServiceServer will
+// result in compilation errors.
+type UnsafeJobServiceServer interface {
+ mustEmbedUnimplementedJobServiceServer()
+}
+
+func RegisterJobServiceServer(s grpc.ServiceRegistrar, srv JobServiceServer) {
+ s.RegisterService(&JobService_ServiceDesc, srv)
+}
+
+func _JobService_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetJobRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).GetJob(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_GetJob_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).GetJob(ctx, req.(*GetJobRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_GetProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetProposalRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).GetProposal(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_GetProposal_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).GetProposal(ctx, req.(*GetProposalRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListJobsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).ListJobs(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_ListJobs_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).ListJobs(ctx, req.(*ListJobsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_ListProposals_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListProposalsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).ListProposals(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_ListProposals_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).ListProposals(ctx, req.(*ListProposalsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_ProposeJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ProposeJobRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).ProposeJob(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_ProposeJob_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).ProposeJob(ctx, req.(*ProposeJobRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_RevokeJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(RevokeJobRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).RevokeJob(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_RevokeJob_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).RevokeJob(ctx, req.(*RevokeJobRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _JobService_DeleteJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DeleteJobRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(JobServiceServer).DeleteJob(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: JobService_DeleteJob_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(JobServiceServer).DeleteJob(ctx, req.(*DeleteJobRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// JobService_ServiceDesc is the grpc.ServiceDesc for JobService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var JobService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "api.job.v1.JobService",
+ HandlerType: (*JobServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetJob",
+ Handler: _JobService_GetJob_Handler,
+ },
+ {
+ MethodName: "GetProposal",
+ Handler: _JobService_GetProposal_Handler,
+ },
+ {
+ MethodName: "ListJobs",
+ Handler: _JobService_ListJobs_Handler,
+ },
+ {
+ MethodName: "ListProposals",
+ Handler: _JobService_ListProposals_Handler,
+ },
+ {
+ MethodName: "ProposeJob",
+ Handler: _JobService_ProposeJob_Handler,
+ },
+ {
+ MethodName: "RevokeJob",
+ Handler: _JobService_RevokeJob_Handler,
+ },
+ {
+ MethodName: "DeleteJob",
+ Handler: _JobService_DeleteJob_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "job/v1/job.proto",
+}
diff --git a/integration-tests/deployment/jd/node/v1/node.pb.go b/integration-tests/deployment/jd/node/v1/node.pb.go
new file mode 100644
index 00000000000..f5b22ba3ae4
--- /dev/null
+++ b/integration-tests/deployment/jd/node/v1/node.pb.go
@@ -0,0 +1,1652 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.29.0
+// protoc v4.25.3
+// source: node/v1/node.proto
+
+package v1
+
+import (
+ "reflect"
+ "sync"
+
+ "google.golang.org/protobuf/reflect/protoreflect"
+ "google.golang.org/protobuf/runtime/protoimpl"
+ _ "google.golang.org/protobuf/types/known/timestamppb"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/shared/ptypes"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type ChainType int32
+
+const (
+ ChainType_CHAIN_TYPE_UNSPECIFIED ChainType = 0
+ ChainType_CHAIN_TYPE_EVM ChainType = 1
+ ChainType_CHAIN_TYPE_SOLANA ChainType = 2
+)
+
+// Enum value maps for ChainType.
+var (
+ ChainType_name = map[int32]string{
+ 0: "CHAIN_TYPE_UNSPECIFIED",
+ 1: "CHAIN_TYPE_EVM",
+ 2: "CHAIN_TYPE_SOLANA",
+ }
+ ChainType_value = map[string]int32{
+ "CHAIN_TYPE_UNSPECIFIED": 0,
+ "CHAIN_TYPE_EVM": 1,
+ "CHAIN_TYPE_SOLANA": 2,
+ }
+)
+
+func (x ChainType) Enum() *ChainType {
+ p := new(ChainType)
+ *p = x
+ return p
+}
+
+func (x ChainType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ChainType) Descriptor() protoreflect.EnumDescriptor {
+ return file_node_v1_node_proto_enumTypes[0].Descriptor()
+}
+
+func (ChainType) Type() protoreflect.EnumType {
+ return &file_node_v1_node_proto_enumTypes[0]
+}
+
+func (x ChainType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ChainType.Descriptor instead.
+func (ChainType) EnumDescriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{0}
+}
+
+// ArchiveState represents the archived state of the node.
+type ArchiveState int32
+
+const (
+ ArchiveState_ARCHIVE_STATE_UNSPECIFIED ArchiveState = 0
+ ArchiveState_ARCHIVE_STATE_ARCHIVED ArchiveState = 1
+ ArchiveState_ARCHIVE_STATE_ACTIVE ArchiveState = 2
+)
+
+// Enum value maps for ArchiveState.
+var (
+ ArchiveState_name = map[int32]string{
+ 0: "ARCHIVE_STATE_UNSPECIFIED",
+ 1: "ARCHIVE_STATE_ARCHIVED",
+ 2: "ARCHIVE_STATE_ACTIVE",
+ }
+ ArchiveState_value = map[string]int32{
+ "ARCHIVE_STATE_UNSPECIFIED": 0,
+ "ARCHIVE_STATE_ARCHIVED": 1,
+ "ARCHIVE_STATE_ACTIVE": 2,
+ }
+)
+
+func (x ArchiveState) Enum() *ArchiveState {
+ p := new(ArchiveState)
+ *p = x
+ return p
+}
+
+func (x ArchiveState) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ArchiveState) Descriptor() protoreflect.EnumDescriptor {
+ return file_node_v1_node_proto_enumTypes[1].Descriptor()
+}
+
+func (ArchiveState) Type() protoreflect.EnumType {
+ return &file_node_v1_node_proto_enumTypes[1]
+}
+
+func (x ArchiveState) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ArchiveState.Descriptor instead.
+func (ArchiveState) EnumDescriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{1}
+}
+
+type Chain struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Type ChainType `protobuf:"varint,2,opt,name=type,proto3,enum=api.node.v1.ChainType" json:"type,omitempty"`
+}
+
+func (x *Chain) Reset() {
+ *x = Chain{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Chain) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Chain) ProtoMessage() {}
+
+func (x *Chain) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Chain.ProtoReflect.Descriptor instead.
+func (*Chain) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Chain) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Chain) GetType() ChainType {
+ if x != nil {
+ return x.Type
+ }
+ return ChainType_CHAIN_TYPE_UNSPECIFIED
+}
+
+type OCR1Config struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ IsBootstrap bool `protobuf:"varint,2,opt,name=is_bootstrap,json=isBootstrap,proto3" json:"is_bootstrap,omitempty"`
+ P2PKeyBundle *OCR1Config_P2PKeyBundle `protobuf:"bytes,3,opt,name=p2p_key_bundle,json=p2pKeyBundle,proto3" json:"p2p_key_bundle,omitempty"`
+ OcrKeyBundle *OCR1Config_OCRKeyBundle `protobuf:"bytes,4,opt,name=ocr_key_bundle,json=ocrKeyBundle,proto3" json:"ocr_key_bundle,omitempty"`
+ Multiaddr string `protobuf:"bytes,5,opt,name=multiaddr,proto3" json:"multiaddr,omitempty"`
+}
+
+func (x *OCR1Config) Reset() {
+ *x = OCR1Config{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR1Config) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR1Config) ProtoMessage() {}
+
+func (x *OCR1Config) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR1Config.ProtoReflect.Descriptor instead.
+func (*OCR1Config) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *OCR1Config) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *OCR1Config) GetIsBootstrap() bool {
+ if x != nil {
+ return x.IsBootstrap
+ }
+ return false
+}
+
+func (x *OCR1Config) GetP2PKeyBundle() *OCR1Config_P2PKeyBundle {
+ if x != nil {
+ return x.P2PKeyBundle
+ }
+ return nil
+}
+
+func (x *OCR1Config) GetOcrKeyBundle() *OCR1Config_OCRKeyBundle {
+ if x != nil {
+ return x.OcrKeyBundle
+ }
+ return nil
+}
+
+func (x *OCR1Config) GetMultiaddr() string {
+ if x != nil {
+ return x.Multiaddr
+ }
+ return ""
+}
+
+type OCR2Config struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ IsBootstrap bool `protobuf:"varint,2,opt,name=is_bootstrap,json=isBootstrap,proto3" json:"is_bootstrap,omitempty"`
+ P2PKeyBundle *OCR2Config_P2PKeyBundle `protobuf:"bytes,3,opt,name=p2p_key_bundle,json=p2pKeyBundle,proto3" json:"p2p_key_bundle,omitempty"`
+ OcrKeyBundle *OCR2Config_OCRKeyBundle `protobuf:"bytes,4,opt,name=ocr_key_bundle,json=ocrKeyBundle,proto3" json:"ocr_key_bundle,omitempty"`
+ Multiaddr string `protobuf:"bytes,5,opt,name=multiaddr,proto3" json:"multiaddr,omitempty"`
+ Plugins *OCR2Config_Plugins `protobuf:"bytes,6,opt,name=plugins,proto3" json:"plugins,omitempty"`
+ ForwarderAddress string `protobuf:"bytes,7,opt,name=forwarder_address,json=forwarderAddress,proto3" json:"forwarder_address,omitempty"`
+}
+
+func (x *OCR2Config) Reset() {
+ *x = OCR2Config{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR2Config) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR2Config) ProtoMessage() {}
+
+func (x *OCR2Config) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR2Config.ProtoReflect.Descriptor instead.
+func (*OCR2Config) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *OCR2Config) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *OCR2Config) GetIsBootstrap() bool {
+ if x != nil {
+ return x.IsBootstrap
+ }
+ return false
+}
+
+func (x *OCR2Config) GetP2PKeyBundle() *OCR2Config_P2PKeyBundle {
+ if x != nil {
+ return x.P2PKeyBundle
+ }
+ return nil
+}
+
+func (x *OCR2Config) GetOcrKeyBundle() *OCR2Config_OCRKeyBundle {
+ if x != nil {
+ return x.OcrKeyBundle
+ }
+ return nil
+}
+
+func (x *OCR2Config) GetMultiaddr() string {
+ if x != nil {
+ return x.Multiaddr
+ }
+ return ""
+}
+
+func (x *OCR2Config) GetPlugins() *OCR2Config_Plugins {
+ if x != nil {
+ return x.Plugins
+ }
+ return nil
+}
+
+func (x *OCR2Config) GetForwarderAddress() string {
+ if x != nil {
+ return x.ForwarderAddress
+ }
+ return ""
+}
+
+type ChainConfig struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Chain *Chain `protobuf:"bytes,1,opt,name=chain,proto3" json:"chain,omitempty"`
+ AccountAddress string `protobuf:"bytes,2,opt,name=account_address,json=accountAddress,proto3" json:"account_address,omitempty"`
+ AdminAddress string `protobuf:"bytes,3,opt,name=admin_address,json=adminAddress,proto3" json:"admin_address,omitempty"`
+ Ocr1Config *OCR1Config `protobuf:"bytes,4,opt,name=ocr1_config,json=ocr1Config,proto3" json:"ocr1_config,omitempty"`
+ Ocr2Config *OCR2Config `protobuf:"bytes,5,opt,name=ocr2_config,json=ocr2Config,proto3" json:"ocr2_config,omitempty"`
+}
+
+func (x *ChainConfig) Reset() {
+ *x = ChainConfig{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ChainConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChainConfig) ProtoMessage() {}
+
+func (x *ChainConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChainConfig.ProtoReflect.Descriptor instead.
+func (*ChainConfig) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *ChainConfig) GetChain() *Chain {
+ if x != nil {
+ return x.Chain
+ }
+ return nil
+}
+
+func (x *ChainConfig) GetAccountAddress() string {
+ if x != nil {
+ return x.AccountAddress
+ }
+ return ""
+}
+
+func (x *ChainConfig) GetAdminAddress() string {
+ if x != nil {
+ return x.AdminAddress
+ }
+ return ""
+}
+
+func (x *ChainConfig) GetOcr1Config() *OCR1Config {
+ if x != nil {
+ return x.Ocr1Config
+ }
+ return nil
+}
+
+func (x *ChainConfig) GetOcr2Config() *OCR2Config {
+ if x != nil {
+ return x.Ocr2Config
+ }
+ return nil
+}
+
+// GetNodeRequest is the request to retrieve a single node by its ID.
+type GetNodeRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the node to retrieve.
+}
+
+func (x *GetNodeRequest) Reset() {
+ *x = GetNodeRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetNodeRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetNodeRequest) ProtoMessage() {}
+
+func (x *GetNodeRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[4]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetNodeRequest.ProtoReflect.Descriptor instead.
+func (*GetNodeRequest) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *GetNodeRequest) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+// GetNodeResponse is the response containing the requested node.
+type GetNodeResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` // Details of the retrieved node.
+}
+
+func (x *GetNodeResponse) Reset() {
+ *x = GetNodeResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetNodeResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetNodeResponse) ProtoMessage() {}
+
+func (x *GetNodeResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[5]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetNodeResponse.ProtoReflect.Descriptor instead.
+func (*GetNodeResponse) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *GetNodeResponse) GetNode() *Node {
+ if x != nil {
+ return x.Node
+ }
+ return nil
+}
+
+// *
+// ListNodesRequest is the request object for the ListNodes method.
+//
+// Provide a filter to return a subset of data. Nodes can be filtered by:
+// - ids - A list of node ids.
+// - archived - The archived state of the node.
+// - selectors - A list of selectors to filter nodes by their labels.
+//
+// If no filter is provided, all nodes are returned.
+type ListNodesRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Filter *ListNodesRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
+}
+
+func (x *ListNodesRequest) Reset() {
+ *x = ListNodesRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListNodesRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListNodesRequest) ProtoMessage() {}
+
+func (x *ListNodesRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[6]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListNodesRequest.ProtoReflect.Descriptor instead.
+func (*ListNodesRequest) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *ListNodesRequest) GetFilter() *ListNodesRequest_Filter {
+ if x != nil {
+ return x.Filter
+ }
+ return nil
+}
+
+// *
+// ListNodesResponse is the response object for the ListNodes method.
+//
+// It returns a list of nodes that match the filter criteria.
+type ListNodesResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` // List of nodes.
+}
+
+func (x *ListNodesResponse) Reset() {
+ *x = ListNodesResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListNodesResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListNodesResponse) ProtoMessage() {}
+
+func (x *ListNodesResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[7]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListNodesResponse.ProtoReflect.Descriptor instead.
+func (*ListNodesResponse) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *ListNodesResponse) GetNodes() []*Node {
+ if x != nil {
+ return x.Nodes
+ }
+ return nil
+}
+
+type ListNodeChainConfigsRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Filter *ListNodeChainConfigsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"`
+}
+
+func (x *ListNodeChainConfigsRequest) Reset() {
+ *x = ListNodeChainConfigsRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListNodeChainConfigsRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListNodeChainConfigsRequest) ProtoMessage() {}
+
+func (x *ListNodeChainConfigsRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[8]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListNodeChainConfigsRequest.ProtoReflect.Descriptor instead.
+func (*ListNodeChainConfigsRequest) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *ListNodeChainConfigsRequest) GetFilter() *ListNodeChainConfigsRequest_Filter {
+ if x != nil {
+ return x.Filter
+ }
+ return nil
+}
+
+type ListNodeChainConfigsResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ ChainConfigs []*ChainConfig `protobuf:"bytes,1,rep,name=chain_configs,json=chainConfigs,proto3" json:"chain_configs,omitempty"`
+}
+
+func (x *ListNodeChainConfigsResponse) Reset() {
+ *x = ListNodeChainConfigsResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListNodeChainConfigsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListNodeChainConfigsResponse) ProtoMessage() {}
+
+func (x *ListNodeChainConfigsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[9]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListNodeChainConfigsResponse.ProtoReflect.Descriptor instead.
+func (*ListNodeChainConfigsResponse) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *ListNodeChainConfigsResponse) GetChainConfigs() []*ChainConfig {
+ if x != nil {
+ return x.ChainConfigs
+ }
+ return nil
+}
+
+type OCR1Config_P2PKeyBundle struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ PeerId string `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"`
+ PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
+}
+
+func (x *OCR1Config_P2PKeyBundle) Reset() {
+ *x = OCR1Config_P2PKeyBundle{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR1Config_P2PKeyBundle) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR1Config_P2PKeyBundle) ProtoMessage() {}
+
+func (x *OCR1Config_P2PKeyBundle) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[10]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR1Config_P2PKeyBundle.ProtoReflect.Descriptor instead.
+func (*OCR1Config_P2PKeyBundle) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{1, 0}
+}
+
+func (x *OCR1Config_P2PKeyBundle) GetPeerId() string {
+ if x != nil {
+ return x.PeerId
+ }
+ return ""
+}
+
+func (x *OCR1Config_P2PKeyBundle) GetPublicKey() string {
+ if x != nil {
+ return x.PublicKey
+ }
+ return ""
+}
+
+type OCR1Config_OCRKeyBundle struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ BundleId string `protobuf:"bytes,1,opt,name=bundle_id,json=bundleId,proto3" json:"bundle_id,omitempty"`
+ ConfigPublicKey string `protobuf:"bytes,2,opt,name=config_public_key,json=configPublicKey,proto3" json:"config_public_key,omitempty"`
+ OffchainPublicKey string `protobuf:"bytes,3,opt,name=offchain_public_key,json=offchainPublicKey,proto3" json:"offchain_public_key,omitempty"`
+ OnchainSigningAddress string `protobuf:"bytes,4,opt,name=onchain_signing_address,json=onchainSigningAddress,proto3" json:"onchain_signing_address,omitempty"`
+}
+
+func (x *OCR1Config_OCRKeyBundle) Reset() {
+ *x = OCR1Config_OCRKeyBundle{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR1Config_OCRKeyBundle) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR1Config_OCRKeyBundle) ProtoMessage() {}
+
+func (x *OCR1Config_OCRKeyBundle) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[11]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR1Config_OCRKeyBundle.ProtoReflect.Descriptor instead.
+func (*OCR1Config_OCRKeyBundle) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{1, 1}
+}
+
+func (x *OCR1Config_OCRKeyBundle) GetBundleId() string {
+ if x != nil {
+ return x.BundleId
+ }
+ return ""
+}
+
+func (x *OCR1Config_OCRKeyBundle) GetConfigPublicKey() string {
+ if x != nil {
+ return x.ConfigPublicKey
+ }
+ return ""
+}
+
+func (x *OCR1Config_OCRKeyBundle) GetOffchainPublicKey() string {
+ if x != nil {
+ return x.OffchainPublicKey
+ }
+ return ""
+}
+
+func (x *OCR1Config_OCRKeyBundle) GetOnchainSigningAddress() string {
+ if x != nil {
+ return x.OnchainSigningAddress
+ }
+ return ""
+}
+
+type OCR2Config_P2PKeyBundle struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ PeerId string `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"`
+ PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
+}
+
+func (x *OCR2Config_P2PKeyBundle) Reset() {
+ *x = OCR2Config_P2PKeyBundle{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR2Config_P2PKeyBundle) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR2Config_P2PKeyBundle) ProtoMessage() {}
+
+func (x *OCR2Config_P2PKeyBundle) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[12]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR2Config_P2PKeyBundle.ProtoReflect.Descriptor instead.
+func (*OCR2Config_P2PKeyBundle) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{2, 0}
+}
+
+func (x *OCR2Config_P2PKeyBundle) GetPeerId() string {
+ if x != nil {
+ return x.PeerId
+ }
+ return ""
+}
+
+func (x *OCR2Config_P2PKeyBundle) GetPublicKey() string {
+ if x != nil {
+ return x.PublicKey
+ }
+ return ""
+}
+
+type OCR2Config_OCRKeyBundle struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ BundleId string `protobuf:"bytes,1,opt,name=bundle_id,json=bundleId,proto3" json:"bundle_id,omitempty"`
+ ConfigPublicKey string `protobuf:"bytes,2,opt,name=config_public_key,json=configPublicKey,proto3" json:"config_public_key,omitempty"`
+ OffchainPublicKey string `protobuf:"bytes,3,opt,name=offchain_public_key,json=offchainPublicKey,proto3" json:"offchain_public_key,omitempty"`
+ OnchainSigningAddress string `protobuf:"bytes,4,opt,name=onchain_signing_address,json=onchainSigningAddress,proto3" json:"onchain_signing_address,omitempty"`
+}
+
+func (x *OCR2Config_OCRKeyBundle) Reset() {
+ *x = OCR2Config_OCRKeyBundle{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR2Config_OCRKeyBundle) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR2Config_OCRKeyBundle) ProtoMessage() {}
+
+func (x *OCR2Config_OCRKeyBundle) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[13]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR2Config_OCRKeyBundle.ProtoReflect.Descriptor instead.
+func (*OCR2Config_OCRKeyBundle) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{2, 1}
+}
+
+func (x *OCR2Config_OCRKeyBundle) GetBundleId() string {
+ if x != nil {
+ return x.BundleId
+ }
+ return ""
+}
+
+func (x *OCR2Config_OCRKeyBundle) GetConfigPublicKey() string {
+ if x != nil {
+ return x.ConfigPublicKey
+ }
+ return ""
+}
+
+func (x *OCR2Config_OCRKeyBundle) GetOffchainPublicKey() string {
+ if x != nil {
+ return x.OffchainPublicKey
+ }
+ return ""
+}
+
+func (x *OCR2Config_OCRKeyBundle) GetOnchainSigningAddress() string {
+ if x != nil {
+ return x.OnchainSigningAddress
+ }
+ return ""
+}
+
+type OCR2Config_Plugins struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Commit bool `protobuf:"varint,1,opt,name=commit,proto3" json:"commit,omitempty"`
+ Execute bool `protobuf:"varint,2,opt,name=execute,proto3" json:"execute,omitempty"`
+ Median bool `protobuf:"varint,3,opt,name=median,proto3" json:"median,omitempty"`
+ Mercury bool `protobuf:"varint,4,opt,name=mercury,proto3" json:"mercury,omitempty"`
+ Rebalancer bool `protobuf:"varint,5,opt,name=rebalancer,proto3" json:"rebalancer,omitempty"`
+}
+
+func (x *OCR2Config_Plugins) Reset() {
+ *x = OCR2Config_Plugins{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *OCR2Config_Plugins) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OCR2Config_Plugins) ProtoMessage() {}
+
+func (x *OCR2Config_Plugins) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[14]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use OCR2Config_Plugins.ProtoReflect.Descriptor instead.
+func (*OCR2Config_Plugins) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{2, 2}
+}
+
+func (x *OCR2Config_Plugins) GetCommit() bool {
+ if x != nil {
+ return x.Commit
+ }
+ return false
+}
+
+func (x *OCR2Config_Plugins) GetExecute() bool {
+ if x != nil {
+ return x.Execute
+ }
+ return false
+}
+
+func (x *OCR2Config_Plugins) GetMedian() bool {
+ if x != nil {
+ return x.Median
+ }
+ return false
+}
+
+func (x *OCR2Config_Plugins) GetMercury() bool {
+ if x != nil {
+ return x.Mercury
+ }
+ return false
+}
+
+func (x *OCR2Config_Plugins) GetRebalancer() bool {
+ if x != nil {
+ return x.Rebalancer
+ }
+ return false
+}
+
+type ListNodesRequest_Filter struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"`
+ Archived ArchiveState `protobuf:"varint,2,opt,name=archived,proto3,enum=api.node.v1.ArchiveState" json:"archived,omitempty"`
+ Selectors []*ptypes.Selector `protobuf:"bytes,3,rep,name=selectors,proto3" json:"selectors,omitempty"`
+}
+
+func (x *ListNodesRequest_Filter) Reset() {
+ *x = ListNodesRequest_Filter{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListNodesRequest_Filter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListNodesRequest_Filter) ProtoMessage() {}
+
+func (x *ListNodesRequest_Filter) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[15]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListNodesRequest_Filter.ProtoReflect.Descriptor instead.
+func (*ListNodesRequest_Filter) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{6, 0}
+}
+
+func (x *ListNodesRequest_Filter) GetIds() []string {
+ if x != nil {
+ return x.Ids
+ }
+ return nil
+}
+
+func (x *ListNodesRequest_Filter) GetArchived() ArchiveState {
+ if x != nil {
+ return x.Archived
+ }
+ return ArchiveState_ARCHIVE_STATE_UNSPECIFIED
+}
+
+func (x *ListNodesRequest_Filter) GetSelectors() []*ptypes.Selector {
+ if x != nil {
+ return x.Selectors
+ }
+ return nil
+}
+
+type ListNodeChainConfigsRequest_Filter struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
+}
+
+func (x *ListNodeChainConfigsRequest_Filter) Reset() {
+ *x = ListNodeChainConfigsRequest_Filter{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_node_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListNodeChainConfigsRequest_Filter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListNodeChainConfigsRequest_Filter) ProtoMessage() {}
+
+func (x *ListNodeChainConfigsRequest_Filter) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_node_proto_msgTypes[16]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ListNodeChainConfigsRequest_Filter.ProtoReflect.Descriptor instead.
+func (*ListNodeChainConfigsRequest_Filter) Descriptor() ([]byte, []int) {
+ return file_node_v1_node_proto_rawDescGZIP(), []int{8, 0}
+}
+
+func (x *ListNodeChainConfigsRequest_Filter) GetNodeId() string {
+ if x != nil {
+ return x.NodeId
+ }
+ return ""
+}
+
+var File_node_v1_node_proto protoreflect.FileDescriptor
+
+var file_node_v1_node_proto_rawDesc = []byte{
+ 0x0a, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76,
+ 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+ 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x1a, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72,
+ 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64,
+ 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x22, 0x43, 0x0a, 0x05, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x04,
+ 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x79,
+ 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x89, 0x04, 0x0a, 0x0a, 0x4f, 0x43, 0x52,
+ 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+ 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+ 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61,
+ 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x42, 0x6f, 0x6f, 0x74, 0x73,
+ 0x74, 0x72, 0x61, 0x70, 0x12, 0x4a, 0x0a, 0x0e, 0x70, 0x32, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
+ 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61,
+ 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x31, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x32, 0x50, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64,
+ 0x6c, 0x65, 0x52, 0x0c, 0x70, 0x32, 0x70, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65,
+ 0x12, 0x4a, 0x0a, 0x0e, 0x6f, 0x63, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x75, 0x6e, 0x64,
+ 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e,
+ 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x2e, 0x4f, 0x43, 0x52, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0c,
+ 0x6f, 0x63, 0x72, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09,
+ 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x1a, 0x46, 0x0a, 0x0c, 0x50, 0x32,
+ 0x50, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65,
+ 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x65,
+ 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65,
+ 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x1a, 0xbf, 0x01, 0x0a, 0x0c, 0x4f, 0x43, 0x52, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e,
+ 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64,
+ 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x13,
+ 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f,
+ 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x66, 0x66, 0x63, 0x68,
+ 0x61, 0x69, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x17,
+ 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f,
+ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f,
+ 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x22, 0x81, 0x06, 0x0a, 0x0a, 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a,
+ 0x0c, 0x69, 0x73, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70,
+ 0x12, 0x4a, 0x0a, 0x0e, 0x70, 0x32, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x75, 0x6e, 0x64,
+ 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e,
+ 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x2e, 0x50, 0x32, 0x50, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0c,
+ 0x70, 0x32, 0x70, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x4a, 0x0a, 0x0e,
+ 0x6f, 0x63, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
+ 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x43,
+ 0x52, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0c, 0x6f, 0x63, 0x72, 0x4b,
+ 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74,
+ 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, 0x6c,
+ 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e,
+ 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f,
+ 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e,
+ 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x66, 0x6f,
+ 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x46,
+ 0x0a, 0x0c, 0x50, 0x32, 0x50, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x17,
+ 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x1a, 0xbf, 0x01, 0x0a, 0x0c, 0x4f, 0x43, 0x52, 0x4b, 0x65,
+ 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x6e, 0x64, 0x6c,
+ 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x6e, 0x64,
+ 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x70,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
+ 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f,
+ 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
+ 0x12, 0x36, 0x0a, 0x17, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e,
+ 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e,
+ 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x8d, 0x01, 0x0a, 0x07, 0x50, 0x6c, 0x75,
+ 0x67, 0x69, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07,
+ 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65,
+ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x12, 0x18,
+ 0x0a, 0x07, 0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x07, 0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x62, 0x61,
+ 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65,
+ 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x22, 0xf9, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61,
+ 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69,
+ 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f,
+ 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x05, 0x63, 0x68, 0x61,
+ 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64,
+ 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61,
+ 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x12, 0x38, 0x0a, 0x0b, 0x6f, 0x63, 0x72, 0x31, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
+ 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a,
+ 0x6f, 0x63, 0x72, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x6f, 0x63,
+ 0x72, 0x32, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43,
+ 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6f, 0x63, 0x72, 0x32, 0x43, 0x6f,
+ 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x6e, 0x6f, 0x64,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f,
+ 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65,
+ 0x22, 0xd7, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
+ 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c,
+ 0x74, 0x65, 0x72, 0x1a, 0x84, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x10,
+ 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73,
+ 0x12, 0x35, 0x0a, 0x08, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31,
+ 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x61,
+ 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52,
+ 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x3c, 0x0a, 0x11, 0x4c, 0x69,
+ 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x27, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64,
+ 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73,
+ 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74,
+ 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e,
+ 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43,
+ 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65,
+ 0x72, 0x1a, 0x21, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6e,
+ 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f,
+ 0x64, 0x65, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65,
+ 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f,
+ 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x73, 0x2a, 0x52, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65,
+ 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55,
+ 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e,
+ 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x56, 0x4d, 0x10, 0x01,
+ 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53,
+ 0x4f, 0x4c, 0x41, 0x4e, 0x41, 0x10, 0x02, 0x2a, 0x63, 0x0a, 0x0c, 0x41, 0x72, 0x63, 0x68, 0x69,
+ 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x52, 0x43, 0x48, 0x49,
+ 0x56, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+ 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56,
+ 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44,
+ 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x54,
+ 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x32, 0x92, 0x02, 0x0a,
+ 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x07,
+ 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f,
+ 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
+ 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65,
+ 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c,
+ 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68,
+ 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64,
+ 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
+ 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e,
+ 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x42, 0x09, 0x5a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_node_v1_node_proto_rawDescOnce sync.Once
+ file_node_v1_node_proto_rawDescData = file_node_v1_node_proto_rawDesc
+)
+
+func file_node_v1_node_proto_rawDescGZIP() []byte {
+ file_node_v1_node_proto_rawDescOnce.Do(func() {
+ file_node_v1_node_proto_rawDescData = protoimpl.X.CompressGZIP(file_node_v1_node_proto_rawDescData)
+ })
+ return file_node_v1_node_proto_rawDescData
+}
+
+var file_node_v1_node_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_node_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
+var file_node_v1_node_proto_goTypes = []interface{}{
+ (ChainType)(0), // 0: api.node.v1.ChainType
+ (ArchiveState)(0), // 1: api.node.v1.ArchiveState
+ (*Chain)(nil), // 2: api.node.v1.Chain
+ (*OCR1Config)(nil), // 3: api.node.v1.OCR1Config
+ (*OCR2Config)(nil), // 4: api.node.v1.OCR2Config
+ (*ChainConfig)(nil), // 5: api.node.v1.ChainConfig
+ (*GetNodeRequest)(nil), // 6: api.node.v1.GetNodeRequest
+ (*GetNodeResponse)(nil), // 7: api.node.v1.GetNodeResponse
+ (*ListNodesRequest)(nil), // 8: api.node.v1.ListNodesRequest
+ (*ListNodesResponse)(nil), // 9: api.node.v1.ListNodesResponse
+ (*ListNodeChainConfigsRequest)(nil), // 10: api.node.v1.ListNodeChainConfigsRequest
+ (*ListNodeChainConfigsResponse)(nil), // 11: api.node.v1.ListNodeChainConfigsResponse
+ (*OCR1Config_P2PKeyBundle)(nil), // 12: api.node.v1.OCR1Config.P2PKeyBundle
+ (*OCR1Config_OCRKeyBundle)(nil), // 13: api.node.v1.OCR1Config.OCRKeyBundle
+ (*OCR2Config_P2PKeyBundle)(nil), // 14: api.node.v1.OCR2Config.P2PKeyBundle
+ (*OCR2Config_OCRKeyBundle)(nil), // 15: api.node.v1.OCR2Config.OCRKeyBundle
+ (*OCR2Config_Plugins)(nil), // 16: api.node.v1.OCR2Config.Plugins
+ (*ListNodesRequest_Filter)(nil), // 17: api.node.v1.ListNodesRequest.Filter
+ (*ListNodeChainConfigsRequest_Filter)(nil), // 18: api.node.v1.ListNodeChainConfigsRequest.Filter
+ (*Node)(nil), // 19: api.node.v1.Node
+ (*ptypes.Selector)(nil), // 20: api.label.Selector
+}
+var file_node_v1_node_proto_depIdxs = []int32{
+ 0, // 0: api.node.v1.Chain.type:type_name -> api.node.v1.ChainType
+ 12, // 1: api.node.v1.OCR1Config.p2p_key_bundle:type_name -> api.node.v1.OCR1Config.P2PKeyBundle
+ 13, // 2: api.node.v1.OCR1Config.ocr_key_bundle:type_name -> api.node.v1.OCR1Config.OCRKeyBundle
+ 14, // 3: api.node.v1.OCR2Config.p2p_key_bundle:type_name -> api.node.v1.OCR2Config.P2PKeyBundle
+ 15, // 4: api.node.v1.OCR2Config.ocr_key_bundle:type_name -> api.node.v1.OCR2Config.OCRKeyBundle
+ 16, // 5: api.node.v1.OCR2Config.plugins:type_name -> api.node.v1.OCR2Config.Plugins
+ 2, // 6: api.node.v1.ChainConfig.chain:type_name -> api.node.v1.Chain
+ 3, // 7: api.node.v1.ChainConfig.ocr1_config:type_name -> api.node.v1.OCR1Config
+ 4, // 8: api.node.v1.ChainConfig.ocr2_config:type_name -> api.node.v1.OCR2Config
+ 19, // 9: api.node.v1.GetNodeResponse.node:type_name -> api.node.v1.Node
+ 17, // 10: api.node.v1.ListNodesRequest.filter:type_name -> api.node.v1.ListNodesRequest.Filter
+ 19, // 11: api.node.v1.ListNodesResponse.nodes:type_name -> api.node.v1.Node
+ 18, // 12: api.node.v1.ListNodeChainConfigsRequest.filter:type_name -> api.node.v1.ListNodeChainConfigsRequest.Filter
+ 5, // 13: api.node.v1.ListNodeChainConfigsResponse.chain_configs:type_name -> api.node.v1.ChainConfig
+ 1, // 14: api.node.v1.ListNodesRequest.Filter.archived:type_name -> api.node.v1.ArchiveState
+ 20, // 15: api.node.v1.ListNodesRequest.Filter.selectors:type_name -> api.label.Selector
+ 6, // 16: api.node.v1.NodeService.GetNode:input_type -> api.node.v1.GetNodeRequest
+ 8, // 17: api.node.v1.NodeService.ListNodes:input_type -> api.node.v1.ListNodesRequest
+ 10, // 18: api.node.v1.NodeService.ListNodeChainConfigs:input_type -> api.node.v1.ListNodeChainConfigsRequest
+ 7, // 19: api.node.v1.NodeService.GetNode:output_type -> api.node.v1.GetNodeResponse
+ 9, // 20: api.node.v1.NodeService.ListNodes:output_type -> api.node.v1.ListNodesResponse
+ 11, // 21: api.node.v1.NodeService.ListNodeChainConfigs:output_type -> api.node.v1.ListNodeChainConfigsResponse
+ 19, // [19:22] is the sub-list for method output_type
+ 16, // [16:19] is the sub-list for method input_type
+ 16, // [16:16] is the sub-list for extension type_name
+ 16, // [16:16] is the sub-list for extension extendee
+ 0, // [0:16] is the sub-list for field type_name
+}
+
+func init() { file_node_v1_node_proto_init() }
+func file_node_v1_node_proto_init() {
+ if File_node_v1_node_proto != nil {
+ return
+ }
+ file_node_v1_shared_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_node_v1_node_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Chain); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR1Config); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR2Config); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ChainConfig); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetNodeRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetNodeResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListNodesRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListNodesResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListNodeChainConfigsRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListNodeChainConfigsResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR1Config_P2PKeyBundle); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR1Config_OCRKeyBundle); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR2Config_P2PKeyBundle); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR2Config_OCRKeyBundle); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*OCR2Config_Plugins); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListNodesRequest_Filter); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_node_v1_node_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListNodeChainConfigsRequest_Filter); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_node_v1_node_proto_rawDesc,
+ NumEnums: 2,
+ NumMessages: 17,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_node_v1_node_proto_goTypes,
+ DependencyIndexes: file_node_v1_node_proto_depIdxs,
+ EnumInfos: file_node_v1_node_proto_enumTypes,
+ MessageInfos: file_node_v1_node_proto_msgTypes,
+ }.Build()
+ File_node_v1_node_proto = out.File
+ file_node_v1_node_proto_rawDesc = nil
+ file_node_v1_node_proto_goTypes = nil
+ file_node_v1_node_proto_depIdxs = nil
+}
diff --git a/integration-tests/deployment/jd/node/v1/node_grpc.pb.go b/integration-tests/deployment/jd/node/v1/node_grpc.pb.go
new file mode 100644
index 00000000000..5fc0c505eed
--- /dev/null
+++ b/integration-tests/deployment/jd/node/v1/node_grpc.pb.go
@@ -0,0 +1,187 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v4.25.3
+// source: node/v1/node.proto
+
+package v1
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ NodeService_GetNode_FullMethodName = "/api.node.v1.NodeService/GetNode"
+ NodeService_ListNodes_FullMethodName = "/api.node.v1.NodeService/ListNodes"
+ NodeService_ListNodeChainConfigs_FullMethodName = "/api.node.v1.NodeService/ListNodeChainConfigs"
+)
+
+// NodeServiceClient is the client API for NodeService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type NodeServiceClient interface {
+ // GetNode retrieves the details of a node by its unique identifier.
+ GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error)
+ // ListNodes returns a list of nodes, optionally filtered by the provided criteria.
+ ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error)
+ ListNodeChainConfigs(ctx context.Context, in *ListNodeChainConfigsRequest, opts ...grpc.CallOption) (*ListNodeChainConfigsResponse, error)
+}
+
+type nodeServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewNodeServiceClient(cc grpc.ClientConnInterface) NodeServiceClient {
+ return &nodeServiceClient{cc}
+}
+
+func (c *nodeServiceClient) GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) {
+ out := new(GetNodeResponse)
+ err := c.cc.Invoke(ctx, NodeService_GetNode_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *nodeServiceClient) ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) {
+ out := new(ListNodesResponse)
+ err := c.cc.Invoke(ctx, NodeService_ListNodes_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *nodeServiceClient) ListNodeChainConfigs(ctx context.Context, in *ListNodeChainConfigsRequest, opts ...grpc.CallOption) (*ListNodeChainConfigsResponse, error) {
+ out := new(ListNodeChainConfigsResponse)
+ err := c.cc.Invoke(ctx, NodeService_ListNodeChainConfigs_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// NodeServiceServer is the server API for NodeService service.
+// All implementations must embed UnimplementedNodeServiceServer
+// for forward compatibility
+type NodeServiceServer interface {
+ // GetNode retrieves the details of a node by its unique identifier.
+ GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error)
+ // ListNodes returns a list of nodes, optionally filtered by the provided criteria.
+ ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error)
+ ListNodeChainConfigs(context.Context, *ListNodeChainConfigsRequest) (*ListNodeChainConfigsResponse, error)
+ mustEmbedUnimplementedNodeServiceServer()
+}
+
+// UnimplementedNodeServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedNodeServiceServer struct {
+}
+
+func (UnimplementedNodeServiceServer) GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetNode not implemented")
+}
+func (UnimplementedNodeServiceServer) ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListNodes not implemented")
+}
+func (UnimplementedNodeServiceServer) ListNodeChainConfigs(context.Context, *ListNodeChainConfigsRequest) (*ListNodeChainConfigsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListNodeChainConfigs not implemented")
+}
+func (UnimplementedNodeServiceServer) mustEmbedUnimplementedNodeServiceServer() {}
+
+// UnsafeNodeServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to NodeServiceServer will
+// result in compilation errors.
+type UnsafeNodeServiceServer interface {
+ mustEmbedUnimplementedNodeServiceServer()
+}
+
+func RegisterNodeServiceServer(s grpc.ServiceRegistrar, srv NodeServiceServer) {
+ s.RegisterService(&NodeService_ServiceDesc, srv)
+}
+
+func _NodeService_GetNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetNodeRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NodeServiceServer).GetNode(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: NodeService_GetNode_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NodeServiceServer).GetNode(ctx, req.(*GetNodeRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _NodeService_ListNodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListNodesRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NodeServiceServer).ListNodes(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: NodeService_ListNodes_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NodeServiceServer).ListNodes(ctx, req.(*ListNodesRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _NodeService_ListNodeChainConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListNodeChainConfigsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NodeServiceServer).ListNodeChainConfigs(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: NodeService_ListNodeChainConfigs_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NodeServiceServer).ListNodeChainConfigs(ctx, req.(*ListNodeChainConfigsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// NodeService_ServiceDesc is the grpc.ServiceDesc for NodeService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var NodeService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "api.node.v1.NodeService",
+ HandlerType: (*NodeServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "GetNode",
+ Handler: _NodeService_GetNode_Handler,
+ },
+ {
+ MethodName: "ListNodes",
+ Handler: _NodeService_ListNodes_Handler,
+ },
+ {
+ MethodName: "ListNodeChainConfigs",
+ Handler: _NodeService_ListNodeChainConfigs_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "node/v1/node.proto",
+}
diff --git a/integration-tests/deployment/jd/node/v1/shared.pb.go b/integration-tests/deployment/jd/node/v1/shared.pb.go
new file mode 100644
index 00000000000..4099dd6bd75
--- /dev/null
+++ b/integration-tests/deployment/jd/node/v1/shared.pb.go
@@ -0,0 +1,239 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.29.0
+// protoc v4.25.3
+// source: node/v1/shared.proto
+
+package v1
+
+import (
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/shared/ptypes"
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Node represents a node within the Job Distributor system.
+type Node struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the node.
+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Human-readable name for the node.
+ PublicKey string `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // Public key used for secure communications.
+ IsEnabled bool `protobuf:"varint,4,opt,name=is_enabled,json=isEnabled,proto3" json:"is_enabled,omitempty"` // Indicates if the node is currently enabled.
+ IsConnected bool `protobuf:"varint,5,opt,name=is_connected,json=isConnected,proto3" json:"is_connected,omitempty"` // Indicates if the node is currently connected to the network.
+ Labels []*ptypes.Label `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty"` // Set of labels associated with the node.
+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Timestamp when the node was created.
+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Timestamp when the node was last updated.
+ ArchivedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=archived_at,json=archivedAt,proto3" json:"archived_at,omitempty"` // Timestamp when the node was archived.
+}
+
+func (x *Node) Reset() {
+ *x = Node{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_node_v1_shared_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Node) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Node) ProtoMessage() {}
+
+func (x *Node) ProtoReflect() protoreflect.Message {
+ mi := &file_node_v1_shared_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Node.ProtoReflect.Descriptor instead.
+func (*Node) Descriptor() ([]byte, []int) {
+ return file_node_v1_shared_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Node) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *Node) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Node) GetPublicKey() string {
+ if x != nil {
+ return x.PublicKey
+ }
+ return ""
+}
+
+func (x *Node) GetIsEnabled() bool {
+ if x != nil {
+ return x.IsEnabled
+ }
+ return false
+}
+
+func (x *Node) GetIsConnected() bool {
+ if x != nil {
+ return x.IsConnected
+ }
+ return false
+}
+
+func (x *Node) GetLabels() []*ptypes.Label {
+ if x != nil {
+ return x.Labels
+ }
+ return nil
+}
+
+func (x *Node) GetCreatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.CreatedAt
+ }
+ return nil
+}
+
+func (x *Node) GetUpdatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.UpdatedAt
+ }
+ return nil
+}
+
+func (x *Node) GetArchivedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.ArchivedAt
+ }
+ return nil
+}
+
+var File_node_v1_shared_proto protoreflect.FileDescriptor
+
+var file_node_v1_shared_proto_rawDesc = []byte{
+ 0x0a, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65,
+ 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79,
+ 0x70, 0x65, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
+ 0xe8, 0x02, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x69,
+ 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x09, 0x69, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73,
+ 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x0b, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x28, 0x0a,
+ 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52,
+ 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
+ 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
+ 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
+ 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3b, 0x0a,
+ 0x0b, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a,
+ 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x41, 0x74, 0x42, 0x09, 0x5a, 0x07, 0x6e, 0x6f,
+ 0x64, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_node_v1_shared_proto_rawDescOnce sync.Once
+ file_node_v1_shared_proto_rawDescData = file_node_v1_shared_proto_rawDesc
+)
+
+func file_node_v1_shared_proto_rawDescGZIP() []byte {
+ file_node_v1_shared_proto_rawDescOnce.Do(func() {
+ file_node_v1_shared_proto_rawDescData = protoimpl.X.CompressGZIP(file_node_v1_shared_proto_rawDescData)
+ })
+ return file_node_v1_shared_proto_rawDescData
+}
+
+var file_node_v1_shared_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_node_v1_shared_proto_goTypes = []interface{}{
+ (*Node)(nil), // 0: api.node.v1.Node
+ (*ptypes.Label)(nil), // 1: api.label.Label
+ (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp
+}
+var file_node_v1_shared_proto_depIdxs = []int32{
+ 1, // 0: api.node.v1.Node.labels:type_name -> api.label.Label
+ 2, // 1: api.node.v1.Node.created_at:type_name -> google.protobuf.Timestamp
+ 2, // 2: api.node.v1.Node.updated_at:type_name -> google.protobuf.Timestamp
+ 2, // 3: api.node.v1.Node.archived_at:type_name -> google.protobuf.Timestamp
+ 4, // [4:4] is the sub-list for method output_type
+ 4, // [4:4] is the sub-list for method input_type
+ 4, // [4:4] is the sub-list for extension type_name
+ 4, // [4:4] is the sub-list for extension extendee
+ 0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_node_v1_shared_proto_init() }
+func file_node_v1_shared_proto_init() {
+ if File_node_v1_shared_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_node_v1_shared_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Node); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_node_v1_shared_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_node_v1_shared_proto_goTypes,
+ DependencyIndexes: file_node_v1_shared_proto_depIdxs,
+ MessageInfos: file_node_v1_shared_proto_msgTypes,
+ }.Build()
+ File_node_v1_shared_proto = out.File
+ file_node_v1_shared_proto_rawDesc = nil
+ file_node_v1_shared_proto_goTypes = nil
+ file_node_v1_shared_proto_depIdxs = nil
+}
diff --git a/integration-tests/deployment/jd/shared/ptypes/label.pb.go b/integration-tests/deployment/jd/shared/ptypes/label.pb.go
new file mode 100644
index 00000000000..e8195bd6c32
--- /dev/null
+++ b/integration-tests/deployment/jd/shared/ptypes/label.pb.go
@@ -0,0 +1,311 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.29.0
+// protoc v4.25.3
+// source: shared/ptypes/label.proto
+
+package ptypes
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// SelectorOp defines the operation to be used in a selector
+type SelectorOp int32
+
+const (
+ SelectorOp_EQ SelectorOp = 0
+ SelectorOp_NOT_EQ SelectorOp = 1
+ SelectorOp_IN SelectorOp = 2
+ SelectorOp_NOT_IN SelectorOp = 3
+ SelectorOp_EXIST SelectorOp = 4
+ SelectorOp_NOT_EXIST SelectorOp = 5
+)
+
+// Enum value maps for SelectorOp.
+var (
+ SelectorOp_name = map[int32]string{
+ 0: "EQ",
+ 1: "NOT_EQ",
+ 2: "IN",
+ 3: "NOT_IN",
+ 4: "EXIST",
+ 5: "NOT_EXIST",
+ }
+ SelectorOp_value = map[string]int32{
+ "EQ": 0,
+ "NOT_EQ": 1,
+ "IN": 2,
+ "NOT_IN": 3,
+ "EXIST": 4,
+ "NOT_EXIST": 5,
+ }
+)
+
+func (x SelectorOp) Enum() *SelectorOp {
+ p := new(SelectorOp)
+ *p = x
+ return p
+}
+
+func (x SelectorOp) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SelectorOp) Descriptor() protoreflect.EnumDescriptor {
+ return file_shared_ptypes_label_proto_enumTypes[0].Descriptor()
+}
+
+func (SelectorOp) Type() protoreflect.EnumType {
+ return &file_shared_ptypes_label_proto_enumTypes[0]
+}
+
+func (x SelectorOp) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SelectorOp.Descriptor instead.
+func (SelectorOp) EnumDescriptor() ([]byte, []int) {
+ return file_shared_ptypes_label_proto_rawDescGZIP(), []int{0}
+}
+
+// Label defines a label as a key value pair
+type Label struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+ Value *string `protobuf:"bytes,2,opt,name=value,proto3,oneof" json:"value,omitempty"`
+}
+
+func (x *Label) Reset() {
+ *x = Label{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_shared_ptypes_label_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Label) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Label) ProtoMessage() {}
+
+func (x *Label) ProtoReflect() protoreflect.Message {
+ mi := &file_shared_ptypes_label_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Label.ProtoReflect.Descriptor instead.
+func (*Label) Descriptor() ([]byte, []int) {
+ return file_shared_ptypes_label_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Label) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *Label) GetValue() string {
+ if x != nil && x.Value != nil {
+ return *x.Value
+ }
+ return ""
+}
+
+// Selector defines a selector as a key value pair with an operation
+type Selector struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+ Op SelectorOp `protobuf:"varint,2,opt,name=op,proto3,enum=api.label.SelectorOp" json:"op,omitempty"`
+ Value *string `protobuf:"bytes,3,opt,name=value,proto3,oneof" json:"value,omitempty"`
+}
+
+func (x *Selector) Reset() {
+ *x = Selector{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_shared_ptypes_label_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Selector) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Selector) ProtoMessage() {}
+
+func (x *Selector) ProtoReflect() protoreflect.Message {
+ mi := &file_shared_ptypes_label_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Selector.ProtoReflect.Descriptor instead.
+func (*Selector) Descriptor() ([]byte, []int) {
+ return file_shared_ptypes_label_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Selector) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *Selector) GetOp() SelectorOp {
+ if x != nil {
+ return x.Op
+ }
+ return SelectorOp_EQ
+}
+
+func (x *Selector) GetValue() string {
+ if x != nil && x.Value != nil {
+ return *x.Value
+ }
+ return ""
+}
+
+var File_shared_ptypes_label_proto protoreflect.FileDescriptor
+
+var file_shared_ptypes_label_proto_rawDesc = []byte{
+ 0x0a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x61, 0x70, 0x69,
+ 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06,
+ 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
+ 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x19, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x12, 0x06,
+ 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51,
+ 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f,
+ 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10,
+ 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x05,
+ 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73,
+ 0x6d, 0x61, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, 0x2f,
+ 0x6a, 0x6f, 0x62, 0x2d, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x2f,
+ 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x73, 0x68, 0x61, 0x72,
+ 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x33,
+}
+
+var (
+ file_shared_ptypes_label_proto_rawDescOnce sync.Once
+ file_shared_ptypes_label_proto_rawDescData = file_shared_ptypes_label_proto_rawDesc
+)
+
+func file_shared_ptypes_label_proto_rawDescGZIP() []byte {
+ file_shared_ptypes_label_proto_rawDescOnce.Do(func() {
+ file_shared_ptypes_label_proto_rawDescData = protoimpl.X.CompressGZIP(file_shared_ptypes_label_proto_rawDescData)
+ })
+ return file_shared_ptypes_label_proto_rawDescData
+}
+
+var file_shared_ptypes_label_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_shared_ptypes_label_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_shared_ptypes_label_proto_goTypes = []interface{}{
+ (SelectorOp)(0), // 0: api.label.SelectorOp
+ (*Label)(nil), // 1: api.label.Label
+ (*Selector)(nil), // 2: api.label.Selector
+}
+var file_shared_ptypes_label_proto_depIdxs = []int32{
+ 0, // 0: api.label.Selector.op:type_name -> api.label.SelectorOp
+ 1, // [1:1] is the sub-list for method output_type
+ 1, // [1:1] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_shared_ptypes_label_proto_init() }
+func file_shared_ptypes_label_proto_init() {
+ if File_shared_ptypes_label_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_shared_ptypes_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Label); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_shared_ptypes_label_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Selector); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ file_shared_ptypes_label_proto_msgTypes[0].OneofWrappers = []interface{}{}
+ file_shared_ptypes_label_proto_msgTypes[1].OneofWrappers = []interface{}{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_shared_ptypes_label_proto_rawDesc,
+ NumEnums: 1,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_shared_ptypes_label_proto_goTypes,
+ DependencyIndexes: file_shared_ptypes_label_proto_depIdxs,
+ EnumInfos: file_shared_ptypes_label_proto_enumTypes,
+ MessageInfos: file_shared_ptypes_label_proto_msgTypes,
+ }.Build()
+ File_shared_ptypes_label_proto = out.File
+ file_shared_ptypes_label_proto_rawDesc = nil
+ file_shared_ptypes_label_proto_goTypes = nil
+ file_shared_ptypes_label_proto_depIdxs = nil
+}
diff --git a/integration-tests/deployment/memory/chain.go b/integration-tests/deployment/memory/chain.go
new file mode 100644
index 00000000000..153d9d19e93
--- /dev/null
+++ b/integration-tests/deployment/memory/chain.go
@@ -0,0 +1,74 @@
+package memory
+
+import (
+ "math/big"
+ "testing"
+ "time"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core"
+ gethtypes "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/params"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+ "github.com/stretchr/testify/require"
+)
+
+type EVMChain struct {
+ Backend *backends.SimulatedBackend
+ DeployerKey *bind.TransactOpts
+}
+
+// CCIP relies on block timestamps, but SimulatedBackend uses by default clock starting from 1970-01-01
+// This trick is used to move the clock closer to the current time. We set first block to be X hours ago.
+// Tests create plenty of transactions so this number can't be too low, every new block mined will tick the clock,
+// if you mine more than "X hours" transactions, SimulatedBackend will panic because generated timestamps will be in the future.
+func tweakChainTimestamp(t *testing.T, backend *backends.SimulatedBackend, tweak time.Duration) {
+ blockTime := time.Unix(int64(backend.Blockchain().CurrentHeader().Time), 0)
+ sinceBlockTime := time.Since(blockTime)
+ diff := sinceBlockTime - tweak
+ err := backend.AdjustTime(diff)
+ require.NoError(t, err, "unable to adjust time on simulated chain")
+ backend.Commit()
+ backend.Commit()
+}
+
+func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amount *big.Int, backend *backends.SimulatedBackend) {
+ nonce, err := backend.PendingNonceAt(Context(t), from.From)
+ require.NoError(t, err)
+ gp, err := backend.SuggestGasPrice(Context(t))
+ require.NoError(t, err)
+ rawTx := gethtypes.NewTx(&gethtypes.LegacyTx{
+ Nonce: nonce,
+ GasPrice: gp,
+ Gas: 21000,
+ To: &to,
+ Value: amount,
+ })
+ signedTx, err := from.Signer(from.From, rawTx)
+ require.NoError(t, err)
+ err = backend.SendTransaction(Context(t), signedTx)
+ require.NoError(t, err)
+ backend.Commit()
+}
+
+func GenerateChains(t *testing.T, numChains int) map[uint64]EVMChain {
+ chains := make(map[uint64]EVMChain)
+ for i := 0; i < numChains; i++ {
+ chainID := chainsel.TEST_90000001.EvmChainID + uint64(i)
+ key, err := crypto.GenerateKey()
+ require.NoError(t, err)
+ owner, err := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
+ require.NoError(t, err)
+ backend := backends.NewSimulatedBackend(core.GenesisAlloc{
+ owner.From: {Balance: big.NewInt(0).Mul(big.NewInt(100), big.NewInt(params.Ether))}}, 10000000)
+ tweakChainTimestamp(t, backend, time.Hour*8)
+ chains[chainID] = EVMChain{
+ Backend: backend,
+ DeployerKey: owner,
+ }
+ }
+ return chains
+}
diff --git a/integration-tests/deployment/memory/environment.go b/integration-tests/deployment/memory/environment.go
new file mode 100644
index 00000000000..d496d173c0f
--- /dev/null
+++ b/integration-tests/deployment/memory/environment.go
@@ -0,0 +1,139 @@
+package memory
+
+import (
+ "context"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/hashicorp/consul/sdk/freeport"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap/zapcore"
+
+ "github.com/smartcontractkit/chainlink/integration-tests/deployment"
+
+ "github.com/smartcontractkit/chainlink-common/pkg/logger"
+)
+
+const (
+ Memory = "memory"
+)
+
+type MemoryEnvironmentConfig struct {
+ Chains int
+ Nodes int
+ Bootstraps int
+ RegistryConfig RegistryConfig
+}
+
+// Needed for environment variables on the node which point to prexisitng addresses.
+// i.e. CapReg.
+func NewMemoryChains(t *testing.T, numChains int) map[uint64]deployment.Chain {
+ mchains := GenerateChains(t, numChains)
+ chains := make(map[uint64]deployment.Chain)
+ for cid, chain := range mchains {
+ sel, err := chainsel.SelectorFromChainId(cid)
+ require.NoError(t, err)
+ chains[sel] = deployment.Chain{
+ Selector: sel,
+ Client: chain.Backend,
+ DeployerKey: chain.DeployerKey,
+ Confirm: func(tx common.Hash) error {
+ for {
+ chain.Backend.Commit()
+ receipt, err := chain.Backend.TransactionReceipt(context.Background(), tx)
+ if err != nil {
+ t.Log("failed to get receipt", err)
+ continue
+ }
+ if receipt.Status == 0 {
+ t.Logf("Status (reverted) %d for txhash %s\n", receipt.Status, tx.String())
+ }
+ return nil
+ }
+ },
+ }
+ }
+ return chains
+}
+
+func NewNodes(t *testing.T, logLevel zapcore.Level, chains map[uint64]deployment.Chain, numNodes, numBootstraps int, registryConfig RegistryConfig) map[string]Node {
+ mchains := make(map[uint64]EVMChain)
+ for _, chain := range chains {
+ evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector)
+ if err != nil {
+ t.Fatal(err)
+ }
+ mchains[evmChainID] = EVMChain{
+ Backend: chain.Client.(*backends.SimulatedBackend),
+ DeployerKey: chain.DeployerKey,
+ }
+ }
+ nodesByPeerID := make(map[string]Node)
+ ports := freeport.GetN(t, numNodes)
+ var existingNumBootstraps int
+ for i := 0; i < numNodes; i++ {
+ bootstrap := false
+ if existingNumBootstraps < numBootstraps {
+ bootstrap = true
+ existingNumBootstraps++
+ }
+ node := NewNode(t, ports[i], mchains, logLevel, bootstrap, registryConfig)
+ nodesByPeerID[node.Keys.PeerID.String()] = *node
+ // Note in real env, this ID is allocated by JD.
+ }
+ return nodesByPeerID
+}
+
+func NewMemoryEnvironmentFromChainsNodes(t *testing.T,
+ lggr logger.Logger,
+ chains map[uint64]deployment.Chain,
+ nodes map[string]Node) deployment.Environment {
+ var nodeIDs []string
+ for id := range nodes {
+ nodeIDs = append(nodeIDs, id)
+ }
+ return deployment.Environment{
+ Name: Memory,
+ Offchain: NewMemoryJobClient(nodes),
+ // Note these have the p2p_ prefix.
+ NodeIDs: nodeIDs,
+ Chains: chains,
+ Logger: lggr,
+ }
+}
+
+//func NewMemoryEnvironmentExistingChains(t *testing.T, lggr logger.Logger,
+// chains map[uint64]deployment.Chain, config MemoryEnvironmentConfig) deployment.Environment {
+// nodes := NewNodes(t, chains, config.Nodes, config.Bootstraps, config.RegistryConfig)
+// var nodeIDs []string
+// for id := range nodes {
+// nodeIDs = append(nodeIDs, id)
+// }
+// return deployment.Environment{
+// Name: Memory,
+// Offchain: NewMemoryJobClient(nodes),
+// // Note these have the p2p_ prefix.
+// NodeIDs: nodeIDs,
+// Chains: chains,
+// Logger: lggr,
+// }
+//}
+
+// To be used by tests and any kind of deployment logic.
+func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, logLevel zapcore.Level, config MemoryEnvironmentConfig) deployment.Environment {
+ chains := NewMemoryChains(t, config.Chains)
+ nodes := NewNodes(t, logLevel, chains, config.Nodes, config.Bootstraps, config.RegistryConfig)
+ var nodeIDs []string
+ for id := range nodes {
+ nodeIDs = append(nodeIDs, id)
+ }
+ return deployment.Environment{
+ Name: Memory,
+ Offchain: NewMemoryJobClient(nodes),
+ NodeIDs: nodeIDs,
+ Chains: chains,
+ Logger: lggr,
+ }
+}
diff --git a/integration-tests/deployment/memory/job_client.go b/integration-tests/deployment/memory/job_client.go
new file mode 100644
index 00000000000..a9e837eab22
--- /dev/null
+++ b/integration-tests/deployment/memory/job_client.go
@@ -0,0 +1,126 @@
+package memory
+
+import (
+ "context"
+ "strconv"
+
+ "github.com/ethereum/go-ethereum/common"
+ "google.golang.org/grpc"
+
+ jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1"
+ nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1"
+ "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/validate"
+)
+
+type JobClient struct {
+ Nodes map[string]Node
+}
+
+func (j JobClient) GetNode(ctx context.Context, in *nodev1.GetNodeRequest, opts ...grpc.CallOption) (*nodev1.GetNodeResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) ListNodes(ctx context.Context, in *nodev1.ListNodesRequest, opts ...grpc.CallOption) (*nodev1.ListNodesResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) ListNodeChainConfigs(ctx context.Context, in *nodev1.ListNodeChainConfigsRequest, opts ...grpc.CallOption) (*nodev1.ListNodeChainConfigsResponse, error) {
+ n := j.Nodes[in.Filter.NodeId]
+ offpk := n.Keys.OCRKeyBundle.OffchainPublicKey()
+ cpk := n.Keys.OCRKeyBundle.ConfigEncryptionPublicKey()
+ var chainConfigs []*nodev1.ChainConfig
+ for evmChainID, transmitter := range n.Keys.TransmittersByEVMChainID {
+ chainConfigs = append(chainConfigs, &nodev1.ChainConfig{
+ Chain: &nodev1.Chain{
+ Id: strconv.Itoa(int(evmChainID)),
+ Type: nodev1.ChainType_CHAIN_TYPE_EVM,
+ },
+ AccountAddress: transmitter.String(),
+ AdminAddress: "",
+ Ocr1Config: nil,
+ Ocr2Config: &nodev1.OCR2Config{
+ Enabled: true,
+ IsBootstrap: n.IsBoostrap,
+ P2PKeyBundle: &nodev1.OCR2Config_P2PKeyBundle{
+ PeerId: n.Keys.PeerID.String(),
+ },
+ OcrKeyBundle: &nodev1.OCR2Config_OCRKeyBundle{
+ BundleId: n.Keys.OCRKeyBundle.ID(),
+ ConfigPublicKey: common.Bytes2Hex(cpk[:]),
+ OffchainPublicKey: common.Bytes2Hex(offpk[:]),
+ OnchainSigningAddress: n.Keys.OCRKeyBundle.OnChainPublicKey(),
+ },
+ Multiaddr: n.Addr.String(),
+ Plugins: nil,
+ ForwarderAddress: "",
+ },
+ })
+ }
+
+ // TODO: I think we can pull it from the feeds manager.
+ return &nodev1.ListNodeChainConfigsResponse{
+ ChainConfigs: chainConfigs,
+ }, nil
+}
+
+func (j JobClient) GetJob(ctx context.Context, in *jobv1.GetJobRequest, opts ...grpc.CallOption) (*jobv1.GetJobResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) GetProposal(ctx context.Context, in *jobv1.GetProposalRequest, opts ...grpc.CallOption) (*jobv1.GetProposalResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) ListJobs(ctx context.Context, in *jobv1.ListJobsRequest, opts ...grpc.CallOption) (*jobv1.ListJobsResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) ListProposals(ctx context.Context, in *jobv1.ListProposalsRequest, opts ...grpc.CallOption) (*jobv1.ListProposalsResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) ProposeJob(ctx context.Context, in *jobv1.ProposeJobRequest, opts ...grpc.CallOption) (*jobv1.ProposeJobResponse, error) {
+ n := j.Nodes[in.NodeId]
+ // TODO: Use FMS
+ jb, err := validate.ValidatedCCIPSpec(in.Spec)
+ if err != nil {
+ return nil, err
+ }
+ err = n.App.AddJobV2(ctx, &jb)
+ if err != nil {
+ return nil, err
+ }
+ return &jobv1.ProposeJobResponse{Proposal: &jobv1.Proposal{
+ Id: "",
+ Version: 0,
+ // Auto approve for now
+ Status: jobv1.ProposalStatus_PROPOSAL_STATUS_APPROVED,
+ DeliveryStatus: jobv1.ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_DELIVERED,
+ Spec: in.Spec,
+ JobId: jb.ExternalJobID.String(),
+ CreatedAt: nil,
+ UpdatedAt: nil,
+ AckedAt: nil,
+ ResponseReceivedAt: nil,
+ }}, nil
+}
+
+func (j JobClient) RevokeJob(ctx context.Context, in *jobv1.RevokeJobRequest, opts ...grpc.CallOption) (*jobv1.RevokeJobResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func (j JobClient) DeleteJob(ctx context.Context, in *jobv1.DeleteJobRequest, opts ...grpc.CallOption) (*jobv1.DeleteJobResponse, error) {
+ //TODO implement me
+ panic("implement me")
+}
+
+func NewMemoryJobClient(nodesByPeerID map[string]Node) *JobClient {
+ return &JobClient{nodesByPeerID}
+}
diff --git a/integration-tests/deployment/memory/node.go b/integration-tests/deployment/memory/node.go
new file mode 100644
index 00000000000..7050cad53d1
--- /dev/null
+++ b/integration-tests/deployment/memory/node.go
@@ -0,0 +1,291 @@
+package memory
+
+import (
+ "context"
+ "fmt"
+ "math/big"
+ "net"
+ "net/http"
+ "strconv"
+ "testing"
+ "time"
+
+ "github.com/ethereum/go-ethereum/common"
+ gethtypes "github.com/ethereum/go-ethereum/core/types"
+ chainsel "github.com/smartcontractkit/chain-selectors"
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap/zapcore"
+
+ "github.com/smartcontractkit/chainlink-common/pkg/config"
+ "github.com/smartcontractkit/chainlink-common/pkg/loop"
+ "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client"
+ v2toml "github.com/smartcontractkit/chainlink/v2/core/chains/evm/config/toml"
+ evmutils "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big"
+ "github.com/smartcontractkit/chainlink/v2/core/chains/legacyevm"
+ configv2 "github.com/smartcontractkit/chainlink/v2/core/config/toml"
+ "github.com/smartcontractkit/chainlink/v2/core/logger"
+ "github.com/smartcontractkit/chainlink/v2/core/logger/audit"
+ "github.com/smartcontractkit/chainlink/v2/core/services/chainlink"
+ "github.com/smartcontractkit/chainlink/v2/core/services/keystore"
+ "github.com/smartcontractkit/chainlink/v2/core/services/keystore/chaintype"
+ "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/ocr2key"
+ "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/p2pkey"
+ "github.com/smartcontractkit/chainlink/v2/core/services/relay"
+ "github.com/smartcontractkit/chainlink/v2/core/utils"
+ "github.com/smartcontractkit/chainlink/v2/core/utils/testutils/heavyweight"
+ "github.com/smartcontractkit/chainlink/v2/plugins"
+)
+
+func Context(tb testing.TB) context.Context {
+ ctx := context.Background()
+ var cancel func()
+ switch t := tb.(type) {
+ case *testing.T:
+ if d, ok := t.Deadline(); ok {
+ ctx, cancel = context.WithDeadline(ctx, d)
+ }
+ }
+ if cancel == nil {
+ ctx, cancel = context.WithCancel(ctx)
+ }
+ tb.Cleanup(cancel)
+ return ctx
+}
+
+type Node struct {
+ App chainlink.Application
+ // Transmitter key/OCR keys for this node
+ Keys Keys
+ Addr net.TCPAddr
+ IsBoostrap bool
+}
+
+func (n Node) ReplayLogs(chains map[uint64]uint64) error {
+ for sel, block := range chains {
+ chainID, _ := chainsel.ChainIdFromSelector(sel)
+ if err := n.App.ReplayFromBlock(big.NewInt(int64(chainID)), block, false); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+type RegistryConfig struct {
+ EVMChainID uint64
+ Contract common.Address
+}
+
+// Creates a CL node which is:
+// - Configured for OCR
+// - Configured for the chains specified
+// - Transmitter keys funded.
+func NewNode(
+ t *testing.T,
+ port int, // Port for the P2P V2 listener.
+ chains map[uint64]EVMChain,
+ logLevel zapcore.Level,
+ bootstrap bool,
+ registryConfig RegistryConfig,
+) *Node {
+ // Do not want to load fixtures as they contain a dummy chainID.
+ // Create database and initial configuration.
+ cfg, db := heavyweight.FullTestDBNoFixturesV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
+ c.Insecure.OCRDevelopmentMode = ptr(true) // Disables ocr spec validation so we can have fast polling for the test.
+
+ c.Feature.LogPoller = ptr(true)
+
+ // P2P V2 configs.
+ c.P2P.V2.Enabled = ptr(true)
+ c.P2P.V2.DeltaDial = config.MustNewDuration(500 * time.Millisecond)
+ c.P2P.V2.DeltaReconcile = config.MustNewDuration(5 * time.Second)
+ c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", port)}
+
+ // Enable Capabilities, This is a pre-requisite for registrySyncer to work.
+ if registryConfig.Contract != common.HexToAddress("0x0") {
+ c.Capabilities.ExternalRegistry.NetworkID = ptr(relay.NetworkEVM)
+ c.Capabilities.ExternalRegistry.ChainID = ptr(strconv.FormatUint(uint64(registryConfig.EVMChainID), 10))
+ c.Capabilities.ExternalRegistry.Address = ptr(registryConfig.Contract.String())
+ }
+
+ // OCR configs
+ c.OCR.Enabled = ptr(false)
+ c.OCR.DefaultTransactionQueueDepth = ptr(uint32(200))
+ c.OCR2.Enabled = ptr(true)
+ c.OCR2.ContractPollInterval = config.MustNewDuration(5 * time.Second)
+
+ c.Log.Level = ptr(configv2.LogLevel(logLevel))
+
+ var chainConfigs v2toml.EVMConfigs
+ for chainID := range chains {
+ chainConfigs = append(chainConfigs, createConfigV2Chain(chainID))
+ }
+ c.EVM = chainConfigs
+ })
+
+ // Set logging.
+ lggr := logger.TestLogger(t)
+ lggr.SetLogLevel(logLevel)
+
+ // Create clients for the core node backed by sim.
+ clients := make(map[uint64]client.Client)
+ for chainID, chain := range chains {
+ clients[chainID] = client.NewSimulatedBackendClient(t, chain.Backend, big.NewInt(int64(chainID)))
+ }
+
+ // Create keystore
+ master := keystore.New(db, utils.FastScryptParams, lggr)
+ kStore := KeystoreSim{
+ eks: &EthKeystoreSim{
+ Eth: master.Eth(),
+ },
+ csa: master.CSA(),
+ }
+
+ // Build evm factory using clients + keystore.
+ mailMon := mailbox.NewMonitor("node", lggr.Named("mailbox"))
+ evmOpts := chainlink.EVMFactoryConfig{
+ ChainOpts: legacyevm.ChainOpts{
+ AppConfig: cfg,
+ GenEthClient: func(i *big.Int) client.Client {
+ ethClient, ok := clients[i.Uint64()]
+ if !ok {
+ t.Fatal("no backend for chainID", i)
+ }
+ return ethClient
+ },
+ MailMon: mailMon,
+ DS: db,
+ },
+ CSAETHKeystore: kStore,
+ }
+
+ // Build relayer factory with EVM.
+ relayerFactory := chainlink.RelayerFactory{
+ Logger: lggr,
+ LoopRegistry: plugins.NewLoopRegistry(lggr.Named("LoopRegistry"), cfg.Tracing()),
+ GRPCOpts: loop.GRPCOpts{},
+ }
+ initOps := []chainlink.CoreRelayerChainInitFunc{chainlink.InitEVM(context.Background(), relayerFactory, evmOpts)}
+ rci, err := chainlink.NewCoreRelayerChainInteroperators(initOps...)
+ require.NoError(t, err)
+
+ app, err := chainlink.NewApplication(chainlink.ApplicationOpts{
+ Config: cfg,
+ DS: db,
+ KeyStore: master,
+ RelayerChainInteroperators: rci,
+ Logger: lggr,
+ ExternalInitiatorManager: nil,
+ CloseLogger: lggr.Sync,
+ UnrestrictedHTTPClient: &http.Client{},
+ RestrictedHTTPClient: &http.Client{},
+ AuditLogger: audit.NoopLogger,
+ MailMon: mailMon,
+ LoopRegistry: plugins.NewLoopRegistry(lggr, cfg.Tracing()),
+ })
+ require.NoError(t, err)
+ t.Cleanup(func() {
+ require.NoError(t, db.Close())
+ })
+ keys := CreateKeys(t, app, chains)
+
+ return &Node{
+ App: app,
+ Keys: keys,
+ Addr: net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: port},
+ IsBoostrap: bootstrap,
+ }
+}
+
+type Keys struct {
+ PeerID p2pkey.PeerID
+ TransmittersByEVMChainID map[uint64]common.Address
+ OCRKeyBundle ocr2key.KeyBundle
+}
+
+func CreateKeys(t *testing.T,
+ app chainlink.Application, chains map[uint64]EVMChain) Keys {
+ ctx := Context(t)
+ require.NoError(t, app.GetKeyStore().Unlock(ctx, "password"))
+ _, err := app.GetKeyStore().P2P().Create(ctx)
+ require.NoError(t, err)
+
+ p2pIDs, err := app.GetKeyStore().P2P().GetAll()
+ require.NoError(t, err)
+ require.Len(t, p2pIDs, 1)
+ peerID := p2pIDs[0].PeerID()
+ // create a transmitter for each chain
+ transmitters := make(map[uint64]common.Address)
+ for chainID, chain := range chains {
+ cid := big.NewInt(int64(chainID))
+ addrs, err2 := app.GetKeyStore().Eth().EnabledAddressesForChain(Context(t), cid)
+ require.NoError(t, err2)
+ if len(addrs) == 1 {
+ // just fund the address
+ fundAddress(t, chain.DeployerKey, addrs[0], assets.Ether(10).ToInt(), chain.Backend)
+ transmitters[chainID] = addrs[0]
+ } else {
+ // create key and fund it
+ _, err3 := app.GetKeyStore().Eth().Create(Context(t), cid)
+ require.NoError(t, err3, "failed to create key for chain", chainID)
+ sendingKeys, err3 := app.GetKeyStore().Eth().EnabledAddressesForChain(Context(t), cid)
+ require.NoError(t, err3)
+ require.Len(t, sendingKeys, 1)
+ fundAddress(t, chain.DeployerKey, sendingKeys[0], assets.Ether(10).ToInt(), chain.Backend)
+ transmitters[chainID] = sendingKeys[0]
+ }
+ }
+ require.Len(t, transmitters, len(chains))
+
+ keybundle, err := app.GetKeyStore().OCR2().Create(ctx, chaintype.EVM)
+ require.NoError(t, err)
+ return Keys{
+ PeerID: peerID,
+ TransmittersByEVMChainID: transmitters,
+ OCRKeyBundle: keybundle,
+ }
+}
+
+func createConfigV2Chain(chainID uint64) *v2toml.EVMConfig {
+ chainIDBig := evmutils.NewI(int64(chainID))
+ chain := v2toml.Defaults(chainIDBig)
+ chain.GasEstimator.LimitDefault = ptr(uint64(5e6))
+ chain.LogPollInterval = config.MustNewDuration(1000 * time.Millisecond)
+ chain.Transactions.ForwardersEnabled = ptr(false)
+ chain.FinalityDepth = ptr(uint32(2))
+ return &v2toml.EVMConfig{
+ ChainID: chainIDBig,
+ Enabled: ptr(true),
+ Chain: chain,
+ Nodes: v2toml.EVMNodes{&v2toml.Node{}},
+ }
+}
+
+func ptr[T any](v T) *T { return &v }
+
+var _ keystore.Eth = &EthKeystoreSim{}
+
+type EthKeystoreSim struct {
+ keystore.Eth
+}
+
+// override
+func (e *EthKeystoreSim) SignTx(ctx context.Context, address common.Address, tx *gethtypes.Transaction, chainID *big.Int) (*gethtypes.Transaction, error) {
+ // always sign with chain id 1337 for the simulated backend
+ return e.Eth.SignTx(ctx, address, tx, big.NewInt(1337))
+}
+
+type KeystoreSim struct {
+ eks keystore.Eth
+ csa keystore.CSA
+}
+
+func (e KeystoreSim) Eth() keystore.Eth {
+ return e.eks
+}
+
+func (e KeystoreSim) CSA() keystore.CSA {
+ return e.csa
+}
diff --git a/integration-tests/deployment/memory/node_test.go b/integration-tests/deployment/memory/node_test.go
new file mode 100644
index 00000000000..d64c7717fc1
--- /dev/null
+++ b/integration-tests/deployment/memory/node_test.go
@@ -0,0 +1,23 @@
+package memory
+
+import (
+ "testing"
+
+ "github.com/hashicorp/consul/sdk/freeport"
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap/zapcore"
+)
+
+func TestNode(t *testing.T) {
+ chains := GenerateChains(t, 3)
+ ports := freeport.GetN(t, 1)
+ node := NewNode(t, ports[0], chains, zapcore.DebugLevel, false, RegistryConfig{})
+ // We expect 3 transmitter keys
+ keys, err := node.App.GetKeyStore().Eth().GetAll(Context(t))
+ require.NoError(t, err)
+ require.Len(t, keys, 3)
+ // We expect 3 chains supported
+ evmChains := node.App.GetRelayers().LegacyEVMChains().Slice()
+ require.NoError(t, err)
+ require.Len(t, evmChains, 3)
+}
diff --git a/integration-tests/deployment/migrations.go b/integration-tests/deployment/migrations.go
new file mode 100644
index 00000000000..5defd56075b
--- /dev/null
+++ b/integration-tests/deployment/migrations.go
@@ -0,0 +1,28 @@
+package deployment
+
+import (
+ owner_wrappers "github.com/smartcontractkit/ccip-owner-contracts/gethwrappers"
+)
+
+// TODO: Move to real MCM structs once available.
+type Proposal struct {
+ // keccak256(abi.encode(root, validUntil)) is what is signed by MCMS
+ // signers.
+ ValidUntil uint32
+ // Leaves are the items in the proposal.
+ // Uses these to generate the root as well as display whats in the root.
+ // These Ops may be destined for distinct chains.
+ Ops []owner_wrappers.ManyChainMultiSigOp
+}
+
+func (p Proposal) String() string {
+ // TODO
+ return ""
+}
+
+// Services as input to CI/Async tasks
+type MigrationOutput struct {
+ JobSpecs map[string][]string
+ Proposals []Proposal
+ AddressBook AddressBook
+}
diff --git a/integration-tests/go.mod b/integration-tests/go.mod
index 5b698badb1a..fd00d2c7ad0 100644
--- a/integration-tests/go.mod
+++ b/integration-tests/go.mod
@@ -18,6 +18,7 @@ require (
github.com/go-resty/resty/v2 v2.11.0
github.com/google/go-cmp v0.6.0
github.com/google/uuid v1.6.0
+ github.com/hashicorp/consul/sdk v0.16.0
github.com/jmoiron/sqlx v1.4.0
github.com/lib/pq v1.10.9
github.com/manifoldco/promptui v0.9.0
@@ -31,8 +32,10 @@ require (
github.com/segmentio/ksuid v1.0.4
github.com/shopspring/decimal v1.4.0
github.com/slack-go/slack v0.12.2
+ github.com/smartcontractkit/ccip-owner-contracts v0.0.0-20240808195812-ae0378684685
github.com/smartcontractkit/chain-selectors v1.0.21
github.com/smartcontractkit/chainlink-automation v1.0.4
+ github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834
github.com/smartcontractkit/chainlink-testing-framework v1.33.0
github.com/smartcontractkit/chainlink-testing-framework/grafana v0.0.0-20240405215812-5a72bc9af239
@@ -42,7 +45,7 @@ require (
github.com/smartcontractkit/libocr v0.0.0-20240717100443-f6226e09bee7
github.com/smartcontractkit/seth v1.0.12
github.com/smartcontractkit/wasp v0.4.5
- github.com/spf13/cobra v1.8.0
+ github.com/spf13/cobra v1.8.1
github.com/stretchr/testify v1.9.0
github.com/test-go/testify v1.1.4
github.com/testcontainers/testcontainers-go v0.28.0
@@ -50,13 +53,16 @@ require (
go.uber.org/atomic v1.11.0
go.uber.org/multierr v1.11.0
go.uber.org/zap v1.27.0
- golang.org/x/crypto v0.25.0
+ golang.org/x/crypto v0.26.0
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
- golang.org/x/sync v0.7.0
- golang.org/x/text v0.16.0
+ golang.org/x/sync v0.8.0
+ golang.org/x/text v0.17.0
+ google.golang.org/grpc v1.65.0
+ google.golang.org/protobuf v1.34.2
gopkg.in/guregu/null.v4 v4.0.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
+ gotest.tools/v3 v3.5.1
k8s.io/apimachinery v0.28.2
)
@@ -88,8 +94,8 @@ require (
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
- github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/Microsoft/go-winio v0.6.2 // indirect
+ github.com/Microsoft/hcsshim v0.11.5 // indirect
github.com/NethermindEth/juno v0.3.1 // indirect
github.com/NethermindEth/starknet.go v0.7.1-0.20240401080518-34a506f3cfdb // indirect
github.com/VictoriaMetrics/fastcache v1.12.1 // indirect
@@ -132,7 +138,8 @@ require (
github.com/confio/ics23/go v0.9.0 // indirect
github.com/consensys/bavard v0.1.13 // indirect
github.com/consensys/gnark-crypto v0.12.1 // indirect
- github.com/containerd/containerd v1.7.12 // indirect
+ github.com/containerd/containerd v1.7.18 // indirect
+ github.com/containerd/errdefs v0.1.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
@@ -158,7 +165,7 @@ require (
github.com/dgraph-io/ristretto v0.1.1 // indirect
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
- github.com/distribution/reference v0.5.0 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
github.com/docker/distribution v2.8.2+incompatible // indirect
github.com/docker/docker v25.0.2+incompatible // indirect
github.com/docker/go-connections v0.5.0 // indirect
@@ -179,7 +186,7 @@ require (
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fvbommel/sortorder v1.1.0 // indirect
- github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+ github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gagliardetto/binary v0.7.7 // indirect
github.com/gagliardetto/solana-go v1.8.4 // indirect
github.com/gagliardetto/treeout v0.1.4 // indirect
@@ -198,7 +205,7 @@ require (
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-openapi/analysis v0.21.4 // indirect
github.com/go-openapi/errors v0.20.4 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
@@ -210,7 +217,7 @@ require (
github.com/go-openapi/validate v0.22.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
- github.com/go-playground/validator/v10 v10.15.5 // indirect
+ github.com/go-playground/validator/v10 v10.22.0 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-webauthn/webauthn v0.9.4 // indirect
github.com/go-webauthn/x v0.1.5 // indirect
@@ -257,8 +264,7 @@ require (
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/gtank/merlin v0.1.1 // indirect
github.com/gtank/ristretto255 v0.1.2 // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
- github.com/hashicorp/consul/sdk v0.16.0 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-envparse v0.1.0 // indirect
@@ -303,13 +309,13 @@ require (
github.com/json-iterator/go v1.1.12 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/kelseyhightower/envconfig v1.4.0 // indirect
- github.com/klauspost/compress v1.17.3 // indirect
+ github.com/klauspost/compress v1.17.7 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leanovate/gopter v0.2.10-0.20210127095200-9abe2343507a // indirect
- github.com/leodido/go-urn v1.2.4 // indirect
+ github.com/leodido/go-urn v1.4.0 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/linxGnu/grocksdb v1.7.16 // indirect
@@ -349,7 +355,7 @@ require (
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e // indirect
github.com/opentracing-contrib/go-stdlib v1.0.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
@@ -384,7 +390,6 @@ require (
github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb // indirect
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 // indirect
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240718160222-2dc0c8136bfa // indirect
github.com/smartcontractkit/chainlink-feeds v0.0.0-20240710170203-5b41615da827 // indirect
@@ -392,14 +397,14 @@ require (
github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240709043547-03612098f799 // indirect
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 // indirect
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1 // indirect
- github.com/smartcontractkit/wsrpc v0.7.3 // indirect
+ github.com/smartcontractkit/wsrpc v0.8.1 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
github.com/sony/gobreaker v0.5.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/spf13/viper v1.18.2 // indirect
+ github.com/spf13/viper v1.19.0 // indirect
github.com/status-im/keycard-go v0.2.0 // indirect
github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect
github.com/stretchr/objx v0.5.2 // indirect
@@ -431,14 +436,14 @@ require (
go.dedis.ch/fixbuf v1.0.3 // indirect
go.dedis.ch/kyber/v3 v3.1.0 // indirect
go.etcd.io/bbolt v1.3.8 // indirect
- go.etcd.io/etcd/api/v3 v3.5.10 // indirect
- go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
- go.etcd.io/etcd/client/v3 v3.5.10 // indirect
+ go.etcd.io/etcd/api/v3 v3.5.12 // indirect
+ go.etcd.io/etcd/client/pkg/v3 v3.5.12 // indirect
+ go.etcd.io/etcd/client/v3 v3.5.12 // indirect
go.mongodb.org/mongo-driver v1.15.0 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/collector/pdata v1.0.0-rcv0016 // indirect
go.opentelemetry.io/collector/semconv v0.87.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
go.opentelemetry.io/otel v1.28.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
@@ -455,8 +460,8 @@ require (
golang.org/x/mod v0.19.0 // indirect
golang.org/x/net v0.27.0 // indirect
golang.org/x/oauth2 v0.21.0 // indirect
- golang.org/x/sys v0.22.0 // indirect
- golang.org/x/term v0.22.0 // indirect
+ golang.org/x/sys v0.23.0 // indirect
+ golang.org/x/term v0.23.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.23.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
@@ -464,8 +469,6 @@ require (
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d // indirect
- google.golang.org/grpc v1.65.0 // indirect
- google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
@@ -478,7 +481,7 @@ require (
k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f // indirect
k8s.io/kubectl v0.28.2 // indirect
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect
- nhooyr.io/websocket v1.8.7 // indirect
+ nhooyr.io/websocket v1.8.10 // indirect
pgregory.net/rapid v1.1.0 // indirect
rsc.io/tmplfunc v0.0.3 // indirect
sigs.k8s.io/controller-runtime v0.16.2 // indirect
diff --git a/integration-tests/go.sum b/integration-tests/go.sum
index 981b21239a6..dacfa7764ed 100644
--- a/integration-tests/go.sum
+++ b/integration-tests/go.sum
@@ -135,10 +135,10 @@ github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
-github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
-github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
-github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/Microsoft/hcsshim v0.11.5 h1:haEcLNpj9Ka1gd3B3tAEs9CpE0c+1IhoL59w/exYU38=
+github.com/Microsoft/hcsshim v0.11.5/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU=
github.com/NethermindEth/juno v0.3.1 h1:AW72LiAm9gqUeCVJWvepnZcTnpU4Vkl0KzPMxS+42FA=
github.com/NethermindEth/juno v0.3.1/go.mod h1:SGbTpgGaCsxhFsKOid7Ylnz//WZ8swtILk+NbHGsk/Q=
github.com/NethermindEth/starknet.go v0.7.1-0.20240401080518-34a506f3cfdb h1:Mv8SscePPyw2ju4igIJAjFgcq5zCQfjgbz53DwYu5mc=
@@ -317,10 +317,12 @@ github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/Yj
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M=
github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
-github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
-github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
+github.com/containerd/containerd v1.7.18 h1:jqjZTQNfXGoEaZdW1WwPU0RqSn1Bm2Ay/KJPUuO8nao=
+github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4=
github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM=
github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
+github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM=
+github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
@@ -364,8 +366,8 @@ github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHf
github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
-github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
+github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ=
github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs=
github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA=
@@ -411,8 +413,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/digitalocean/godo v1.99.0 h1:gUHO7n9bDaZFWvbzOum4bXE0/09ZuYA9yA8idQHX57E=
github.com/digitalocean/godo v1.99.0/go.mod h1:SsS2oXo2rznfM/nORlZ/6JaUJZFhmKTib1YhopUc8NA=
-github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
-github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
@@ -481,8 +483,8 @@ github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQ
github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
github.com/fxamacker/cbor/v2 v2.6.0 h1:sU6J2usfADwWlYDAFhZBQ6TnLFBHxgesMrQfQgk1tWA=
github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
-github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
+github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
+github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY=
github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM=
github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw=
@@ -510,7 +512,6 @@ github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4 h1:Z9J0PVIt1PuibO
github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4/go.mod h1:CEPcgZiz8998l9E8fDm16h8UfHRL7b+5oG0j/0koeVw=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
-github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
@@ -540,8 +541,9 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo=
github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA=
-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
+github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY=
github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc=
github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo=
@@ -577,18 +579,14 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU=
github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
-github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
-github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
-github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
-github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7NLylN+x8TTueE24=
-github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
+github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao=
+github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
@@ -632,15 +630,6 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
-github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
-github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
-github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
-github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
-github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=
-github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
@@ -757,7 +746,6 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -765,8 +753,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
-github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
+github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
github.com/gophercloud/gophercloud v1.5.0 h1:cDN6XFCLKiiqvYpjQLq9AiM7RDRbIC9450WpPH+yvXo=
github.com/gophercloud/gophercloud v1.5.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -781,7 +769,6 @@ github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kX
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY=
github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ=
-github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
@@ -833,8 +820,8 @@ github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/b
github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc=
github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
@@ -1013,7 +1000,6 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
@@ -1027,12 +1013,12 @@ github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dv
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA=
github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
+github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
+github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
@@ -1055,9 +1041,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leanovate/gopter v0.2.10-0.20210127095200-9abe2343507a h1:dHCfT5W7gghzPtfsW488uPmEOm85wewI+ypUwibyTdU=
github.com/leanovate/gopter v0.2.10-0.20210127095200-9abe2343507a/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
-github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
-github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
+github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
+github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
@@ -1176,7 +1161,6 @@ github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
@@ -1230,8 +1214,8 @@ github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs=
github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg=
github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e h1:4cPxUYdgaGzZIT5/j0IfqOrrXmq6bG8AwvwisMXpdrg=
@@ -1388,12 +1372,14 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/slack-go/slack v0.12.2 h1:x3OppyMyGIbbiyFhsBmpf9pwkUzMhthJMRNmNlA4LaQ=
github.com/slack-go/slack v0.12.2/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw=
+github.com/smartcontractkit/ccip-owner-contracts v0.0.0-20240808195812-ae0378684685 h1:jakAsdhDxV4cMgRAcSvHraXjyePi8umG5SEUTGFvuy8=
+github.com/smartcontractkit/ccip-owner-contracts v0.0.0-20240808195812-ae0378684685/go.mod h1:p7L/xNEQpHDdZtgFA6/FavuZHqvV3kYhQysxBywmq1k=
github.com/smartcontractkit/chain-selectors v1.0.21 h1:KCR9SA7PhOexaBzFieHoLv1WonwhVOPtOStpqTmLC4E=
github.com/smartcontractkit/chain-selectors v1.0.21/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb h1:iXBb4Zg/3jh/dWa6DVz1pFwc0eGfqVY2Pgs2N91BWs0=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f h1:lQZBOjeYFpCdk0mGQUhbrJipd00tu49xK4zSijC/9Co=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834 h1:pTf4xdcmiWBqWZ6rTy2RMTDBzhHk89VC1pM7jXKQztI=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834/go.mod h1:fh9eBbrReCmv31bfz52ENCAMa7nTKQbdhb2B3+S2VGo=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 h1:NBQLtqk8zsyY4qTJs+NElI3aDFTcAo83JHvqD04EvB0=
@@ -1426,8 +1412,8 @@ github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1 h1:D
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1/go.mod h1:G5Sd/yzHWf26rQ+X0nG9E0buKPqRGPMJAfk2gwCzOOw=
github.com/smartcontractkit/wasp v0.4.5 h1:pgiXwBci2m15eo33AzspzhpNG/gxg+8QGxl+I5LpfsQ=
github.com/smartcontractkit/wasp v0.4.5/go.mod h1:eVhBVLbVv0qORUlN7aR5C4aTN/lTYO3KnN1erO4ROOI=
-github.com/smartcontractkit/wsrpc v0.7.3 h1:CKYZfawZShZGfvsQep1F9oBansnFk9ByZPCdTMpLphw=
-github.com/smartcontractkit/wsrpc v0.7.3/go.mod h1:sj7QX2NQibhkhxTfs3KOhAj/5xwgqMipTvJVSssT9i0=
+github.com/smartcontractkit/wsrpc v0.8.1 h1:kk0SXLqWrWaZ3J6c7n8D0NZ2uTMBBBpG5dZZXZX8UGE=
+github.com/smartcontractkit/wsrpc v0.8.1/go.mod h1:yfg8v8fPLXkb6Mcnx6Pm/snP6jJ0r5Kf762Yd1a/KpA=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
@@ -1450,8 +1436,8 @@ github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cA
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
-github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
-github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
+github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
+github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -1459,8 +1445,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
-github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
-github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
+github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
+github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA=
github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg=
github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4=
@@ -1482,7 +1468,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
@@ -1530,9 +1515,7 @@ github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaO
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
-github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
@@ -1599,12 +1582,12 @@ go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYr
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
-go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
-go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
-go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
-go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
-go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
-go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
+go.etcd.io/etcd/api/v3 v3.5.12 h1:W4sw5ZoU2Juc9gBWuLk5U6fHfNVyY1WC5g9uiXZio/c=
+go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
+go.etcd.io/etcd/client/pkg/v3 v3.5.12 h1:EYDL6pWwyOsylrQyLp2w+HkQ46ATiOvoEdMarindU2A=
+go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
+go.etcd.io/etcd/client/v3 v3.5.12 h1:v5lCPXn1pf1Uu3M4laUE2hp/geOTc5uPcYYsNe1lDxg=
+go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw=
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng=
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
@@ -1626,8 +1609,8 @@ go.opentelemetry.io/collector/semconv v0.87.0 h1:BsG1jdLLRCBRlvUujk4QA86af7r/ZXn
go.opentelemetry.io/collector/semconv v0.87.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw=
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 h1:1f31+6grJmV3X4lxcEvUy13i5/kfDw1nJZwhd8mA4tg=
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0/go.mod h1:1P/02zM3OwkX9uki+Wmxw3a5GVb6KUXRsa7m7bOC9Fg=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
@@ -1676,7 +1659,6 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
-go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s=
@@ -1711,8 +1693,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
-golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
+golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
+golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1831,8 +1813,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
-golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
+golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1920,8 +1902,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
-golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
+golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -1933,8 +1915,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
-golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
-golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
+golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
+golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1948,8 +1930,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
-golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
+golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2047,8 +2029,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY=
-google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
+google.golang.org/api v0.171.0 h1:w174hnBPqut76FzW5Qaupt7zY8Kql6fiVjgys4f58sU=
+google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -2171,7 +2153,6 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -2202,8 +2183,8 @@ k8s.io/kubectl v0.28.2 h1:fOWOtU6S0smdNjG1PB9WFbqEIMlkzU5ahyHkc7ESHgM=
k8s.io/kubectl v0.28.2/go.mod h1:6EQWTPySF1fn7yKoQZHYf9TPwIl2AygHEcJoxFekr64=
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak=
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
-nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
+nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q=
+nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod
index a85ab009d6c..a90826f599a 100644
--- a/integration-tests/load/go.mod
+++ b/integration-tests/load/go.mod
@@ -35,13 +35,15 @@ require (
cosmossdk.io/depinject v1.0.0-alpha.4 // indirect
cosmossdk.io/errors v1.0.1 // indirect
cosmossdk.io/math v1.3.0 // indirect
+ github.com/containerd/errdefs v0.1.0 // indirect
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
- github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb // indirect
+ github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f // indirect
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 // indirect
+ github.com/testcontainers/testcontainers-go v0.28.0 // indirect
k8s.io/apimachinery v0.30.2 // indirect
)
@@ -69,8 +71,8 @@ require (
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.2.1 // indirect
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
- github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/Microsoft/go-winio v0.6.2 // indirect
+ github.com/Microsoft/hcsshim v0.11.5 // indirect
github.com/NethermindEth/juno v0.3.1 // indirect
github.com/NethermindEth/starknet.go v0.7.1-0.20240401080518-34a506f3cfdb // indirect
github.com/VictoriaMetrics/fastcache v1.12.1 // indirect
@@ -114,7 +116,7 @@ require (
github.com/confio/ics23/go v0.9.0 // indirect
github.com/consensys/bavard v0.1.13 // indirect
github.com/consensys/gnark-crypto v0.12.1 // indirect
- github.com/containerd/containerd v1.7.12 // indirect
+ github.com/containerd/containerd v1.7.18 // indirect
github.com/containerd/continuity v0.4.3 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
@@ -141,7 +143,7 @@ require (
github.com/dgraph-io/ristretto v0.1.1 // indirect
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
- github.com/distribution/reference v0.5.0 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
github.com/docker/distribution v2.8.2+incompatible // indirect
github.com/docker/docker v25.0.2+incompatible // indirect
github.com/docker/go-connections v0.5.0 // indirect
@@ -163,7 +165,7 @@ require (
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fvbommel/sortorder v1.1.0 // indirect
github.com/fxamacker/cbor/v2 v2.6.0 // indirect
- github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+ github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gagliardetto/binary v0.7.7 // indirect
github.com/gagliardetto/solana-go v1.8.4 // indirect
github.com/gagliardetto/treeout v0.1.4 // indirect
@@ -182,7 +184,7 @@ require (
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-openapi/analysis v0.21.4 // indirect
github.com/go-openapi/errors v0.20.4 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
@@ -194,7 +196,7 @@ require (
github.com/go-openapi/validate v0.22.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
- github.com/go-playground/validator/v10 v10.15.5 // indirect
+ github.com/go-playground/validator/v10 v10.22.0 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-webauthn/webauthn v0.9.4 // indirect
github.com/go-webauthn/x v0.1.5 // indirect
@@ -242,7 +244,7 @@ require (
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/gtank/merlin v0.1.1 // indirect
github.com/gtank/ristretto255 v0.1.2 // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
github.com/hashicorp/consul/sdk v0.16.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
@@ -288,13 +290,13 @@ require (
github.com/json-iterator/go v1.1.12 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/kelseyhightower/envconfig v1.4.0 // indirect
- github.com/klauspost/compress v1.17.3 // indirect
+ github.com/klauspost/compress v1.17.7 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leanovate/gopter v0.2.10-0.20210127095200-9abe2343507a // indirect
- github.com/leodido/go-urn v1.2.4 // indirect
+ github.com/leodido/go-urn v1.4.0 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
@@ -335,7 +337,7 @@ require (
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opencontainers/runc v1.1.10 // indirect
github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e // indirect
github.com/opentracing-contrib/go-stdlib v1.0.0 // indirect
@@ -380,7 +382,7 @@ require (
github.com/smartcontractkit/chainlink-testing-framework/grafana v0.0.0-20240405215812-5a72bc9af239 // indirect
github.com/smartcontractkit/havoc/k8schaos v0.0.0-20240409145249-e78d20847e37 // indirect
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 // indirect
- github.com/smartcontractkit/wsrpc v0.7.3 // indirect
+ github.com/smartcontractkit/wsrpc v0.8.1 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
github.com/sony/gobreaker v0.5.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
@@ -388,7 +390,7 @@ require (
github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/cobra v1.8.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/spf13/viper v1.18.2 // indirect
+ github.com/spf13/viper v1.19.0 // indirect
github.com/status-im/keycard-go v0.2.0 // indirect
github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect
github.com/stretchr/objx v0.5.2 // indirect
@@ -398,7 +400,6 @@ require (
github.com/tendermint/go-amino v0.16.0 // indirect
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect
github.com/test-go/testify v1.1.4 // indirect
- github.com/testcontainers/testcontainers-go v0.28.0 // indirect
github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a // indirect
github.com/tidwall/btree v1.6.0 // indirect
github.com/tidwall/gjson v1.17.0 // indirect
@@ -423,14 +424,14 @@ require (
go.dedis.ch/fixbuf v1.0.3 // indirect
go.dedis.ch/kyber/v3 v3.1.0 // indirect
go.etcd.io/bbolt v1.3.8 // indirect
- go.etcd.io/etcd/api/v3 v3.5.10 // indirect
- go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
- go.etcd.io/etcd/client/v3 v3.5.10 // indirect
+ go.etcd.io/etcd/api/v3 v3.5.12 // indirect
+ go.etcd.io/etcd/client/pkg/v3 v3.5.12 // indirect
+ go.etcd.io/etcd/client/v3 v3.5.12 // indirect
go.mongodb.org/mongo-driver v1.15.0 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/collector/pdata v1.0.0-rcv0016 // indirect
go.opentelemetry.io/collector/semconv v0.87.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
go.opentelemetry.io/otel v1.28.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
@@ -446,15 +447,15 @@ require (
go.uber.org/zap v1.27.0 // indirect
go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect
golang.org/x/arch v0.7.0 // indirect
- golang.org/x/crypto v0.25.0 // indirect
+ golang.org/x/crypto v0.26.0 // indirect
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
golang.org/x/mod v0.19.0 // indirect
golang.org/x/net v0.27.0 // indirect
golang.org/x/oauth2 v0.21.0 // indirect
- golang.org/x/sync v0.7.0 // indirect
- golang.org/x/sys v0.22.0 // indirect
- golang.org/x/term v0.22.0 // indirect
- golang.org/x/text v0.16.0 // indirect
+ golang.org/x/sync v0.8.0 // indirect
+ golang.org/x/sys v0.23.0 // indirect
+ golang.org/x/term v0.23.0 // indirect
+ golang.org/x/text v0.17.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.23.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
@@ -479,7 +480,7 @@ require (
k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f // indirect
k8s.io/kubectl v0.28.2 // indirect
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect
- nhooyr.io/websocket v1.8.7 // indirect
+ nhooyr.io/websocket v1.8.10 // indirect
pgregory.net/rapid v1.1.0 // indirect
rsc.io/tmplfunc v0.0.3 // indirect
sigs.k8s.io/controller-runtime v0.18.4 // indirect
diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum
index ad49cec3009..536b96f8b60 100644
--- a/integration-tests/load/go.sum
+++ b/integration-tests/load/go.sum
@@ -135,10 +135,10 @@ github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
-github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
-github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
-github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/Microsoft/hcsshim v0.11.5 h1:haEcLNpj9Ka1gd3B3tAEs9CpE0c+1IhoL59w/exYU38=
+github.com/Microsoft/hcsshim v0.11.5/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU=
github.com/NethermindEth/juno v0.3.1 h1:AW72LiAm9gqUeCVJWvepnZcTnpU4Vkl0KzPMxS+42FA=
github.com/NethermindEth/juno v0.3.1/go.mod h1:SGbTpgGaCsxhFsKOid7Ylnz//WZ8swtILk+NbHGsk/Q=
github.com/NethermindEth/starknet.go v0.7.1-0.20240401080518-34a506f3cfdb h1:Mv8SscePPyw2ju4igIJAjFgcq5zCQfjgbz53DwYu5mc=
@@ -307,10 +307,12 @@ github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/Yj
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M=
github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
-github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
-github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
+github.com/containerd/containerd v1.7.18 h1:jqjZTQNfXGoEaZdW1WwPU0RqSn1Bm2Ay/KJPUuO8nao=
+github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4=
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
+github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM=
+github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
@@ -401,8 +403,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/digitalocean/godo v1.99.0 h1:gUHO7n9bDaZFWvbzOum4bXE0/09ZuYA9yA8idQHX57E=
github.com/digitalocean/godo v1.99.0/go.mod h1:SsS2oXo2rznfM/nORlZ/6JaUJZFhmKTib1YhopUc8NA=
-github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
-github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
@@ -471,8 +473,8 @@ github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQ
github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
github.com/fxamacker/cbor/v2 v2.6.0 h1:sU6J2usfADwWlYDAFhZBQ6TnLFBHxgesMrQfQgk1tWA=
github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
-github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
+github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
+github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY=
github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM=
github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw=
@@ -500,7 +502,6 @@ github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4 h1:Z9J0PVIt1PuibO
github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4/go.mod h1:CEPcgZiz8998l9E8fDm16h8UfHRL7b+5oG0j/0koeVw=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
-github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
@@ -530,8 +531,9 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo=
github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA=
-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
+github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY=
github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc=
github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo=
@@ -567,18 +569,14 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU=
github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
-github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
-github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
-github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
-github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
-github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7NLylN+x8TTueE24=
-github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
+github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao=
+github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
@@ -622,15 +620,6 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
-github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
-github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
-github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
-github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
-github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
-github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=
-github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
@@ -747,7 +736,6 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -755,8 +743,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
-github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
+github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
github.com/gophercloud/gophercloud v1.5.0 h1:cDN6XFCLKiiqvYpjQLq9AiM7RDRbIC9450WpPH+yvXo=
github.com/gophercloud/gophercloud v1.5.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -771,7 +759,6 @@ github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kX
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY=
github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ=
-github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
@@ -823,8 +810,8 @@ github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/b
github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc=
github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
@@ -1001,7 +988,6 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
@@ -1015,12 +1001,12 @@ github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dv
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA=
github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
+github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
+github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
@@ -1043,9 +1029,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leanovate/gopter v0.2.10-0.20210127095200-9abe2343507a h1:dHCfT5W7gghzPtfsW488uPmEOm85wewI+ypUwibyTdU=
github.com/leanovate/gopter v0.2.10-0.20210127095200-9abe2343507a/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
-github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
-github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
-github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
+github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
+github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
@@ -1162,7 +1147,6 @@ github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
@@ -1212,8 +1196,8 @@ github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runc v1.1.10 h1:EaL5WeO9lv9wmS6SASjszOeQdSctvpbu0DdBQBizE40=
github.com/opencontainers/runc v1.1.10/go.mod h1:+/R6+KmDlh+hOO8NkjmgkG9Qzvypzk0yXxAPYYR65+M=
github.com/opentracing-contrib/go-grpc v0.0.0-20210225150812-73cb765af46e h1:4cPxUYdgaGzZIT5/j0IfqOrrXmq6bG8AwvwisMXpdrg=
@@ -1374,8 +1358,8 @@ github.com/smartcontractkit/chain-selectors v1.0.21 h1:KCR9SA7PhOexaBzFieHoLv1Wo
github.com/smartcontractkit/chain-selectors v1.0.21/go.mod h1:d4Hi+E1zqjy9HqMkjBE5q1vcG9VGgxf5VxiRHfzi2kE=
github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8umfIfVVlwC7+n5izbLSFgjw8=
github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb h1:iXBb4Zg/3jh/dWa6DVz1pFwc0eGfqVY2Pgs2N91BWs0=
-github.com/smartcontractkit/chainlink-ccip v0.0.0-20240814100759-a12828c40ddb/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f h1:lQZBOjeYFpCdk0mGQUhbrJipd00tu49xK4zSijC/9Co=
+github.com/smartcontractkit/chainlink-ccip v0.0.0-20240816163757-48726fd8165f/go.mod h1:/ZWraCBaDDgaIN1prixYcbVvIk/6HeED9+8zbWQ+TMo=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834 h1:pTf4xdcmiWBqWZ6rTy2RMTDBzhHk89VC1pM7jXKQztI=
github.com/smartcontractkit/chainlink-common v0.2.1-0.20240717132349-ee5af9b79834/go.mod h1:fh9eBbrReCmv31bfz52ENCAMa7nTKQbdhb2B3+S2VGo=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240710121324-3ed288aa9b45 h1:NBQLtqk8zsyY4qTJs+NElI3aDFTcAo83JHvqD04EvB0=
@@ -1408,8 +1392,8 @@ github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1 h1:D
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1/go.mod h1:G5Sd/yzHWf26rQ+X0nG9E0buKPqRGPMJAfk2gwCzOOw=
github.com/smartcontractkit/wasp v0.4.7 h1:7mKJfwzFbuE8xVLUYtLt7Bjw8q/bmVZRW6Ks8kc1LVM=
github.com/smartcontractkit/wasp v0.4.7/go.mod h1:jeabvyXikb2aNoLQwcZGqaz17efrR8NJhpq4seAmdgs=
-github.com/smartcontractkit/wsrpc v0.7.3 h1:CKYZfawZShZGfvsQep1F9oBansnFk9ByZPCdTMpLphw=
-github.com/smartcontractkit/wsrpc v0.7.3/go.mod h1:sj7QX2NQibhkhxTfs3KOhAj/5xwgqMipTvJVSssT9i0=
+github.com/smartcontractkit/wsrpc v0.8.1 h1:kk0SXLqWrWaZ3J6c7n8D0NZ2uTMBBBpG5dZZXZX8UGE=
+github.com/smartcontractkit/wsrpc v0.8.1/go.mod h1:yfg8v8fPLXkb6Mcnx6Pm/snP6jJ0r5Kf762Yd1a/KpA=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
@@ -1441,8 +1425,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
-github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
-github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
+github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
+github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA=
github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg=
github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4=
@@ -1464,7 +1448,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
@@ -1510,9 +1493,7 @@ github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaO
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
-github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
@@ -1581,12 +1562,12 @@ go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYr
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
-go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
-go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
-go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
-go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
-go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
-go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
+go.etcd.io/etcd/api/v3 v3.5.12 h1:W4sw5ZoU2Juc9gBWuLk5U6fHfNVyY1WC5g9uiXZio/c=
+go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
+go.etcd.io/etcd/client/pkg/v3 v3.5.12 h1:EYDL6pWwyOsylrQyLp2w+HkQ46ATiOvoEdMarindU2A=
+go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
+go.etcd.io/etcd/client/v3 v3.5.12 h1:v5lCPXn1pf1Uu3M4laUE2hp/geOTc5uPcYYsNe1lDxg=
+go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw=
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng=
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
@@ -1608,8 +1589,8 @@ go.opentelemetry.io/collector/semconv v0.87.0 h1:BsG1jdLLRCBRlvUujk4QA86af7r/ZXn
go.opentelemetry.io/collector/semconv v0.87.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw=
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 h1:1f31+6grJmV3X4lxcEvUy13i5/kfDw1nJZwhd8mA4tg=
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0/go.mod h1:1P/02zM3OwkX9uki+Wmxw3a5GVb6KUXRsa7m7bOC9Fg=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
@@ -1658,7 +1639,6 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
-go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s=
@@ -1693,8 +1673,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
-golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
+golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
+golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1813,8 +1793,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
-golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
+golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1900,8 +1880,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
-golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
+golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -1913,8 +1893,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
-golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
-golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
+golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
+golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1928,8 +1908,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
-golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
+golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2027,8 +2007,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY=
-google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
+google.golang.org/api v0.171.0 h1:w174hnBPqut76FzW5Qaupt7zY8Kql6fiVjgys4f58sU=
+google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -2182,8 +2162,8 @@ k8s.io/kubectl v0.28.2 h1:fOWOtU6S0smdNjG1PB9WFbqEIMlkzU5ahyHkc7ESHgM=
k8s.io/kubectl v0.28.2/go.mod h1:6EQWTPySF1fn7yKoQZHYf9TPwIl2AygHEcJoxFekr64=
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak=
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
-nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
+nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q=
+nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
diff --git a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar
index a3554fd41f8..fe522ca1bb1 100644
--- a/testdata/scripts/node/validate/disk-based-logging-disabled.txtar
+++ b/testdata/scripts/node/validate/disk-based-logging-disabled.txtar
@@ -334,6 +334,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false
diff --git a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar
index d0f2068c42d..5a5ce42d6b5 100644
--- a/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar
+++ b/testdata/scripts/node/validate/disk-based-logging-no-dir.txtar
@@ -334,6 +334,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false
diff --git a/testdata/scripts/node/validate/disk-based-logging.txtar b/testdata/scripts/node/validate/disk-based-logging.txtar
index b68e513b7ed..12773dc99cb 100644
--- a/testdata/scripts/node/validate/disk-based-logging.txtar
+++ b/testdata/scripts/node/validate/disk-based-logging.txtar
@@ -334,6 +334,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false
diff --git a/testdata/scripts/node/validate/invalid.txtar b/testdata/scripts/node/validate/invalid.txtar
index 4c449c49292..e709b24d5b0 100644
--- a/testdata/scripts/node/validate/invalid.txtar
+++ b/testdata/scripts/node/validate/invalid.txtar
@@ -324,6 +324,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false
diff --git a/testdata/scripts/node/validate/valid.txtar b/testdata/scripts/node/validate/valid.txtar
index f55cfa0969e..9b22da4850d 100644
--- a/testdata/scripts/node/validate/valid.txtar
+++ b/testdata/scripts/node/validate/valid.txtar
@@ -331,6 +331,7 @@ OperatorFactoryAddress = '0x3E64Cd889482443324F91bFA9c84fE72A511f48A'
RPCDefaultBatchSize = 250
RPCBlockQueryDelay = 1
FinalizedBlockOffset = 0
+NoNewFinalizedHeadsThreshold = '9m0s'
[EVM.Transactions]
ForwardersEnabled = false