From 7039f98f49e6afd0be7c13b88650a51451df9ab8 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 24 Jan 2024 17:50:28 -0700 Subject: [PATCH 01/23] CL Node release 2.8.0 (#1736) * CL Node release 2.8.0 * Link fixes and build fixes * Update navbar --- src/config/sidebar.ts | 8 - .../external-initiators-in-nodes.mdx | 2 +- .../external-initiators-introduction.mdx | 2 +- src/content/chainlink-nodes/node-versions.mdx | 142 +- .../resources/best-practices-aws.mdx | 245 --- .../resources/best-security-practices.mdx | 10 +- .../evm-performance-configuration.mdx | 14 +- .../performing-system-maintenance.mdx | 2 +- .../resources/run-an-ethereum-client.mdx | 2 +- .../chainlink-nodes/v1/configuration.mdx | 1679 ----------------- .../chainlink-nodes/v1/node-config.mdx | 1131 +++++++++-- .../v1/running-a-chainlink-node.mdx | 8 +- .../chainlink-nodes/v1/secrets-config.mdx | 37 +- src/features/redirects/redirects.json | 10 + 14 files changed, 1162 insertions(+), 2130 deletions(-) delete mode 100644 src/content/chainlink-nodes/resources/best-practices-aws.mdx delete mode 100644 src/content/chainlink-nodes/v1/configuration.mdx diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index d43d03f111c..8bd01c2a327 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -1032,10 +1032,6 @@ export const SIDEBAR: Partial> = { title: "Secrets Config (TOML)", url: "chainlink-nodes/v1/secrets-config", }, - { - title: "Legacy Config (.env)", - url: "chainlink-nodes/v1/configuration", - }, ], }, { @@ -1083,10 +1079,6 @@ export const SIDEBAR: Partial> = { title: "Security and Operation Best Practices", url: "chainlink-nodes/resources/best-security-practices", }, - { - title: "Best Practices for Nodes on AWS", - url: "chainlink-nodes/resources/best-practices-aws", - }, { title: "Miscellaneous", url: "chainlink-nodes/resources/miscellaneous" }, ], }, diff --git a/src/content/chainlink-nodes/external-initiators/external-initiators-in-nodes.mdx b/src/content/chainlink-nodes/external-initiators/external-initiators-in-nodes.mdx index 4023f0a3f7b..c4b37e44545 100644 --- a/src/content/chainlink-nodes/external-initiators/external-initiators-in-nodes.mdx +++ b/src/content/chainlink-nodes/external-initiators/external-initiators-in-nodes.mdx @@ -8,7 +8,7 @@ import { Aside } from "@components" ## Creating an external initiator diff --git a/src/content/chainlink-nodes/external-initiators/external-initiators-introduction.mdx b/src/content/chainlink-nodes/external-initiators/external-initiators-introduction.mdx index 2be29edcb91..6a20e1f5961 100644 --- a/src/content/chainlink-nodes/external-initiators/external-initiators-introduction.mdx +++ b/src/content/chainlink-nodes/external-initiators/external-initiators-introduction.mdx @@ -20,7 +20,7 @@ External initiators allow jobs in a node to be initiated depending on some exter Initiator Bridges handle the authentication to and from the External Initiator and where to send the messages. When creating a Bridge two parameters are required: diff --git a/src/content/chainlink-nodes/node-versions.mdx b/src/content/chainlink-nodes/node-versions.mdx index 16fa09e12d9..a1a23718495 100644 --- a/src/content/chainlink-nodes/node-versions.mdx +++ b/src/content/chainlink-nodes/node-versions.mdx @@ -12,6 +12,102 @@ import { Aside } from "@components" You can find a list of release notes for Chainlink nodes in the [smartcontractkit GitHub repository](https://github.com/smartcontractkit/chainlink/releases). Docker images are available in the [Chainlink Docker hub](https://hub.docker.com/r/smartcontract/chainlink/tags). +## Changes in v2.7.2 nodes - 2024-01-24 + +### Added + +- Added distributed tracing in the OpenTelemetry trace format to the node, currently focused at the LOOPP Plugin development effort. This includes a new set of `Tracing` TOML configurations. The default for collecting traces is off - you must explicitly enable traces and setup a valid OpenTelemetry collector. Refer to the [README](https://github.com/smartcontractkit/chainlink/blob/v2.8.0/README.md) for more details. + +- Added a new, optional WebServer authentication option that supports LDAP as a user identity provider. This enables user login access and user roles to be managed and provisioned via a centralized remote server that supports the LDAP protocol, which can be helpful when running multiple nodes. See the documentation for more information and config setup instructions. There is a new `[WebServer].AuthenticationMethod` config option, when set to `ldap` requires the new `[WebServer.LDAP]` config section to be defined, see the reference `docs/core.toml`. + +- New prom metrics for mercury transmit queue: + `mercury_transmit_queue_delete_error_count` + `mercury_transmit_queue_insert_error_count` + `mercury_transmit_queue_push_error_count` + Nops should consider alerting on these. + +- Mercury now implements a local cache for fetching prices for fees, which ought to reduce latency and load on the mercury server, as well as increasing performance. It is enabled by default and can be configured with the following new config variables: + + ``` + [Mercury] + + # Mercury.Cache controls settings for the price retrieval cache querying a mercury server + [Mercury.Cache] + # LatestReportTTL controls how "stale" we will allow a price to be e.g. if + # set to 1s, a new price will always be fetched if the last result was + # from 1 second ago or older. + # + # Another way of looking at it is such: the cache will _never_ return a + # price that was queried from now-LatestReportTTL or before. + # + # Setting to zero disables caching entirely. + LatestReportTTL = "1s" # Default + # MaxStaleAge is that maximum amount of time that a value can be stale + # before it is deleted from the cache (a form of garbage collection). + # + # This should generally be set to something much larger than + # LatestReportTTL. Setting to zero disables garbage collection. + MaxStaleAge = "1h" # Default + # LatestReportDeadline controls how long to wait for a response from the + # mercury server before retrying. Setting this to zero will wait indefinitely. + LatestReportDeadline = "5s" # Default + ``` + +- New prom metrics for the mercury cache: + `mercury_cache_fetch_failure_count` + `mercury_cache_hit_count` + `mercury_cache_wait_count` + `mercury_cache_miss_count` + +- Added new `EVM.OCR` TOML config fields `DeltaCOverride` and `DeltaCJitterOverride` for overriding the config DeltaC. + +- Mercury v0.2 has improved consensus around current block that uses the most recent 5 blocks instead of only the latest one + +- Two new prom metrics for mercury, nops should consider adding alerting on these: + - `mercury_insufficient_blocks_count` + - `mercury_zero_blocks_count` + +### Changed + +- `PromReporter` no longer directly reads txm related status from the db, and instead uses the txStore API. +- `L2Suggested` mode is now called `SuggestedPrice` +- Console logs will now escape (non-whitespace) control characters +- Following EVM Pool metrics were renamed: + - `evm_pool_rpc_node_states` → `multi_node_states` + - `evm_pool_rpc_node_num_transitions_to_alive` → `pool_rpc_node_num_transitions_to_alive` + - `evm_pool_rpc_node_num_transitions_to_in_sync` → `pool_rpc_node_num_transitions_to_in_sync` + - `evm_pool_rpc_node_num_transitions_to_out_of_sync` → `pool_rpc_node_num_transitions_to_out_of_sync` + - `evm_pool_rpc_node_num_transitions_to_unreachable` → `pool_rpc_node_num_transitions_to_unreachable` + - `evm_pool_rpc_node_num_transitions_to_invalid_chain_id` → `pool_rpc_node_num_transitions_to_invalid_chain_id` + - `evm_pool_rpc_node_num_transitions_to_unusable` → `pool_rpc_node_num_transitions_to_unusable` + - `evm_pool_rpc_node_highest_seen_block` → `pool_rpc_node_highest_seen_block` + - `evm_pool_rpc_node_num_seen_blocks` → `pool_rpc_node_num_seen_blocks` + - `evm_pool_rpc_node_polls_total` → `pool_rpc_node_polls_total` + - `evm_pool_rpc_node_polls_failed` → `pool_rpc_node_polls_failed` + - `evm_pool_rpc_node_polls_success` → `pool_rpc_node_polls_success` + +### Removed + +- Removed `Optimism2` as a supported gas estimator mode + +### Fixed + +- Corrected Ethereum Sepolia `LinkContractAddress` to `0x779877A7B0D9E8603169DdbD7836e478b4624789` +- Fixed a bug that caused the Telemetry Manager to report incorrect health + +### Upcoming Required Configuration Changes + +Starting in `v2.9.0`: + +- `TelemetryIngress.URL` and `TelemetryIngress.ServerPubKey` will no longer be allowed. Any TOML configuration that sets this fields will prevent the node from booting. These fields will be replaced by `[[TelemetryIngress.Endpoints]]` +- `P2P.V1` will no longer be supported and must not be set in TOML configuration in order to boot. Use `P2P.V2` instead. If you are using both, `V1` can simply be removed. + +## Changes in v2.7.2 nodes - 2023-12-14 + +### Fixed + +- Fixed a bug that caused nodes without OCR or OCR2 enabled to fail config validation if `P2P.V2` was not explicitly disabled. With this fix, NOPs will not have to make changes to their config. + ## Changes in v2.7.1 nodes **[v2.7.1 release notes](https://github.com/smartcontractkit/chainlink/releases/tag/v2.7.1)** @@ -253,7 +349,7 @@ Node operators may wish to add alerting based around these metrics. ### TOML Configuration -TOML configuration for Chainlink nodes is stable and recommended for mainnet deployments. TOML configuration will be the only supported configuration method starting with `v2.0.0`. Enable TOML configuration by specifying the `-config FILENAME.toml` flag with the path to your TOML file. Alternatively, you can specify the raw TOML config in the [`CL_CONFIG` environment variable](/chainlink-nodes/v1/configuration#cl_config). See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/CONFIG.md) and [SECRETS.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/SECRETS.md) on GitHub to learn more. +TOML configuration for Chainlink nodes is stable and recommended for mainnet deployments. TOML configuration will be the only supported configuration method starting with `v2.0.0`. Enable TOML configuration by specifying the `-config FILENAME.toml` flag with the path to your TOML file. Alternatively, you can specify the raw TOML config in the [`CL_CONFIG` environment variable](/chainlink-nodes/v1/configuration). See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/CONFIG.md) and [SECRETS.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/SECRETS.md) on GitHub to learn more. ### Added @@ -300,15 +396,15 @@ TOML configuration for Chainlink nodes is stable and recommended for mainnet dep ### Added -- Added a new mode for the [`NODE_SELECTION_MODE` environment variable](/chainlink-nodes/v1/configuration#node_selection_mode). Use `TotalDifficulty` to select the node with the greatest total difficulty. -- Added the [`NODE_SYNC_THRESHOLD` environment variable](/chainlink-nodes/v1/configuration#node_sync_threshold) to ensure that live nodes do not lag too far behind. -- Added the [`BRIDGE_CACHE_TTL` environment variable](/chainlink-nodes/v1/configuration#bridge_cache_ttl) which caches bridge responses for a specified amount of time. +- Added a new mode for the [`NODE_SELECTION_MODE` environment variable](/chainlink-nodes/v1/configuration). Use `TotalDifficulty` to select the node with the greatest total difficulty. +- Added the [`NODE_SYNC_THRESHOLD` environment variable](/chainlink-nodes/v1/configuration) to ensure that live nodes do not lag too far behind. +- Added the [`BRIDGE_CACHE_TTL` environment variable](/chainlink-nodes/v1/configuration) which caches bridge responses for a specified amount of time. - Add the prometheus metrics labelled by bridge name for monitoring external adapter queries. The following metrics are included: - `bridge_latency_seconds` - `bridge_errors_total` - `bridge_cache_hits_total` - `bridge_cache_errors_total` -- ⚠️ Experimental: ⚠️ Added static configuration using TOML files as an alternative to the existing combination of environment variables and persisted database configurations. For this release, use TOML for configuration only on test networks. In the future with `v2.0.0`, TOML configuration will become the only supported configuration method. Enable TOML configuration by specifying the `-config FILENAME.toml` flag with the path to your TOML file. Alternatively, you can specify the raw TOML config in the [`CL_CONFIG` environment variable](/chainlink-nodes/v1/configuration#cl_config). See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.12.0/docs/CONFIG.md) and [SECRETS.md](https://github.com/smartcontractkit/chainlink/blob/v1.12.0/docs/SECRETS.md) on GitHub to learn more. +- ⚠️ Experimental: ⚠️ Added static configuration using TOML files as an alternative to the existing combination of environment variables and persisted database configurations. For this release, use TOML for configuration only on test networks. In the future with `v2.0.0`, TOML configuration will become the only supported configuration method. Enable TOML configuration by specifying the `-config FILENAME.toml` flag with the path to your TOML file. Alternatively, you can specify the raw TOML config in the [`CL_CONFIG` environment variable](/chainlink-nodes/v1/configuration). See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.12.0/docs/CONFIG.md) and [SECRETS.md](https://github.com/smartcontractkit/chainlink/blob/v1.12.0/docs/SECRETS.md) on GitHub to learn more. ### Fixed @@ -325,18 +421,18 @@ TOML configuration for Chainlink nodes is stable and recommended for mainnet dep ### Added - Added an optional external logger `AUDIT_LOGS_FORWARDER_URL`: When set, this environment variable configures and enables an optional HTTP logger which is used specifically to send audit log events. Configure this logger with the following environment variables: - - [AUDIT_LOGGER_FORWARD_TO_URL](/chainlink-nodes/v1/configuration#audit_logger_forward_to_url) - - [AUDIT_LOGGER_HEADERS](/chainlink-nodes/v1/configuration#audit_logger_headers) - - [AUDIT_LOGGER_JSON_WRAPPER_KEY](/chainlink-nodes/v1/configuration#audit_logger_json_wrapper_key) + - [AUDIT_LOGGER_FORWARD_TO_URL](/chainlink-nodes/v1/configuration) + - [AUDIT_LOGGER_HEADERS](/chainlink-nodes/v1/configuration) + - [AUDIT_LOGGER_JSON_WRAPPER_KEY](/chainlink-nodes/v1/configuration) - Added [automatic connectivity detection](#automatic-connectivity-detection) to automatically detect if there is a transaction propagation/connectivity issue and prevent bumping in these cases on EVM chains. ### Changed - The default maximum gas price on most networks is now effectively unlimited. - Chainlink will bump as high as necessary to get a transaction included. [Automatic connectivity detection](#automatic-connectivity-detection) prevents excessive bumping when there is a connectivity failure. - - If you want to change this, manually set the [`ETH_MAX_GAS_PRICE_WEI` environment variable](/chainlink-nodes/v1/configuration/#eth_max_gas_price_wei). + - If you want to change this, manually set the [`ETH_MAX_GAS_PRICE_WEI` environment variable](/chainlink-nodes/v1/configuration). - If the `EVMChainID` is not set explicitly in the job spec for a new OCR job, the field is now automatically added with a default chain ID. - - Old OCR jobs missing `EVMChainID` continue to run on any chain that the [`ETH_CHAIN_ID` variable](/chainlink-nodes/v1/configuration/#eth_chain_id) is set to (or the first chain if it is not set). This can be changed after a restart. + - Old OCR jobs missing `EVMChainID` continue to run on any chain that the [`ETH_CHAIN_ID` variable](/chainlink-nodes/v1/configuration) is set to (or the first chain if it is not set). This can be changed after a restart. - Newly created OCR jobs run only on a single fixed chain and are unaffected by changes to `ETH_CHAIN_ID` after the job is added. - It should no longer be possible to end up with multiple OCR jobs for a single contract running on the same chain. Only one job per contract per chain is allowed. - If there are any existing duplicate jobs per contract and per chain, all but the jobs with the latest creation date will be pruned during the upgrade. @@ -388,7 +484,7 @@ To disable connectivity checking completely, set `BLOCK_HISTORY_ESTIMATOR_CHECK_ - Added the `hexencode` and `base64encode` tasks (pipeline). See the [Hex Encode Task](/chainlink-nodes/oracle-jobs/all-tasks/#hex-encode-task) and [Base64 Encode Task](/chainlink-nodes/oracle-jobs/all-tasks/#base64-encode-task) pages for examples. - `forwardingAllowed` per job attribute to allow forwarding txs submitted by the job. - Added `Arbitrum Goerli` configuration support. -- Added the [`NODE_SELECTION_MODE` (`EVM.NodePool.SelectionMode`) environment variable](/chainlink-nodes/v1/configuration/#node_selection_mode), which controls node picking strategy. Supported values are: +- Added the [`NODE_SELECTION_MODE` (`EVM.NodePool.SelectionMode`) environment variable](/chainlink-nodes/v1/configuration), which controls node picking strategy. Supported values are: - `HighestHead` is the default mode, which picks a node that has the highest reported head number among other alive nodes. When several nodes have the same latest head number, the strategy sticks to the last used node. This mode requires `NODE_NO_NEW_HEADS_THRESHOLD` to be configured, otherwise it will always use the first alive node. - `RoundRobin` mode iterates among available alive nodes. This was the default behavior prior to this release. - New `evm keys chain` command. This can also be accessed at `/v2/keys/evm/chain`. This command has the following uses: @@ -422,7 +518,7 @@ To disable connectivity checking completely, set `BLOCK_HISTORY_ESTIMATOR_CHECK_ ### Added -- `p2pv2Bootstrappers` is added as a new optional property of OCR1 job specs. The default can still be specified with the [`P2PV2_BOOTSTRAPPERS` environment variable](/chainlink-nodes/v1/configuration/#p2pv2_bootstrappers). +- `p2pv2Bootstrappers` is added as a new optional property of OCR1 job specs. The default can still be specified with the [`P2PV2_BOOTSTRAPPERS` environment variable](/chainlink-nodes/v1/configuration). - Added official support for the [Sepolia testnet](https://sepolia.dev) on Chainlink nodes. @@ -445,11 +541,11 @@ To disable connectivity checking completely, set `BLOCK_HISTORY_ESTIMATOR_CHECK_ 1. The job-spec attribute `gasLimit` applies only to a specific job spec. 1. The job-type limits affect any jobs of the corresponding type. The following environment variables are available: - - [ETH_GAS_LIMIT_OCR_JOB_TYPE](/chainlink-nodes/v1/configuration/#eth_gas_limit_ocr_job_type) - - [ETH_GAS_LIMIT_DR_JOB_TYPE](/chainlink-nodes/v1/configuration/#eth_gas_limit_dr_job_type) - - [ETH_GAS_LIMIT_VRF_JOB_TYPE](/chainlink-nodes/v1/configuration/#eth_gas_limit_vrf_job_type) - - [ETH_GAS_LIMIT_FM_JOB_TYPE](/chainlink-nodes/v1/configuration/#eth_gas_limit_fm_job_type) - - [ETH_GAS_LIMIT_KEEPER_JOB_TYPE](/chainlink-nodes/v1/configuration/#eth_gas_limit_keeper_job_type) + - [ETH_GAS_LIMIT_OCR_JOB_TYPE](/chainlink-nodes/v1/configuration) + - [ETH_GAS_LIMIT_DR_JOB_TYPE](/chainlink-nodes/v1/configuration) + - [ETH_GAS_LIMIT_VRF_JOB_TYPE](/chainlink-nodes/v1/configuration) + - [ETH_GAS_LIMIT_FM_JOB_TYPE](/chainlink-nodes/v1/configuration) + - [ETH_GAS_LIMIT_KEEPER_JOB_TYPE](/chainlink-nodes/v1/configuration) 1. The global `ETH_GAS_LIMIT_DEFAULT` (`EVM.GasEstimator.LimitDefault`) value is used only when the preceding rules are not set. @@ -500,7 +596,7 @@ To disable connectivity checking completely, set `BLOCK_HISTORY_ESTIMATOR_CHECK_ ### Added -- Added the [`ETH_USE_FORWARDERS` config](/chainlink-nodes/v1/configuration/#eth_use_forwarders) option to enable transactions forwarding contracts. +- Added the [`ETH_USE_FORWARDERS` config](/chainlink-nodes/v1/configuration) option to enable transactions forwarding contracts. - In the `directrequest` job pipeline, three new block variables are available: @@ -535,7 +631,7 @@ To disable connectivity checking completely, set `BLOCK_HISTORY_ESTIMATOR_CHECK_ - The `Optimism` OVM 1.0 `GAS_ESTIMATOR_MODE` has been removed and the `Optimism2` `GAS_ESTIMATOR_MODE` has been renamed to `L2Suggested`. -- `MIN_OUTGOING_CONFIRMATIONS` has been removed and no longer has any effect. The [`ETH_FINALITY_DEPTH` environment variable](/chainlink-nodes/v1/configuration/#eth_finality_depth) is now used as the default for `ethtx` confirmations instead. You can override this on a per-task basis by setting `minConfirmations` in the task definition. For example, `foo [type=ethtx minConfirmations=42 ...]`. +- `MIN_OUTGOING_CONFIRMATIONS` has been removed and no longer has any effect. The [`ETH_FINALITY_DEPTH` environment variable](/chainlink-nodes/v1/configuration) is now used as the default for `ethtx` confirmations instead. You can override this on a per-task basis by setting `minConfirmations` in the task definition. For example, `foo [type=ethtx minConfirmations=42 ...]`. This setting might have a minor impact on performance for very high throughput chains. If you don't care about reporting task status in the UI, set `minConfirmations=0` in your job specs. For more details, see the [Optimizing EVM Performance](/chainlink-nodes/resources/evm-performance-configuration/#adjusting-minimum-outgoing-confirmations-for-high-throughput-jobs) page. @@ -560,12 +656,12 @@ To disable connectivity checking completely, set `BLOCK_HISTORY_ESTIMATOR_CHECK_ **[v1.3.0 release notes](https://github.com/smartcontractkit/chainlink/releases/tag/v1.3.0)** -- Added disk rotating logs. See the [Node Logging](/chainlink-nodes/v1/configuration/#logging) and [LOG_FILE_MAX_SIZE](/chainlink-nodes/v1/configuration/#log_file_max_size) documentation for details. +- Added disk rotating logs. See the [Node Logging](/chainlink-nodes/v1/configuration) and [LOG_FILE_MAX_SIZE](/chainlink-nodes/v1/configuration) documentation for details. - Added support for the `force` flag on the `chainlink blocks replay` CLI command. If set to true, already consumed logs that would otherwise be skipped will be rebroadcasted. - Added a version compatibility check when using the CLI to login to a remote node. The `bypass-version-check` flag skips this check. -- Changed default locking mode to "dual". See the [DATABASE_LOCKING_MODE](/chainlink-nodes/v1/configuration/#database_locking_mode) documentation for details. +- Changed default locking mode to "dual". See the [DATABASE_LOCKING_MODE](/chainlink-nodes/v1/configuration) documentation for details. - Specifying multiple EVM RPC nodes with the same URL is no longer supported. If you see `ERROR 0106_evm_node_uniqueness.sql: failed to run SQL migration`, you have multiple nodes specified with the same URL and you must fix this before proceeding with the upgrade. -- EIP-1559 is now enabled by default on the Ethereum Mainnet. See the [EVM_EIP1559_DYNAMIC_FEES](/chainlink-nodes/v1/configuration/#evm_eip1559_dynamic_fees) documentation for details. +- EIP-1559 is now enabled by default on the Ethereum Mainnet. See the [EVM_EIP1559_DYNAMIC_FEES](/chainlink-nodes/v1/configuration) documentation for details. - Added new Chainlink Automation feature that includes gas price in calls to `checkUpkeep()`. To enable the feature, set `KEEPER_CHECK_UPKEEP_GAS_PRICE_FEATURE_ENABLED` to `true`. Use this setting _only_ on Polygon networks. ## Changes in v1.2.0 nodes @@ -593,7 +689,7 @@ See the [v1.2.0 release notes](https://github.com/smartcontractkit/chainlink/rel The v1.1.0 release includes several substantial changes to the way you configure and operate Chainlink nodes: -- **Legacy environment variables**: Legacy environment variables are supported, but they might be removed in future node versions. See the [Configuring Chainlink Nodes](/chainlink-nodes/v1/configuration/#evmethereum-legacy-environment-variables) page to learn how to migrate your nodes away from legacy environment variables and use the API, CLI, or GUI exclusively to administer chains and nodes. +- **Legacy environment variables**: Legacy environment variables are supported, but they might be removed in future node versions. See the [Configuring Chainlink Nodes](/chainlink-nodes/v1/configuration) page to learn how to migrate your nodes away from legacy environment variables and use the API, CLI, or GUI exclusively to administer chains and nodes. - **Full EIP1559 Support**: Chainlink nodes include experimental support for submitting transactions using type 0x2 (EIP-1559) envelope. EIP-1559 mode is off by default, but can be enabled either globally or on a per-chain basis. - **New log level added**: - [crit]: Critical level logs are more severe than [error] and require quick action from the node operator. diff --git a/src/content/chainlink-nodes/resources/best-practices-aws.mdx b/src/content/chainlink-nodes/resources/best-practices-aws.mdx deleted file mode 100644 index cf1cfea1c71..00000000000 --- a/src/content/chainlink-nodes/resources/best-practices-aws.mdx +++ /dev/null @@ -1,245 +0,0 @@ ---- -section: nodeOperator -date: Last Modified -title: "Best Practices for Deploying Nodes on AWS" ---- - -import { Aside, CodeSample } from "@components" - - - -You can deploy a Chainlink node on the AWS Cloud using [AWS Quick Start](https://aws.amazon.com/quickstart) to deploy a highly available and secure Chainlink node on the AWS Cloud. - - - -## Created Resources - -The Quick Start creates the following public resources: - -- An Elastic Load Balancing (ELB) load balancer to access the Chainlink node web graphical user interface -- A Linux bastion host in an Auto Scaling group to allow inbound Secure Shell (SSH) access to EC2 instances in public and private subnetworks -- Managed network address translation (NAT) gateways to allow outbound internet access for the Chainlink node instances in the private subnets - -Because these resources are public facing, you should review security and best practices information on a regular basis against vulnerabilities that pose a risk. - -## IAM Roles - -The Quick Start creates the following IAM roles: - -- **Administration Role:** Grants the provided administrator ID with administrator access -- **Execution Role:** Grants cloudformation.amazonaws.com the administration role to extend the functionality of stacks by enabling create, update, or delete stacks across multiple accounts and regions with a single operation -- **Chainlink Node Role:** - - Enables instances to use Systems Manager core service functionality - - Enables instances with logs and metrics functionality in CloudWatch - - Enables instances to retrieve Chainlink node secrets created during the Quick Start - -## Billable Services - -The Quick Start has the following billable services. Click on each link to learn about the pricing model for each service: - -- [**Amazon EC2**](https://aws.amazon.com/ec2/pricing/?nc2=type_a) -- [**Amazon Virtual Private Cloud (VPC)**](https://aws.amazon.com/vpc/pricing/) -- [**Amazon Aurora PostgreSQL-Compatible DB**](https://aws.amazon.com/rds/aurora/pricing/) -- [**Parameter Store**](https://aws.amazon.com/systems-manager/pricing/?nc2=type_a) -- [**AWS Secrets Manager**](https://aws.amazon.com/secrets-manager/pricing/?nc1=h_ls) -- [**AWS Key Management Service**](https://aws.amazon.com/kms/pricing/?nc2=type_a) -- [**Amazon CloudWatch**](https://aws.amazon.com/cloudwatch/pricing/?nc2=type_a) -- (_Optional_ if you are not using a public certificate with AWS Certificate Manager) [**Application Load Balancer**](https://aws.amazon.com/elasticloadbalancing/pricing/?nc=sn&loc=3) -- (_Optional_) [**Amazon Devops Guru**](https://aws.amazon.com/devops-guru/pricing/?nc=sn&loc=3&refid=0c5ce5de-7dc6-4ce5-95c9-29c9047095fc~ha_awssm-10495_event_prospect) - -You are responsible for the cost of the AWS services and any third-party licenses that you use while running this Quick Start. There is no additional cost for using the Quick Start. - -AWS maintains service limits for each account to help guarantee the availability of AWS resources. You are responsible for monitoring and managing the service limits of the resources that this Quick Start provisions. - -For more information, visit [Manage Service Limits](https://aws.amazon.com/premiumsupport/knowledge-center/manage-service-limits/). - -## Best Practices - -### Do not run as the root user - -The operations on the Chainlink node do not require the root user so it is recommended to use the default user or run as a non-root user. - -### Protect your AWS account - -As a best security practice, [rotate programmatic system credentials](https://aws.amazon.com/blogs/security/how-to-rotate-access-keys-for-iam-users/) and [cryptographic keys](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html). - -If you enable Amazon Devops Guru, the Quick Start deploys an AWS managed customer key (CMK) that is used for the Amazon SNS topic for DevOps Guru. The default setting is automatically set to rotate this KMS key every year. - -### Monitor your Chainlink node's health - -Run regular health checks of your Chainlink node. - -We recommend using a monitoring solution to track the health of your Chainlink node, such as [Prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/) or [Grafana](https://grafana.com/docs/grafana/latest/getting-started/getting-started-prometheus/). Chainlink exposes metrics on the `/metrics` endpoint of the UI. By default, that's http://localhost:6688/metrics. - -``` -# A scrape configuration containing exactly one endpoint to scrape: -# Here it's Prometheus itself. -scrape_configs: - # The job name is added as a label `job=` to any timeseries scraped from this config. - - job_name: 'chainlink_node' - static_configs: - - targets: ['127.0.0.1:6688'] - metrics_path: '/metrics' -``` - -Alternatively, you can run a health check on your node using `curl` and make sure the checks are `passing`. You can replace `localhost:6688` with the load balancer endpoint if you are using a domain. - -```shell -curl -XGET localhost:6688/health | jq '.' -``` - -{/* prettier-ignore */} -```json -% Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed -100 1900 100 1900 0 0 927k 0 --:--:-- --:--:-- --:--:-- 927k -{ - "data": [ - { - "type": "checks", - "id": "*offchainreporting.SingletonPeerWrapper", - "attributes": { - "name": "*offchainreporting.SingletonPeerWrapper", - "status": "passing", - "output": "" - } - }, - { - "type": "checks", - "id": "*job.spawner", - "attributes": { - "name": "*job.spawner", - "status": "passing", - "output": "" - } - }, - { - "type": "checks", - "id": "*fluxmonitor.concreteFluxMonitor", - "attributes": { - "name": "*fluxmonitor.concreteFluxMonitor", - "status": "passing", - "output": "" - } - }, - ⋮ - ] -} -``` - -To check the status of your Chainlink node container, use the `docker ps` command. - -## Recovering or Upgrading your Chainlink Node Container - -Tag versions for Chainlink node releases are available in the [Chainlink docker hub](https://hub.docker.com/r/smartcontract/chainlink/tags) - -If the Chainlink node containers are stopped or if you need to start up a new instance during an upgrade or recovery, you must create new `.env`, `.password`, and `.api` files to start the Chainlink node. - -### Generating the `.env` file - -```shell -cd /home/ec2-user/.chainlink/ && ./create-env.sh \ -${chainNetwork} \ -${blockchainNodeUrl} \ -${psqlUser} \ -$(aws secretsmanager get-secret-value --secret-id DBSecret --query "SecretString" --output text) \ -${psqlHostname} \ -${psqlPort} \ -${psqlDb} -``` - -### Generating the `.password` file - -```shell -cd /home/ec2-user/.chainlink/ && ./create-password.sh \ -$(aws secretsmanager get-secret-value --secret-id WalletSecret --query "SecretString" --output text) -``` - -### Generating the `.api` file - -```shell -cd /home/ec2-user/.chainlink/ && ./create-api.sh \ -${apiUser} \ -$(aws secretsmanager get-secret-value --secret-id ApiSecret --query "SecretString" --output text) -``` - -### Stopping and removing the existing Chainlink node container - -This process is required when you update the container to a newer release. - -```shell -docker stop chainlink && docker rm chainlink -``` - -### Starting the Chainlink node container in Docker - -```shell -latestimage=$(curl -s -S "https://registry.hub.docker.com/v2/repositories/smartcontract/chainlink/tags/" | jq -r '."results"[]["name"]' | head -n 1) -cd /home/ec2-user/.chainlink && docker run -d \ ---log-driver=awslogs \ ---log-opt awslogs-group=ChainlinkLogs \ ---restart unless-stopped \ ---name chainlink \ --p 6688:6688 \ --v /home/ec2-user/.chainlink:/chainlink \ ---env-file=/home/ec2-user/.chainlink/.env smartcontract/chainlink:$latestimage local n \ --p /chainlink/.password --a /chainlink/.api -``` - -You can find more details with maintenance and examples in the [Performing System Maintenance](/chainlink-nodes/resources/performing-system-maintenance) guide. - -Additionally, follow the directions in the [User Guide for Linux Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-updates.html) to keep your Amazon Linux instance software up to date. - -## Backup and Restore - -### Database Backup - -The PostgreSQL database is critical because it stores most of the Chainlink node data. Aurora automatically backs up your PostgreSQL cluster during the backup window with a default backup retention of 7 days. You can change the database cluster’s backup retention period to be as short as 1 day or up to 35 days. For more details, see the guide for [backing up and restoring an Aurora cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Managing.Backups.html). - -If the primary instance in your PostgreSQL cluster fails during an instance or service failure, Aurora will automatically fail over to an existing read replica or create a new primary instance if there are no read replicas available. - -### EC2 Instance Backup - -By default, the Chainlink node does not contain any critical data other than the logs found in the Chainlink directory. If the primary Chainlink node instance is marked as unhealthy during an instance or service failure, the Auto Scaling group schedules a replacement instance and the standby Chainlink node instance will automatically fail over. - -You can backup the EBS volumes attached to the Chainlink node by following the instructions in the [Amazon EBS snapshots](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) guide. The [Amazon Data Lifecycle Manager](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshot-lifecycle.html) can help to automate your EBS snapshots. To create a backup of the entire EC2 instance, you must create an AMI from the instance. - -To see how to restore resources from an Amazon EBS snapshot or an AMI, see the [Restoring from an Amazon EBS snapshot or an AMI](https://docs.aws.amazon.com/prescriptive-guidance/latest/backup-recovery/restore.html) guide. - -## Failover Capabilities and Disaster Recovery - -Chainlink node reputation depends on the uptime of the following itmes: - -- The Chainlink node -- The database -- The Ethereum client - -To reduce downtime, failover capabilities are required on both the Chainlink node and Ethereum clients so that the service is still online even in the unlikely event of a virtual machine or network failure. - -The [Amazon EC2 Auto Scaling](https://aws.amazon.com/ec2/autoscaling/) group provisions both a primary Chainlink node and a standby Chainlink node. Each node is placed in a separate Availability Zone. - -If one Availability Zone becomes unhealthy or unavailable, the Amazon EC2 Auto Scaling group launches a new instance of the Chainlink node or bastion host in the unaffected Availability Zone. The failover happens automatically. - -The data from both the Chainlink node and the Ethereum client is stored in the PostgreSQL database. The Aurora database cluster is fault tolerant by design and can handle an Availability Zone failure without any loss of data. There might be only a brief interruption of service with an automatic failover, which helps to reduce the Recovery Point Objective (RPO) and Recovery Time Objective (RTO). - -Management of AWS service limits are not required for proper disaster recovery. The Quick Start deployment is configured with high availability in mind. - -## Troubleshooting and Design Practices - -### AWS Certificate Manager - -In the AWS console, if the **SSL certificate with AWS Certificate Manager** is set to `false`, you can leave **arn:aws:acm:region:account-id:certificate** as is. However, if your node is external facing and must be reached by the internet, enable this feature and set it to `true`. - -![AWS Certificate Manager](/images/chainlink-nodes/aws-certificate-manager.png) - -### Amazon Devops Guru - -In the AWS console, if the **Amazon DevOps Guru** is set to `false`, you can leave **AdministerAccountId** and **EmailAddress** as is. - -![Amazon Devops Guru](/images/chainlink-nodes/amazon-devops-guru.png) diff --git a/src/content/chainlink-nodes/resources/best-security-practices.mdx b/src/content/chainlink-nodes/resources/best-security-practices.mdx index 5a134f2eada..6472dc08b23 100644 --- a/src/content/chainlink-nodes/resources/best-security-practices.mdx +++ b/src/content/chainlink-nodes/resources/best-security-practices.mdx @@ -58,7 +58,7 @@ To be proactive in detecting any issues before or when they occur, active monito - Ethereum client disk, RAM and CPU usage. Monitoring can be set up from the Docker container's output and fed into most major logging providers. For example, you can use Docker's docs to set up the logging driver for [Amazon CloudWatch](https://docs.docker.com/config/containers/logging/awslogs/) and [Google Cloud Logging](https://docs.docker.com/config/containers/logging/gcplogs/). You will want to set the [ -JSON_CONSOLE](/chainlink-nodes/v1/configuration/#json_console) configuration variable to `true` so that the output of the container is JSON-formatted for logging. +JSON_CONSOLE](/chainlink-nodes/v1/configuration) configuration variable to `true` so that the output of the container is JSON-formatted for logging. ## Frequent Updates @@ -77,10 +77,10 @@ The following are suggestions for job specifications and configuration settings [Configuring Chainlink Nodes](/chainlink-nodes/v1/configuration): -- [MINIMUM_CONTRACT_PAYMENT_LINK_JUELS](/chainlink-nodes/v1/configuration/#minimum_contract_payment_link_juels): ensure your required payment amount is high enough to meet the costs of responding onchain. -- [MIN_INCOMING_CONFIRMATIONS](/chainlink-nodes/v1/configuration/#min_incoming_confirmations): this can be set to 0 for common data request jobs. See the bullet above on setting individual `confirmations` for specific jobs. -- [LOG_FILE_MAX_SIZE](/chainlink-nodes/v1/configuration/#log_file_max_size): Set this to `0` if you're using external log drivers which parse the output from Docker containers. This will save you disk space. -- [JSON_CONSOLE](/chainlink-nodes/v1/configuration/#json_console): Set to `true` if you're using external log drivers to parse the output of Docker containers. This will make it easier to parse individual fields of the log and set up alerts. +- [MINIMUM_CONTRACT_PAYMENT_LINK_JUELS](/chainlink-nodes/v1/configuration): ensure your required payment amount is high enough to meet the costs of responding onchain. +- [MIN_INCOMING_CONFIRMATIONS](/chainlink-nodes/v1/configuration): this can be set to 0 for common data request jobs. See the bullet above on setting individual `confirmations` for specific jobs. +- [LOG_FILE_MAX_SIZE](/chainlink-nodes/v1/configuration): Set this to `0` if you're using external log drivers which parse the output from Docker containers. This will save you disk space. +- [JSON_CONSOLE](/chainlink-nodes/v1/configuration): Set to `true` if you're using external log drivers to parse the output of Docker containers. This will make it easier to parse individual fields of the log and set up alerts. ## Addresses diff --git a/src/content/chainlink-nodes/resources/evm-performance-configuration.mdx b/src/content/chainlink-nodes/resources/evm-performance-configuration.mdx index 54b1a52622e..b7959c5dfca 100644 --- a/src/content/chainlink-nodes/resources/evm-performance-configuration.mdx +++ b/src/content/chainlink-nodes/resources/evm-performance-configuration.mdx @@ -40,7 +40,7 @@ You can configure as many send-only nodes as you want. Send-only nodes only broa URL for a send-only node as an existing primary node, and it has no effect. -Here is an example for how to specify the [`EVM_NODES` environment variable](/chainlink-nodes/v1/configuration/#evm_nodes): +Here is an example for how to specify the [`EVM_NODES` environment variable](/chainlink-nodes/v1/configuration): ```shell export EVM_NODES=' @@ -98,9 +98,9 @@ NODE_POLL_FAILURE_THRESHOLD=0 NODE_POLL_INTERVAL=0 ``` -- [NODE_NO_NEW_HEADS_THRESHOLD](/chainlink-nodes/v1/configuration/#node_no_new_heads_threshold): Controls how long to wait receiving no new heads before marking a node dead -- [NODE_POLL_FAILURE_THRESHOLD](/chainlink-nodes/v1/configuration/#node_poll_failure_threshold): Controls how many consecutive poll failures will disable a node -- [NODE_POLL_INTERVAL](/chainlink-nodes/v1/configuration/#node_poll_interval): Controls how often the node will be polled +- [NODE_NO_NEW_HEADS_THRESHOLD](/chainlink-nodes/v1/configuration): Controls how long to wait receiving no new heads before marking a node dead +- [NODE_POLL_FAILURE_THRESHOLD](/chainlink-nodes/v1/configuration): Controls how many consecutive poll failures will disable a node +- [NODE_POLL_INTERVAL](/chainlink-nodes/v1/configuration): Controls how often the node will be polled By default, these environment variables use the following values: @@ -120,9 +120,9 @@ It is not recommended to configure primary nodes with _only_ a websocket URL. Ro If you enabled HTTP URLs on all your primary nodes, you can increase the values for the following environment variables: -- [ETH_RPC_DEFAULT_BATCH_SIZE](/chainlink-nodes/v1/configuration/#eth_rpc_default_batch_size) -- [BLOCK_HISTORY_ESTIMATOR_BATCH_SIZE](/chainlink-nodes/v1/configuration/#block_history_estimator_batch_size) -- [ETH_LOG_BACKFILL_BATCH_SIZE](/chainlink-nodes/v1/configuration/#eth_log_backfill_batch_size) +- [ETH_RPC_DEFAULT_BATCH_SIZE](/chainlink-nodes/v1/configuration) +- [BLOCK_HISTORY_ESTIMATOR_BATCH_SIZE](/chainlink-nodes/v1/configuration) +- [ETH_LOG_BACKFILL_BATCH_SIZE](/chainlink-nodes/v1/configuration) By default, these config variables are set conservatively to avoid overflowing websocket frames. In HTTP mode, there are no such limitations. You might be able to improve performance with increased values similar to the following example: diff --git a/src/content/chainlink-nodes/resources/performing-system-maintenance.mdx b/src/content/chainlink-nodes/resources/performing-system-maintenance.mdx index 906abf9374e..7d453139bb4 100644 --- a/src/content/chainlink-nodes/resources/performing-system-maintenance.mdx +++ b/src/content/chainlink-nodes/resources/performing-system-maintenance.mdx @@ -115,7 +115,7 @@ When the log messages on the first node indicate that it is waiting for the data You might want to run multiple instances of the Chainlink node on the same machine. If one instance goes down, the second instance can automatically pick up requests. Building off the concepts in the previous example, use Docker to have primary and a secondary containers referencing the same database URL. -Use the default `DATABASE_LOCKING_MODE=advisorylock` setting unless you want to test the `lease` or `dual` settings. See [the docs](/chainlink-nodes/v1/configuration/#database_locking_mode) for more information about this configuration variable. +Use the default `DATABASE_LOCKING_MODE=advisorylock` setting unless you want to test the `lease` or `dual` settings. See [the docs](/chainlink-nodes/v1/configuration) for more information about this configuration variable. Run the Chainlink node with a name option specified: diff --git a/src/content/chainlink-nodes/resources/run-an-ethereum-client.mdx b/src/content/chainlink-nodes/resources/run-an-ethereum-client.mdx index e346a443bd0..cb85f030b93 100644 --- a/src/content/chainlink-nodes/resources/run-an-ethereum-client.mdx +++ b/src/content/chainlink-nodes/resources/run-an-ethereum-client.mdx @@ -320,7 +320,7 @@ Example connection setting: At a minimum, disable the default RPC gas and txfee caps on your ETH node. This can be done in the TOML file as seen below, or by running go-ethereum with the command line arguments: `--rpc.gascap=0 --rpc.txfeecap=0`. -To learn more about configuring ETH nodes, see the [configuration page](/chainlink-nodes/v1/configuration/#configuring-your-eth-node). +To learn more about configuring ETH nodes, see the [configuration page](/chainlink-nodes/v1/configuration). ## Additional Tools diff --git a/src/content/chainlink-nodes/v1/configuration.mdx b/src/content/chainlink-nodes/v1/configuration.mdx deleted file mode 100644 index 233cdb95a9c..00000000000 --- a/src/content/chainlink-nodes/v1/configuration.mdx +++ /dev/null @@ -1,1679 +0,0 @@ ---- -section: nodeOperator -date: Last Modified -title: "Configuring Chainlink Nodes" ---- - -import { Aside, Icon } from "@components" - -Recent versions of the Chainlink node use sensible defaults for most configuration variables. You do not need to change much to get a standard deployment working. - -Not all environment variables are documented here. Any undocumented environment variable is subject to change in future releases. In almost all cases, you should leave any environment variable not listed here to its default value unless you really understand what you are doing. - -To reiterate: _If you have an environment variable set that is not listed here, and you don't know exactly why you have it set, you should remove it!_ - -The environment variables listed here are explicitly supported and current as of Chainlink node v1.3.0. - -### TOML Configuration - -TOML configuration for Chainlink nodes is stable and recommended for mainnet deployments. TOML configuration will be the only supported configuration method starting with `v2.0.0`. Enable TOML configuration by specifying the `-config FILENAME.toml` flag with the path to your TOML file. Alternatively, you can specify the raw TOML config in the [`CL_CONFIG` environment variable](/chainlink-nodes/v1/configuration#cl_config). See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/CONFIG.md) and [SECRETS.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/SECRETS.md) on GitHub to learn more. - -## Changes to node configuration starting in v1.1.0 nodes - -As of Chainlink node v1.1.0 and up, the way nodes manage configuration is changing. Previously, environment variables exclusively handled all node configuration. Although this configuration method worked well in the past, it has its limitations. Notably, it doesn't mesh well with chain-specific configuration profiles. - -For this reason, Chainlink nodes are moving towards a model where you set variables using the API, CLI, or GUI, and the configuration is saved in the database. We encourage you to become familiar with this model because it is likely that nodes will continue to move away from environment variable configuration in the future. - -As of v1.1.0, Chainlink nodes still support environment variables to configure node settings and chain-specific settings. If the environment variable is set, it overrides any chain-specific, job-specific, or database configuration setting. The log displays a warning to indicate when an override happens, so you know when variables lower in the hierarchy are being ignored. - -Your node applies configuration settings using following hierarchy: - -1. Environment variables -1. Chain-specific variables -1. Job-specific variables - -## Essential environment variables - -These are the only environment variables that are _required_ for a Chainlink node to run. - -### DATABASE_URL - -**Required** - -- Default: _none_ - -The PostgreSQL URI to connect to your database. Chainlink nodes require Postgres versions >= 11. See the [Running a Chainlink Node](/chainlink-nodes/v1/running-a-chainlink-node) for an example. - -## General Node Configuration - -### CL_CONFIG - -This environment variable is used to set static configuration using TOML format. Specify the raw TOML config in this environment variable. Unlike the `-config` flag, it does not accept a path to a TOML file. - -See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/CONFIG.md) and [SECRETS.md](https://github.com/smartcontractkit/chainlink/blob/v1.13.0/docs/SECRETS.md) on GitHub to learn more. - -### CHAIN_TYPE - -- Default: _none_ - -CHAIN_TYPE overrides all chains and forces them to act as a particular chain type. An up-to-date list of chain types is given in [`chaintype.go`](https://github.com/smartcontractkit/chainlink/blob/v1.3.0/core/chains/chaintype.go). - -This variable enables some chain-specific hacks and optimizations. It is recommended not to use this environment variable and set the chain-type on a per-chain basis instead. - -### CHAINLINK_DEV - -- Default: `"false"` - -Setting `CHAINLINK_DEV` to `true` enables development mode. Do not use this for production deployments. It can be useful for enabling experimental features and collecting debug information in test environments. - -### ROOT - -- Default: `"~/.chainlink"` - -The Chainlink node's root directory. This is the default directory for logging, database backups, cookies, and other misc Chainlink node files. Chainlink nodes will always ensure this directory has `700` permissions because it might contain sensitive data. - -### TELEMETRY_INGRESS_UNICONN - -- Default: `"true"` - -Toggles which ws connection style is used. - -### TELEMETRY_INGRESS_LOGGING - -- Default: `"false"` - -Toggles verbose logging of the raw telemetry messages being sent. - -### TELEMETRY_INGRESS_URL - -- Default: _none_ - -The URL to connect to for sending telemetry. - -### TELEMETRY_INGRESS_SERVER_PUB_KEY - -- Default: _none_ - -The public key of the telemetry server. - -### TELEMETRY_INGRESS_BUFFER_SIZE - -- Default: `"100"` - -The number of telemetry messages to buffer before dropping new ones. - -### TELEMETRY_INGRESS_MAX_BATCH_SIZE - -- Default: `"50"` - -The maximum number of messages to batch into one telemetry request. - -### TELEMETRY_INGRESS_SEND_INTERVAL - -- Default: `"500ms"` - -The interval on which batched telemetry is sent to the ingress server. - -### TELEMETRY_INGRESS_SEND_TIMEOUT - -- Default: `"10s"` - -The max duration to wait for the request to complete when sending batch telemetry. - -### TELEMETRY_INGRESS_USE_BATCH_SEND - -- Default: `"true"` - -Toggles sending telemetry to the ingress server using the batch client. - -## Chains - -### SOLANA_ENABLED - - - -- Default: `"false"` - -Enables Solana support. - -### EVM_ENABLED - -- Default: `"true"` - -Enables support for EVM-based chains. By default, this variable is set to `true` to provide legacy compatibility and ease the upgrade path from older versions of Chainlink which did not support disabling EVM. - -## Database Settings - -### MIGRATE_DATABASE - -- Default: `"true"` - -This variable controls whether a Chainlink node will attempt to automatically migrate the database on boot. If you want more control over your database migration process, set this variable to `false` and manually migrate the database using the CLI `migrate` command instead. - -### ORM_MAX_IDLE_CONNS - -- Default: `"10"` - -This setting configures the maximum number of idle database connections that the Chainlink node will keep open. Think of this as the baseline number of database connections per Chainlink node instance. Increasing this number can help to improve performance under database-heavy workloads. - -Postgres has connection limits, so you must use cation when increasing this value. If you are running several instances of a Chainlink node or another application on a single database server, you might run out of Postgres connection slots if you raise this value too high. - -### ORM_MAX_OPEN_CONNS - -- Default: `"20"` - -This setting configures the maximum number of database connections that a Chainlink node will have open at any one time. Think of this as the maximum burst upper bound limit of database connections per Chainlink node instance. Increasing this number can help to improve performance under database-heavy workloads. - -Postgres has connection limits, so you must use cation when increasing this value. If you are running several instances of a Chainlink node or another application on a single database server, you might run out of Postgres connection slots if you raise this value too high. - -## Database Global Lock - -Chainlink nodes use a database lock to ensure that only one Chainlink node instance can be run on the database at a time. If you run multiple instances of a Chainlink node that share a single database at the same time, the node will encounter strange errors and data integrity failures. Do not allow multiple nodes to write data to the database at the same time. - -### DATABASE_LOCKING_MODE - -- Default: `"dual"` - -The `DATABASE_LOCKING_MODE` variable can be set to 'dual', 'advisorylock', 'lease', or 'none'. It controls which mode to use to enforce that only one Chainlink node can use the database. It is recommended to set this to `lease`. - -- `dual` - The default: Uses both advisory locks and lease locks for backward and forward compatibility -- `advisorylock` - Advisory lock only -- `lease` - Lease lock only -- _none_ - No locking at all: This option useful for advanced deployment environments when you are sure that only one instance of a Chainlink node will ever be running. - -#### Technical details - -Ideally, you should use a container orchestration system like [Kubernetes](https://kubernetes.io/) to ensure that only one Chainlink node instance can ever use a specific Postgres database. However, some node operators do not have the technical capacity to do this. Common use cases run multiple Chainlink node instances in failover mode as recommended by our official documentation. The first instance takes a lock on the database and subsequent instances will wait trying to take this lock in case the first instance fails. - -By default, Chainlink nodes use the `dual` setting to provide both advisory locks and lease locks for backward and forward compatibility. Using advisory locks alone presents the following problems: - -- If your nodes or applications hold locks open for several hours or days, Postgres is unable to complete internal cleanup tasks. The Postgres maintainers explicitly discourage holding locks open for long periods of time. -- Advisory locks can silently disappear when you upgrade Postgres, so a new Chainlink node instance can take over even while the old node is still running. -- Advisory locks do not work well with pooling tools such as [pgbouncer](https://www.pgbouncer.org/). -- If the Chainlink node crashes, an advisory lock can hang around for up to several hours, which might require you to manually remove it so another instance of the Chainlink node will allow itself to boot. - -Because of the complications with advisory locks, Chainlink nodes with v1.1.0 and later support a new `lease` locking mode. This mode might become the default in future. The `lease` locking mode works using the following process: - -- Node A creates one row in the database with the client ID and updates it once per second. -- Node B spinlocks and checks periodically to see if the client ID is too old. If the client ID is not updated after a period of time, node B assumes that node A failed and takes over. Node B becomes the owner of the row and updates the client ID once per second. -- If node A comes back, it attempts to take out a lease, realizes that the database has been leased to another process, and exits the entire application immediately. - -### ADVISORY_LOCK_CHECK_INTERVAL - -**ADVANCED** - -Do not change this setting unless you know what you are doing. - -This setting applies only if `DATABASE_LOCKING_MODE` is set to enable advisory locking. - -- Default: `"1s"` - -`ADVISORY_LOCK_CHECK_INTERVAL` controls how often the Chainlink node checks to make sure it still holds the advisory lock when advisory locking is enabled. If a node no longer holds the lock, it will try to re-acquire it. If the node cannot re-acquire the lock, the application will exit. - -### ADVISORY_LOCK_ID - -**ADVANCED** - -Do not change this setting unless you know what you are doing. - -This setting applies only if `DATABASE_LOCKING_MODE` is set to enable advisory locking. - -- Default: `"1027321974924625846"` - -`ADVISORY_LOCK_ID` is the application advisory lock ID. This must match all other Chainlink nodes that might access this database. It is unlikely you will ever need to change this from the default. - -### LEASE_LOCK_DURATION - -**ADVANCED** - -Do not change this setting unless you know what you are doing. - -This setting applies only if `DATABASE_LOCKING_MODE` is set to enable lease locking. - -- Default: `"30s"` - -How long the lease lock will last before expiring. - -### LEASE_LOCK_REFRESH_INTERVAL - -**ADVANCED** - -Do not change this setting unless you know what you are doing. - -This setting applies only if `DATABASE_LOCKING_MODE` is set to enable lease locking. - -- Default: `"1s"` - -How often to refresh the lease lock. Also controls how often a standby node will check to see if it can grab the lease. - -## Database Automatic Backups - -As a best practice, take regular database backups in case of accidental data loss. This best practice is especially important when you upgrade your Chainlink node to a new version. Chainlink nodes support automated database backups to make this process easier. - -NOTE: Dumps can cause high load and massive database latencies, which will negatively impact the normal functioning of the Chainlink node. For this reason, it is recommended to set a DATABASE_BACKUP_URL and point it to a read replica if you enable automatic backups. - -### DATABASE_BACKUP_FREQUENCY - -- Default: `"1h"` - -If this variable is set to a positive duration and `DATABASE_BACKUP_MODE` is not _none_, the node will dump the database at this regular interval. - -Set to `0` to disable periodic backups. - -### DATABASE_BACKUP_MODE - -- Default: `"none"` - -Set the mode for automatic database backups, which can be one of _none_, `lite`, or `full`. If enabled, the Chainlink node will always dump a backup on every boot before running migrations. Additionally, it will automatically take database backups that overwrite the backup file for the given version at regular intervals if `DATABASE_BACKUP_FREQUENCY` is set to a non-zero interval. - -_none_ - Disables backups. -`lite` - Dumps small tables including configuration and keys that are essential for the node to function, which excludes historical data like job runs, transaction history, etc. -`full` - Dumps the entire database. - -It will write to a file like `$ROOT/backup/cl_backup_VERSION.dump`. There is one backup dump file per version of the Chainlink node. If you upgrade the node, it will keep the backup taken right before the upgrade migration so you can restore to an older version if necessary. - -### DATABASE_BACKUP_URL - -If specified, the automatic database backup will pull from this URL rather than the main `DATABASE_URL`. It is recommended to set this value to a read replica if you have one to avoid excessive load on the main database. - -### DATABASE_BACKUP_DIR - -This variable sets the directory to use for saving the backup file. Use this if you want to save the backup file in a directory other than the default ROOT directory. - -## Logging - -### JSON_CONSOLE - -- Default: `"false"` - -Set this to true to enable JSON logging. Otherwise, the log is saved in a human-friendly console format. - -### LOG_FILE_DIR - -- Default: `"$ROOT"` - -By default, Chainlink nodes write log data to `$ROOT/log.jsonl`. The log directory can be changed by setting this var. For example, `LOG_FILE_DIR=/my/log/directory`. - -### LOG_LEVEL - -- Default: `"info"` - -The `LOG_LEVEL` environment variable determines both what is printed on the screen and what is written to the log file. - -The available options are: - -- `"debug"`: Useful for forensic debugging of issues. -- `"info"`: High-level informational messages. -- `"warn"`: A mild error occurred that might require non-urgent action. Check these warnings semi-regularly to see if any of them require attention. These warnings usually happen due to factors outside of the control of the node operator. Examples: Unexpected responses from a remote API or misleading networking errors. -- `"error"`: An unexpected error occurred during the regular operation of a well-maintained node. Node operators might need to take action to remedy this error. Check these regularly to see if any of them require attention. Examples: Use of deprecated configuration options or incorrectly configured settings that cause a job to fail. -- `"crit"`: A critical error occurred. The node might be unable to function. Node operators should take immediate action to fix these errors. Examples: The node could not boot because a network socket could not be opened or the database became inaccessible. -- `"panic"`: An exceptional error occurred that could not be handled. If the node is unresponsive, node operators should try to restart their nodes and notify the Chainlink team of a potential bug. -- `"fatal"`: The node encountered an unrecoverable problem and had to exit. - -### LOG_SQL - -- Default: `"false"` - -This setting tells the Chainlink node to log SQL statements made using the default logger. SQL statements will be logged at `debug` level. Not all statements can be logged. The best way to get a true log of all SQL statements is to enable SQL statement logging on Postgres. - -### LOG_FILE_MAX_SIZE - -- Default: `"5120mb"` - -Determines the log file's max size in megabytes before file rotation. Having this not set will disable logging to disk. If your disk doesn't have enough disk space, the logging will pause and the application will log errors until space is available again. - -Values must have suffixes with a unit like: `5120mb` (5,120 megabytes). If no unit suffix is provided, the value defaults to `b` (bytes). The list of valid unit suffixes are: - -- b (bytes) -- kb (kilobytes) -- mb (megabytes) -- gb (gigabytes) -- tb (terabytes) - -### LOG_FILE_MAX_AGE - -- Default: `"0"` - -Determines the log file's max age in days before file rotation. Keeping this config with the default value will not remove log files based on age. - -### LOG_FILE_MAX_BACKUPS - -- Default: `"1"` - -Determines the maximum number of old log files to retain. Keeping this config with the default value retains all old log files. The `LOG_FILE_MAX_AGE` variable can still cause them to get deleted. - -### LOG_UNIX_TS - -- Default: _none_ - -Previous versions of Chainlink nodes wrote JSON logs with a unix timestamp. As of v1.1.0 and up, the default has changed to use ISO8601 timestamps for better readability. Setting `LOG_UNIX_TS=true` will enable the old behavior. - -### AUDIT_LOGGER_FORWARD_TO_URL - -- Default: _none_ - -When set, this environment variable configures and enables an optional HTTP logger which is used specifically to send audit log events. Audit logs events are emitted when specific actions are performed by any of the users through the node's API. The value of this variable should be a full URL. Log items will be sent via POST HTTP requests. - -There are audit log implemented for the following events: - -- Auth & Sessions (new session, login success, login failed, 2FA enrolled, 2FA failed, password reset, password reset failed, etc.) -- CRUD actions for all resources (add/create/delete resources such as bridges, nodes, keys) -- Sensitive actions (keys exported/imported, config changed, log level changed, environment dumped) - -A full list of audit log enum types can be found in the source within the `audit` package ([`audit_types.go`](https://github.com/smartcontractkit/chainlink/blob/develop/core/logger/audit/audit_types.go)). - -Log events follow this schema: - -``` -{ - "eventID": EVENT_ID_ENUM, - "hostname": HOSTNAME, - "localIP" : CL_NODE_IP, - "env" : ENVIRONMENT_NAME, - "data": ... -} -``` - -The `AUDIT_LOGGER_*` environment variables configure this optional audit log HTTP forwarder. - -### AUDIT_LOGGER_HEADERS - -- Default: _none_ - -An optional list of HTTP headers to be added for every optional audit log event. If the above `AUDIT_LOGGER_FORWARD_TO_URL` is set, audit log events will be POSTed to that URL, and will include headers specified in this environment variable. One example use case is auth for example: - -`AUDIT_LOGGER_HEADERS="Authorization||{token}"` - -Header keys and values are delimited on ||, and multiple headers can be added with a forward slash delimiter (`\`). An example of multiple key value pairs: - -`AUDIT_LOGGER_HEADERS="Authorization||{token}\Some-Other-Header||{token2}"` - -### AUDIT_LOGGER_JSON_WRAPPER_KEY - -- Default: _none_ - -When the audit log HTTP forwarder is enabled, if there is a value set for this optional environment variable then the POST body will be wrapped in a dictionary in a field specified by the value of set variable. This is to help enable specific logging service integrations that may require the event JSON in a special shape. For example: `AUDIT_LOGGER_JSON_WRAPPER_KEY=event` will create the POST body: - -``` -{ - "event": { - "eventID": EVENT_ID_ENUM, - "hostname": HOSTNAME, - "localIP" : CL_NODE_IP, - "env" : ENVIRONMENT_NAME, - "data": ... - } -} -``` - -## Nurse service (auto-pprof) - -The Chainlink node is equipped with an internal "nurse" service that can perform automatic `pprof` profiling when the certain resource thresholds are exceeded, such as memory and goroutine count. These profiles are saved to disk to facilitate fine-grained debugging of performance-related issues. In general, if you notice that your node has begun to accumulate profiles, forward them to the Chainlink team. - -To learn more about these profiles, read the [Profiling Go programs with pprof](https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/) guide. - -### AUTO_PPROF_ENABLED - -- Default: `"false"` - -Set to `true` to enable the automatic profiling service. - -### AUTO_PPROF_PROFILE_ROOT - -Defaults to `$CHAINLINK_ROOT` - -The location on disk where pprof profiles will be stored. - -### AUTO_PPROF_POLL_INTERVAL - -- Default: `"10s"` - -The interval at which the node's resources are checked. - -### AUTO_PPROF_GATHER_DURATION - -- Default: `"10s"` - -The duration for which profiles are gathered when profiling starts. - -### AUTO_PPROF_GATHER_TRACE_DURATION - -- Default: `"5s"` - -The duration for which traces are gathered when profiling is kicked off. This is separately configurable because traces are significantly larger than other types of profiles. - -### AUTO_PPROF_MAX_PROFILE_SIZE - -- Default: `"100mb"` - -The maximum amount of disk space that profiles may consume before profiling is disabled. - -### AUTO_PPROF_CPU_PROFILE_RATE - -- Default: `"1"` - -See https://pkg.go.dev/runtime#SetCPUProfileRate. - -### AUTO_PPROF_MEM_PROFILE_RATE - -- Default: `"1"` - -See https://pkg.go.dev/runtime#pkg-variables. - -### AUTO_PPROF_BLOCK_PROFILE_RATE - -- Default: `"1"` - -See https://pkg.go.dev/runtime#SetBlockProfileRate. - -### AUTO_PPROF_MUTEX_PROFILE_FRACTION - -- Default: `"1"` - -See https://pkg.go.dev/runtime#SetMutexProfileFraction. - -- Default: `"1"` - -### AUTO_PPROF_MEM_THRESHOLD - -- Default: `"4gb"` - -The maximum amount of memory the node can actively consume before profiling begins. - -### AUTO_PPROF_GOROUTINE_THRESHOLD - -- Default: `"5000"` - -The maximum number of actively-running goroutines the node can spawn before profiling begins. - -## Chainlink Web Server - -### ALLOW_ORIGINS - -- Default: `"http://localhost:3000,http://localhost:6688"` - -Controls the URLs Chainlink nodes emit in the `Allow-Origins` header of its API responses. The setting can be a comma-separated list with no spaces. You might experience CORS issues if this is not set correctly. - -You should set this to the external URL that you use to access the Chainlink UI. - -You can set `ALLOW_ORIGINS=*` to allow the UI to work from any URL, but it is recommended for security reasons to make it explicit instead. - -### AUTHENTICATED_RATE_LIMIT - -- Default: `"1000"` - -`AUTHENTICATED_RATE_LIMIT` defines the threshold to which authenticated requests get limited. More than this many authenticated requests per `AUTHENTICATED_RATE_LIMIT_PERIOD` will be rejected. - -### AUTHENTICATED_RATE_LIMIT_PERIOD - -- Default: `"1m"` - -`AUTHENTICATED_RATE_LIMIT_PERIOD` defines the period to which authenticated requests get limited. - -### BRIDGE_CACHE_TTL - -- Default: 0s - -When set to `d` units of time, this variable enables using cached bridge responses that are at most `d` units old. Caching is disabled by default. - -Example `BRIDGE_CACHE_TTL=10s`, `BRIDGE_CACHE_TTL=1m` - -### BRIDGE_RESPONSE_URL - -- Default: _none_ - -`BRIDGE_RESPONSE_URL` defines the URL for bridges to send a response to. - -Usually this will be the same as the URL/IP and port you use to connect to the Chainlink UI, such as `https://my-chainlink-node.example.com:6688`. - -### HTTP_SERVER_WRITE_TIMEOUT - -**ADVANCED** - -Do not change this setting unless you know what you are doing. - -- Default: `"10s"` - -`HTTP_SERVER_WRITE_TIMEOUT` controls how long the Chainlink node's API server can hold a socket open for writing a response to an HTTP request. Sometimes, this must be increased for pprof. - -### CHAINLINK_PORT - -- Default: `"6688"` - -Port used for the Chainlink Node API, CLI, and GUI. - -### SECURE_COOKIES - -- Default: `"true"` - -Requires the use of secure cookies for authentication. Set to false to enable standard HTTP requests along with `CHAINLINK_TLS_PORT=0`. - -### SESSION_TIMEOUT - -- Default: `"15m"` - -This value determines the amount of idle time to elapse before session cookies expire. This signs out GUI users from their sessions. - -### UNAUTHENTICATED_RATE_LIMIT - -- Default: `"5"` - -`UNAUTHENTICATED_RATE_LIMIT` defines the threshold to which authenticated requests get limited. More than this many unauthenticated requests per `UNAUTHENTICATED_RATE_LIMIT_PERIOD` will be rejected. - -### UNAUTHENTICATED_RATE_LIMIT_PERIOD - -- Default: `"20s"` - -`UNAUTHENTICATED_RATE_LIMIT_PERIOD` defines the period to which unauthenticated requests get limited. - -## Web Server MFA - -The Operator UI frontend now supports enabling Multi Factor Authentication via Webauthn per account. When enabled, logging in will require the account password and a hardware or OS security key such as Yubikey. To enroll, log in to the operator UI and click the circle purple profile button at the top right and then click **Register MFA Token**. Tap your hardware security key or use the OS public key management feature to enroll a key. Next time you log in, this key will be required to authenticate. - -This feature must be enabled by setting the following environment variables: `MFA_RPID` and `MFA_RPORIGIN`. - -### MFA_RPID - -- Default: _none_ - -The `MFA_RPID` value should be the FQDN of where the Operator UI is served. When serving locally, the value should be `localhost`. - -### MFA_RPORIGIN - -- Default: _none_ - -The `MFA_RPORIGIN` value should be the origin URL where WebAuthn requests initiate, including scheme and port. When serving locally, the value should be `http://localhost:6688/`. - -## Web Server TLS - -The TLS settings below apply only if you want to enable TLS security on your Chainlink node. - -### CHAINLINK_TLS_HOST - -- Default: _none_ - -The hostname configured for TLS to be used by the Chainlink node. This is useful if you configured a domain name specific for your Chainlink node. - -### CHAINLINK_TLS_PORT - -- Default: `"6689"` - -The port used for HTTPS connections. Set this to `0` to disable HTTPS. Disabling HTTPS also relieves Chainlink nodes of the requirement for a TLS certificate. - -### CHAINLINK_TLS_REDIRECT - -- Default: `"false"` - -Forces TLS redirect for unencrypted connections. - -### TLS_CERT_PATH - -- Default: _none_ - -The location of the TLS certificate file. Example: `/home/$USER/.chainlink/tls/server.crt` - -### TLS_KEY_PATH - -- Default: _none_ - -The location of the TLS private key file. Example: `/home/$USER/.chainlink/tls/server.key` - -## EVM/Ethereum Legacy Environment Variables - -Previous Chainlink node versions supported only one chain. From v1.1.0 and up, Chainlink nodes support multiple EVM and non-EVM chains, so the way that chains and nodes are configured has changed. - -The preferred way of configuring Chainlink nodes as of v1.1.0 and up is to use the API, CLI, or UI to set chain-specific configuration and create nodes. - -The old way of specifying chains using environment variables is still supported, but discouraged. It works as follows: - -If you set any value for `ETH_URL`, the values of `ETH_CHAIN_ID`, `ETH_URL`, `ETH_HTTP_URL` and `ETH_SECONDARY_URLS` will be used to create and update chains and nodes representing these values in the database. If an existing chain or node is found, it will be overwritten. This mode is used mainly to ease the process of upgrading. On subsequent runs (once your old settings have been written to the database) it is recommended to unset `ETH_URL` and use the API commands exclusively to administer chains and nodes. - -In the future, support for the `ETH_URL` and associated environment variables might be removed, so it is recommended to use the API, CLI, or GUI instead to setup chains and nodes. - -### ETH_URL - -Setting this will enable "legacy eth ENV" mode, which is not compatible with multi-chain. It is better to configure settings using the API, CLI, or GUI instead. - -- Default: _none_ - -This is the websocket address of the Ethereum client that the Chainlink node will connect to. All interaction with the Ethereum blockchain will occur through this connection. - -NOTE: It is also required to set `ETH_CHAIN_ID` if you set ETH_URL. - -### ETH_HTTP_URL - -Only has effect if `ETH_URL` set. Otherwise, it can be set in the API, CLI, or GUI. - -- Default: _none_ - -This should be set to the HTTP URL that points to the same ETH node as the primary. If set, the Chainlink node will automatically use HTTP mode for heavy requests, which can improve reliability. - -### EVM_NODES - - - -- Default: _none_ - -A JSON array of node specifications that allows you to configure multiple nodes or chains using an environment variable. This is not compatible with other environment variables that specify the node such as `ETH_URL` or `ETH_SECONDARY_URLS`. Set this variable using a configuration like the following example: - -{/* prettier-ignore */} -```json -EVM_NODES=' -[ - { - "name": "primary_0_1", - "evmChainId": "0", - "wsUrl": "ws://test1.invalid", - "sendOnly": false - }, - { - "name": "primary_0_2", - "evmChainId": "0", - "wsUrl": "ws://test2.invalid", - "httpUrl": "https://test3.invalid", - "sendOnly": false - }, - { - "name": "primary_1337_1", - "evmChainId": "1337", - "wsUrl": "ws://test4.invalid", - "httpUrl": "http://test5.invalid", - "sendOnly": false - }, - { - "name": "sendonly_1337_1", - "evmChainId": "1337", - "httpUrl": "http://test6.invalid", - "sendOnly": true - }, - { - "name": "sendonly_0_1", - "evmChainId": "0", - "httpUrl": "http://test7.invalid", - "sendOnly": true - }, - { - "name": "primary_42_1", - "evmChainId": "42", - "wsUrl": "ws://test8.invalid", - "sendOnly": false - }, - { - "name": "sendonly_43_1", - "evmChainId": "43", - "httpUrl": "http://test9.invalid", - "sendOnly": true - } -] -' -``` - -Usage of Docker requires the variable to be formatted as one line with no whitespaces and quotes wrapping it, as follows in the example: - -{/* prettier-ignore */} -```bash -EVM_NODES=[{"name":"primary_0_1","evmChainId":"0","wsUrl":"ws://test1.invalid","sendOnly":false},{"name":"primary_0_2","evmChainId":"0","wsUrl":"ws://test2.invalid","httpUrl":"https://test3.invalid","sendOnly":false},{"name":"primary_1337_1","evmChainId":"1337","wsUrl":"ws://test4.invalid","httpUrl":"http://test5.invalid","sendOnly":false}] -``` - -### ETH_SECONDARY_URLS - -Only has effect if `ETH_URL` set. Otherwise, it can be set in the API, CLI, or GUI. - -- Default: _none_ - -If set, transactions will also be broadcast to this secondary Ethereum node. This allows transaction broadcasting to be more robust in the face of primary Ethereum node bugs or failures. - -It is recommended to set at least one secondary ETH node here that is different from your primary. - -Multiple URLs can be specified as a comma-separated list e.g. - -`ETH_SECONDARY_URLS=https://example.com/1,https://example.text/2,...` - -## EVM/Ethereum Global Settings - -This configuration is specific to EVM/Ethereum chains. - -### ETH_CHAIN_ID - -- Default: _none_ - -This environment variable specifies the default chain ID. Any job spec that has not explicitly set `EVMChainID` will connect to this default chain. If you do not have a chain in the database matching this value, any jobs that try to use it will throw an error. - -### EVM_RPC_ENABLED - -- Default: `"true"` - -Enables connecting to real EVM RPC nodes. Disabling this can be useful in certain cases such as spinning up a Chainlink node and adding EVM-based jobs without having it actually execute anything onchain, or for debugging to see what the node _would_ do without actually doing it. - -## EVM/Ethereum Chain-specific Overrides - -These configuration options act as an override, setting the value for _all_ chains. - -This often doesn't make sense, e.g. `ETH_FINALITY_DEPTH` on Avalanche could be quite different from `ETH_FINALITY_DEPTH` on Ethereum mainnet. - -We recommend setting this on a per-chain basis using the API, CLI, or GUI instead. - -In general, Chainlink nodes contain built-in defaults for most of these settings that should work out of the box on all officially supported chains, so it is unlikely you must make any changes here. - -### BALANCE_MONITOR_ENABLED - -- Default: `"true"` - -Enables Balance Monitor feature. This is required to track balances of keys locally and warn if it drops too low. It also enables displaying balance in the Chainlink UI and API. - -### BLOCK_BACKFILL_DEPTH - -- Default: `"10"` - -This variable specifies the number of blocks before the current head that the log broadcaster will try to re-consume logs from, e.g. after adding a new job. - -### BLOCK_BACKFILL_SKIP - -- Default: `"false"` - -This variable enables skipping of very long log backfills. For example, this happens in a situation when the node is started after being offline for a long time. -This might be useful on fast chains and if only recent chain events are relevant - -### ETH_TX_REAPER_INTERVAL - -NOTE: This overrides the setting for _all_ chains, you might want to set this on a per-chain basis using the API, CLI, or GUI instead - -- Default: `"1h"` - -Controls how often the ETH transaction reaper should run, used to delete old confirmed or fatally_errored transaction records from the database. Setting to `0` disables the reaper. - -### ETH_TX_REAPER_THRESHOLD - -- Default: `"24h"` - -Represents how long any confirmed or fatally_errored `eth_tx` transactions will hang around in the database. -If the `eth_tx` is confirmed but still below `ETH_FINALITY_DEPTH`, it will not be deleted even if it was created at a time older than this value. - -EXAMPLE: -With: `EthTxReaperThreshold=1h` and `EthFinalityDepth=50` -If current head is 142, any `eth_tx` confirmed in block 91 or below will be reaped as long as its `created_at` value is older than the value set for `EthTxReaperThreshold`. - -Setting to `0` disables the reaper. - -### ETH_TX_RESEND_AFTER_THRESHOLD - -NOTE: This overrides the setting for _all_ chains, you might want to set this on a per-chain basis using the API, CLI, or GUI instead. - -- Default: _automatically set based on Chain ID, typically 1m_ - -Controls how long the `ethResender` will wait before re-sending the latest `eth_tx_attempt`. This is designed a as a fallback to protect against the ETH nodes dropping transactions (which has been anecdotally observed to happen), networking issues, or transactions being ejected from the mempool. - -Setting to `0` disables the resender. - -### ETH_FINALITY_DEPTH - -- Default: _automatically set based on Chain ID, typically 50_ - -The number of blocks after which an Ethereum transaction is considered "final". - -`ETH_FINALITY_DEPTH` determines how deeply we look back to ensure that transactions are confirmed onto the longest chain. There is not a large performance penalty to setting this relatively high (on the order of hundreds). - -It is practically limited by the number of heads we store in the database (`HEAD_TRACKER_HISTORY_DEPTH`) and should be less than this with a comfortable margin. -If a transaction is mined in a block more than this many blocks ago, and is reorged out, we will NOT retransmit this transaction and undefined behavior can occur including gaps in the nonce sequence that require manual intervention to fix. Therefore, this number represents a number of blocks we consider large enough that no re-org this deep will ever feasibly happen. - -### ETH_HEAD_TRACKER_HISTORY_DEPTH - -- Default: _automatically set based on Chain ID, typically 100_ - -Tracks the top N block numbers to keep in the `heads` database table. Note that this can easily result in MORE than N total records since in the case of re-orgs we keep multiple heads for a particular block height, and it is also scoped per chain. This number should be at least as large as `ETH_FINALITY_DEPTH`. There might be a small performance penalty to setting this to something very large (10,000+) - -### ETH_HEAD_TRACKER_MAX_BUFFER_SIZE - -- Default: `"3"` - -The maximum number of heads that can be buffered in front of the head tracker before older heads start to be dropped. Think this setting as the maximum permitted "lag" for the head tracker before the Chainlink node starts dropping heads to keep up. - -### ETH_HEAD_TRACKER_SAMPLING_INTERVAL - -- Default: _automatically set based on Chain ID, typically 1s_ - -Head tracker sampling was introduced to handle chains with very high throughput. If this is set, the head tracker will "gap" heads and deliver a maximum of 1 head per this period. - -Set to `0` to disable head tracker sampling. - -### ETH_LOG_BACKFILL_BATCH_SIZE - -- Default: _automatic based on Chain ID, typically 100_ - -Controls the batch size for calling FilterLogs when backfilling missing or recent logs. - -### ETH_LOG_POLL_INTERVAL - -- Default: _automatic based on Chain ID_ - -Defines how frequently to poll for new logs. - -### ETH_RPC_DEFAULT_BATCH_SIZE - -- Default: _automatic based on chain ID_ - -Chainlink nodes use batch mode for certain RPC calls to increase efficiency of communication with the remote ETH node. In some cases, trying to request too many items in a single batch will result in an error (e.g. due to bugs in go-ethereum, third-party provider limitations, limits inherent to the websocket channel etc). This setting controls the maximum number of items that can be requested in a single batch. Chainlink nodes use built-in conservative defaults for different chains that should work out of the box. - -If you have enabled HTTP URLs for all of your ETH nodes, you can safely increase this to a larger value e.g. 100 and see significant RPC performance improvements. - -### LINK_CONTRACT_ADDRESS - -- Default: _automatic based on Chain ID_ - -The address of the LINK token contract. It is not essential to provide this, but if given, it is used for displaying the node account's LINK balance. For supported chains, this is automatically set based on the given chain ID. For unsupported chains, you must supply it yourself. - -This environment variable is a global override. It is recommended instead to set this on a per-chain basis. - -### MIN_INCOMING_CONFIRMATIONS - -- Default: _automatic based on chain ID, typically 3_ - -The number of block confirmations to wait before kicking off a job run or proceeding with a task that listens to blockchain and log events. Setting this to a lower value improves node response time at the expense of occasionally submitting duplicate transactions in the event of chain re-orgs (duplicate transactions are harmless but cost some ETH). - -You can override this on a per-job basis. - -`MIN_INCOMING_CONFIRMATIONS=1` would kick off a job after seeing the transaction in just one block. - - - -### MIN_OUTGOING_CONFIRMATIONS - -- Default: _automatic based on chain ID, typically 12_ - -The default minimum number of block confirmations that need to be recorded on an outgoing `ethtx` task before the run can move onto the next task. - -This can be overridden on a per-task basis by setting the `MinRequiredOutgoingConfirmations` parameter. - -`MIN_OUTGOING_CONFIRMATIONS=1` considers a transaction as "done" once it has been mined into one block. -`MIN_OUTGOING_CONFIRMATIONS=0` would consider a transaction as "done" even before it has been mined. - -### MINIMUM_CONTRACT_PAYMENT_LINK_JUELS - - - -- Default: _automatically set based on Chain ID, typically 10000000000000 (0.00001 LINK) on all chains except Ethereum Mainnet and Sepolia where it is 100000000000000000 (0.1 LINK)._ - -For jobs that use the `EthTx` adapter, this is the minimum payment amount in order for the node to accept and process the job. Since there are no decimals on the EVM, the value is represented like wei. - - - -### NODE_NO_NEW_HEADS_THRESHOLD - -- Default: _automatically set based on Chain ID, typically "3m" (3 minutes)_ - -Controls how long to wait after receiving no new heads before marking the node as out-of-sync. - -Set to zero to disable out-of-sync checking. - -### NODE_POLL_FAILURE_THRESHOLD - -- Default: _automatically set based on Chain ID, typically 3_ - -Indicates how many consecutive polls must fail in order to mark a node as unreachable. - -Set to zero to disable poll checking. - -### NODE_POLL_INTERVAL - -- Default: _automatically set based on Chain ID, typically "10s" (10 seconds)_ - -Controls how often to poll the node to check for liveness. - -Set to zero to disable poll checking. - -### NODE_SELECTION_MODE - -- Default: `"HighestHead"` - -Controls node picking strategy. Supported values: - -- `HighestHead` (default) mode picks a node having the highest reported head number among other alive nodes. When several nodes have the same latest head number, the strategy sticks to the last used node. This mode requires `NODE_NO_NEW_HEADS_THRESHOLD` to be configured, otherwise it will always use the first alive node. -- `RoundRobin` mode simply iterates among available alive nodes. This was the default behavior prior to this release. -- `TotalDifficulty` mode selects the node with the greatest total difficulty. - -### NODE_SYNC_THRESHOLD - -- Default: `5` - -SyncThreshold controls how far a node may lag behind the best node before being marked out-of-sync. Depending on the [`NODE_SELECTION_MODE` variable](/chainlink-nodes/v1/configuration/#node_selection_mode), this represents a difference in either the number of blocks (`HighestHead`, `RoundRobin`), or the total difficulty (`TotalDifficulty`). - -Set to `0` to disable this check. - -## EVM Gas Controls - -These settings allow you to tune your node's gas limits and pricing. In most cases, leaving these values at their defaults should give good results. - -As of Chainlink node v1.1.0, it is recommended to use the API, CLI, or GUI to configure gas controls because you might want to use different settings for different chains. Setting the environment variable typically overrides the setting for all chains. - -### Configuring your ETH node - -Your ETH node might need some configuration tweaks to make it fully compatible with Chainlink nodes depending on your configuration. - -#### go-ethereum - -WARNING: By default, go-ethereum will reject transactions that exceed it's built-in RPC gas or txfee caps. Chainlink nodes will fatally error transactions if this happens which means if you ever exceed the caps your node will miss transactions. - -You should at a bare minimum disable the default RPC gas and txfee caps on your ETH node. This can be done in the TOML file as seen below, or by running go-ethereum with the command line arguments: `--rpc.gascap=0 --rpc.txfeecap=0`. - -It is also recommended to configure go-ethereum properly before increasing `ETH_MAX_IN_FLIGHT_TRANSACTIONS` to ensure all in-flight transactions are maintained in the mempool. - -Relevant settings for geth and forks (such as BSC). - -{/* prettier-ignore */} -```toml -[Eth] -RPCGasCap = 0 # it is recommended to disable both gas and txfee cap -RPCTxFeeCap = 0.0 -[Eth.TxPool] -Locals = ["0xYourNodeAddress1", "0xYourNodeAddress2"] # Add your node addresses here -NoLocals = false # Disabled by default but might as well make sure -Journal = "transactions.rlp" # Make sure you set a journal file -Rejournal = 3600000000000 # Default 1h, it might make sense to reduce this to e.g. 5m -PriceBump = 10 # Must be set less than or equal to Chainlink's ETH_GAS_BUMP_PERCENT -AccountSlots = 16 # Highly recommended to increase this, must be greater than or equal to Chainlink's ETH_MAX_IN_FLIGHT_TRANSACTIONS setting -GlobalSlots = 4096 # Increase this as necessary -AccountQueue = 64 # Increase this as necessary -GlobalQueue = 1024 # Increase this as necessary -Lifetime = 10800000000000 # Default 3h, this is probably ok, you might even consider reducing it -``` - -### EVM_EIP1559_DYNAMIC_FEES - -- Default: _automatic based on chain ID_ - -Forces EIP-1559 transaction mode for all chains. Enabling EIP-1559 mode can help reduce gas costs on chains that support it. This is supported only on official Ethereum mainnet and testnets. It is not recommended to enable this setting on Polygon because the EIP-1559 fee market appears to be broken on all Polygon chains and EIP-1559 transactions are less likely to be included than legacy transactions. - -#### Technical details - -Chainlink nodes include experimental support for submitting transactions using type 0x2 (EIP-1559) envelope. - -EIP-1559 mode is enabled by default on the Ethereum Mainnet, but can be enabled on a per-chain basis or globally. - -This might help to save gas on spikes. Chainlink nodes should react faster on the upleg and avoid overpaying on the downleg. It might also be possible to set `BLOCK_HISTORY_ESTIMATOR_BATCH_SIZE` to a smaller value such as 12 or even 6 because tip cap should be a more consistent indicator of inclusion time than total gas price. This would make Chainlink nodes more responsive and should reduce response time variance. Some experimentation is required to find optimum settings. - -To enable globally, set `EVM_EIP1559_DYNAMIC_FEES=true`. Set with caution, if you set this on a chain that does not actually support EIP-1559 your node will be broken. - -In EIP-1559 mode, the total price for the transaction is the minimum of base fee + tip cap and fee cap. More information can be found on the [official EIP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). - -Chainlink's implementation of EIP-1559 works as follows: - -If you are using FixedPriceEstimator: - -- With gas bumping disabled, it will submit all transactions with `feecap=ETH_MAX_GAS_PRICE_WEI` and `tipcap=EVM_GAS_TIP_CAP_DEFAULT` -- With gas bumping enabled, it will submit all transactions initially with `feecap=EVM_GAS_FEE_CAP_DEFAULT` and `tipcap=EVM_GAS_TIP_CAP_DEFAULT`. - -If you are using BlockHistoryEstimator (default for most chains): - -- With gas bumping disabled, it will submit all transactions with `feecap=ETH_MAX_GAS_PRICE_WEI` and `tipcap=CALCULATED_USING_PAST_BLOCKS` -- With gas bumping enabled (default for most chains) it will submit all transactions initially with `feecap=current block base fee * (1.125 ^ N)` where N is configurable by setting BLOCK_HISTORY_ESTIMATOR_EIP1559_FEE_CAP_BUFFER_BLOCKS but defaults to `gas bump threshold+1` and `tipcap=CALCULATED_USING_PAST_BLOCKS` - -Bumping works as follows: - -- Increase tipcap by `max(tipcap * (1 + ETH_GAS_BUMP_PERCENT), tipcap + ETH_GAS_BUMP_WEI)` -- Increase feecap by `max(feecap * (1 + ETH_GAS_BUMP_PERCENT), feecap + ETH_GAS_BUMP_WEI)` - -A quick note on terminology - Chainlink nodes use the same terms used internally by go-ethereum source code to describe various prices. This is not the same as the externally used terms. For reference: - -- Base Fee Per Gas = BaseFeePerGas -- Max Fee Per Gas = FeeCap -- Max Priority Fee Per Gas = TipCap - -In EIP-1559 mode, the following changes occur to how configuration works: - -- All new transactions will be sent as type 0x2 transactions specifying a TipCap and FeeCap. Be aware that existing pending legacy transactions will continue to be gas bumped in legacy mode. -- `BlockHistoryEstimator` will apply its calculations (gas percentile etc) to the TipCap and this value will be used for new transactions (GasPrice will be ignored) -- `FixedPriceEstimator` will use `EVM_GAS_TIP_CAP_DEFAULT` instead of `ETH_GAS_PRICE_DEFAULT` for the tip cap -- `FixedPriceEstimator` will use `EVM_GAS_FEE_CAP_DEFAULT` instaed of `ETH_GAS_PRICE_DEFAULT` for the fee cap -- `ETH_MIN_GAS_PRICE_WEI` is ignored for new transactions and `EVM_GAS_TIP_CAP_MINIMUM` is used instead (default 0) -- `ETH_MAX_GAS_PRICE_WEI` still represents that absolute upper limit that Chainlink will ever spend (total) on a single tx -- `KEEPER_GAS_PRICE_BUFFER_PERCENT` is ignored in EIP-1559 mode and `KEEPER_TIP_CAP_BUFFER_PERCENT` is used instead - -### ETH_GAS_BUMP_PERCENT - -- Default: _automatic based on chain ID_ - -The percentage by which to bump gas on a transaction that has exceeded `ETH_GAS_BUMP_THRESHOLD`. The larger of `ETH_GAS_BUMP_PERCENT` and `ETH_GAS_BUMP_WEI` is taken for gas bumps. - -### ETH_GAS_BUMP_THRESHOLD - -- Default: _automatic based on chain ID_ - -Chainlink nodes can be configured to automatically bump gas on transactions that have been stuck waiting in the mempool for at least this many blocks. Set to 0 to disable gas bumping completely. - -### ETH_GAS_BUMP_TX_DEPTH - -- Default: `"10"` - -The number of transactions to gas bump starting from oldest. Set to 0 for no limit (i.e. bump all). - -### ETH_GAS_BUMP_WEI - -- Default: _automatic based on chain ID_ - -The minimum fixed amount of wei by which gas is bumped on each transaction attempt. - -### EVM_GAS_FEE_CAP_DEFAULT - -- Default: _automatic based on chain ID_ - -If EIP1559 mode is enabled, and FixedPrice gas estimator is used, this env var controls the fixed initial fee cap. - -### ETH_GAS_LIMIT_DEFAULT - -- Default: _automatically set based on Chain ID, typically 500000_ - -The default gas limit for outgoing transactions. This should not need to be changed in most cases. -Some job types, such as Keeper jobs, might set their own gas limit unrelated to this value. - -### ETH_GAS_LIMIT_MAX - -- Default: _automatically set based on Chain ID, typically 500000_ - -The maxium for gas limits estimated by the `Arbitrum` `GAS_ESTIMATOR_MODE`. This should not need to be changed in most cases. - -### ETH_GAS_LIMIT_MULTIPLIER - -- Default: `"1.0"` - -A factor by which a transaction's GasLimit is multiplied before transmission. So if the value is 1.1, and the GasLimit for a transaction is 10, 10% will be added before transmission. - -This factor is always applied, so includes Optimism L2 transactions which uses a default gas limit of 1 and is also applied to EthGasLimitDefault. - -### ETH_GAS_LIMIT_TRANSFER - -- Default: _automatically set based on Chain ID, typically 21000_ - -The gas limit used for an ordinary ETH transfer. - -### ETH_GAS_PRICE_DEFAULT - -(Only applies to legacy transactions) - -- Default: _automatic based on chain ID_ - -The default gas price to use when submitting transactions to the blockchain. Will be overridden by the built-in `BlockHistoryEstimator` if enabled, and might be increased if gas bumping is enabled. - -Can be used with the `chainlink setgasprice` to be updated while the node is still running. - -### EVM_GAS_TIP_CAP_DEFAULT - -(Only applies to EIP-1559 transactions) - -- Default: _automatic based on chain ID_ - -The default gas tip to use when submitting transactions to the blockchain. Will be overridden by the built-in `BlockHistoryEstimator` if enabled, and might be increased if gas bumping is enabled. - -### EVM_GAS_TIP_CAP_MINIMUM - -(Only applies to EIP-1559 transactions) - -- Default: _automatic based on chain ID_ - -The minimum gas tip to use when submitting transactions to the blockchain. - -### ETH_MAX_GAS_PRICE_WEI - -- Default: _automatic based on chain ID_ - -Chainlink nodes will never pay more than this for a transaction. - -### ETH_MAX_IN_FLIGHT_TRANSACTIONS - -- Default: `"16"` - -Controls how many transactions are allowed to be "in-flight" i.e. broadcast but unconfirmed at any one time. You can consider this a form of transaction throttling. - -The default is set conservatively at 16 because this is a pessimistic minimum that geth will hold without evicting local transactions. If your node is falling behind and you need higher throughput, you can increase this setting, but you MUST make sure that your ETH node is configured properly otherwise you can get nonce gapped and your node will get stuck. - -0 value disables the limit. Use with caution. - -### ETH_MAX_QUEUED_TRANSACTIONS - -- Default: _automatically set based on Chain ID, typically 250_ - -The maximum number of unbroadcast transactions per key that are allowed to be enqueued before jobs will start failing and rejecting send of any further transactions. This represents a sanity limit and generally indicates a problem with your ETH node (transactions are not getting mined). - -Do NOT blindly increase this value thinking it will fix things if you start hitting this limit because transactions are not getting mined, you will instead only make things worse. - -In deployments with very high burst rates, or on chains with large re-orgs, you _may_ consider increasing this. - -0 value disables any limit on queue size. Use with caution. - -### ETH_MIN_GAS_PRICE_WEI - -(Only applies to legacy transactions) - -- Default: _automatic based on chain ID_ - -Chainlink nodes will never pay less than this for a transaction. - -It is possible to force the Chainlink node to use a fixed gas price by setting a combination of these, e.g. - -```text -EVM_EIP1559_DYNAMIC_FEES=false -ETH_MAX_GAS_PRICE_WEI=100 -ETH_MIN_GAS_PRICE_WEI=100 -ETH_GAS_PRICE_DEFAULT=100 -ETH_GAS_BUMP_THRESHOLD=0 -GAS_ESTIMATOR_MODE="FixedPrice" -``` - -### ETH_GAS_LIMIT_OCR_JOB_TYPE - -- Default: _none_ - -Overrides the [default gas limit](#eth_gas_limit_default) for OCR jobs. This environment variable does not override task-specific or job-specific `gasLimit` parameters or attributes. - -### ETH_GAS_LIMIT_DR_JOB_TYPE - -- Default: _none_ - -Overrides the [default gas limit](#eth_gas_limit_default) for direct request jobs. This environment variable does not override task-specific or job-specific `gasLimit` parameters or attributes. - -### ETH_GAS_LIMIT_VRF_JOB_TYPE - -- Default: _none_ - -Overrides the [default gas limit](#eth_gas_limit_default) for VRF jobs. This environment variable does not override task-specific or job-specific `gasLimit` parameters or attributes. - -### ETH_GAS_LIMIT_FM_JOB_TYPE - -- Default: _none_ - -Overrides the [default gas limit](#eth_gas_limit_default) for Flux Monitor jobs. This environment variable does not override task-specific or job-specific `gasLimit` parameters or attributes. - -### ETH_GAS_LIMIT_KEEPER_JOB_TYPE - -- Default: _none_ - -Overrides the [default gas limit](#eth_gas_limit_default) for Keeper jobs. This environment variable does not override task-specific or job-specific `gasLimit` parameters or attributes. - -### ETH_NONCE_AUTO_SYNC - -- Default: `"false"` - -Chainlink nodes will automatically try to sync its local nonce with the remote chain on startup and fast forward if necessary. This is almost always safe but can be disabled in exceptional cases by setting this value to false. - -### ETH_USE_FORWARDERS - -- Default: `"false"` - -Enables or disables sending transactions through forwarder contracts. - -## EVM/Ethereum Gas Price Estimation - -These settings allow you to configure how your node calculates gas prices. In most cases, leaving these values at their defaults should give good results. - -As of Chainlink node v1.1.0, it is recommended to use the API, CLI, or GUI to configure gas controls because you might want to use different settings for different chains. Setting the environment variable typically overrides the setting for all chains. - -Chainlink nodes decide what gas price to use using an `Estimator`. It ships with several simple and battle-hardened built-in estimators that should work well for almost all use-cases. Note that estimators will change their behaviour slightly depending on if you are in EIP-1559 mode or not. - -You can also use your own estimator for gas price by selecting the `FixedPrice` estimator and using the exposed API to set the price. - -An important point to note is that the Chainlink node does _not_ ship with built-in support for go-ethereum's `estimateGas` call. This is for several reasons, including security and reliability. We have found empirically that it is not generally safe to rely on the remote ETH node's idea of what gas price should be. - -### GAS_ESTIMATOR_MODE - -- Default: _automatic, based on chain ID_ - -Controls what type of gas estimator is used. - -- `FixedPrice` uses static configured values for gas price (can be set via API call). -- `BlockHistory` dynamically adjusts default gas price based on heuristics from mined blocks. -- `Optimism2`/`L2Suggested` is a special mode only for use with Optimism and Metis blockchains. This mode will use the gas price suggested by the rpc endpoint via `eth_gasPrice`. -- `Arbitrum` is a special mode only for use with Arbitrum blockchains. It uses the suggested gas price (up to `ETH_MAX_GAS_PRICE_WEI`, with `1000 gwei` default) as well as an estimated gas limit (up to `ETH_GAS_LIMIT_MAX`, with `1,000,000,000` default). - -### BLOCK_HISTORY_ESTIMATOR_BATCH_SIZE - -- Default: _automatic, based on chain ID, typically 4_ - -Sets the maximum number of blocks to fetch in one batch in the block history estimator. -If the `BLOCK_HISTORY_ESTIMATOR_BATCH_SIZE` environment variable is set to 0, it defaults to ETH_RPC_DEFAULT_BATCH_SIZE. - -### BLOCK_HISTORY_ESTIMATOR_BLOCK_HISTORY_SIZE - -- Default: _automatic, based on chain ID_ - -Controls the number of past blocks to keep in memory to use as a basis for calculating a percentile gas price. - -### BLOCK_HISTORY_ESTIMATOR_BLOCK_DELAY - -- Default: _automatic, based on chain ID_ - -Controls the number of blocks that the block history estimator trails behind head. -For example, if this is set to 3, and we receive block 10, block history estimator will fetch block 7. - -CAUTION: You might be tempted to set this to 0 to use the latest possible -block, but it is possible to receive a head BEFORE that block is actually -available from the connected node via RPC, due to race conditions in the code of the remote ETH node. In this case you will get false -"zero" blocks that are missing transactions. - -### BLOCK_HISTORY_ESTIMATOR_EIP1559_FEE_CAP_BUFFER_BLOCKS - -**ADVANCED** - -- Default: _gas bump threshold + 1 block_ - -If EIP1559 mode is enabled, this optional env var controls the buffer blocks to add to the current base fee when sending a transaction. By default, the gas bumping threshold + 1 block is used. It is not recommended to change this unless you know what you are doing. - -### BLOCK_HISTORY_ESTIMATOR_TRANSACTION_PERCENTILE - -- Default: `"60"` - -Must be in range 0-100. - -Only has an effect if gas updater is enabled. Specifies percentile gas price to choose. E.g. if the block history contains four transactions with gas prices `[100, 200, 300, 400]` then picking 25 for this number will give a value of 200. If the calculated gas price is higher than `ETH_GAS_PRICE_DEFAULT` then the higher price will be used as the base price for new transactions. - -Think of this number as an indicator of how aggressive you want your node to price its transactions. - -Setting this number higher will cause the Chainlink node to select higher gas prices. - -Setting it lower will tend to set lower gas prices. - -## EVM/Ethereum Transaction Simulation - -Chainlink nodes support transaction simulation for certain types of job. When this is enabled, transactions will be simulated using `eth_call` before initial send. If the transaction would revert, the transaction is marked as an error without being broadcast, potentially avoiding an expensive onchain revert. - -This can add a tiny bit of latency with an upper bound of 2s, but generally much shorter under good conditions. This will add marginally more load to the ETH client, because it adds an extra call for every transaction sent. However, it might help to save gas in some cases especially during periods of high demand by avoiding unnecessary reverts due to outdated round etc. - -This option is EXPERIMENTAL and disabled by default. - -To enable for FM or OCR: - -`FM_SIMULATE_TRANSACTIONs=true` -`OCR_SIMULATE_TRANSACTIONS=true` - -To enable in the pipeline, use the `simulate=true` option like so: - -```toml -submit [type=ethtx to="0xDeadDeadDeadDeadDeadDeadDeadDead" data="0xDead" simulate=true] -``` - -Use at your own risk. - -#### FM_SIMULATE_TRANSACTIONS - -NOTE: This overrides the setting for _all_ chains, it is not currently possible to configure this on a per-chain basis. - -- Default: `"false"` - -`FM_SIMULATE_TRANSACTIONS` allows to enable transaction simulation for Flux Monitor. - -#### OCR_SIMULATE_TRANSACTIONS - -NOTE: This overrides the setting for _all_ chains, it is not currently possible to configure this on a per-chain basis. - -- Default: `"false"` - -`OCR_SIMULATE_TRANSACTIONS` allows to enable transaction simulation for OCR. - -## Job Pipeline and tasks - -### DEFAULT_HTTP_LIMIT - -- Default: `"32768"` - -`DEFAULT_HTTP_LIMIT` defines the maximum number of bytes for HTTP requests and responses made by `http` and `bridge` adapters. - -### DEFAULT_HTTP_TIMEOUT - -- Default: `"15s"` - -`DEFAULT_HTTP_TIMEOUT` defines the default timeout for HTTP requests made by `http` and `bridge` adapters. - -### FEATURE_EXTERNAL_INITIATORS - -- Default: `"false"` - -Enables the External Initiator feature. If disabled, `webhook` jobs can ONLY be initiated by a logged-in user. If enabled, `webhook` jobs can be initiated by a whitelisted external initiator. - -### JOB_PIPELINE_MAX_RUN_DURATION - -- Default: `"10m"` - -`JOB_PIPELINE_MAX_RUN_DURATION` is the maximum time that a single job run might take. If it takes longer, it will exit early and be marked errored. If set to zero, disables the time limit completely. - -### JOB_PIPELINE_MAX_SUCCESSFUL_RUNS - -This option is not supported as an environment variable. Use `JobPipeline.MaxSuccessfulRuns` in the config file instead. See the [CONFIG.md](https://github.com/smartcontractkit/chainlink/blob/v1.12.0/docs/CONFIG.md) reference for details. - -### JOB_PIPELINE_REAPER_INTERVAL - -- Default: `"1h"` - -In order to keep database size manageable, Chainlink nodes will run a reaper that deletes completed job runs older than a certain threshold age. `JOB_PIPELINE_REAPER_INTERVAL` controls how often the job pipeline reaper will run. - -Set to `0` to disable the periodic reaper. - -### JOB_PIPELINE_REAPER_THRESHOLD - -- Default: `"24h"` - -`JOB_PIPELINE_REAPER_THRESHOLD` determines the age limit for job runs. Completed job runs older than this will be automatically purged from the database. - -### JOB_PIPELINE_RESULT_WRITE_QUEUE_DEPTH - -- Default: `"100"` - -Some jobs write their results asynchronously for performance reasons such as OCR. `JOB_PIPELINE_RESULT_WRITE_QUEUE_DEPTH` controls how many writes will be buffered before subsequent writes are dropped. - -Do not change this setting unless you know what you are doing. - -## OCR - -This section applies only if you are running offchain reporting jobs. - -### FEATURE_OFFCHAIN_REPORTING - -- Default: `"false"` - -Set to `true` to enable OCR jobs. - -### OCR_KEY_BUNDLE_ID - -- Default: _none_ - -`OCR_KEY_BUNDLE_ID` is the default key bundle ID to use for OCR jobs. If you have an OCR job that does not explicitly specify a key bundle ID, it will fall back to this value. - -### OCR_MONITORING_ENDPOINT - -- Default: _none_ - -Optional URL of OCR monitoring endpoint. - -### OCR_TRANSMITTER_ADDRESS - -- Default: _none_ - -`OCR_TRANSMITTER_ADDRESS` is the default sending address to use for OCR. If you have an OCR job that does not explicitly specify a transmitter address, it will fall back to this value. - -### P2P_NETWORKING_STACK - -- Default: `"V1"` - -OCR supports multiple networking stacks. `P2P_NETWORKING_STACK` chooses which stack to use. Possible values are: - -- `V1` - The `V1` stack is deprecated and is being phased out. Do not use it for new deployments. -- `V1V2` - Runs both stacks simultaneously. For each link with another peer, V2 networking will be preferred. If V2 does not work, the link will automatically fall back to V1. If V2 starts working again later, it will automatically be preferred again. This is useful for migrating networks without downtime. Note that the two networking stacks _must not_ be configured to bind to the same IP/port. -- `V2` - -All nodes in the OCR network should share the same networking stack. The `V1` stack is deprecated and is being phased out. Do not use it for new deployments. Expect the default value of this variable to change to `V2` in the future. - -#### P2P_PEER_ID - -- Default: _none_ - -This environment variable is used for both Networking Stack V1 and V2. - -The default peer ID to use for OCR jobs. If unspecified, uses the first available peer ID. -Example: `P2P_PEER_ID=12D3KooWMHMRLQkgPbFSYHwD3NBuwtS1AmxhvKVUrcfyaGDASR4U` - -### Networking Stack V1 - - - -#### P2P_ANNOUNCE_IP - -- Default: _none_ - -Should be set as the externally reachable IP address of the Chainlink node. -Example: `P2P_ANNOUNCE_IP=1.2.3.4` - -#### P2P_ANNOUNCE_PORT - -- Default: _none_ - -Should be set as the externally reachable port of the Chainlink node. -Example: `P2P_ANNOUNCE_PORT=1337` - -#### P2P_BOOTSTRAP_PEERS - -- Default: _none_ - -Default set of bootstrap peers. -Example: `P2P_BOOTSTRAP_PEERS=/dns4/example.com/tcp/1337/p2p/12D3KooWMHMRLQkgPbFSYHwD3NBuwtS1AmxhvKVUrcfyaGDASR4U /ip4/1.2.3.4/tcp/9999/p2p/12D3KooWLZ9uTC3MrvKfDpGju6RAQubiMDL7CuJcAgDRTYP7fh7R` - -#### P2P_LISTEN_IP - -- Default: `"0.0.0.0"` - -The default IP address to bind to. - -#### P2P_LISTEN_PORT - -- Default: _none_ - -The port to listen on. If left blank, the node randomly selects a different port each time it boots. It is highly recommended to set this to a static value to avoid network instability. - -#### P2P_PEER_ID - -- Default: _none_ - -This environment variable is used for both Networking Stack V1 and V2. - -The default peer ID to use for OCR jobs. If unspecified, uses the first available peer ID. -Example: `P2P_PEER_ID=12D3KooWMHMRLQkgPbFSYHwD3NBuwtS1AmxhvKVUrcfyaGDASR4U` - -### Networking Stack V2 - - - -The Networking Stack V2 uses TCP, any ports mentioned in this section refer to TCP ports. - -#### P2PV2_ANNOUNCE_ADDRESSES - -- Default: _none_ - -`P2PV2_ANNOUNCE_ADDRESSES` contains the addresses the node will advertise for peer discovery in host:port form as accepted by the TCP version of Go's [`net.Dial`](https://pkg.go.dev/net#Dial). The addresses should be reachable by other nodes on the network. When attempting to connect to another node, a node will attempt to dial all of the other node's `P2PV2_ANNOUNCE_ADDRESSES` in round-robin fashion. -Example: `P2PV2_ANNOUNCE_ADDRESSES=1.2.3.4:9999 [a52d:0:a88:1274::abcd]:1337` - -#### P2PV2_BOOTSTRAPPERS - -- Default: _none_ - -`P2PV2_BOOTSTRAPPERS` returns the default bootstrapper peers for libocr's v2 networking stack. -Example: `P2PV2_BOOTSTRAPPERS=12D3KooWMHMRLQkgPbFSYHwD3NBuwtS1AmxhvKVUrcfyaGDASR4U@1.2.3.4:9999 12D3KooWLZ9uTC3MrvKfDpGju6RAQubiMDL7CuJcAgDRTYP7fh7R@[a52d:0:a88:1274::abcd]:1337 12D3KooWM55u5Swtpw9r8aFLQHEtw7HR4t44GdNs654ej5gRs2Dh@example.com:1234` - -Oracle nodes typically only know each other's PeerIDs, but not their hostnames, IP addresses, or ports. -Bootstrappers are special nodes that help other nodes discover each other's `P2PV2_ANNOUNCE_ADDRESSES` so they can communicate. -Nodes continuously attempt to connect to bootstrappers configured in `P2PV2_BOOTSTRAPPERS`. -When a node wants to connect to another node (which it knows only by PeerID, but not by address), it discovers the other node's `P2PV2_ANNOUNCE_ADDRESSES` from communications received from its `P2PV2_BOOTSTRAPPERS` or other discovered nodes. -To facilitate discovery, nodes will regularly broadcast signed announcements containing their PeerID and `P2PV2_ANNOUNCE_ADDRESSES`. - -#### P2PV2_LISTEN_ADDRESSES - -- Default: _none_ - -`P2PV2_LISTEN_ADDRESSES` contains the addresses the peer will listen to on the network in `host:port` form as accepted by `net.Listen()`, but the host and port must be fully specified and cannot be empty. You can specify `0.0.0.0` (IPv4) or `::` (IPv6) to listen on all interfaces, but that is not recommended. - -Example: `P2PV2_LISTEN_ADDRESSES=1.2.3.4:9999 [a52d:0:a88:1274::abcd]:1337` - -## Keeper - -These environment variables are used specificly for Chainlink Keepers. For most Chainlink Nodes, leave these values at their defaults and do not configure these environment variables. - -### KEEPER_GAS_PRICE_BUFFER_PERCENT - - - -- Default: `"20"` - -`KEEPER_GAS_PRICE_BUFFER_PERCENT` adds the specified percentage to the gas price used for checking whether to perform an upkeep. Only applies in legacy mode (EIP-1559 off). - -### KEEPER_GAS_TIP_CAP_BUFFER_PERCENT - - - -- Default: `"20"` - -`KEEPER_GAS_TIP_CAP_BUFFER_PERCENT` adds the specified percentage to the gas price used for checking whether to perform an upkeep. Only applies in EIP-1559 mode. - -### KEEPER_BASE_FEE_BUFFER_PERCENT - - - -- Default: `"20"` - -Adds the specified percentage to the base fee used for checking whether to perform an upkeep. Applies only in EIP-1559 mode. - -### KEEPER_MAXIMUM_GRACE_PERIOD - - - -- Default: `"100"` - -The maximum number of blocks that a keeper will wait after performing an upkeep before it resumes checking that upkeep - -### KEEPER_REGISTRY_CHECK_GAS_OVERHEAD - - - -- Default: `"200000"` - -The amount of extra gas to provide checkUpkeep() calls to account for the gas consumed by the keeper registry. - -### KEEPER_REGISTRY_PERFORM_GAS_OVERHEAD - - - -- Default: `"300000"` - -The amount of extra gas to provide performUpkeep() calls to account for the gas consumed by the keeper registry - -### KEEPER_REGISTRY_SYNC_INTERVAL - - - -- Default: `"30m"` - -The interval in which the RegistrySynchronizer performs a full sync of the keeper registry contract it is tracking. - -### KEEPER_REGISTRY_SYNC_UPKEEP_QUEUE_SIZE - - - -- Default: `"10"` - -`KEEPER_REGISTRY_SYNC_UPKEEP_QUEUE_SIZE` represents the maximum number of upkeeps that can be synced in parallel. - -### KEEPER_TURN_LOOK_BACK - - - -- Default: `"1000"` - -The number of blocks in the past to look back when getting a block for a turn. - -## CLI Client - -The environment variables in this section apply only when running CLI commands that connect to a remote running instance of a Chainlink node. - -### ADMIN_CREDENTIALS_FILE - - - -- Default: `$ROOT/apicredentials` - -`ADMIN_CREDENTIALS_FILE` optionally points to a text file containing admin credentials for logging in. It is useful for running client CLI commands and has no effect when passed to a running node. - -The file should contain two lines, the first line is the username and second line is the password. -e.g. - -```text -myusername@example.com -mysecurepassw0rd -``` - -### CLIENT_NODE_URL - - - -- Default: `"http://localhost:6688"` - -This is the URL that you will use to interact with the node, including the GUI. Use this URL to connect to the GUI or to run commands remotely using the Chainlink CLI. - -### INSECURE_SKIP_VERIFY - - - -- Default: `"false"` - -`INSECURE_SKIP_VERIFY` disables SSL certificate verification when connection to a Chainlink node using the remote client. For example, when executing most remote commands in the CLI. This is mostly useful for people who want to use TLS on localhost. - -It is not recommended to change this unless you know what you are doing. - -## Notes on setting environment variables - - - -`10ms` -`1h15m` -`42m30s` - - - -`123gb` -`1.2TB` -`12345` diff --git a/src/content/chainlink-nodes/v1/node-config.mdx b/src/content/chainlink-nodes/v1/node-config.mdx index c0d5c5bffe4..9f36a147096 100644 --- a/src/content/chainlink-nodes/v1/node-config.mdx +++ b/src/content/chainlink-nodes/v1/node-config.mdx @@ -190,7 +190,7 @@ _none_ - Disables backups. `lite` - Dumps small tables including configuration and keys that are essential for the node to function, which excludes historical data like job runs, transaction history, etc. `full` - Dumps the entire database. -It will write to a file like `'Dir'/backup/cl_backup_VERSION.dump`. There is one backup dump file per version of the Chainlink node. If you upgrade the node, it will keep the backup taken right before the upgrade migration so you can restore to an older version if necessary. +It will write to a file like `'Dir'/backup/cl_backup_.dump`. There is one backup dump file per version of the Chainlink node. If you upgrade the node, it will keep the backup taken right before the upgrade migration so you can restore to an older version if necessary. ### Dir @@ -570,6 +570,7 @@ MaxBackups determines the maximum number of old log files to retain. Keeping thi ```toml [WebServer] +AuthenticationMethod = 'local' # Default AllowOrigins = 'http://localhost:3000,http://localhost:6688' # Default BridgeCacheTTL = '0s' # Default BridgeResponseURL = 'https://my-chainlink-node.example.com:6688' # Example @@ -583,6 +584,14 @@ StartTimeout = '15s' # Default ListenIP = '0.0.0.0' # Default ``` +### AuthenticationMethod + +```toml +AuthenticationMethod = 'local' # Default +``` + +AuthenticationMethod defines which pluggable auth interface to use for user login and role assumption. Options include 'local' and 'ldap'. See docs for more details + ### AllowOrigins ```toml @@ -679,6 +688,168 @@ ListenIP = '0.0.0.0' # Default ListenIP specifies the IP to bind the HTTP server to +## WebServer.LDAP + +```toml +[WebServer.LDAP] +ServerTLS = true # Default +SessionTimeout = '15m0s' # Default +QueryTimeout = '2m0s' # Default +BaseUserAttr = 'uid' # Default +BaseDN = 'dc=custom,dc=example,dc=com' # Example +UsersDN = 'ou=users' # Default +GroupsDN = 'ou=groups' # Default +ActiveAttribute = '' # Default +ActiveAttributeAllowedValue = '' # Default +AdminUserGroupCN = 'NodeAdmins' # Default +EditUserGroupCN = 'NodeEditors' # Default +RunUserGroupCN = 'NodeRunners' # Default +ReadUserGroupCN = 'NodeReadOnly' # Default +UserApiTokenEnabled = false # Default +UserAPITokenDuration = '240h0m0s' # Default +UpstreamSyncInterval = '0s' # Default +UpstreamSyncRateLimit = '2m0s' # Default +``` + +Optional LDAP config if WebServer.AuthenticationMethod is set to 'ldap' +LDAP queries are all parameterized to support custom LDAP 'dn', 'cn', and attributes + +### ServerTLS + +```toml +ServerTLS = true # Default +``` + +ServerTLS defines the option to require the secure ldaps + +### SessionTimeout + +```toml +SessionTimeout = '15m0s' # Default +``` + +SessionTimeout determines the amount of idle time to elapse before session cookies expire. This signs out GUI users from their sessions. + +### QueryTimeout + +```toml +QueryTimeout = '2m0s' # Default +``` + +QueryTimeout defines how long queries should wait before timing out, defined in seconds + +### BaseUserAttr + +```toml +BaseUserAttr = 'uid' # Default +``` + +BaseUserAttr defines the base attribute used to populate LDAP queries such as "uid=$", default is example + +### BaseDN + +```toml +BaseDN = 'dc=custom,dc=example,dc=com' # Example +``` + +BaseDN defines the base LDAP 'dn' search filter to apply to every LDAP query, replace example,com with the appropriate LDAP server's structure + +### UsersDN + +```toml +UsersDN = 'ou=users' # Default +``` + +UsersDN defines the 'dn' query to use when querying for the 'users' 'ou' group + +### GroupsDN + +```toml +GroupsDN = 'ou=groups' # Default +``` + +GroupsDN defines the 'dn' query to use when querying for the 'groups' 'ou' group + +### ActiveAttribute + +```toml +ActiveAttribute = '' # Default +``` + +ActiveAttribute is an optional user field to check truthiness for if a user is valid/active. This is only required if the LDAP provider lists inactive users as members of groups + +### ActiveAttributeAllowedValue + +```toml +ActiveAttributeAllowedValue = '' # Default +``` + +ActiveAttributeAllowedValue is the value to check against for the above optional user attribute + +### AdminUserGroupCN + +```toml +AdminUserGroupCN = 'NodeAdmins' # Default +``` + +AdminUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Admin' role + +### EditUserGroupCN + +```toml +EditUserGroupCN = 'NodeEditors' # Default +``` + +EditUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Edit' role + +### RunUserGroupCN + +```toml +RunUserGroupCN = 'NodeRunners' # Default +``` + +RunUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Run' role + +### ReadUserGroupCN + +```toml +ReadUserGroupCN = 'NodeReadOnly' # Default +``` + +ReadUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Read' role + +### UserApiTokenEnabled + +```toml +UserApiTokenEnabled = false # Default +``` + +UserApiTokenEnabled enables the users to issue API tokens with the same access of their role + +### UserAPITokenDuration + +```toml +UserAPITokenDuration = '240h0m0s' # Default +``` + +UserAPITokenDuration is the duration of time an API token is active for before expiring + +### UpstreamSyncInterval + +```toml +UpstreamSyncInterval = '0s' # Default +``` + +UpstreamSyncInterval is the interval at which the background LDAP sync task will be called. A '0s' value disables the background sync being run on an interval. This check is already performed during login/logout actions, all sessions and API tokens stored in the local ldap tables are updated to match the remote server + +### UpstreamSyncRateLimit + +```toml +UpstreamSyncRateLimit = '2m0s' # Default +``` + +UpstreamSyncRateLimit defines a duration to limit the number of query/API calls to the upstream LDAP provider. It prevents the sync functionality from being called multiple times within the defined duration + ## WebServer.RateLimit ```toml @@ -941,7 +1112,7 @@ ContractTransmitterTransmitTimeout = '10s' # Default DatabaseTimeout = '10s' # Default KeyBundleID = '7a5f66bbe6594259325bf2b4f5b1a9c900000000000000000000000000000000' # Example CaptureEATelemetry = false # Default -CaptureAutomationCustomTelemetry = false # Default +CaptureAutomationCustomTelemetry = true # Default DefaultTransactionQueueDepth = 1 # Default SimulateTransactions = false # Default TraceLogging = false # Default @@ -961,7 +1132,7 @@ Enabled enables OCR2 jobs. ContractConfirmations = 3 # Default ``` -ContractConfirmations is the number of block confirmations to wait for before enacting an onchain +ContractConfirmations is the number of block confirmations to wait for before enacting an on-chain configuration change. This value doesn't need to be very high (in particular, it does not need to protect against malicious re-orgs). Since configuration changes create some overhead, and mini-reorgs @@ -1007,7 +1178,7 @@ blocking forever on a chain interaction would break the oracle.) ContractPollInterval = '1m' # Default ``` -ContractPollInterval is the polling interval at which ContractConfigTracker is queried for# updated onchain configurations. Recommended values are between +ContractPollInterval is the polling interval at which ContractConfigTracker is queried for# updated on-chain configurations. Recommended values are between fifteen seconds and two minutes. ### ContractSubscribeInterval @@ -1056,7 +1227,7 @@ CaptureEATelemetry toggles collecting extra information from External Adaptares ### CaptureAutomationCustomTelemetry ```toml -CaptureAutomationCustomTelemetry = false # Default +CaptureAutomationCustomTelemetry = true # Default ``` CaptureAutomationCustomTelemetry toggles collecting automation specific telemetry @@ -1102,7 +1273,7 @@ CaptureEATelemetry = false # Default TraceLogging = false # Default ``` -This section applies only if you are running offchain reporting jobs. +This section applies only if you are running off-chain reporting jobs. ### Enabled @@ -1140,7 +1311,7 @@ ContractPollInterval = '1m' # Default ``` ContractPollInterval is the polling interval at which ContractConfigTracker is queried for -updated onchain configurations. Recommended values are between +updated on-chain configurations. Recommended values are between fifteen seconds and two minutes. ### ContractSubscribeInterval @@ -1828,9 +1999,11 @@ DisableRateLimiting skips ratelimiting on asset requests. ```toml [Tracing] Enabled = false # Default -CollectorTarget = "localhost:4317" # Example -NodeID = "NodeID" # Example +CollectorTarget = 'localhost:4317' # Example +NodeID = 'NodeID' # Example SamplingRatio = 1.0 # Example +Mode = 'tls' # Default +TLSCertPath = '/path/to/cert.pem' # Example ``` ### Enabled @@ -1844,7 +2017,7 @@ Enabled turns trace collection on or off. On requires an OTEL Tracing Collector. ### CollectorTarget ```toml -CollectorTarget = "localhost:4317" # Example +CollectorTarget = 'localhost:4317' # Example ``` CollectorTarget is the logical address of the OTEL Tracing Collector. @@ -1852,7 +2025,7 @@ CollectorTarget is the logical address of the OTEL Tracing Collector. ### NodeID ```toml -NodeID = "NodeID" # Example +NodeID = 'NodeID' # Example ``` NodeID is an unique name for this node relative to any other node traces are collected for. @@ -1865,11 +2038,27 @@ SamplingRatio = 1.0 # Example SamplingRatio is the ratio of traces to sample for this node. +### Mode + +```toml +Mode = 'tls' # Default +``` + +Mode is a string value. `tls` or `unencrypted` are the only values allowed. If set to `unencrypted`, `TLSCertPath` can be unset, meaning traces will be sent over plaintext to the collector. + +### TLSCertPath + +```toml +TLSCertPath = '/path/to/cert.pem' # Example +``` + +TLSCertPath is the file path to the TLS certificate used for secure communication with an OTEL Tracing Collector. + ## Tracing.Attributes ```toml [Tracing.Attributes] -env = "test" # Example +env = 'test' # Example ``` Tracing.Attributes are user specified key-value pairs to associate in the context of the traces @@ -1877,11 +2066,64 @@ Tracing.Attributes are user specified key-value pairs to associate in the contex ### env ```toml -env = "test" # Example +env = 'test' # Example ``` env is an example user specified key-value pair +## Mercury + +```toml +[Mercury] +``` + +## Mercury.Cache + +```toml +[Mercury.Cache] +LatestReportTTL = "1s" # Default +MaxStaleAge = "1h" # Default +LatestReportDeadline = "5s" # Default +``` + +Mercury.Cache controls settings for the price retrieval cache querying a mercury server + +### LatestReportTTL + +```toml +LatestReportTTL = "1s" # Default +``` + +LatestReportTTL controls how "stale" we will allow a price to be e.g. if +set to 1s, a new price will always be fetched if the last result was +from 1 second ago or older. + +Another way of looking at it is such: the cache will _never_ return a +price that was queried from now-LatestReportTTL or before. + +Setting to zero disables caching entirely. + +### MaxStaleAge + +```toml +MaxStaleAge = "1h" # Default +``` + +MaxStaleAge is that maximum amount of time that a value can be stale +before it is deleted from the cache (a form of garbage collection). + +This should generally be set to something much larger than +LatestReportTTL. Setting to zero disables garbage collection. + +### LatestReportDeadline + +```toml +LatestReportDeadline = "5s" # Default +``` + +LatestReportDeadline controls how long to wait for a response from the +mercury server before retrying. Setting this to zero will wait indefinitely. + ## EVM EVM defaults depend on ChainID: @@ -1957,6 +2199,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2034,6 +2278,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2111,6 +2357,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2188,6 +2436,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2266,6 +2516,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2343,6 +2595,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2420,6 +2674,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2498,6 +2754,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2575,6 +2833,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '2s' DatabaseTimeout = '2s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '500ms' [OCR2] @@ -2651,6 +2911,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2727,6 +2989,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2775,7 +3039,482 @@ LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' BumpPercent = 20 -BumpThreshold = 5 +BumpThreshold = 5 +EIP1559DynamicFees = false +FeeCapDefault = '100 gwei' +TipCapDefault = '1 wei' +TipCapMin = '1 wei' + +[GasEstimator.BlockHistory] +BatchSize = 25 +BlockHistorySize = 24 +CheckInclusionBlocks = 12 +CheckInclusionPercentile = 90 +TransactionPercentile = 60 + +[HeadTracker] +HistoryDepth = 100 +MaxBufferSize = 3 +SamplingInterval = '1s' + +[NodePool] +PollFailureThreshold = 5 +PollInterval = '10s' +SelectionMode = 'HighestHead' +SyncThreshold = 10 +LeaseDuration = '0s' + +[OCR] +ContractConfirmations = 4 +ContractTransmitterTransmitTimeout = '2s' +DatabaseTimeout = '2s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '500ms' + +[OCR2] +[OCR2.Automation] +GasLimit = 5300000 +``` + +### xDai Mainnet (100) + +```toml +AutoCreateKey = true +BlockBackfillDepth = 10 +BlockBackfillSkip = false +ChainType = 'xdai' +FinalityDepth = 50 +FinalityTagEnabled = false +LinkContractAddress = '0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2' +LogBackfillBatchSize = 1000 +LogPollInterval = '5s' +LogKeepBlocksDepth = 100000 +MinIncomingConfirmations = 3 +MinContractPayment = '0.00001 link' +NonceAutoSync = true +NoNewHeadsThreshold = '3m0s' +RPCDefaultBatchSize = 250 +RPCBlockQueryDelay = 1 + +[Transactions] +ForwardersEnabled = false +MaxInFlight = 16 +MaxQueued = 250 +ReaperInterval = '1h0m0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '1m0s' + +[BalanceMonitor] +Enabled = true + +[GasEstimator] +Mode = 'BlockHistory' +PriceDefault = '1 gwei' +PriceMax = '500 gwei' +PriceMin = '1 gwei' +LimitDefault = 500000 +LimitMax = 500000 +LimitMultiplier = '1' +LimitTransfer = 21000 +BumpMin = '5 gwei' +BumpPercent = 20 +BumpThreshold = 3 +EIP1559DynamicFees = false +FeeCapDefault = '100 gwei' +TipCapDefault = '1 wei' +TipCapMin = '1 wei' + +[GasEstimator.BlockHistory] +BatchSize = 25 +BlockHistorySize = 8 +CheckInclusionBlocks = 12 +CheckInclusionPercentile = 90 +TransactionPercentile = 60 + +[HeadTracker] +HistoryDepth = 100 +MaxBufferSize = 3 +SamplingInterval = '1s' + +[NodePool] +PollFailureThreshold = 5 +PollInterval = '10s' +SelectionMode = 'HighestHead' +SyncThreshold = 5 +LeaseDuration = '0s' + +[OCR] +ContractConfirmations = 4 +ContractTransmitterTransmitTimeout = '10s' +DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '1s' + +[OCR2] +[OCR2.Automation] +GasLimit = 5300000 +``` + +### Heco Mainnet (128) + +```toml +AutoCreateKey = true +BlockBackfillDepth = 10 +BlockBackfillSkip = false +FinalityDepth = 50 +FinalityTagEnabled = false +LinkContractAddress = '0x404460C6A5EdE2D891e8297795264fDe62ADBB75' +LogBackfillBatchSize = 1000 +LogPollInterval = '3s' +LogKeepBlocksDepth = 100000 +MinIncomingConfirmations = 3 +MinContractPayment = '0.00001 link' +NonceAutoSync = true +NoNewHeadsThreshold = '30s' +RPCDefaultBatchSize = 250 +RPCBlockQueryDelay = 2 + +[Transactions] +ForwardersEnabled = false +MaxInFlight = 16 +MaxQueued = 250 +ReaperInterval = '1h0m0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '1m0s' + +[BalanceMonitor] +Enabled = true + +[GasEstimator] +Mode = 'BlockHistory' +PriceDefault = '5 gwei' +PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' +PriceMin = '1 gwei' +LimitDefault = 500000 +LimitMax = 500000 +LimitMultiplier = '1' +LimitTransfer = 21000 +BumpMin = '5 gwei' +BumpPercent = 20 +BumpThreshold = 5 +EIP1559DynamicFees = false +FeeCapDefault = '100 gwei' +TipCapDefault = '1 wei' +TipCapMin = '1 wei' + +[GasEstimator.BlockHistory] +BatchSize = 25 +BlockHistorySize = 24 +CheckInclusionBlocks = 12 +CheckInclusionPercentile = 90 +TransactionPercentile = 60 + +[HeadTracker] +HistoryDepth = 100 +MaxBufferSize = 3 +SamplingInterval = '1s' + +[NodePool] +PollFailureThreshold = 5 +PollInterval = '10s' +SelectionMode = 'HighestHead' +SyncThreshold = 10 +LeaseDuration = '0s' + +[OCR] +ContractConfirmations = 4 +ContractTransmitterTransmitTimeout = '2s' +DatabaseTimeout = '2s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '500ms' + +[OCR2] +[OCR2.Automation] +GasLimit = 5300000 +``` + +### Polygon Mainnet (137) + +```toml +AutoCreateKey = true +BlockBackfillDepth = 10 +BlockBackfillSkip = false +FinalityDepth = 500 +FinalityTagEnabled = false +LinkContractAddress = '0xb0897686c545045aFc77CF20eC7A532E3120E0F1' +LogBackfillBatchSize = 1000 +LogPollInterval = '1s' +LogKeepBlocksDepth = 100000 +MinIncomingConfirmations = 5 +MinContractPayment = '0.00001 link' +NonceAutoSync = true +NoNewHeadsThreshold = '30s' +RPCDefaultBatchSize = 250 +RPCBlockQueryDelay = 10 + +[Transactions] +ForwardersEnabled = false +MaxInFlight = 16 +MaxQueued = 5000 +ReaperInterval = '1h0m0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '1m0s' + +[BalanceMonitor] +Enabled = true + +[GasEstimator] +Mode = 'BlockHistory' +PriceDefault = '30 gwei' +PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' +PriceMin = '30 gwei' +LimitDefault = 500000 +LimitMax = 500000 +LimitMultiplier = '1' +LimitTransfer = 21000 +BumpMin = '20 gwei' +BumpPercent = 20 +BumpThreshold = 5 +EIP1559DynamicFees = false +FeeCapDefault = '100 gwei' +TipCapDefault = '1 wei' +TipCapMin = '1 wei' + +[GasEstimator.BlockHistory] +BatchSize = 25 +BlockHistorySize = 24 +CheckInclusionBlocks = 12 +CheckInclusionPercentile = 90 +TransactionPercentile = 60 + +[HeadTracker] +HistoryDepth = 2000 +MaxBufferSize = 3 +SamplingInterval = '1s' + +[NodePool] +PollFailureThreshold = 5 +PollInterval = '10s' +SelectionMode = 'HighestHead' +SyncThreshold = 10 +LeaseDuration = '0s' + +[OCR] +ContractConfirmations = 4 +ContractTransmitterTransmitTimeout = '10s' +DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '1s' + +[OCR2] +[OCR2.Automation] +GasLimit = 5300000 +``` + +### Fantom Mainnet (250) + +```toml +AutoCreateKey = true +BlockBackfillDepth = 10 +BlockBackfillSkip = false +FinalityDepth = 50 +FinalityTagEnabled = false +LinkContractAddress = '0x6F43FF82CCA38001B6699a8AC47A2d0E66939407' +LogBackfillBatchSize = 1000 +LogPollInterval = '1s' +LogKeepBlocksDepth = 100000 +MinIncomingConfirmations = 3 +MinContractPayment = '0.00001 link' +NonceAutoSync = true +NoNewHeadsThreshold = '30s' +RPCDefaultBatchSize = 250 +RPCBlockQueryDelay = 2 + +[Transactions] +ForwardersEnabled = false +MaxInFlight = 16 +MaxQueued = 250 +ReaperInterval = '1h0m0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '1m0s' + +[BalanceMonitor] +Enabled = true + +[GasEstimator] +Mode = 'SuggestedPrice' +PriceDefault = '20 gwei' +PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' +PriceMin = '1 gwei' +LimitDefault = 500000 +LimitMax = 500000 +LimitMultiplier = '1' +LimitTransfer = 21000 +BumpMin = '5 gwei' +BumpPercent = 20 +BumpThreshold = 3 +EIP1559DynamicFees = false +FeeCapDefault = '100 gwei' +TipCapDefault = '1 wei' +TipCapMin = '1 wei' + +[GasEstimator.BlockHistory] +BatchSize = 25 +BlockHistorySize = 8 +CheckInclusionBlocks = 12 +CheckInclusionPercentile = 90 +TransactionPercentile = 60 + +[HeadTracker] +HistoryDepth = 100 +MaxBufferSize = 3 +SamplingInterval = '1s' + +[NodePool] +PollFailureThreshold = 5 +PollInterval = '10s' +SelectionMode = 'HighestHead' +SyncThreshold = 5 +LeaseDuration = '0s' + +[OCR] +ContractConfirmations = 4 +ContractTransmitterTransmitTimeout = '10s' +DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '1s' + +[OCR2] +[OCR2.Automation] +GasLimit = 3800000 +``` + +### Kroma Mainnet (255) + +```toml +AutoCreateKey = true +BlockBackfillDepth = 10 +BlockBackfillSkip = false +ChainType = 'kroma' +FinalityDepth = 400 +FinalityTagEnabled = false +LogBackfillBatchSize = 1000 +LogPollInterval = '2s' +LogKeepBlocksDepth = 100000 +MinIncomingConfirmations = 1 +MinContractPayment = '0.00001 link' +NonceAutoSync = true +NoNewHeadsThreshold = '40s' +RPCDefaultBatchSize = 250 +RPCBlockQueryDelay = 1 + +[Transactions] +ForwardersEnabled = false +MaxInFlight = 16 +MaxQueued = 250 +ReaperInterval = '1h0m0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '30s' + +[BalanceMonitor] +Enabled = true + +[GasEstimator] +Mode = 'BlockHistory' +PriceDefault = '20 gwei' +PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' +PriceMin = '1 wei' +LimitDefault = 500000 +LimitMax = 500000 +LimitMultiplier = '1' +LimitTransfer = 21000 +BumpMin = '100 wei' +BumpPercent = 20 +BumpThreshold = 3 +EIP1559DynamicFees = true +FeeCapDefault = '100 gwei' +TipCapDefault = '1 wei' +TipCapMin = '1 wei' + +[GasEstimator.BlockHistory] +BatchSize = 25 +BlockHistorySize = 24 +CheckInclusionBlocks = 12 +CheckInclusionPercentile = 90 +TransactionPercentile = 60 + +[HeadTracker] +HistoryDepth = 400 +MaxBufferSize = 3 +SamplingInterval = '1s' + +[NodePool] +PollFailureThreshold = 5 +PollInterval = '10s' +SelectionMode = 'HighestHead' +SyncThreshold = 10 +LeaseDuration = '0s' + +[OCR] +ContractConfirmations = 1 +ContractTransmitterTransmitTimeout = '10s' +DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '1s' + +[OCR2] +[OCR2.Automation] +GasLimit = 5300000 +``` + +### zkSync Goerli (280) + +```toml +AutoCreateKey = true +BlockBackfillDepth = 10 +BlockBackfillSkip = false +ChainType = 'zksync' +FinalityDepth = 1 +FinalityTagEnabled = false +LogBackfillBatchSize = 1000 +LogPollInterval = '5s' +LogKeepBlocksDepth = 100000 +MinIncomingConfirmations = 1 +MinContractPayment = '0.00001 link' +NonceAutoSync = true +NoNewHeadsThreshold = '1m0s' +RPCDefaultBatchSize = 250 +RPCBlockQueryDelay = 1 + +[Transactions] +ForwardersEnabled = false +MaxInFlight = 16 +MaxQueued = 250 +ReaperInterval = '1h0m0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '1m0s' + +[BalanceMonitor] +Enabled = true + +[GasEstimator] +Mode = 'BlockHistory' +PriceDefault = '20 gwei' +PriceMax = '18.446744073709551615 ether' +PriceMin = '0' +LimitDefault = 3500000 +LimitMax = 500000 +LimitMultiplier = '1' +LimitTransfer = 21000 +BumpMin = '5 gwei' +BumpPercent = 20 +BumpThreshold = 3 EIP1559DynamicFees = false FeeCapDefault = '100 gwei' TipCapDefault = '1 wei' @@ -2783,13 +3522,13 @@ TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 24 +BlockHistorySize = 8 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 100 +HistoryDepth = 5 MaxBufferSize = 3 SamplingInterval = '1s' @@ -2797,37 +3536,38 @@ SamplingInterval = '1s' PollFailureThreshold = 5 PollInterval = '10s' SelectionMode = 'HighestHead' -SyncThreshold = 10 +SyncThreshold = 5 LeaseDuration = '0s' [OCR] ContractConfirmations = 4 -ContractTransmitterTransmitTimeout = '2s' -DatabaseTimeout = '2s' -ObservationGracePeriod = '500ms' +ContractTransmitterTransmitTimeout = '10s' +DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '1s' [OCR2] [OCR2.Automation] GasLimit = 5300000 ``` -### xDai Mainnet (100) +### zkSync Mainnet (324) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -ChainType = 'xdai' -FinalityDepth = 50 +ChainType = 'zksync' +FinalityDepth = 1 FinalityTagEnabled = false -LinkContractAddress = '0xE2e73A1c69ecF83F464EFCE6A5be353a37cA09b2' LogBackfillBatchSize = 1000 LogPollInterval = '5s' LogKeepBlocksDepth = 100000 -MinIncomingConfirmations = 3 +MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' NonceAutoSync = true -NoNewHeadsThreshold = '3m0s' +NoNewHeadsThreshold = '1m0s' RPCDefaultBatchSize = 250 RPCBlockQueryDelay = 1 @@ -2844,10 +3584,10 @@ Enabled = true [GasEstimator] Mode = 'BlockHistory' -PriceDefault = '1 gwei' -PriceMax = '500 gwei' -PriceMin = '1 gwei' -LimitDefault = 500000 +PriceDefault = '20 gwei' +PriceMax = '18.446744073709551615 ether' +PriceMin = '0' +LimitDefault = 3500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 @@ -2867,7 +3607,7 @@ CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 100 +HistoryDepth = 5 MaxBufferSize = 3 SamplingInterval = '1s' @@ -2882,6 +3622,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -2889,24 +3631,25 @@ ObservationGracePeriod = '1s' GasLimit = 5300000 ``` -### Heco Mainnet (128) +### Optimism Goerli (420) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -FinalityDepth = 50 +ChainType = 'optimismBedrock' +FinalityDepth = 200 FinalityTagEnabled = false -LinkContractAddress = '0x404460C6A5EdE2D891e8297795264fDe62ADBB75' +LinkContractAddress = '0xdc2CC710e42857672E7907CF474a69B63B93089f' LogBackfillBatchSize = 1000 -LogPollInterval = '3s' +LogPollInterval = '2s' LogKeepBlocksDepth = 100000 -MinIncomingConfirmations = 3 +MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' NonceAutoSync = true -NoNewHeadsThreshold = '30s' +NoNewHeadsThreshold = '40s' RPCDefaultBatchSize = 250 -RPCBlockQueryDelay = 2 +RPCBlockQueryDelay = 1 [Transactions] ForwardersEnabled = false @@ -2914,37 +3657,37 @@ MaxInFlight = 16 MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' -ResendAfterThreshold = '1m0s' +ResendAfterThreshold = '30s' [BalanceMonitor] Enabled = true [GasEstimator] Mode = 'BlockHistory' -PriceDefault = '5 gwei' +PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' -PriceMin = '1 gwei' +PriceMin = '1 wei' LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 -BumpMin = '5 gwei' +BumpMin = '100 wei' BumpPercent = 20 -BumpThreshold = 5 -EIP1559DynamicFees = false +BumpThreshold = 3 +EIP1559DynamicFees = true FeeCapDefault = '100 gwei' TipCapDefault = '1 wei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 24 +BlockHistorySize = 60 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 100 +HistoryDepth = 300 MaxBufferSize = 3 SamplingInterval = '1s' @@ -2956,39 +3699,41 @@ SyncThreshold = 10 LeaseDuration = '0s' [OCR] -ContractConfirmations = 4 -ContractTransmitterTransmitTimeout = '2s' -DatabaseTimeout = '2s' -ObservationGracePeriod = '500ms' +ContractConfirmations = 1 +ContractTransmitterTransmitTimeout = '10s' +DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' +ObservationGracePeriod = '1s' [OCR2] [OCR2.Automation] -GasLimit = 5300000 +GasLimit = 6500000 ``` -### Polygon Mainnet (137) +### Metis Rinkeby (588) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -FinalityDepth = 500 +ChainType = 'metis' +FinalityDepth = 1 FinalityTagEnabled = false -LinkContractAddress = '0xb0897686c545045aFc77CF20eC7A532E3120E0F1' LogBackfillBatchSize = 1000 -LogPollInterval = '1s' +LogPollInterval = '15s' LogKeepBlocksDepth = 100000 -MinIncomingConfirmations = 5 +MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' NonceAutoSync = true -NoNewHeadsThreshold = '30s' +NoNewHeadsThreshold = '0s' RPCDefaultBatchSize = 250 -RPCBlockQueryDelay = 10 +RPCBlockQueryDelay = 1 [Transactions] ForwardersEnabled = false MaxInFlight = 16 -MaxQueued = 5000 +MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' ResendAfterThreshold = '1m0s' @@ -2997,17 +3742,17 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'BlockHistory' -PriceDefault = '30 gwei' +Mode = 'SuggestedPrice' +PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' -PriceMin = '30 gwei' +PriceMin = '0' LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 -BumpMin = '20 gwei' +BumpMin = '5 gwei' BumpPercent = 20 -BumpThreshold = 5 +BumpThreshold = 0 EIP1559DynamicFees = false FeeCapDefault = '100 gwei' TipCapDefault = '1 wei' @@ -3015,13 +3760,13 @@ TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 24 +BlockHistorySize = 0 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 2000 +HistoryDepth = 100 MaxBufferSize = 3 SamplingInterval = '1s' @@ -3033,9 +3778,11 @@ SyncThreshold = 10 LeaseDuration = '0s' [OCR] -ContractConfirmations = 4 +ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3043,24 +3790,23 @@ ObservationGracePeriod = '1s' GasLimit = 5300000 ``` -### Fantom Mainnet (250) +### Klaytn Testnet (1001) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -FinalityDepth = 50 +FinalityDepth = 1 FinalityTagEnabled = false -LinkContractAddress = '0x6F43FF82CCA38001B6699a8AC47A2d0E66939407' LogBackfillBatchSize = 1000 -LogPollInterval = '1s' +LogPollInterval = '15s' LogKeepBlocksDepth = 100000 -MinIncomingConfirmations = 3 +MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' NonceAutoSync = true NoNewHeadsThreshold = '30s' RPCDefaultBatchSize = 250 -RPCBlockQueryDelay = 2 +RPCBlockQueryDelay = 1 [Transactions] ForwardersEnabled = false @@ -3074,8 +3820,8 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'BlockHistory' -PriceDefault = '15 gwei' +Mode = 'SuggestedPrice' +PriceDefault = '750 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' LimitDefault = 500000 @@ -3084,7 +3830,7 @@ LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' BumpPercent = 20 -BumpThreshold = 3 +BumpThreshold = 0 EIP1559DynamicFees = false FeeCapDefault = '100 gwei' TipCapDefault = '1 wei' @@ -3110,33 +3856,34 @@ SyncThreshold = 5 LeaseDuration = '0s' [OCR] -ContractConfirmations = 4 +ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] [OCR2.Automation] -GasLimit = 3800000 +GasLimit = 5300000 ``` -### Optimism Goerli (420) +### Metis Mainnet (1088) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -ChainType = 'optimismBedrock' -FinalityDepth = 200 +ChainType = 'metis' +FinalityDepth = 1 FinalityTagEnabled = false -LinkContractAddress = '0xdc2CC710e42857672E7907CF474a69B63B93089f' LogBackfillBatchSize = 1000 -LogPollInterval = '2s' +LogPollInterval = '15s' LogKeepBlocksDepth = 100000 MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' NonceAutoSync = true -NoNewHeadsThreshold = '40s' +NoNewHeadsThreshold = '0s' RPCDefaultBatchSize = 250 RPCBlockQueryDelay = 1 @@ -3146,37 +3893,37 @@ MaxInFlight = 16 MaxQueued = 250 ReaperInterval = '1h0m0s' ReaperThreshold = '168h0m0s' -ResendAfterThreshold = '30s' +ResendAfterThreshold = '1m0s' [BalanceMonitor] Enabled = true [GasEstimator] -Mode = 'BlockHistory' +Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' -PriceMin = '1 wei' +PriceMin = '0' LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 -BumpMin = '100 wei' +BumpMin = '5 gwei' BumpPercent = 20 -BumpThreshold = 3 -EIP1559DynamicFees = true +BumpThreshold = 0 +EIP1559DynamicFees = false FeeCapDefault = '100 gwei' TipCapDefault = '1 wei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 60 +BlockHistorySize = 0 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 300 +HistoryDepth = 100 MaxBufferSize = 3 SamplingInterval = '1s' @@ -3191,29 +3938,31 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] [OCR2.Automation] -GasLimit = 6500000 +GasLimit = 5300000 ``` -### Metis Rinkeby (588) +### WeMix Mainnet (1111) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -ChainType = 'metis' +ChainType = 'wemix' FinalityDepth = 1 FinalityTagEnabled = false LogBackfillBatchSize = 1000 -LogPollInterval = '15s' +LogPollInterval = '3s' LogKeepBlocksDepth = 100000 MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' NonceAutoSync = true -NoNewHeadsThreshold = '0s' +NoNewHeadsThreshold = '30s' RPCDefaultBatchSize = 250 RPCBlockQueryDelay = 1 @@ -3229,25 +3978,25 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'L2Suggested' +Mode = 'BlockHistory' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' -PriceMin = '0' +PriceMin = '1 gwei' LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' BumpPercent = 20 -BumpThreshold = 0 -EIP1559DynamicFees = false +BumpThreshold = 3 +EIP1559DynamicFees = true FeeCapDefault = '100 gwei' -TipCapDefault = '1 wei' +TipCapDefault = '100 gwei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 0 +BlockHistorySize = 8 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 @@ -3261,13 +4010,15 @@ SamplingInterval = '1s' PollFailureThreshold = 5 PollInterval = '10s' SelectionMode = 'HighestHead' -SyncThreshold = 10 +SyncThreshold = 5 LeaseDuration = '0s' [OCR] ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3275,16 +4026,17 @@ ObservationGracePeriod = '1s' GasLimit = 5300000 ``` -### Klaytn Testnet (1001) +### WeMix Testnet (1112) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false +ChainType = 'wemix' FinalityDepth = 1 FinalityTagEnabled = false LogBackfillBatchSize = 1000 -LogPollInterval = '15s' +LogPollInterval = '3s' LogKeepBlocksDepth = 100000 MinIncomingConfirmations = 1 MinContractPayment = '0.00001 link' @@ -3305,8 +4057,8 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'L2Suggested' -PriceDefault = '750 gwei' +Mode = 'BlockHistory' +PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' LimitDefault = 500000 @@ -3315,10 +4067,10 @@ LimitMultiplier = '1' LimitTransfer = 21000 BumpMin = '5 gwei' BumpPercent = 20 -BumpThreshold = 0 -EIP1559DynamicFees = false +BumpThreshold = 3 +EIP1559DynamicFees = true FeeCapDefault = '100 gwei' -TipCapDefault = '1 wei' +TipCapDefault = '100 gwei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] @@ -3344,6 +4096,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3351,20 +4105,19 @@ ObservationGracePeriod = '1s' GasLimit = 5300000 ``` -### Metis Mainnet (1088) +### Simulated (1337) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -ChainType = 'metis' FinalityDepth = 1 FinalityTagEnabled = false LogBackfillBatchSize = 1000 LogPollInterval = '15s' LogKeepBlocksDepth = 100000 MinIncomingConfirmations = 1 -MinContractPayment = '0.00001 link' +MinContractPayment = '100' NonceAutoSync = true NoNewHeadsThreshold = '0s' RPCDefaultBatchSize = 250 @@ -3375,16 +4128,16 @@ ForwardersEnabled = false MaxInFlight = 16 MaxQueued = 250 ReaperInterval = '1h0m0s' -ReaperThreshold = '168h0m0s' -ResendAfterThreshold = '1m0s' +ReaperThreshold = '0s' +ResendAfterThreshold = '0s' [BalanceMonitor] Enabled = true [GasEstimator] -Mode = 'L2Suggested' +Mode = 'FixedPrice' PriceDefault = '20 gwei' -PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' +PriceMax = '100 micro' PriceMin = '0' LimitDefault = 500000 LimitMax = 500000 @@ -3394,33 +4147,35 @@ BumpMin = '5 gwei' BumpPercent = 20 BumpThreshold = 0 EIP1559DynamicFees = false -FeeCapDefault = '100 gwei' +FeeCapDefault = '100 micro' TipCapDefault = '1 wei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 0 +BlockHistorySize = 8 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 100 -MaxBufferSize = 3 -SamplingInterval = '1s' +HistoryDepth = 10 +MaxBufferSize = 100 +SamplingInterval = '0s' [NodePool] PollFailureThreshold = 5 PollInterval = '10s' SelectionMode = 'HighestHead' -SyncThreshold = 10 +SyncThreshold = 5 LeaseDuration = '0s' [OCR] ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3428,21 +4183,22 @@ ObservationGracePeriod = '1s' GasLimit = 5300000 ``` -### Simulated (1337) +### Kroma Sepolia (2358) ```toml AutoCreateKey = true BlockBackfillDepth = 10 BlockBackfillSkip = false -FinalityDepth = 1 +ChainType = 'kroma' +FinalityDepth = 400 FinalityTagEnabled = false LogBackfillBatchSize = 1000 -LogPollInterval = '15s' +LogPollInterval = '2s' LogKeepBlocksDepth = 100000 MinIncomingConfirmations = 1 -MinContractPayment = '100' +MinContractPayment = '0.00001 link' NonceAutoSync = true -NoNewHeadsThreshold = '0s' +NoNewHeadsThreshold = '40s' RPCDefaultBatchSize = 250 RPCBlockQueryDelay = 1 @@ -3451,52 +4207,54 @@ ForwardersEnabled = false MaxInFlight = 16 MaxQueued = 250 ReaperInterval = '1h0m0s' -ReaperThreshold = '0s' -ResendAfterThreshold = '0s' +ReaperThreshold = '168h0m0s' +ResendAfterThreshold = '30s' [BalanceMonitor] Enabled = true [GasEstimator] -Mode = 'FixedPrice' +Mode = 'BlockHistory' PriceDefault = '20 gwei' -PriceMax = '100 micro' -PriceMin = '0' +PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' +PriceMin = '1 wei' LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 -BumpMin = '5 gwei' +BumpMin = '100 wei' BumpPercent = 20 -BumpThreshold = 0 -EIP1559DynamicFees = false -FeeCapDefault = '100 micro' +BumpThreshold = 3 +EIP1559DynamicFees = true +FeeCapDefault = '100 gwei' TipCapDefault = '1 wei' TipCapMin = '1 wei' [GasEstimator.BlockHistory] BatchSize = 25 -BlockHistorySize = 8 +BlockHistorySize = 24 CheckInclusionBlocks = 12 CheckInclusionPercentile = 90 TransactionPercentile = 60 [HeadTracker] -HistoryDepth = 10 -MaxBufferSize = 100 -SamplingInterval = '0s' +HistoryDepth = 400 +MaxBufferSize = 3 +SamplingInterval = '1s' [NodePool] PollFailureThreshold = 5 PollInterval = '10s' SelectionMode = 'HighestHead' -SyncThreshold = 5 +SyncThreshold = 10 LeaseDuration = '0s' [OCR] ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3535,8 +4293,8 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'BlockHistory' -PriceDefault = '15 gwei' +Mode = 'SuggestedPrice' +PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' LimitDefault = 500000 @@ -3574,6 +4332,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3611,7 +4371,7 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'L2Suggested' +Mode = 'SuggestedPrice' PriceDefault = '750 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '1 gwei' @@ -3650,6 +4410,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3727,6 +4489,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3805,6 +4569,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3882,6 +4648,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -3959,6 +4727,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4036,6 +4806,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4113,6 +4885,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4189,6 +4963,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4265,6 +5041,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4342,6 +5120,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4419,6 +5199,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4497,6 +5279,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4575,6 +5359,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4652,6 +5438,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4689,7 +5477,7 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'L2Suggested' +Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' @@ -4728,6 +5516,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4765,7 +5555,7 @@ ResendAfterThreshold = '1m0s' Enabled = true [GasEstimator] -Mode = 'L2Suggested' +Mode = 'SuggestedPrice' PriceDefault = '20 gwei' PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' PriceMin = '0' @@ -4804,6 +5594,8 @@ LeaseDuration = '0s' ContractConfirmations = 1 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4819,7 +5611,7 @@ BlockBackfillDepth = 10 BlockBackfillSkip = false FinalityDepth = 50 FinalityTagEnabled = false -LinkContractAddress = '0xb227f007804c16546Bd054dfED2E7A1fD5437678' +LinkContractAddress = '0x779877A7B0D9E8603169DdbD7836e478b4624789' LogBackfillBatchSize = 1000 LogPollInterval = '15s' LogKeepBlocksDepth = 100000 @@ -4881,6 +5673,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -4958,6 +5752,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -5035,6 +5831,8 @@ LeaseDuration = '0s' ContractConfirmations = 4 ContractTransmitterTransmitTimeout = '10s' DatabaseTimeout = '10s' +DeltaCOverride = '168h0m0s' +DeltaCJitterOverride = '1h0m0s' ObservationGracePeriod = '1s' [OCR2] @@ -5091,7 +5889,7 @@ 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, metis, optimismBedrock, xdai +Available types: arbitrum, metis, optimismBedrock, xdai, celo, kroma, wemix, zksync ### FinalityDepth @@ -5137,7 +5935,7 @@ Finality for a block is solely defined by the finality related tags provided by FlagsContractAddress = '0xae4E781a6218A8031764928E88d457937A954fC3' # Example ``` -FlagsContractAddress can optionally point to a [Flags contract](https://github.com/smartcontractkit/chainlink/blob/release/2.7.0/contracts/src/v0.8/Flags.sol). If set, the node will lookup that contract for each job that supports flags contracts (currently OCR and FM jobs are supported). If the job's contractAddress is set as hibernating in the FlagsContractAddress address, it overrides the standard update parameters (such as heartbeat/threshold). +FlagsContractAddress can optionally point to a [Flags contract](https://github.com/smartcontractkit/chainlink/tree/develop/contracts/src/v0.8/Flags.sol). If set, the node will lookup that contract for each job that supports flags contracts (currently OCR and FM jobs are supported). If the job's contractAddress is set as hibernating in the FlagsContractAddress address, it overrides the standard update parameters (such as heartbeat/threshold). ### LinkContractAddress @@ -5361,7 +6159,8 @@ Mode controls what type of gas estimator is used. - `FixedPrice` uses static configured values for gas price (can be set via API call). - `BlockHistory` dynamically adjusts default gas price based on heuristics from mined blocks. -- `L2Suggested` is a special mode only for use with L2 blockchains. This mode will use the gas price suggested by the rpc endpoint via `eth_gasPrice`. +- `L2Suggested` mode is deprecated and replaced with `SuggestedPrice`. +- `SuggestedPrice` is a mode which uses the gas price suggested by the rpc endpoint via `eth_gasPrice`. - `Arbitrum` is a special mode only for use with Arbitrum blockchains. It uses the suggested gas price (up to `ETH_MAX_GAS_PRICE_WEI`, with `1000 gwei` default) as well as an estimated gas limit (up to `ETH_GAS_LIMIT_MAX`, with `1,000,000,000` default). Chainlink nodes decide what gas price to use using an `Estimator`. It ships with several simple and battle-hardened built-in estimators that should work well for almost all use-cases. Note that estimators will change their behaviour slightly depending on if you are in EIP-1559 mode or not. @@ -5510,8 +6309,8 @@ If you are using FixedPriceEstimator: If you are using BlockHistoryEstimator (default for most chains): -- With gas bumping disabled, it will submit all transactions with `feecap=PriceMax` and `tipcap=CALCULATED_USING_PAST_BLOCKS` -- With gas bumping enabled (default for most chains) it will submit all transactions initially with `feecap = ( current block base fee * (1.125 ^ N) + tipcap )` where N is configurable by setting `EVM.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks` but defaults to `gas bump threshold+1` and `tipcap=CALCULATED_USING_PAST_BLOCKS` +- With gas bumping disabled, it will submit all transactions with `feecap=PriceMax` and `tipcap=` +- With gas bumping enabled (default for most chains) it will submit all transactions initially with `feecap = ( current block base fee * (1.125 ^ N) + tipcap )` where N is configurable by setting `EVM.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks` but defaults to `gas bump threshold+1` and `tipcap=` Bumping works as follows: @@ -5853,6 +6652,8 @@ Set to '0s' to disable ContractConfirmations = 4 # Default ContractTransmitterTransmitTimeout = '10s' # Default DatabaseTimeout = '10s' # Default +DeltaCOverride = "168h" # Default +DeltaCJitterOverride = "1h" # Default ObservationGracePeriod = '1s' # Default ``` @@ -5880,6 +6681,28 @@ DatabaseTimeout = '10s' # Default DatabaseTimeout sets `OCR.DatabaseTimeout` for this EVM chain. +### DeltaCOverride + +⚠️ **_ADVANCED_**: _Do not change this setting unless you know what you are doing._ + +```toml +DeltaCOverride = "168h" # Default +``` + +DeltaCOverride (and `DeltaCJitterOverride`) determine the config override DeltaC. +DeltaC is the maximum age of the latest report in the contract. If the maximum age is exceeded, a new report will be +created by the report generation protocol. + +### DeltaCJitterOverride + +⚠️ **_ADVANCED_**: _Do not change this setting unless you know what you are doing._ + +```toml +DeltaCJitterOverride = "1h" # Default +``` + +DeltaCJitterOverride is the range for jitter to add to `DeltaCOverride`. + ### ObservationGracePeriod ```toml diff --git a/src/content/chainlink-nodes/v1/running-a-chainlink-node.mdx b/src/content/chainlink-nodes/v1/running-a-chainlink-node.mdx index f3f548c00a2..8b60368a0af 100644 --- a/src/content/chainlink-nodes/v1/running-a-chainlink-node.mdx +++ b/src/content/chainlink-nodes/v1/running-a-chainlink-node.mdx @@ -199,7 +199,7 @@ should use one of the supported [testnets](/resources/link-token-contracts) for 1. Start the Chainlink Node by running the Docker image. - Change the version number in `smartcontract/chainlink:2.5.0` with the version of the Docker image that you need to run. For most new nodes, use version `2.0.0` or later. Tag versions are available in the [Chainlink Docker hub](https://hub.docker.com/r/smartcontract/chainlink/tags). _The `latest` version does not work._ + Change the version number in `smartcontract/chainlink:2.8.0` with the version of the Docker image that you need to run. For most new nodes, use version `2.0.0` or later. Tag versions are available in the [Chainlink Docker hub](https://hub.docker.com/r/smartcontract/chainlink/tags). _The `latest` version does not work._ Chainlink Nodes running `2.0.0` and later require the `-config` and `-secrets` flags after the `node` part of the command. @@ -211,12 +211,12 @@ should use one of the supported [testnets](/resources/link-token-contracts) for Goerli ```shell Sepolia - cd ~/.chainlink-sepolia && docker run --platform linux/x86_64/v8 --name chainlink -v ~/.chainlink-sepolia:/chainlink -it -p 6688:6688 --add-host=host.docker.internal:host-gateway smartcontract/chainlink:2.5.0 node -config /chainlink/config.toml -secrets /chainlink/secrets.toml start + cd ~/.chainlink-sepolia && docker run --platform linux/x86_64/v8 --name chainlink -v ~/.chainlink-sepolia:/chainlink -it -p 6688:6688 --add-host=host.docker.internal:host-gateway smartcontract/chainlink:2.8.0 node -config /chainlink/config.toml -secrets /chainlink/secrets.toml start ``` ```shell Goerli - cd ~/.chainlink-goerli && docker run --platform linux/x86_64/v8 --name chainlink -v ~/.chainlink-goerli:/chainlink -it -p 6688:6688 --add-host=host.docker.internal:host-gateway smartcontract/chainlink:2.5.0 node -config /chainlink/config.toml -secrets /chainlink/secrets.toml start + cd ~/.chainlink-goerli && docker run --platform linux/x86_64/v8 --name chainlink -v ~/.chainlink-goerli:/chainlink -it -p 6688:6688 --add-host=host.docker.internal:host-gateway smartcontract/chainlink:2.8.0 node -config /chainlink/config.toml -secrets /chainlink/secrets.toml start ``` @@ -233,7 +233,7 @@ should use one of the supported [testnets](/resources/link-token-contracts) for ```shell CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - 867e792d6f78 smartcontract/chainlink:2.5.0 "chainlink node -con…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:6688->6688/tcp, :::6688->6688/tcp chainlink + 867e792d6f78 smartcontract/chainlink:2.8.0 "chainlink node -con…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:6688->6688/tcp, :::6688->6688/tcp chainlink ``` 1. You can now connect to your Chainlink node's UI interface by navigating to [http://localhost:6688](http://localhost:6688). Use the API diff --git a/src/content/chainlink-nodes/v1/secrets-config.mdx b/src/content/chainlink-nodes/v1/secrets-config.mdx index 3cd2a40da8c..fe5e928002c 100644 --- a/src/content/chainlink-nodes/v1/secrets-config.mdx +++ b/src/content/chainlink-nodes/v1/secrets-config.mdx @@ -59,10 +59,45 @@ Environment variable: `CL_DATABASE_BACKUP_URL` AllowSimplePasswords = false # Default ``` -AllowSimplePasswords skips the password complexity check normally enforced on URL & BackupURL. A value of true is allowed only for dev builds. +AllowSimplePasswords skips the password complexity check normally enforced on URL & BackupURL. Environment variable: `CL_DATABASE_ALLOW_SIMPLE_PASSWORDS` +## WebServer.LDAP + +```toml +[WebServer.LDAP] +ServerAddress = 'ldaps://127.0.0.1' # Example +ReadOnlyUserLogin = 'viewer@example.com' # Example +ReadOnlyUserPass = 'password' # Example +``` + +Optional LDAP config + +### ServerAddress + +```toml +ServerAddress = 'ldaps://127.0.0.1' # Example +``` + +ServerAddress is the full ldaps:// address of the ldap server to authenticate with and query + +### ReadOnlyUserLogin + +```toml +ReadOnlyUserLogin = 'viewer@example.com' # Example +``` + +ReadOnlyUserLogin is the username of the read only root user used to authenticate the requested LDAP queries + +### ReadOnlyUserPass + +```toml +ReadOnlyUserPass = 'password' # Example +``` + +ReadOnlyUserPass is the password for the above account + ## Password ```toml diff --git a/src/features/redirects/redirects.json b/src/features/redirects/redirects.json index 7370e4420a8..e3e703555ae 100644 --- a/src/features/redirects/redirects.json +++ b/src/features/redirects/redirects.json @@ -1854,6 +1854,16 @@ "source": "chainlink-functions/resources/playground", "destination": "chainlink-functions/resources/simulation", "statuscode": 301 + }, + { + "source": "chainlink-nodes/v1/configuration", + "destination": "chainlink-nodes/configuring-nodes", + "statuscode": 301 + }, + { + "source": "chainlink-nodes/resources/best-practices-aws", + "destination": "chainlink-nodes", + "statuscode": 301 } ] } From 052c0d2f6cd3933cd0f50e1b0a30714e037dba9c Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 24 Jan 2024 17:59:05 -0700 Subject: [PATCH 02/23] Fix header (#1737) --- src/content/chainlink-nodes/node-versions.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/chainlink-nodes/node-versions.mdx b/src/content/chainlink-nodes/node-versions.mdx index a1a23718495..99dcae108de 100644 --- a/src/content/chainlink-nodes/node-versions.mdx +++ b/src/content/chainlink-nodes/node-versions.mdx @@ -12,7 +12,7 @@ import { Aside } from "@components" You can find a list of release notes for Chainlink nodes in the [smartcontractkit GitHub repository](https://github.com/smartcontractkit/chainlink/releases). Docker images are available in the [Chainlink Docker hub](https://hub.docker.com/r/smartcontract/chainlink/tags). -## Changes in v2.7.2 nodes - 2024-01-24 +## Changes in v2.8.0 nodes - 2024-01-24 ### Added From a8caa601c4941026abb04947319f69d4b8332386 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Thu, 25 Jan 2024 09:35:42 -0700 Subject: [PATCH 03/23] Add Arbitrum mainnet for Data Streams (#1710) * Add Arbitrum mainnet for Data Streams * Map proxy verifiers * Lint fix * Add Arbitrum mainnet for Data Streams * Map proxy verifiers * Lint fix * Data Streams Networks page update * Update notes for Arbitrum Mainnet * Link fixes --------- Co-authored-by: Karim <98668332+khadni@users.noreply.github.com> --- src/content/data-streams/getting-started.mdx | 9 ++++--- src/content/data-streams/index.mdx | 7 +++-- src/content/data-streams/release-notes.mdx | 11 ++++++-- .../data-streams/common/gettingStarted.mdx | 2 +- src/features/data/chains.ts | 2 +- src/features/feeds/components/FeedList.tsx | 26 ++++++++++--------- src/features/feeds/components/Tables.tsx | 11 +++++--- 7 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/content/data-streams/getting-started.mdx b/src/content/data-streams/getting-started.mdx index cd3cd12e597..111c91c7238 100644 --- a/src/content/data-streams/getting-started.mdx +++ b/src/content/data-streams/getting-started.mdx @@ -12,11 +12,14 @@ whatsnext: { } --- -import { Aside, CodeSample } from "@components" +import { Aside } from "@components" import DataStreams from "@features/data-streams/common/DataStreams.astro" -