Skip to content
This repository was archived by the owner on Mar 14, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/clever-knives-tap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"chainlink": patch
---

#added Sei config and error mapping
25 changes: 25 additions & 0 deletions .changeset/orange-feet-share.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
"chainlink": minor
---

Implemented new chain agnostic MultiNode design along with the corresponding EVM implementation. The chain agnostic components enable Multinode to be integrated with Solana and other non-EVM chains. Previously the Multinode was coupled with EVM specific actions, and was called to execute these actions direclty. With this change, the MultiNode's responsibility has been simplified to focus on RPC selection along with performing health checks. Chain specific actions will instead be executed on the RPC directly after being selected by MultiNode. The Chain Agnostic MultiNode provides improved reliability and metrics for all chain integrations using it.

These are following main components:
Node: Common component which wraps an RPC with state information, health checks, and an alive loop to handle state changes along with maintaining chain information.
RPCClient: Chain-specific RPC wrapper which implements required interface for MultiNode along with any chain-specific functionality needed.
MultiNode: Perform RPCClient selection and performs health checks on all RPCs.
TransactionSender: Chain agnostic component which broadcasts transactions to all healthy RPCs and aggregates results. A chain-specific error classifier must be implemented.

MultiNode picks the "best" RPC based on one of the configurable criteria:
- Priority defined in the config.
- Highest latest block.
- Round-robin within the same priority level (or using other configurable selection algorithms)

Benefits of Chain Agnostic MultiNode:
Reliability: Improved RPC reliability scaleable to all chains
Maintainability: Can apply changes across all chain integrations through the use of common code
Extendability: Can add new health checks, RPC selection and ranking algorithms
Integration Speed: Much faster to integrate MultiNode with new chains
Reduced Generics: Significantly less bulky code!

#updated #changed #internal
4 changes: 1 addition & 3 deletions .mockery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@ packages:
NodeSelector:
sendOnlyClient:
SendOnlyNode:
RPC:
RPCClient:
Head:
NodeClient:
PoolChainInfoProvider:
github.com/smartcontractkit/chainlink/v2/common/headtracker:
interfaces:
Expand Down Expand Up @@ -50,7 +49,6 @@ packages:
github.com/smartcontractkit/chainlink/v2/core/chains/evm/client:
interfaces:
Client:
RPCClient:
github.com/smartcontractkit/chainlink/v2/core/chains/evm/config:
interfaces:
GasEstimator:
Expand Down
18 changes: 18 additions & 0 deletions ccip/config/evm/Sei_Testnet_Atlantic.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ChainID = '1328'
ChainType = 'sei'
# finality_depth: instant
FinalityDepth = 10
# block_time: ~0.4s, adding 1 second buffer
LogPollInterval = '2s'
# finality_depth * block_time / 60 secs = ~0.8 min (finality time)
NoNewFinalizedHeadsThreshold = '5m'
# "RPC node returned multiple missing blocks on query for block numbers [31592085 31592084] even though the WS subscription already sent us these blocks. It might help to increase EVM.RPCBlockQueryDelay (currently 1)"
RPCBlockQueryDelay = 5

[GasEstimator]
EIP1559DynamicFees = false
Mode = 'BlockHistory'
PriceMax = '3000 gwei' # recommended by ds&a

[GasEstimator.BlockHistory]
BlockHistorySize = 200
48 changes: 24 additions & 24 deletions common/client/mock_node_selector_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading