Index
---
title: CRE Docs
sidebar_position: 0
---
CRE Docs
This local docs bundle exposes documentation from the chainlink repository through the CRE Docusaurus site.
Main Sections
- Local CRE
- Configuration Reference
- Secrets Reference
- Contributing
- Community
Local CRE
For Local CRE environment setup, workflow operations, topologies, and CRE smoke tests, start here:
- Overview
- Getting Started
- Environment
- System Tests
---
COMMUNITY
Community
[](https://discordapp.com/invite/aSK4zew)
[](https://www.reddit.com/r/Chainlink/)
[](https://twitter.com/chainlink)
[](https://t.me/chainlinkofficial)
[](https://www.youtube.com/chainlinkofficial)
[](https://blog.chain.link/chainlink-chinese-communities/)
[](https://weibo.com/chainlinkofficial)
In addition to the Chainlink community resources in the badges above, here is a
cultivated list of other community related resources.
Developer Resources
Repositories
- [@chainlink/box] - Truffle box
- [@chainlink/external-adapter-js] - Chainlink external adapter repo
- [awesome-chainlink] - Awesome projects built with Chainlink
- Chainlink Documentation - Our open source documentation site
Platforms and Services
- [Gitcoin] - Hackathons, bounties, and grants
Presentations
- Connecting Smart Contracts to any/all Off-chain Contract Events,
Privacy Preserving Computations and On-chain Reference Data by Sergey Nazarov
- Devcon5
- English
- Chinese
- Korean
- Japanese
[awesome chainlink]: https://github.com/JohannEid/awesome-chainlink
[devvon5]: https://chain.link/presentations/devcon5.pdf
[external-adapter-js]: https://github.com/smartcontractkit/external-adapters-js
[gitcoin]: https://gitcoin.co/
---
CONFIG
[//]: # (Documentation generated from docs/*.toml - DO NOT EDIT.)
This document describes the TOML format for configuration.
See also SECRETS.md
Example
Log.Level = 'debug'[[EVM]]
ChainID = '1' # Required
[[EVM.Nodes]]
Name = 'fake' # Required
WSURL = 'wss://foo.bar/ws'
HTTPURL = 'https://foo.bar' # Required
Global
InsecureFastScrypt = false # Default
InsecurePPROFHeap = true # Default
RootDir = '~/.chainlink' # Default
ShutdownGracePeriod = '5s' # DefaultInsecureFastScrypt
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
InsecureFastScrypt = false # DefaultInsecureFastScrypt causes all key stores to encrypt using "fast" scrypt params instead. This is insecure and only useful for local testing. DO NOT ENABLE THIS IN PRODUCTION.
InsecurePPROFHeap
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
InsecurePPROFHeap = true # DefaultInsecurePPROFHeap allows dumping the heap in pprof. This is very useful for debugging memory leaks but in certain rare cases may potentially expose sensitive data e.g. private key components, so is disabled by default.
Deprecated: no effect. Always enabled.
RootDir
RootDir = '~/.chainlink' # DefaultRootDir is 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.
Official prod Docker images run as UID:GID 14933:14933 (user chainlink). A non-deterministic GID mismatch is a common cause of read/write errors on bind mounts in Docker/Compose.
RootDir '/home/chainlink' and '~/.chainlink' (which resolves to
'/home/chainlink/.chainlink') are valid. Choose one and align any persistence mounts to that path. '/home/chainlink' is often preferred because '.chainlink' is hidden by default.
Do not bind-mount over '/home/chainlink' — it replaces the entire home directory and causes permission failures. Mount config and secrets at separate paths (e.g. '/run/secrets/config.toml', '/configs/...') and pass them via CLI flags
('-c', '-s', '-a', '-p').
ShutdownGracePeriod
ShutdownGracePeriod = '5s' # DefaultShutdownGracePeriod is the maximum time allowed to shut down gracefully. If exceeded, the node will terminate immediately to avoid being SIGKILLed.
Feature
[Feature]
FeedsManager = true # Default
LogPoller = false # Default
UICSAKeys = false # Default
CCIP = true # Default
MultiFeedsManagers = false # DefaultFeedsManager
FeedsManager = true # DefaultFeedsManager enables the feeds manager service.
LogPoller
LogPoller = false # DefaultLogPoller enables the log poller, an experimental approach to processing logs, required if also using Evm.UseForwarders or OCR2.
UICSAKeys
UICSAKeys = false # DefaultUICSAKeys enables CSA Keys in the UI.
CCIP
CCIP = true # DefaultCCIP enables the CCIP service.
MultiFeedsManagers
MultiFeedsManagers = false # DefaultMultiFeedsManagers enables support for multiple feeds manager connections.
Database
[Database]
DefaultIdleInTxSessionTimeout = '1h' # Default
DefaultLockTimeout = '15s' # Default
DefaultQueryTimeout = '10s' # Default
LogQueries = false # Default
MaxIdleConns = 10 # Default
MaxOpenConns = 100 # Default
MigrateOnStartup = true # DefaultDefaultIdleInTxSessionTimeout
DefaultIdleInTxSessionTimeout = '1h' # DefaultDefaultIdleInTxSessionTimeout is the maximum time allowed for a transaction to be open and idle before timing out. See Postgres
idle_in_transaction_session_timeout for more details.DefaultLockTimeout
DefaultLockTimeout = '15s' # DefaultDefaultLockTimeout is the maximum time allowed to wait for database lock of any kind before timing out. See Postgres
lock_timeout for more details.DefaultQueryTimeout
DefaultQueryTimeout = '10s' # DefaultDefaultQueryTimeout is the maximum time allowed for standard queries before timing out.
LogQueries
LogQueries = false # DefaultLogQueries tells the Chainlink node to log database queries 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.MaxIdleConns
MaxIdleConns = 10 # DefaultMaxIdleConns 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 caution 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.
MaxOpenConns
MaxOpenConns = 100 # DefaultMaxOpenConns 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 caution 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.
MigrateOnStartup
MigrateOnStartup = true # DefaultMigrateOnStartup 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.Database.Backup
[Database.Backup]
Mode = 'none' # Default
Dir = 'test/backup/dir' # Example
OnVersionUpgrade = true # Default
Frequency = '1h' # DefaultAs 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 URL and point it to a read replica if you enable automatic backups.
Mode
Mode = 'none' # DefaultMode sets the type of automatic database backup, 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 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 '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.
Dir
Dir = 'test/backup/dir' # ExampleDir 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.
OnVersionUpgrade
OnVersionUpgrade = true # DefaultOnVersionUpgrade enables automatic backups of the database before running migrations, when you are upgrading to a new version.
Frequency
Frequency = '1h' # DefaultFrequency sets the interval for database dumps, if set to a positive duration and
Mode is not _none_.Set to 0 to disable periodic backups.
Database.Listener
:warning: _ADVANCED_: _Do not change these settings unless you know what you are doing._
[Database.Listener]
MaxReconnectDuration = '10m' # Default
MinReconnectInterval = '1m' # Default
FallbackPollInterval = '30s' # DefaultThese settings control the postgres event listener.
MaxReconnectDuration
MaxReconnectDuration = '10m' # DefaultMaxReconnectDuration is the maximum duration to wait between reconnect attempts.
MinReconnectInterval
MinReconnectInterval = '1m' # DefaultMinReconnectInterval controls the duration to wait before trying to re-establish the database connection after connection loss. After each consecutive failure this interval is doubled, until MaxReconnectInterval is reached. Successfully completing the connection establishment procedure resets the interval back to MinReconnectInterval.
FallbackPollInterval
FallbackPollInterval = '30s' # DefaultFallbackPollInterval controls how often clients should manually poll as a fallback in case the postgres event was missed/dropped.
Database.Lock
:warning: _ADVANCED_: _Do not change these settings unless you know what you are doing._
[Database.Lock]
Enabled = true # Default
LeaseDuration = '10s' # Default
LeaseRefreshInterval = '1s' # DefaultIdeally, you should use a container orchestration system like Kubernetes 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.
- 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.
Because of the complications with advisory locks, Chainlink nodes with v2.0 and later only support lease locking mode. 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.
Enabled
Enabled = true # DefaultEnabled enables the database lock.
LeaseDuration
LeaseDuration = '10s' # DefaultLeaseDuration is how long the lease lock will last before expiring.
LeaseRefreshInterval
LeaseRefreshInterval = '1s' # DefaultLeaseRefreshInterval determines how often to refresh the lease lock. Also controls how often a standby node will check to see if it can grab the lease.
TelemetryIngress
[TelemetryIngress]
UniConn = false # Default
Logging = false # Default
BufferSize = 100 # Default
MaxBatchSize = 50 # Default
SendInterval = '500ms' # Default
SendTimeout = '10s' # Default
UseBatchSend = true # Default
ChipIngressEnabled = false # DefaultUniConn
UniConn = false # DefaultUniConn toggles which ws connection style is used.
Logging
Logging = false # DefaultLogging toggles verbose logging of the raw telemetry messages being sent.
BufferSize
BufferSize = 100 # DefaultBufferSize is the number of telemetry messages to buffer before dropping new ones.
MaxBatchSize
MaxBatchSize = 50 # DefaultMaxBatchSize is the maximum number of messages to batch into one telemetry request.
SendInterval
SendInterval = '500ms' # DefaultSendInterval determines how often batched telemetry is sent to the ingress server.
SendTimeout
SendTimeout = '10s' # DefaultSendTimeout is the max duration to wait for the request to complete when sending batch telemetry.
UseBatchSend
UseBatchSend = true # DefaultUseBatchSend toggles sending telemetry to the ingress server using the batch client.
ChipIngressEnabled
ChipIngressEnabled = false # DefaultChipIngressEnabled enables sending telemetry to CHIP Ingress.
TelemetryIngress.Endpoints
[[TelemetryIngress.Endpoints]] # Example
Network = 'EVM' # Example
ChainID = '111551111' # Example
ServerPubKey = 'test-pub-key-111551111-evm' # Example
URL = 'localhost-111551111-evm:9000' # ExampleNetwork
Network = 'EVM' # ExampleNetwork aka EVM, Solana, Starknet
ChainID
ChainID = '111551111' # ExampleChainID of the network
ServerPubKey
ServerPubKey = 'test-pub-key-111551111-evm' # ExampleServerPubKey is the public key of the telemetry server.
URL
URL = 'localhost-111551111-evm:9000' # ExampleURL is where to send telemetry.
AuditLogger
[AuditLogger]
Enabled = false # Default
ForwardToUrl = 'http://localhost:9898' # Example
JsonWrapperKey = 'event' # Example
Headers = ['Authorization: token', 'X-SomeOther-Header: value with spaces | and a bar+*'] # ExampleEnabled
Enabled = false # DefaultEnabled determines if this logger should be configured at all
ForwardToUrl
ForwardToUrl = 'http://localhost:9898' # ExampleForwardToUrl is where you want to forward logs to
JsonWrapperKey
JsonWrapperKey = 'event' # ExampleJsonWrapperKey if set wraps the map of data under another single key to make parsing easier
Headers
Headers = ['Authorization: token', 'X-SomeOther-Header: value with spaces | and a bar+*'] # ExampleHeaders is the set of headers you wish to pass along with each request
Log
[Log]
Level = 'info' # Default
JSONConsole = false # Default
UnixTS = false # DefaultLevel
Level = 'info' # DefaultLevel determines only what is printed on the screen/console. This configuration does not apply to the logs that are recorded in a file (see
Log.File for more details).The available levels are:
- "debug": Useful for forensic debugging of issues.
- "info": High-level informational messages. (default)
- "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.
JSONConsole
JSONConsole = false # DefaultJSONConsole enables JSON logging. Otherwise, the log is saved in a human-friendly console format.
UnixTS
UnixTS = false # DefaultUnixTS enables legacy unix timestamps.
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.
Log.File
[Log.File]
Dir = '/my/log/directory' # Example
MaxSize = '5120mb' # Default
MaxAgeDays = 0 # Default
MaxBackups = 1 # DefaultDir
Dir = '/my/log/directory' # ExampleDir sets the log directory. By default, Chainlink nodes write log data to
$ROOT/log.jsonl.MaxSize
MaxSize = '5120mb' # DefaultMaxSize determines the log file's max size before file rotation. Having this not set or set to a value smaller than 1Mb 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)
MaxAgeDays
MaxAgeDays = 0 # DefaultMaxAgeDays 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.
MaxBackups
MaxBackups = 1 # DefaultMaxBackups determines the maximum number of old log files to retain. Keeping this config with the default value retains all old log files. The
MaxAgeDays variable can still cause them to get deleted.WebServer
[WebServer]
AuthenticationMethod = 'local' # Default
AllowOrigins = 'http://localhost:3000,http://localhost:6688' # Default
BridgeCacheTTL = '0s' # Default
BridgeResponseURL = 'https://my-chainlink-node.example.com:6688' # Example
HTTPWriteTimeout = '10s' # Default
HTTPPort = 6688 # Default
SecureCookies = true # Default
SessionTimeout = '15m' # Default
SessionReaperExpiration = '240h' # Default
HTTPMaxSize = '32768b' # Default
StartTimeout = '15s' # Default
ListenIP = '0.0.0.0' # DefaultAuthenticationMethod
AuthenticationMethod = 'local' # DefaultAuthenticationMethod defines which pluggable auth interface to use for user login and role assumption. Options include 'local' and 'ldap'. See docs for more details
AllowOrigins
AllowOrigins = 'http://localhost:3000,http://localhost:6688' # DefaultAllowOrigins 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 AllowOrigins = '*' to allow the UI to work from any URL, but it is recommended for security reasons to make it explicit instead.
BridgeCacheTTL
BridgeCacheTTL = '0s' # DefaultBridgeCacheTTL controls the cache TTL for all bridge tasks to use old values in newer observations in case of intermittent failure. It's disabled by default.
BridgeResponseURL
BridgeResponseURL = 'https://my-chainlink-node.example.com:6688' # ExampleBridgeResponseURL defines the URL for bridges to send a response to. This _must_ be set when using async external adapters.
Usually this will be the same as the URL/IP and port you use to connect to the Chainlink UI.
HTTPWriteTimeout
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
HTTPWriteTimeout = '10s' # DefaultHTTPWriteTimeout 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.
HTTPPort
HTTPPort = 6688 # DefaultHTTPPort is the port used for the Chainlink Node API, CLI, and GUI.
SecureCookies
SecureCookies = true # DefaultSecureCookies requires the use of secure cookies for authentication. Set to false to enable standard HTTP requests along with
TLSPort = 0.SessionTimeout
SessionTimeout = '15m' # DefaultSessionTimeout determines the amount of idle time to elapse before session cookies expire. This signs out GUI users from their sessions.
SessionReaperExpiration
SessionReaperExpiration = '240h' # DefaultSessionReaperExpiration represents how long an API session lasts before expiring and requiring a new login.
HTTPMaxSize
HTTPMaxSize = '32768b' # DefaultHTTPMaxSize defines the maximum size for HTTP requests and responses made by the node server.
StartTimeout
StartTimeout = '15s' # DefaultStartTimeout defines the maximum amount of time the node will wait for a server to start.
ListenIP
ListenIP = '0.0.0.0' # DefaultListenIP specifies the IP to bind the HTTP server to
WebServer.OIDC
[WebServer.OIDC]
ClientID = 'abcd1234' # Example
ProviderURL = 'https://id[.]example[.]com/oauth2/default' # Example
RedirectURL = 'http://localhost:8080/signin' # Example
ClaimName = 'groups' # Default
AdminClaim = 'NodeAdmins' # Default
EditClaim = 'NodeEditors' # Default
RunClaim = 'NodeRunners' # Default
ReadClaim = 'NodeReadOnly' # Default
SessionTimeout = '15m0s' # Default
UserAPITokenEnabled = false # Default
UserAPITokenDuration = '240h0m0s' # DefaultOptional OIDC config if WebServer.AuthenticationMethod is set to 'oidc'
ClientID
ClientID = 'abcd1234' # ExampleClientID is the ID of the OIDC application registered with the identity provider
ProviderURL
ProviderURL = 'https://id[.]example[.]com/oauth2/default' # ExampleProviderURL is the base URL for your OIDC Identity provider.
RedirectURL
RedirectURL = 'http://localhost:8080/signin' # ExampleRedirectURL will always be <NODE_BASE_URL>/signin. This needs to match the configuration on the provider side.
ClaimName
ClaimName = 'groups' # DefaultClaimName is the name of the field in the id_token where to find the user's ID claims.
AdminClaim
AdminClaim = 'NodeAdmins' # DefaultAdminClaim is string label of the id claim that maps the core node's 'Admin' role
EditClaim
EditClaim = 'NodeEditors' # DefaultEditClaim is string label of the id claim that maps the core node's 'Edit' role
RunClaim
RunClaim = 'NodeRunners' # DefaultRunClaim is string label of the id claim that maps the core node's 'Run' role
ReadClaim
ReadClaim = 'NodeReadOnly' # DefaultReadClaim is string label of the id claim that maps the core node's 'Read' role
SessionTimeout
SessionTimeout = '15m0s' # DefaultSessionTimeout determines the amount of idle time to elapse before session cookies expire. This signs out GUI users from their sessions.
UserAPITokenEnabled
UserAPITokenEnabled = false # DefaultUserAPITokenEnabled enables the users to issue API tokens with the same access of their role
UserAPITokenDuration
UserAPITokenDuration = '240h0m0s' # DefaultUserAPITokenDuration is the duration of time an API token is active for before expiring
WebServer.LDAP
[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' # DefaultOptional LDAP config if WebServer.AuthenticationMethod is set to 'ldap'
LDAP queries are all parameterized to support custom LDAP 'dn', 'cn', and attributes
ServerTLS
ServerTLS = true # DefaultServerTLS defines the option to require the secure ldaps
SessionTimeout
SessionTimeout = '15m0s' # DefaultSessionTimeout determines the amount of idle time to elapse before session cookies expire. This signs out GUI users from their sessions.
QueryTimeout
QueryTimeout = '2m0s' # DefaultQueryTimeout defines how long queries should wait before timing out, defined in seconds
BaseUserAttr
BaseUserAttr = 'uid' # DefaultBaseUserAttr defines the base attribute used to populate LDAP queries such as "uid=$", default is example
BaseDN
BaseDN = 'dc=custom,dc=example,dc=com' # ExampleBaseDN defines the base LDAP 'dn' search filter to apply to every LDAP query, replace example,com with the appropriate LDAP server's structure
UsersDN
UsersDN = 'ou=users' # DefaultUsersDN defines the 'dn' query to use when querying for the 'users' 'ou' group
GroupsDN
GroupsDN = 'ou=groups' # DefaultGroupsDN defines the 'dn' query to use when querying for the 'groups' 'ou' group
ActiveAttribute
ActiveAttribute = '' # DefaultActiveAttribute 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
ActiveAttributeAllowedValue = '' # DefaultActiveAttributeAllowedValue is the value to check against for the above optional user attribute
AdminUserGroupCN
AdminUserGroupCN = 'NodeAdmins' # DefaultAdminUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Admin' role
EditUserGroupCN
EditUserGroupCN = 'NodeEditors' # DefaultEditUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Edit' role
RunUserGroupCN
RunUserGroupCN = 'NodeRunners' # DefaultRunUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Run' role
ReadUserGroupCN
ReadUserGroupCN = 'NodeReadOnly' # DefaultReadUserGroupCN is the LDAP 'cn' of the LDAP group that maps the core node's 'Read' role
UserApiTokenEnabled
UserApiTokenEnabled = false # DefaultUserApiTokenEnabled enables the users to issue API tokens with the same access of their role
UserAPITokenDuration
UserAPITokenDuration = '240h0m0s' # DefaultUserAPITokenDuration is the duration of time an API token is active for before expiring
UpstreamSyncInterval
UpstreamSyncInterval = '0s' # DefaultUpstreamSyncInterval 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
UpstreamSyncRateLimit = '2m0s' # DefaultUpstreamSyncRateLimit 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
[WebServer.RateLimit]
Authenticated = 1000 # Default
AuthenticatedPeriod = '1m' # Default
Unauthenticated = 5 # Default
UnauthenticatedPeriod = '20s' # DefaultAuthenticated
Authenticated = 1000 # DefaultAuthenticated defines the threshold to which authenticated requests get limited. More than this many authenticated requests per
AuthenticatedRateLimitPeriod will be rejected.AuthenticatedPeriod
AuthenticatedPeriod = '1m' # DefaultAuthenticatedPeriod defines the period to which authenticated requests get limited.
Unauthenticated
Unauthenticated = 5 # DefaultUnauthenticated defines the threshold to which authenticated requests get limited. More than this many unauthenticated requests per
UnAuthenticatedRateLimitPeriod will be rejected.UnauthenticatedPeriod
UnauthenticatedPeriod = '20s' # DefaultUnauthenticatedPeriod defines the period to which unauthenticated requests get limited.
WebServer.MFA
[WebServer.MFA]
RPID = 'localhost' # Example
RPOrigin = 'http://localhost:6688/' # ExampleThe Operator UI frontend 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.
RPID
RPID = 'localhost' # ExampleRPID is the FQDN of where the Operator UI is served. When serving locally, the value should be
localhost.RPOrigin
RPOrigin = 'http://localhost:6688/' # ExampleRPOrigin is the origin URL where WebAuthn requests initiate, including scheme and port. When serving locally, the value should be
http://localhost:6688/.WebServer.TLS
[WebServer.TLS]
CertPath = '~/.cl/certs' # Example
Host = 'tls-host' # Example
KeyPath = '/home/$USER/.chainlink/tls/server.key' # Example
HTTPSPort = 6689 # Default
ForceRedirect = false # Default
ListenIP = '0.0.0.0' # DefaultThe TLS settings apply only if you want to enable TLS security on your Chainlink node.
CertPath
CertPath = '~/.cl/certs' # ExampleCertPath is the location of the TLS certificate file.
Host
Host = 'tls-host' # ExampleHost is 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.
KeyPath
KeyPath = '/home/$USER/.chainlink/tls/server.key' # ExampleKeyPath is the location of the TLS private key file.
HTTPSPort
HTTPSPort = 6689 # DefaultHTTPSPort is 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.ForceRedirect
ForceRedirect = false # DefaultForceRedirect forces TLS redirect for unencrypted connections.
ListenIP
ListenIP = '0.0.0.0' # DefaultListenIP specifies the IP to bind the HTTPS server to
JobDistributor
[JobDistributor]
DisplayName = "cre-workflow-1-chainlinklabs" # ExampleJob Distributor stores the configuration for Job Distributor
DisplayName
DisplayName = "cre-workflow-1-chainlinklabs" # ExampleDisplayName is a friendly, fully qualified name set by the NOP to clearly identify the node in Job Distributor.
It should uniquely and unambiguously represent the node for clear communication between Job Distributor maintainers/operators ↔ NOPs.
JobPipeline
[JobPipeline]
ExternalInitiatorsEnabled = false # Default
MaxRunDuration = '10m' # Default
MaxSuccessfulRuns = 10000 # Default
ReaperInterval = '1h' # Default
ReaperThreshold = '24h' # Default
ResultWriteQueueDepth = 100 # Default
VerboseLogging = true # DefaultExternalInitiatorsEnabled
ExternalInitiatorsEnabled = false # DefaultExternalInitiatorsEnabled Unused: used to enables the External Initiator feature for legacy webhook job runs via external initiators
MaxRunDuration
MaxRunDuration = '10m' # DefaultMaxRunDuration is the maximum time allowed for a single job run. If it takes longer, it will exit early and be marked errored. If set to zero, disables the time limit completely.
MaxSuccessfulRuns
MaxSuccessfulRuns = 10000 # DefaultMaxSuccessfulRuns caps the number of completed successful runs per pipeline
spec in the database. You can set it to zero as a performance optimisation;
this will avoid saving any successful run.
Note this is not a hard cap, it can drift slightly larger than this but not
by more than 5% or so.
ReaperInterval
ReaperInterval = '1h' # DefaultReaperInterval controls how often the job pipeline reaper will run to delete completed jobs older than ReaperThreshold, in order to keep database size manageable.
Set to 0 to disable the periodic reaper.
ReaperThreshold
ReaperThreshold = '24h' # DefaultReaperThreshold determines the age limit for job runs. Completed job runs older than this will be automatically purged from the database.
ResultWriteQueueDepth
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
ResultWriteQueueDepth = 100 # DefaultResultWriteQueueDepth controls how many writes will be buffered before subsequent writes are dropped, for jobs that write results asynchronously for performance reasons, such as OCR.
VerboseLogging
VerboseLogging = true # DefaultVerboseLogging enables detailed logging of pipeline execution steps.
This can be useful for debugging failed runs without relying on the UI
or database.
You may disable if this results in excessive log volume.
JobPipeline.HTTPRequest
[JobPipeline.HTTPRequest]
DefaultTimeout = '15s' # Default
MaxSize = '32768' # DefaultDefaultTimeout
DefaultTimeout = '15s' # DefaultDefaultTimeout defines the default timeout for HTTP requests made by
http and bridge adapters.MaxSize
MaxSize = '32768' # DefaultMaxSize defines the maximum size for HTTP requests and responses made by
http and bridge adapters.FluxMonitor
[FluxMonitor]
DefaultTransactionQueueDepth = 1 # Default
SimulateTransactions = false # DefaultDeprecated: FluxMonitor job type has been removed. These settings are accepted for backwards-compatible
config parsing only and have no effect.
DefaultTransactionQueueDepth
DefaultTransactionQueueDepth = 1 # DefaultDefaultTransactionQueueDepth DEPRECATED: has no effect. The FluxMonitor job type has been removed.
SimulateTransactions
SimulateTransactions = false # DefaultSimulateTransactions DEPRECATED: has no effect. The FluxMonitor job type has been removed.
OCR2
[OCR2]
Enabled = false # Default
ContractConfirmations = 3 # Default
BlockchainTimeout = '20s' # Default
ContractPollInterval = '1m' # Default
ContractSubscribeInterval = '2m' # Default
ContractTransmitterTransmitTimeout = '10s' # Default
DatabaseTimeout = '10s' # Default
KeyBundleID = '7a5f66bbe6594259325bf2b4f5b1a9c900000000000000000000000000000000' # Example
CaptureEATelemetry = false # Default
CaptureAutomationCustomTelemetry = true # Default
AllowNoBootstrappers = false # Default
DefaultTransactionQueueDepth = 1 # Default
SimulateTransactions = false # Default
TraceLogging = false # Default
SampleTelemetry = false # Default
KeyValueStoreRootDir = '~/.chainlink-data' # DefaultEnabled
Enabled = false # DefaultEnabled enables OCR2 jobs.
ContractConfirmations
ContractConfirmations = 3 # DefaultContractConfirmations 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
are fairly common, recommended values are between two and ten.
Malicious re-orgs are not any more of concern here than they are in
blockchain applications in general: Since nodes check the contract for the
latest config every ContractConfigTrackerPollInterval.Seconds(), they will
come to a common view of the current config within any interval longer than
that, as long as the latest setConfig transaction in the longest chain is
stable. They will thus be able to continue reporting after the poll
interval, unless an adversary is able to repeatedly re-org the transaction
out during every poll interval, which would amount to the capability to
censor any transaction.
Note that 1 confirmation implies that the transaction/event has been mined in one block.
0 confirmations would imply that the event would be recognised before it has even been mined, which is not currently supported.
e.g.
Current block height: 42
Changed in block height: 43
Contract config confirmations: 1
STILL PENDING
Current block height: 43
Changed in block height: 43
Contract config confirmations: 1
CONFIRMED
BlockchainTimeout
BlockchainTimeout = '20s' # DefaultBlockchainTimeout is the timeout for blockchain queries (mediated through
ContractConfigTracker and ContractTransmitter).
(This is necessary because an oracle's operations are serialized, so
blocking forever on a chain interaction would break the oracle.)
ContractPollInterval
ContractPollInterval = '1m' # DefaultContractPollInterval is the polling interval at which ContractConfigTracker is queried for# updated on-chain configurations. Recommended values are between
fifteen seconds and two minutes.
ContractSubscribeInterval
ContractSubscribeInterval = '2m' # DefaultContractSubscribeInterval is the interval at which we try to establish a subscription on ContractConfigTracker
if one doesn't exist. Recommended values are between two and five minutes.
ContractTransmitterTransmitTimeout
ContractTransmitterTransmitTimeout = '10s' # DefaultContractTransmitterTransmitTimeout is the timeout for ContractTransmitter.Transmit calls.
DatabaseTimeout
DatabaseTimeout = '10s' # DefaultDatabaseTimeout is the timeout for database interactions.
(This is necessary because an oracle's operations are serialized, so
blocking forever on an observation would break the oracle.)
KeyBundleID
KeyBundleID = '7a5f66bbe6594259325bf2b4f5b1a9c900000000000000000000000000000000' # ExampleKeyBundleID is a sha256 hexadecimal hash identifier.
CaptureEATelemetry
CaptureEATelemetry = false # DefaultCaptureEATelemetry toggles collecting extra information from External Adaptares
CaptureAutomationCustomTelemetry
CaptureAutomationCustomTelemetry = true # DefaultCaptureAutomationCustomTelemetry toggles collecting automation specific telemetry
AllowNoBootstrappers
AllowNoBootstrappers = false # DefaultAllowNoBootstrappers enables single-node consensus without bootstrapper nodes (i.e. f=0, n=1)
DefaultTransactionQueueDepth
DefaultTransactionQueueDepth = 1 # DefaultDefaultTransactionQueueDepth controls the queue size for
DropOldestStrategy in OCR2. Set to 0 to use SendEvery strategy instead.SimulateTransactions
SimulateTransactions = false # DefaultSimulateTransactions enables transaction simulation for OCR2.
TraceLogging
TraceLogging = false # DefaultTraceLogging enables trace level logging.
SampleTelemetry
SampleTelemetry = false # DefaultSampleTelemetry enables telemetry sampling.
KeyValueStoreRootDir
KeyValueStoreRootDir = '~/.chainlink-data' # DefaultKeyValueStoreRootDir is the root directory for the key-value store used by OCR3.1.
This directory must be writable by the Chainlink node process and should support long-term persistence.
OCR
[OCR]
Enabled = false # Default
ObservationTimeout = '5s' # Default
BlockchainTimeout = '20s' # Default
ContractPollInterval = '1m' # Default
ContractSubscribeInterval = '2m' # Default
DefaultTransactionQueueDepth = 1 # Default
KeyBundleID = 'acdd42797a8b921b2910497badc5000600000000000000000000000000000000' # Example
SimulateTransactions = false # Default
TransmitterAddress = '0xa0788FC17B1dEe36f057c42B6F373A34B014687e' # Example
CaptureEATelemetry = false # Default
TraceLogging = false # Default
ConfigLogValidation = false # DefaultThis section applies only if you are running off-chain reporting jobs.
Enabled
Enabled = false # DefaultEnabled enables OCR jobs.
ObservationTimeout
ObservationTimeout = '5s' # DefaultObservationTimeout is the timeout for making observations using the DataSource.Observe method.
(This is necessary because an oracle's operations are serialized, so
blocking forever on an observation would break the oracle.)
BlockchainTimeout
BlockchainTimeout = '20s' # DefaultBlockchainTimeout is the timeout for blockchain queries (mediated through
ContractConfigTracker and ContractTransmitter).
(This is necessary because an oracle's operations are serialized, so
blocking forever on a chain interaction would break the oracle.)
ContractPollInterval
ContractPollInterval = '1m' # DefaultContractPollInterval is the polling interval at which ContractConfigTracker is queried for
updated on-chain configurations. Recommended values are between
fifteen seconds and two minutes.
ContractSubscribeInterval
ContractSubscribeInterval = '2m' # DefaultContractSubscribeInterval is the interval at which we try to establish a subscription on ContractConfigTracker
if one doesn't exist. Recommended values are between two and five minutes.
DefaultTransactionQueueDepth
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
DefaultTransactionQueueDepth = 1 # DefaultDefaultTransactionQueueDepth controls the queue size for
DropOldestStrategy in OCR. Set to 0 to use SendEvery strategy instead.KeyBundleID
KeyBundleID = 'acdd42797a8b921b2910497badc5000600000000000000000000000000000000' # ExampleKeyBundleID 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.
SimulateTransactions
SimulateTransactions = false # DefaultSimulateTransactions enables transaction simulation for OCR.
TransmitterAddress
TransmitterAddress = '0xa0788FC17B1dEe36f057c42B6F373A34B014687e' # ExampleTransmitterAddress 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.
CaptureEATelemetry
CaptureEATelemetry = false # DefaultCaptureEATelemetry toggles collecting extra information from External Adaptares
TraceLogging
TraceLogging = false # DefaultTraceLogging enables trace level logging.
ConfigLogValidation
ConfigLogValidation = false # DefaultConfigLogValidation ensures contract configuration logs are accessible when validating OCR jobs. Enable this when using RPC providers that don't maintain complete historical logs.
P2P
[P2P]
IncomingMessageBufferSize = 10 # Default
OutgoingMessageBufferSize = 10 # Default
PeerID = '12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw' # Example
TraceLogging = false # Default
EnableExperimentalRageP2P = false # DefaultP2P has a versioned networking stack. Currenly only
[P2P.V2] is supported.All nodes in the OCR network should share the same networking stack.
IncomingMessageBufferSize
IncomingMessageBufferSize = 10 # DefaultIncomingMessageBufferSize is the per-remote number of incoming
messages to buffer. Any additional messages received on top of those
already in the queue will be dropped.
OutgoingMessageBufferSize
OutgoingMessageBufferSize = 10 # DefaultOutgoingMessageBufferSize is the per-remote number of outgoing
messages to buffer. Any additional messages send on top of those
already in the queue will displace the oldest.
NOTE: OutgoingMessageBufferSize should be comfortably smaller than remote's
IncomingMessageBufferSize to give the remote enough space to process
them all in case we regained connection and now send a bunch at once
PeerID
PeerID = '12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw' # ExamplePeerID is the peer ID of the node's P2P host. If unspecified, the single P2P
key from the node keystore is used; if the keystore contains multiple P2P keys,
PeerID must be set.
TraceLogging
TraceLogging = false # DefaultTraceLogging DEPRECATED: has no effect. Use
OCR.TraceLogging (for the P2Pnetworking stack) or
OCR2.TraceLogging (for OCR2 jobs) instead.EnableExperimentalRageP2P
EnableExperimentalRageP2P = false # DefaultEnableExperimentalRageP2P enables the experimental ragep2p version required by OCR3.1.
P2P.V2
[P2P.V2]
Enabled = true # Default
AnnounceAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # Example
DefaultBootstrappers = ['[email protected]:9999', '[email protected]:1234'] # Example
DeltaDial = '15s' # Default
DeltaReconcile = '1m' # Default
ListenAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # ExampleEnabled
Enabled = true # DefaultEnabled enables P2P V2, the networking stack that OCR, OCR2, OCR3, OCR3.1, and
bootstrap jobs use to communicate with other nodes.
It must be enabled when OCR.Enabled or OCR2.Enabled is true, otherwise the node
fails to boot.
AnnounceAddresses
AnnounceAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # ExampleAnnounceAddresses are the
ip:port addresses this node advertises to othernodes. These addresses should be reachable by those nodes.
Use IP addresses only: hostnames and domain names are not valid. Each address
must include a port. IPv6 addresses must be enclosed in
[] and cannotinclude zone identifiers such as
%eth0. If omitted or empty,ListenAddresses are used instead.
If those values include addresses with unspecified IPs such as
0.0.0.0:portor
[::]:port, the node attempts to replace them with detected interface IPsbefore advertising them. If autodetection fails, concrete IP entries are
still used, but entries with unspecified IPs are dropped. Startup fails if no
usable announce addresses remain.
For security reasons, it is strongly recommended to use
random/unpredictable ports.
DefaultBootstrappers
DefaultBootstrappers = ['[email protected]:9999', '[email protected]:1234'] # ExampleDefaultBootstrappers is the default bootstrapper peers for libocr's v2 networking stack.
Oracle nodes typically only know each other’s PeerIDs, but not their hostnames, IP addresses, or ports.
DefaultBootstrappers are special nodes that help other nodes discover each other’s AnnounceAddresses so they can communicate.
Nodes continuously attempt to connect to bootstrappers configured in here. 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 AnnounceAddresses from communications
received from its DefaultBootstrappers or other discovered nodes. To facilitate discovery,
nodes will regularly broadcast signed announcements containing their PeerID and AnnounceAddresses.
DeltaDial
DeltaDial = '15s' # DefaultDeltaDial is the minimum duration between dial attempts to a single peer. The actual duration may be longer due to jitter.
DeltaReconcile
DeltaReconcile = '1m' # DefaultDeltaReconcile controls how often a Reconcile message is sent to every peer.
ListenAddresses
ListenAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # ExampleListenAddresses are the
ip:port addresses this node listens on.At least one listen address is required.
You can use
0.0.0.0:port or [::]:port to listen on all interfaces.If AnnounceAddresses is omitted or empty, ListenAddresses are also used as
AnnounceAddresses, and thus must satisfy the AnnounceAddresses requirements
above.
Capabilities.RateLimit
[Capabilities.RateLimit]
GlobalRPS = 200 # Default
GlobalBurst = 200 # Default
PerSenderRPS = 200 # Default
PerSenderBurst = 200 # DefaultGlobalRPS
GlobalRPS = 200 # DefaultGlobalRPS is the global rate limit for the dispatcher.
GlobalBurst
GlobalBurst = 200 # DefaultGlobalBurst is the global burst limit for the dispatcher.
PerSenderRPS
PerSenderRPS = 200 # DefaultPerSenderRPS is the per-sender rate limit for the dispatcher.
PerSenderBurst
PerSenderBurst = 200 # DefaultPerSenderBurst is the per-sender burst limit for the dispatcher.
Capabilities.WorkflowRegistry
[Capabilities.WorkflowRegistry]
Address = '0x0' # Example
NetworkID = 'evm' # Default
ChainID = '1' # Default
ContractVersion = '1.0.0' # Default
MaxBinarySize = '20.00mb' # Default
MaxEncryptedSecretsSize = '26.40kb' # Default
MaxConfigSize = '50.00kb' # Default
SyncStrategy = 'event' # Default
MaxConcurrency = 12 # Default
MaxActivationRetries = 100 # DefaultAddress
Address = '0x0' # ExampleAddress is the address for the workflow registry contract.
NetworkID
NetworkID = 'evm' # DefaultNetworkID identifies the target network where the remote registry is located.
ChainID
ChainID = '1' # DefaultChainID identifies the target chain id where the remote registry is located.
ContractVersion
ContractVersion = '1.0.0' # DefaultContractVersion identifies semantic version of the WorkflowRegistry contract.
MaxBinarySize
MaxBinarySize = '20.00mb' # DefaultMaxBinarySize is the maximum size of a binary that can be fetched from the registry.
MaxEncryptedSecretsSize
MaxEncryptedSecretsSize = '26.40kb' # DefaultMaxEncryptedSecretsSize is the maximum size of encrypted secrets that can be fetched from the given secrets url.
MaxConfigSize
MaxConfigSize = '50.00kb' # DefaultMaxConfigSize is the maximum size of a config that can be fetched from the given config url.
SyncStrategy
SyncStrategy = 'event' # DefaultSyncStrategy is the strategy that will be used to bring the node up to date with the latest Workflow Registry contract state.
Options are: event which watches for contract events or reconciliation which diffs workflow metadata state.
MaxConcurrency
MaxConcurrency = 12 # DefaultMaxConcurrency controls the maximum number of concurrent event handlers in the workflow registry syncer.
MaxActivationRetries
MaxActivationRetries = 100 # DefaultMaxActivationRetries is the number of failed load/initialization attempts before the syncer stops retrying an active workflow. 0 disables the limit.
Capabilities.WorkflowRegistry.WorkflowStorage
[Capabilities.WorkflowRegistry.WorkflowStorage]
URL = "localhost:4566" # Example
TLSEnabled = true # Default
ArtifactStorageHost = 'artifact.cre.chain.link' # ExampleURL
URL = "localhost:4566" # ExampleURL is the location for the workflow storage service to be communicated with.
TLSEnabled
TLSEnabled = true # DefaultTLSEnabled enables TLS to be used to secure communication with the workflow storage service. This is enabled by default.
ArtifactStorageHost
ArtifactStorageHost = 'artifact.cre.chain.link' # ExampleArtifactStorageHost is the host name that, when present within the workflow metadata binary or config URL, designates that a signed URL should be retrieved from the workflow storage service.
Capabilities.WorkflowRegistry.AdditionalSources
[[Capabilities.WorkflowRegistry.AdditionalSources]]
URL = 'localhost:50051' # Example
TLSEnabled = true # Default
Name = 'my-workflow-source' # ExampleURL
URL = 'localhost:50051' # ExampleURL is the GRPC endpoint for the additional workflow metadata source.
This allows workflows to be loaded from sources other than the on-chain registry contract.
TLSEnabled
TLSEnabled = true # DefaultTLSEnabled enables TLS for the GRPC connection. Defaults to true.
Name
Name = 'my-workflow-source' # ExampleName is a required unique identifier for this workflow source. Each additional source must have a distinct name to prevent workflow reconciliation conflicts. Names like 'ContractWorkflowSource' are reserved for internal use.
Capabilities.WorkflowRegistry.ModuleCache
[Capabilities.WorkflowRegistry.ModuleCache]
Enabled = false # Default
DiskMonitorEnabled = false # Default
IdleEviction = true # Default
IdleTimeout = '10m' # Default
MaxLoaded = 200 # Default
CacheDir = '' # DefaultEnabled
Enabled = false # DefaultEnabled activates the two-level module cache (LRU + disk). When true, compiled WASM modules
are kept in memory and persisted to disk, avoiding recompilation on subsequent activations.
DiskMonitorEnabled
DiskMonitorEnabled = false # DefaultDiskMonitorEnabled exposes platform_workflow_module_cache_disk_usage_bytes for CacheDir without
enabling LRU/disk persistence. Set CacheDir to the production path during rollout; then set
Enabled = true for the full cache. Enabled = true also starts the disk monitor when this is false.
IdleEviction
IdleEviction = true # DefaultIdleEviction enables time-based eviction of modules unused for IdleTimeout.
IdleTimeout
IdleTimeout = '10m' # DefaultIdleTimeout is how long a module can remain idle before being evicted from memory.
Only applies when IdleEviction = true.
MaxLoaded
MaxLoaded = 200 # DefaultMaxLoaded caps the number of simultaneously loaded modules. When exceeded the least-recently-used
module is evicted immediately. 0 means no cap.
CacheDir
CacheDir = '' # DefaultCacheDir is the directory for serialised module binaries. Empty uses a temp directory.
Workflows
[Workflows]Workflows.Limits
[Workflows.Limits]
Global = 200 # Default
PerOwner = 200 # DefaultGlobal
Global = 200 # DefaultGlobal is the maximum number of workflows that can be registered globally.
PerOwner
PerOwner = 200 # DefaultPerOwner is the maximum number of workflows that can be registered per owner.
Capabilities.ExternalRegistry
[Capabilities.ExternalRegistry]
Address = '0x0' # Example
NetworkID = 'evm' # Default
ChainID = '1' # Default
ContractVersion = '1.0.0' # DefaultAddress
Address = '0x0' # ExampleAddress is the address for the capabilities registry contract.
NetworkID
NetworkID = 'evm' # DefaultNetworkID identifies the target network where the remote registry is located.
ChainID
ChainID = '1' # DefaultChainID identifies the target chain id where the remote registry is located.
ContractVersion
ContractVersion = '1.0.0' # DefaultContractVersion identifies semantic version of the CapabilitiesRegistry contract.
Capabilities.Dispatcher
[Capabilities.Dispatcher]
SupportedVersion = 1 # Default
ReceiverBufferSize = 10000 # Default
SendToSharedPeer = false # DefaultSupportedVersion
SupportedVersion = 1 # DefaultSupportedVersion is the version of the version of message schema.
ReceiverBufferSize
ReceiverBufferSize = 10000 # DefaultReceiverBufferSize is the size of the buffer for incoming messages.
SendToSharedPeer
SendToSharedPeer = false # DefaultSendToSharedPeer sends all messages ONLY to the SharedPeer and not to legacy ExternalPeer.
Capabilities.Dispatcher.RateLimit
[Capabilities.Dispatcher.RateLimit]
GlobalRPS = 800 # Default
GlobalBurst = 1000 # Default
PerSenderRPS = 10 # Default
PerSenderBurst = 50 # DefaultGlobalRPS
GlobalRPS = 800 # DefaultGlobalRPS is the global rate limit for the dispatcher.
GlobalBurst
GlobalBurst = 1000 # DefaultGlobalBurst is the global burst limit for the dispatcher.
PerSenderRPS
PerSenderRPS = 10 # DefaultPerSenderRPS is the per-sender rate limit for the dispatcher.
PerSenderBurst
PerSenderBurst = 50 # DefaultPerSenderBurst is the per-sender burst limit for the dispatcher.
Capabilities.Peering
[Capabilities.Peering]
IncomingMessageBufferSize = 10 # Default
OutgoingMessageBufferSize = 10 # Default
PeerID = '12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw' # Example
TraceLogging = false # Default
EnableExperimentalRageP2P = false # DefaultIncomingMessageBufferSize
IncomingMessageBufferSize = 10 # DefaultIncomingMessageBufferSize DEPRECATED: has no effect. Buffer sizes for the
capabilities P2P host are not configurable; for shared peering, use
Capabilities.SharedPeering.StreamConfig.OutgoingMessageBufferSize
OutgoingMessageBufferSize = 10 # DefaultOutgoingMessageBufferSize DEPRECATED: has no effect. Buffer sizes for the
capabilities P2P host are not configurable; for shared peering, use
Capabilities.SharedPeering.StreamConfig.PeerID
PeerID = '12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw' # ExamplePeerID is the peer ID to use for the capabilities P2P host; see
P2P.PeerID.TraceLogging
TraceLogging = false # DefaultTraceLogging DEPRECATED: has no effect.
EnableExperimentalRageP2P
EnableExperimentalRageP2P = false # DefaultEnableExperimentalRageP2P currently has no effect in this section; the
capabilities P2P host always uses the production ragep2p stack.
Capabilities.Peering.V2
[Capabilities.Peering.V2]
Enabled = false # Default
AnnounceAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # Example
DefaultBootstrappers = ['[email protected]:9999', '[email protected]:1234'] # Example
DeltaDial = '15s' # Default
DeltaReconcile = '1m' # Default
ListenAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # ExampleEnabled
Enabled = false # DefaultEnabled enables a dedicated P2P V2 host for capabilities (DON-to-DON)
communication, independent of the top-level
P2P host.AnnounceAddresses
AnnounceAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # ExampleAnnounceAddresses: see
P2P.V2.AnnounceAddresses.DefaultBootstrappers
DefaultBootstrappers = ['[email protected]:9999', '[email protected]:1234'] # ExampleDefaultBootstrappers: see
P2P.V2.DefaultBootstrappers.DeltaDial
DeltaDial = '15s' # DefaultDeltaDial: see
P2P.V2.DeltaDial.DeltaReconcile
DeltaReconcile = '1m' # DefaultDeltaReconcile: see
P2P.V2.DeltaReconcile.ListenAddresses
ListenAddresses = ['1.2.3.4:9999', '[a52d:0:a88:1274::abcd]:1337'] # ExampleListenAddresses: see
P2P.V2.ListenAddresses.Capabilities.GatewayConnector
[Capabilities.GatewayConnector]
ChainIDForNodeKey = '11155111' # Example
NodeAddress = '0x68902d681c28119f9b2531473a417088bf008e59' # Example
DonID = 'example_don' # Example
WSHandshakeTimeoutMillis = 1000 # Example
AuthMinChallengeLen = 10 # Example
AuthTimestampToleranceSec = 10 # ExampleChainIDForNodeKey
ChainIDForNodeKey = '11155111' # ExampleChainIDForNodeKey is the ChainID of the network associated with a private key to be used for authentication with Gateway nodes
NodeAddress
NodeAddress = '0x68902d681c28119f9b2531473a417088bf008e59' # ExampleNodeAddress is the address of the desired private key to be used for authentication with Gateway nodes
DonID
DonID = 'example_don' # ExampleDonID is the Id of the Don
WSHandshakeTimeoutMillis
WSHandshakeTimeoutMillis = 1000 # ExampleWSHandshakeTimeoutMillis is Websocket handshake timeout
AuthMinChallengeLen
AuthMinChallengeLen = 10 # ExampleAuthMinChallengeLen is the minimum number of bytes in authentication challenge payload
AuthTimestampToleranceSec
AuthTimestampToleranceSec = 10 # ExampleAuthTimestampToleranceSec is Authentication timestamp tolerance
Capabilities.GatewayConnector.Gateways
[[Capabilities.GatewayConnector.Gateways]]
ID = 'example_gateway' # Example
DonID = 'example_gateway_don' # Example
URL = 'wss://localhost:8081/node' # ExampleID
ID = 'example_gateway' # ExampleID of the Gateway
DonID
DonID = 'example_gateway_don' # ExampleDonID is the DON that owns this gateway; used for multi-gateway routing. All or none of the gateways must have a DonID.
URL
URL = 'wss://localhost:8081/node' # ExampleURL of the Gateway
Capabilities.SharedPeering
[Capabilities.SharedPeering]
Enabled = false # Default
Bootstrappers = ['[email protected]:9999', '[email protected]:1234'] # ExampleEnabled
Enabled = false # DefaultEnabled enabled SharedPeer
Bootstrappers
Bootstrappers = ['[email protected]:9999', '[email protected]:1234'] # ExampleBootstrappers overrides bootstrap nodes for SharedPeer peer groups. If empty, default bootstrappers from P2P.V2 will be used.
Capabilities.SharedPeering.StreamConfig
[Capabilities.SharedPeering.StreamConfig]
IncomingMessageBufferSize = 500 # Default
OutgoingMessageBufferSize = 500 # Default
MaxMessageLenBytes = 500000 # Default
MessageRateLimiterRate = 100.0 # Default
MessageRateLimiterCapacity = 500 # Default
BytesRateLimiterRate = 5000000.0 # Default
BytesRateLimiterCapacity = 10000000 # DefaultIncomingMessageBufferSize
IncomingMessageBufferSize = 500 # DefaultIncomingMessageBufferSize is the max number of enqueued incoming messages awaiting processing.
OutgoingMessageBufferSize
OutgoingMessageBufferSize = 500 # DefaultOutgoingMessageBufferSize is the max number of outgoing messages.
MaxMessageLenBytes
MaxMessageLenBytes = 500000 # DefaultMaxMessageLenBytes is the max size of a message in bytes.
MessageRateLimiterRate
MessageRateLimiterRate = 100.0 # DefaultMessageRateLimiterRate is the max number of processed messages per second.
MessageRateLimiterCapacity
MessageRateLimiterCapacity = 500 # DefaultMessageRateLimiterCapacity is the "burst" of the message rate limiter.
BytesRateLimiterRate
BytesRateLimiterRate = 5000000.0 # DefaultBytesRateLimiterRate is the max size of precessed messages per second.
BytesRateLimiterCapacity
BytesRateLimiterCapacity = 10000000 # DefaultBytesRateLimiterCapacity is the "burst" of the message rate limiter (in bytes).
Capabilities.Local
[Capabilities.Local]
RegistryBasedLaunchAllowlist = [] # DefaultRegistryBasedLaunchAllowlist
RegistryBasedLaunchAllowlist = [] # DefaultRegistryBasedLaunchAllowlist contains regex patterns that match capability IDs to be launched
from the on-chain capabilities registry instead of via job specs. Adding a pattern to this
list has two effects:
1. Disables job-spec-based launching - the delegate refuses to start matching capabilities via job specs
2. Enables registry-based launching - the LocalCapabilityManager starts matching capabilities from on-chain registry
This allows staged rollout: capabilities not matching any pattern continue launching via job specs,
while matching capabilities transition to registry-based launching.
Examples (using single-quoted TOML strings where backslashes are literal):
- '^cron@1\.0\.0$' matches exactly "[email protected]"
- '^http-action@.*$' matches any version of http-action
- '.*' matches all capabilities
Per-capability configuration. Each capability ID can have its own configuration section.
Capability IDs must be in the format "name@version".
[Capabilities.Local.Capabilities."[email protected]"]
BinaryPathOverride overrides the default binary path for a LOOP capability.
BinaryPathOverride = '/opt/chainlink/binaries/http_action' # Example
[Capabilities.Local.Capabilities."[email protected]".Config]
Capability-specific configuration as key-value pairs.
proxyMode = 'gateway' # Example
allowedPorts = '443,8443' # Example
AutoPprof
[AutoPprof]
Enabled = false # Default
ProfileRoot = 'prof/root' # Example
PollInterval = '10s' # Default
GatherDuration = '10s' # Default
GatherTraceDuration = '5s' # Default
MaxProfileSize = '100mb' # Default
CPUProfileRate = 1 # Default
MemProfileRate = 1 # Default
BlockProfileRate = 1 # Default
MutexProfileFraction = 1 # Default
MemThreshold = '4gb' # Default
GoroutineThreshold = 5000 # DefaultThe 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 guide.
Enabled
Enabled = false # DefaultEnabled enables the automatic profiling service.
ProfileRoot
ProfileRoot = 'prof/root' # ExampleProfileRoot sets the location on disk where pprof profiles will be stored. Defaults to
RootDir.PollInterval
PollInterval = '10s' # DefaultPollInterval is the interval at which the node's resources are checked.
GatherDuration
GatherDuration = '10s' # DefaultGatherDuration is the duration for which profiles are gathered when profiling starts.
GatherTraceDuration
GatherTraceDuration = '5s' # DefaultGatherTraceDuration is 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.
MaxProfileSize
MaxProfileSize = '100mb' # DefaultMaxProfileSize is the maximum amount of disk space that profiles may consume before profiling is disabled.
CPUProfileRate
CPUProfileRate = 1 # DefaultCPUProfileRate sets the rate for CPU profiling. See https://pkg.go.dev/runtime#SetCPUProfileRate.
MemProfileRate
MemProfileRate = 1 # DefaultMemProfileRate sets the rate for memory profiling. See https://pkg.go.dev/runtime#pkg-variables.
BlockProfileRate
BlockProfileRate = 1 # DefaultBlockProfileRate sets the fraction of blocking events for goroutine profiling. See https://pkg.go.dev/runtime#SetBlockProfileRate.
MutexProfileFraction
MutexProfileFraction = 1 # DefaultMutexProfileFraction sets the fraction of contention events for mutex profiling. See https://pkg.go.dev/runtime#SetMutexProfileFraction.
MemThreshold
MemThreshold = '4gb' # DefaultMemThreshold sets the maximum amount of memory the node can actively consume before profiling begins.
GoroutineThreshold
GoroutineThreshold = 5000 # DefaultGoroutineThreshold is the maximum number of actively-running goroutines the node can spawn before profiling begins.
Pyroscope
[Pyroscope]
ServerAddress = 'http://localhost:4040' # Example
Environment = 'mainnet' # Default
LinkTracesToProfiles = false # DefaultServerAddress
ServerAddress = 'http://localhost:4040' # ExampleServerAddress sets the address that will receive the profile logs. It enables the profiling service.
Environment
Environment = 'mainnet' # DefaultEnvironment sets the target environment tag in which profiles will be added to.
LinkTracesToProfiles
LinkTracesToProfiles = false # DefaultLinkTracesToProfiles enables linking traces to profiles in Grafana when Pyroscope and Tracing are enabled.
Sentry
[Sentry]
Debug = false # Default
DSN = 'sentry-dsn' # Example
Environment = 'my-custom-env' # Example
Release = 'v1.2.3' # ExampleDebug
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
Debug = false # DefaultDebug enables printing of Sentry SDK debug messages.
DSN
DSN = 'sentry-dsn' # ExampleDSN is the data source name where events will be sent. Sentry is completely disabled if this is left blank.
Environment
Environment = 'my-custom-env' # ExampleEnvironment overrides the Sentry environment to the given value. Otherwise autodetects between dev/prod.
Release
Release = 'v1.2.3' # ExampleRelease overrides the Sentry release to the given value. Otherwise uses the compiled-in version number.
Insecure
[Insecure]
DevWebServer = false # Default
OCRDevelopmentMode = false # Default
InfiniteDepthQueries = false # Default
DisableRateLimiting = false # DefaultInsecure config family is only allowed in development builds.
DevWebServer
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
DevWebServer = false # DefaultDevWebServer skips secure configuration for webserver AllowedHosts, SSL, etc.
OCRDevelopmentMode
OCRDevelopmentMode = false # DefaultOCRDevelopmentMode run OCR in development mode.
InfiniteDepthQueries
InfiniteDepthQueries = false # DefaultInfiniteDepthQueries skips graphql query depth limit checks.
DisableRateLimiting
DisableRateLimiting = false # DefaultDisableRateLimiting skips ratelimiting on asset requests.
Tracing
[Tracing]
Enabled = false # Default
CollectorTarget = 'localhost:4317' # Example
NodeID = 'NodeID' # Example
SamplingRatio = 1.0 # Example
Mode = 'tls' # Default
TLSCertPath = '/path/to/cert.pem' # ExampleEnabled
Enabled = false # DefaultEnabled turns trace collection on or off. On requires an OTEL Tracing Collector.
CollectorTarget
CollectorTarget = 'localhost:4317' # ExampleCollectorTarget is the logical address of the OTEL Tracing Collector.
NodeID
NodeID = 'NodeID' # ExampleNodeID is an unique name for this node relative to any other node traces are collected for.
SamplingRatio
SamplingRatio = 1.0 # ExampleSamplingRatio is the ratio of traces to sample for this node.
Mode
Mode = 'tls' # DefaultMode 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
TLSCertPath = '/path/to/cert.pem' # ExampleTLSCertPath is the file path to the TLS certificate used for secure communication with an OTEL Tracing Collector.
Tracing.Attributes
[Tracing.Attributes]
env = 'test' # ExampleTracing.Attributes are user specified key-value pairs to associate in the context of the traces
env
env = 'test' # Exampleenv is an example user specified key-value pair
Mercury
[Mercury]
VerboseLogging = false # DefaultVerboseLogging
VerboseLogging = false # DefaultVerboseLogging enables detailed logging of mercury/LLO operations. These logs
can be expensive since they may serialize large structs, so they are disabled
by default.
Mercury.Cache
[Mercury.Cache]
LatestReportTTL = "1s" # Default
MaxStaleAge = "1h" # Default
LatestReportDeadline = "5s" # DefaultMercury.Cache controls settings for the price retrieval cache querying a mercury server
LatestReportTTL
LatestReportTTL = "1s" # DefaultLatestReportTTL 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
MaxStaleAge = "1h" # DefaultMaxStaleAge 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
LatestReportDeadline = "5s" # DefaultLatestReportDeadline controls how long to wait for a response from the
mercury server before retrying. Setting this to zero will wait indefinitely.
Mercury.TLS
[Mercury.TLS]
CertFile = "/path/to/client/certs.pem" # ExampleMercury.TLS controls client settings for when the node talks to traditional web servers or load balancers.
CertFile
CertFile = "/path/to/client/certs.pem" # ExampleCertFile is the path to a PEM file of trusted root certificate authority certificates
Mercury.Transmitter
[Mercury.Transmitter]
Protocol = "grpc" # Default
TransmitQueueMaxSize = 250_000 # Default
TransmitTimeout = "5s" # Default
TransmitConcurrency = 100 # Default
ReaperFrequency = "1h" # Default
ReaperMaxAge = "48h" # DefaultMercury.Transmitter controls settings for the mercury transmitter
Protocol
Protocol = "grpc" # DefaultProtocol is the protocol to use for the transmitter.
Options are either:
- "wsrpc" for the legacy websocket protocol
- "grpc" for the gRPC protocol
TransmitQueueMaxSize
TransmitQueueMaxSize = 250_000 # DefaultTransmitQueueMaxSize controls the size of the transmit queue. This is scoped
per OCR instance. If the queue is full, the transmitter will start dropping
the oldest messages in order to make space.
This is useful if mercury server goes offline and the nop needs to buffer
transmissions.
TransmitTimeout
TransmitTimeout = "5s" # DefaultTransmitTimeout controls how long the transmitter will wait for a response
when sending a message to the mercury server, before aborting and considering
the transmission to be failed.
TransmitConcurrency
TransmitConcurrency = 100 # DefaultTransmitConcurrency is the max number of concurrent transmits to each server.
Only has effect with LLO jobs.
ReaperFrequency
ReaperFrequency = "1h" # DefaultReaperFrequency controls how often the stale transmission reaper will run.
Setting to 0 disables the reaper.
ReaperMaxAge
ReaperMaxAge = "48h" # DefaultReaperMaxAge controls how old a transmission can be before it is considered
stale. Setting to 0 disables the reaper.
Telemetry
[Telemetry]
Enabled = false # Default
Endpoint = 'example.com/collector' # Example
CACertFile = 'cert-file' # Example
InsecureConnection = false # Default
TraceSampleRatio = 0.01 # Default
EmitterBatchProcessor = true # Default
EmitterExportTimeout = '1s' # Default
AuthHeadersTTL = '0s' # Default
ChipIngressEndpoint = '' # Default
ChipIngressInsecureConnection = false # Default
ChipIngressBatchEmitterEnabled = true # Default
ChipIngressBufferSize = 10000 # Default
ChipIngressMaxBatchSize = 1000 # Default
ChipIngressMaxConcurrentSends = 10 # Default
ChipIngressSendInterval = '500ms' # Default
ChipIngressSendTimeout = '10s' # Default
ChipIngressDrainTimeout = '30s' # Default
ChipIngressMaxGRPCRequestSize = 10485760 # Default
DurableEmitterEnabled = true # Default
DurableEmitterRetransmitBatchSize = 500 # Default
DurableEmitterEventTTL = '1h0m0s' # Default
DurableEmitterMaxQueuePayloadBytes = 1073741824 # Default
DurableEmitterInsertBatchFlushInterval = '50ms' # Default
HeartbeatInterval = '1s' # Default
LogLevel = "info" # Default
LogStreamingEnabled = false # Default
LogBatchProcessor = true # Default
LogExportTimeout = '1s' # Default
LogExportMaxBatchSize = 512 # Default
LogExportInterval = '1s' # Default
LogMaxQueueSize = 2048 # Default
MetricViewsDenyAttributes = ['event_id'] # Default
MetricCardinalityLimit = 100000 # DefaultTelemetry holds OTEL settings.
This data includes open telemetry metrics, traces, & logs.
It does not currently include prometheus metrics or standard out logs, but may in the future.
Enabled
Enabled = false # DefaultEnabled turns telemetry collection on or off.
Endpoint
Endpoint = 'example.com/collector' # ExampleEndpoint of the OTEL Collector.
CACertFile
CACertFile = 'cert-file' # ExampleCACertFile is the file path of the TLS certificate used for secure communication with the OTEL Collector.
Required unless InescureConnection is true.
InsecureConnection
InsecureConnection = false # DefaultInsecureConnection bypasses the TLS CACertFile requirement and uses an insecure connection instead.
Only available in dev mode.
TraceSampleRatio
TraceSampleRatio = 0.01 # DefaultTraceSampleRatio is the rate at which to sample traces. Must be between 0 and 1.
EmitterBatchProcessor
EmitterBatchProcessor = true # DefaultEmitterBatchProcessor enables batching for telemetry events
EmitterExportTimeout
EmitterExportTimeout = '1s' # DefaultEmitterExportTimeout sets timeout for exporting telemetry events
AuthHeadersTTL
AuthHeadersTTL = '0s' # DefaultAuthHeadersTTL is the time-to-live for rotating authentication headers used with telemetry endpoints.
Set to 0 to use static authentication headers.
ChipIngressEndpoint
ChipIngressEndpoint = '' # DefaultChipIngressEndpoint enables sending custom messages to CHIP Ingress.
ChipIngressInsecureConnection
ChipIngressInsecureConnection = false # DefaultChipIngressInsecureConnection disables TLS when connecting to CHIP Ingress.
ChipIngressBatchEmitterEnabled
ChipIngressBatchEmitterEnabled = true # DefaultChipIngressBatchEmitterEnabled enables batching for chip-ingress events.
When false, events are sent individually (legacy behavior).
ChipIngressBufferSize
ChipIngressBufferSize = 10000 # DefaultChipIngressBufferSize is the in-memory queue size for chip-ingress events.
ChipIngressMaxBatchSize
ChipIngressMaxBatchSize = 1000 # DefaultChipIngressMaxBatchSize is the max events per PublishBatch RPC.
ChipIngressMaxConcurrentSends
ChipIngressMaxConcurrentSends = 10 # DefaultChipIngressMaxConcurrentSends limits parallel PublishBatch calls.
ChipIngressSendInterval
ChipIngressSendInterval = '500ms' # DefaultChipIngressSendInterval is the max wait before flushing an incomplete batch.
ChipIngressSendTimeout
ChipIngressSendTimeout = '10s' # DefaultChipIngressSendTimeout is the per-RPC timeout for PublishBatch.
ChipIngressDrainTimeout
ChipIngressDrainTimeout = '30s' # DefaultChipIngressDrainTimeout is the max shutdown wait to flush queued events.
ChipIngressMaxGRPCRequestSize
ChipIngressMaxGRPCRequestSize = 10485760 # DefaultChipIngressMaxGRPCRequestSize is the max serialized PublishBatch request size in bytes. Batches exceeding this are split before send (min 1 MiB enforced by batch client).
DurableEmitterEnabled
DurableEmitterEnabled = true # DefaultDurableEmitterEnabled enables persisting outbound CHIP events to Postgres for at-least-once delivery.
DurableEmitterRetransmitBatchSize
DurableEmitterRetransmitBatchSize = 500 # DefaultDurableEmitterRetransmitBatchSize is the number of pending events the durable emitter replays per retransmit tick.
DurableEmitterEventTTL
DurableEmitterEventTTL = '1h0m0s' # DefaultDurableEmitterEventTTL is how long an undelivered event is retained before the durable emitter expires it (older events are dropped).
DurableEmitterMaxQueuePayloadBytes
DurableEmitterMaxQueuePayloadBytes = 1073741824 # DefaultDurableEmitterMaxQueuePayloadBytes is the byte ceiling used as the denominator for the durable emitter's
queue capacity_usage_ratio metric. Defaults to 1 GiB.
DurableEmitterInsertBatchFlushInterval
DurableEmitterInsertBatchFlushInterval = '50ms' # DefaultDurableEmitterInsertBatchFlushInterval is the linger time the durable emitter waits to coalesce concurrent
emits into a single multi-row INSERT. Lower values reduce per-emit latency at the cost of smaller batches.
HeartbeatInterval
HeartbeatInterval = '1s' # DefaultHeartbeatInterval is the interval at which a the application heartbeat is sent to telemetry backends.
LogLevel
LogLevel = "info" # DefaultLogLevel sets the log level for telemetry streaming (debug, info, warn, error, crit, panic, fatal)
LogStreamingEnabled
LogStreamingEnabled = false # DefaultLogStreamingEnabled enables log streaming to the OTel log exporter
LogBatchProcessor
LogBatchProcessor = true # DefaultLogBatchProcessor enables batching for telemetry logs
LogExportTimeout
LogExportTimeout = '1s' # DefaultLogExportTimeout sets timeout for exporting telemetry logs
LogExportMaxBatchSize
LogExportMaxBatchSize = 512 # DefaultLogExportMaxBatchSize sets the maximum batch size of every batch export
LogExportInterval
LogExportInterval = '1s' # DefaultLogExportInterval sets the maximum duration between batched exports
LogMaxQueueSize
LogMaxQueueSize = 2048 # DefaultLogMaxQueueSize sets the maximum queue size used by the batcher
MetricViewsDenyAttributes
MetricViewsDenyAttributes = ['event_id'] # DefaultMetricViewsDenyAttributes lists attribute keys dropped before export (e.g. event_id).
Empty disables default Beholder metric attribute deny views.
MetricCardinalityLimit
MetricCardinalityLimit = 100000 # DefaultMetricCardinalityLimit sets the OTel SDK per-instrument attribute-set limit (0 disables).
Telemetry.ResourceAttributes
[Telemetry.ResourceAttributes]
foo = "bar" # ExampleResourceAttributes are global metadata to include with all telemetry.
foo
foo = "bar" # Examplefoo is an example resource attribute
Telemetry.PrometheusBridge
[Telemetry.PrometheusBridge]
Enabled = false # Default
Prefixes = ["go_"] # DefaultThe Prometheus bridge automatically forwards metrics through open telemetry.
Enabled
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
Enabled = false # DefaultEnabled enables the Promtheus bridge.
Prefixes
Prefixes = ["go_"] # DefaultPrefixes is a set of filters to restrict which prometheus metrics are forwarded based on prefix matching.
By default, we only forward the go runtime metrics. Empty means forward everything.
Metering
[Metering]
MeterRecordsEnabled = false # Default
MeterSnapshotsEnabled = false # Default
Product = 'cre' # Default
Tenant = '' # Default
NumericTenantID = '' # Default
Environment = '' # Default
Zone = '' # Default
NodeID = '' # DefaultMetering configures durable resource metering emission and the coarse
deployment/node identity dimensions stamped on emitted MeterRecords and
MeterSnapshots.
MeterRecordsEnabled
MeterRecordsEnabled = false # DefaultMeterRecordsEnabled enables durable MeterRecord emission for LOOP plugins.
MeterSnapshotsEnabled
MeterSnapshotsEnabled = false # DefaultMeterSnapshotsEnabled enables durable MeterSnapshot emission for LOOP plugins.
Requires MeterRecordsEnabled = true.
Product
Product = 'cre' # DefaultProduct is the deployment product identity dimension, e.g. 'cre'.
Tenant
Tenant = '' # DefaultTenant is the human-readable tenant name, e.g. 'mainline'.
NumericTenantID
NumericTenantID = '' # DefaultNumericTenantID is the numbered tenant identifier represented as a string.
Environment
Environment = '' # DefaultEnvironment is the deployment environment identity dimension, e.g. 'production'.
Zone
Zone = '' # DefaultZone is the deployment zone identity dimension, e.g. 'wf-zone-a'.
NodeID
NodeID = '' # DefaultNodeID is the node's logical name, e.g. 'clp-cre-wf-zone-a-1' (not the CSA public key).
CRE.Streams
[CRE.Streams]
WsURL = "streams.url" # Example
RestURL = "streams.url" # ExampleWsURL
WsURL = "streams.url" # ExampleWsURL is the websockets url for the streams sdk config
RestURL
RestURL = "streams.url" # ExampleRestURL is the REST url for the streams sdk config
CRE.WorkflowFetcher
[CRE.WorkflowFetcher]
URL = '' # DefaultURL
URL = '' # DefaultURL is override URL for the workflow fetcher service.
CRE.Linking
[CRE.Linking]
URL = "" # Default
TLSEnabled = true # Default
RequestTimeout = '2s' # DefaultURL
URL = "" # DefaultURL is the locator for the Chainlink linking service.
TLSEnabled
TLSEnabled = true # DefaultTLSEnabled enables TLS to be used to secure communication with the linking service. This is enabled by default.
RequestTimeout
RequestTimeout = '2s' # DefaultRequestTimeout bounds each organization lookup against the linking service.
Billing
[Billing]
URL = "localhost:4319" # Default
TLSEnabled = true # DefaultBilling holds settings for connecting to the billing service.
URL
URL = "localhost:4319" # DefaultURL is the locator for the Chainlink billing service.
TLSEnabled
TLSEnabled = true # DefaultTLSEnabled enables TLS to be used to secure communication with the billing service. This is enabled by default.
BridgeStatusReporter
[BridgeStatusReporter]
Enabled = false # Default
StatusPath = "/status" # Default
PollingInterval = "5m" # Default
IgnoreInvalidBridges = true # Default
IgnoreJoblessBridges = false # DefaultBridgeStatusReporter holds settings for the Bridge Status Reporter service.
Enabled
Enabled = false # DefaultEnabled enables the Bridge Status Reporter service that polls bridge status endpoints.
StatusPath
StatusPath = "/status" # DefaultStatusPath is the path to append to bridge URLs for status polling.
PollingInterval
PollingInterval = "5m" # DefaultPollingInterval is how often to poll bridge status endpoints for status.
IgnoreInvalidBridges
IgnoreInvalidBridges = true # DefaultIgnoreInvalidBridges skips bridges that return HTTP errors or invalid responses.
IgnoreJoblessBridges
IgnoreJoblessBridges = false # DefaultIgnoreJoblessBridges skips bridges that have no associated jobs.
JobSpecReporter
[JobSpecReporter]
Enabled = false # Default
PollingInterval = "1h" # Default
EnabledOCR2PluginTypes = ["median"] # DefaultJobSpecReporter holds settings for the Job Spec Reporter service, which periodically emits job spec telemetry.
Enabled
Enabled = false # DefaultEnabled enables the Job Spec Reporter service.
PollingInterval
PollingInterval = "1h" # DefaultPollingInterval is how often to emit a heartbeat event for each tracked job.
EnabledOCR2PluginTypes
EnabledOCR2PluginTypes = ["median"] # DefaultEnabledOCR2PluginTypes restricts OCR2 telemetry to jobs with these plugin types.
An empty list disables all OCR2 telemetry. Use ["all"] to enable all OCR2 plugin types.
CRE
[CRE]
UseLocalTimeProvider = true # Default
EnableDKGRecipient = false # Default
DebugMode = false # DefaultUseLocalTimeProvider
UseLocalTimeProvider = true # DefaultUseLocalTimeProvider should be set true if the DON Time OCR Plugin is not running
EnableDKGRecipient
EnableDKGRecipient = false # DefaultEnableDKGRecipient should be set to true if the DON runs a capability that uses a DKG result package.
DebugMode
DebugMode = false # DefaultDebugMode enables additional tracing and logging for workflow engines.
CRE.ConfidentialRelay
[CRE.ConfidentialRelay]
Enabled = false # Default
TrustEnclaves = false # Default
RequireBFTQuorum = false # DefaultEnabled
Enabled = false # DefaultEnabled controls whether the confidential relay gateway handler should be configured.
TrustEnclaves
TrustEnclaves = false # DefaultTrustEnclaves relaxes TEE attestation validation so the relay trusts fake (non-Nitro) enclaves. intended only for tests.
RequireBFTQuorum
RequireBFTQuorum = false # DefaultRequireBFTQuorum selects the relay's signature quorum.
Sharding
[Sharding]
ShardingEnabled = false # Default
ArbiterPort = 9876 # Default
ArbiterPollInterval = '12s' # Default
ArbiterRetryInterval = '12s' # Default
ShardIndex = 0 # Default
ShardOrchestratorPort = 50051 # Default
ShardOrchestratorAddress = '' # Default
ShardAssignmentMode = 'manual-only' # DefaultSharding holds settings for node sharding configuration.
ShardingEnabled
ShardingEnabled = false # DefaultShardingEnabled enables workflow sharding across multiple nodes.
When false (default), all workflows are processed by this node (backwards compatible mode).
When true, workflows are distributed across shards based on ShardIndex and shard orchestrator mappings.
ArbiterPort
ArbiterPort = 9876 # DefaultArbiterPort is the port the Arbiter gRPC server listens on.
ArbiterPollInterval
ArbiterPollInterval = '12s' # DefaultArbiterPollInterval is how often to poll the ShardConfig contract.
ArbiterRetryInterval
ArbiterRetryInterval = '12s' # DefaultArbiterRetryInterval is the retry interval when contract reader is unavailable.
ShardIndex
ShardIndex = 0 # DefaultShardIndex is the index of this shard (0-based). If 0, no shard orchestration client is created.
If greater than 0, a shard orchestration client is created and connects to ShardOrchestratorAddress.
ShardOrchestratorPort
ShardOrchestratorPort = 50051 # DefaultShardOrchestratorPort is the port for the shard orchestrator gRPC server.
When a ring OCR job is created, the shard orchestrator server is spun up on this port.
ShardOrchestratorAddress
ShardOrchestratorAddress = '' # DefaultShardOrchestratorAddress is the URL that the shard orchestration client will try to connect to.
Required when ShardingEnabled=true and ShardIndex > 0.
ShardAssignmentMode
ShardAssignmentMode = 'manual-only' # DefaultShardAssignmentMode controls how workflows are assigned to shards.
One of: "manual-only" (default), "ringocr-only", "ringocr-with-overrides".
LOOPP
[LOOPP]
GRPCServerMaxRecvMsgSize = '32mb' # DefaultLocal Out-Of-Process Plugins
GRPCServerMaxRecvMsgSize
GRPCServerMaxRecvMsgSize = '32mb' # DefaultGRPCServerMaxRecvMsgSize is the maximum received message size configured for grpc servers.
We use a higher limit than the grpc default of 4mb.
EVM
EVM defaults depend on ChainID:
<details><summary>Ethereum Mainnet (1)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Optimism Mainnet (10)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>BSC Mainnet (56)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>OKX Testnet (65)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>OKX Mainnet (66)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Astar Shibuya (81)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>BSC Testnet (97)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Gnosis Mainnet (100)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Shibarium Mainnet (109)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Hashkey Testnet (133)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Polygon Mainnet (137)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Sonic Mainnet (146)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Shibarium Testnet (157)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Hashkey Mainnet (177)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>XLayer Sepolia (195)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>XLayer Mainnet (196)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Bsquared Mainnet (223)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Mind Mainnet (228)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Lens Mainnet (232)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Fantom Mainnet (250)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Fraxtal Mainnet (252)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Kroma Mainnet (255)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Hedera Mainnet (295)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Hedera Testnet (296)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>ZKsync Sepolia (300)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>ZKsync Mainnet (324)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Worldchain Mainnet (480)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Astar Mainnet (592)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Mode Sepolia (919)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Klaytn Testnet (1001)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Metis Mainnet (1088)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Polygon Zkevm Mainnet (1101)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>WeMix Mainnet (1111)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>WeMix Testnet (1112)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Core Testnet (1114)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Core Mainnet (1116)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Bsquared Testnet (1123)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Unichain Testnet (1301)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Simulated (1337)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Pharos Mainnet (1672)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Soneium Mainnet (1868)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Soneium Sepolia (1946)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Ronin Mainnet (2020)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Ronin Saigon (2021)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Private Testnet Andesite (2024)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Kroma Sepolia (2358)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Fraxtal Testnet (2522)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Botanix Testnet (3636)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Botanix Mainnet (3637)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Fantom Testnet (4002)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Merlin Mainnet (4200)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Worldchain Testnet (4801)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Mantle Mainnet (5000)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Mantle Sepolia (5003)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Klaytn Mainnet (8217)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Base Mainnet (8453)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Monad Testnet (10143)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Gnosis Chiado (10200)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>L3X Mainnet (12324)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>L3X Sepolia (12325)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Mode Mainnet (34443)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Lens Sepolia (37111)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Arbitrum Mainnet (42161)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Celo Mainnet (42220)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Hemi Mainnet (43111)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Avalanche Fuji (43113)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Avalanche Mainnet (43114)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Celo Testnet (44787)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Zircuit Sepolia (48899)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Zircuit Mainnet (48900)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Sonic Testnet (57054)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Ink Mainnet (57073)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Linea Sepolia (59141)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Linea Mainnet (59144)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Metis Sepolia (59902)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>BOB Mainnet (60808)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Treasure Mainnet (61166)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Polygon Amoy (80002)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Berachain Testnet (80084)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Berachain Mainnet (80094)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Blast Mainnet (81457)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Base Sepolia (84532)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Plume Mainnet (98866)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Plume Sepolia (98867)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Katana Testnet (129399)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Taiko Mainnet (167000)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Taiko Testnet (167009)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Mind Testnet (192940)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Bitlayer Testnet (200810)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Bitlayer Mainnet (200901)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Arbitrum Sepolia (421614)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Scroll Sepolia (534351)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Scroll Mainnet (534352)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Merlin Testnet (686868)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Hemi Testnet (743111)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Katana Mainnet (747474)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Ink Testnet (763373)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>BOB Testnet (808813)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Treasure Testnet (978658)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Ethereum Sepolia (11155111)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Optimism Sepolia (11155420)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Corn Mainnet (21000000)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Corn Testnet (21000001)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Blast Sepolia (168587773)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Harmony Mainnet (1666600000)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
<details><summary>Harmony Testnet (1666700000)</summary><p>
/ Detailed source-code truncated for AI context efficiency. /</p></details>
ChainID
ChainID = '1' # ExampleChainID is the EVM chain ID. Mandatory.
Enabled
Enabled = true # DefaultEnabled enables this chain.
AutoCreateKey
AutoCreateKey = true # DefaultAutoCreateKey, if set to true, will ensure that there is always at least one transmit key for the given chain.
BlockBackfillDepth
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
BlockBackfillDepth = 10 # DefaultBlockBackfillDepth specifies the number of blocks before the current HEAD that the log broadcaster will try to re-consume logs from.
BlockBackfillSkip
BlockBackfillSkip = false # DefaultBlockBackfillSkip enables skipping of very long backfills.
ChainType
ChainType = 'arbitrum' # ExampleChainType is automatically detected from chain ID. Set this to force a certain chain type regardless of chain ID.
Available types:
arbitrum, celo, gnosis, hedera, kroma, metis, optimismBedrock, scroll, wemix, xlayer, zksyncSafeDepth
SafeDepth = 0 # DefaultSafeDepth is the number of blocks after which an ethereum transaction is considered "safe."
Note that this setting is only used for chains with FinalityTags = false
This number represents a number of blocks we consider large enough that reorgs are generally not likely to happen.
Note that this number is different from FinalityDepth, which is the number of blocks after which a transaction is considered final.
It is used in cases where we don't want to wait for finality.
Special cases:SafeDepth=0 would imply that its value will fall back to the FinalityDepth value, if FinalityTagEnabled is false.
Examples:
Transaction sending:
A transaction is sent at block height 42
SafeDepth is set to 5, FinalityTagEnabled = false, and FinalityDepth = 10
At block height 47, the transaction is considered safe, but not final.
At block height 52, the transaction is considered final.
FinalityDepth
FinalityDepth = 50 # DefaultFinalityDepth is the number of blocks after which an ethereum transaction is considered "final". Note that the default is automatically set based on chain ID, so it should not be necessary to change this under normal operation.
BlocksConsideredFinal determines how deeply we look back to ensure that transactions are confirmed onto the longest chain
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 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 behaviour 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.
Special cases:FinalityDepth=0 would imply that transactions can be final even before they were mined into a block. This is not supported.FinalityDepth=1 implies that transactions are final after we see them in one block.
Examples:
Transaction sending:
A transaction is sent at block height 42
FinalityDepth is set to 5
A re-org occurs at height 44 starting at block 41, transaction is marked for rebroadcast
A re-org occurs at height 46 starting at block 41, transaction is marked for rebroadcast
A re-org occurs at height 47 starting at block 41, transaction is NOT marked for rebroadcast
FinalityTagEnabled
FinalityTagEnabled = false # DefaultFinalityTagEnabled means that the chain supports the finalized block tag when querying for a block. If FinalityTagEnabled is set to true for a chain, then FinalityDepth field is ignored.
Finality for a block is solely defined by the finality related tags provided by the chain's RPC API. This is a placeholder and hasn't been implemented yet.
SafeTagSupported
SafeTagSupported = true # DefaultSafeTagSupported means that the chain supports the safe block tag when querying for a block.
When FinalityTagEnabled is true and SafeTagSupported is false, LatestSafeBlock will return the finalized block instead of safe block.
When SafeTagSupported is true, LatestSafeBlock will return the safe block from the chain.
When FinalityTagEnabled is false, SafeTagSupported is ignored and LatestSafeBlock uses SafeDepth.
FlagsContractAddress
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
FlagsContractAddress = '0xae4E781a6218A8031764928E88d457937A954fC3' # ExampleFlagsContractAddress can optionally point to a Flags contract. 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
LinkContractAddress = '0x538aAaB4ea120b2bC2fe5D296852D948F07D849e' # ExampleLinkContractAddress is the canonical ERC-677 LINK token contract address on the given chain. Note that this is usually autodetected from chain ID.
LogBackfillBatchSize
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
LogBackfillBatchSize = 1000 # DefaultLogBackfillBatchSize sets the batch size for calling FilterLogs when we backfill missing logs.
LogPollInterval
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
LogPollInterval = '15s' # DefaultLogPollInterval works in conjunction with Feature.LogPoller. Controls how frequently the log poller polls for logs. Defaults to the block production rate.
LogKeepBlocksDepth
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
LogKeepBlocksDepth = 100000 # DefaultLogKeepBlocksDepth works in conjunction with Feature.LogPoller. Controls how many blocks the poller will keep, must be greater than FinalityDepth+1.
LogPollerSkipEmptyBlocks
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
LogPollerSkipEmptyBlocks = false # DefaultLogPollerSkipEmptyBlocks defines if LogPoller should persist or skip blocks that do not contain logs matching any of registered filters. Setting this to true can reduce the load on the database and improve performance for fast chains.
LogPrunePageSize
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
LogPrunePageSize = 0 # DefaultLogPrunePageSize defines size of the page for pruning logs. Controls how many logs/blocks (at most) are deleted in a single prune tick. Default value 0 means no paging, delete everything at once.
BackupLogPollerBlockDelay
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
BackupLogPollerBlockDelay = 100 # DefaultBackupLogPollerBlockDelay works in conjunction with Feature.LogPoller. Controls the block delay of Backup LogPoller, affecting how far behind the latest finalized block it starts and how often it runs.
BackupLogPollerDelay=0 will disable Backup LogPoller (_not recommended for production environment_).
MinContractPayment
MinContractPayment = '10000000000000 juels' # DefaultMinContractPayment is the minimum payment in LINK required to execute a direct request job. This can be overridden on a per-job basis.
MinIncomingConfirmations
MinIncomingConfirmations = 3 # DefaultMinIncomingConfirmations is the minimum required confirmations before a log event will be consumed.
NonceAutoSync
NonceAutoSync = true # DefaultNonceAutoSync enables automatic nonce syncing on startup. 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.
NoNewHeadsThreshold
NoNewHeadsThreshold = '3m' # DefaultNoNewHeadsThreshold controls how long to wait after receiving no new heads before
NodePool marks rpc endpoints asout-of-sync, and
HeadTracker logs warnings.Set to zero to disable out-of-sync checking.
OperatorFactoryAddress
OperatorFactoryAddress = '0xa5B85635Be42F21f94F28034B7DA440EeFF0F418' # ExampleOperatorFactoryAddress is the address of the canonical operator forwarder contract on the given chain. Note that this is usually autodetected from chain ID.
RPCDefaultBatchSize
RPCDefaultBatchSize = 250 # DefaultRPCDefaultBatchSize is the default batch size for batched RPC calls.
RPCBlockQueryDelay
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
RPCBlockQueryDelay = 1 # DefaultRPCBlockQueryDelay controls the number of blocks to trail behind head in the block history estimator and balance monitor.
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.
FinalizedBlockOffset
FinalizedBlockOffset = 0 # DefaultFinalizedBlockOffset defines the number of blocks by which the latest finalized block will be shifted/delayed.
For example, suppose RPC returns block 100 as the latest finalized. In that case, the CL Node will treat block
100 - FinalizedBlockOffset as the latest finalized block and latest - FinalityDepth - FinalizedBlockOffset in case of FinalityTagEnabled = false.With
EnforceRepeatableRead = true, RPC is considered healthy only if its most recent finalized block is larger or equal to the highest finalized block observed by the CL Node minus FinalizedBlockOffset.Higher values of
FinalizedBlockOffset with EnforceRepeatableRead = true reduce the number of false FinalizedBlockOutOfSync declarations on healthy RPCs that are slightly lagging behind due to network delays.This may increase the number of healthy RPCs and reduce the probability that the CL Node will not have any healthy alternatives to the active RPC.
CAUTION: Setting this to values higher than 0 may delay transaction creation in products (e.g., CCIP, Automation) that base their decision on finalized on-chain events.
PoS chains with
FinalityTagEnabled=true and batched (epochs) blocks finalization (e.g., Ethereum Mainnet) must be treated with special care as a minor increase in the FinalizedBlockOffset may lead to significant delays.For example, let's say that
FinalizedBlockOffset = 1 and blocks are finalized in batches of 32.The latest finalized block on chain is 64, so block 63 is the latest finalized for CL Node.
Block 64 will be treated as finalized by CL Node only when chain's latest finalized block is 65. As chain finalizes blocks in batches of 32,
CL Node has to wait for a whole new batch to be finalized to treat block 64 as finalized.
LogBroadcasterEnabled
LogBroadcasterEnabled = true # DefaultLogBroadcasterEnabled is a feature flag for LogBroadcaster, by default it's true.
NoNewFinalizedHeadsThreshold
NoNewFinalizedHeadsThreshold = '0' # DefaultNoNewFinalizedHeadsThreshold controls how long to wait for new finalized block before
NodePool marks rpc endpoints asout-of-sync. Only applicable if
FinalityTagEnabled=trueSet to zero to disable.
EVM.Transactions
[EVM.Transactions]
ConfirmationTimeout = '60s' # Default
Enabled = true # Default
ForwardersEnabled = false # Default
MaxInFlight = 16 # Default
MaxQueued = 250 # Default
ReaperInterval = '1h' # Default
ReaperThreshold = '168h' # Default
ResendAfterThreshold = '1m' # DefaultConfirmationTimeout
ConfirmationTimeout = '60s' # DefaultConfirmationTimeout time to wait for a TX to get into a block in the blockchain. This is used for the EVMService.SubmitTransaction operation.
Enabled
Enabled = true # DefaultEnabled is a feature flag for the Transaction Manager. This flag also enables or disables the gas estimator since it is dependent on the TXM to start it.
ForwardersEnabled
ForwardersEnabled = false # DefaultForwardersEnabled enables or disables sending transactions through forwarder contracts.
MaxInFlight
MaxInFlight = 16 # DefaultMaxInFlight 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 both geth and parity 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.
MaxQueued
MaxQueued = 250 # DefaultMaxQueued is 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.
ReaperInterval
ReaperInterval = '1h' # DefaultReaperInterval controls how often the EthTx reaper will run.
ReaperThreshold
ReaperThreshold = '168h' # DefaultReaperThreshold indicates how old an EthTx ought to be before it can be reaped.
ResendAfterThreshold
ResendAfterThreshold = '1m' # DefaultResendAfterThreshold controls how long to wait before re-broadcasting a transaction that has not yet been confirmed.
EVM.Transactions.AutoPurge
[EVM.Transactions.AutoPurge]
Enabled = false # Default
DetectionApiUrl = 'https://example.api.io' # Example
Threshold = 5 # Example
MinAttempts = 3 # ExampleEnabled
Enabled = false # DefaultEnabled enables or disables automatically purging transactions that have been idenitified as terminally stuck (will never be included on-chain). This feature is only expected to be used by ZK chains.
DetectionApiUrl
DetectionApiUrl = 'https://example.api.io' # ExampleDetectionApiUrl configures the base url of a custom endpoint used to identify terminally stuck transactions.
Threshold
Threshold = 5 # ExampleThreshold configures the number of blocks a transaction has to remain unconfirmed before it is evaluated for being terminally stuck. This threshold is only applied if there is no custom API to identify stuck transactions provided by the chain.
MinAttempts
MinAttempts = 3 # ExampleMinAttempts configures the minimum number of broadcasted attempts a transaction has to have before it is evaluated further for being terminally stuck. This threshold is only applied if there is no custom API to identify stuck transactions provided by the chain. Ensure the gas estimator configs take more bump attempts before reaching the configured max gas price.
EVM.Transactions.TransactionManagerV2
[EVM.Transactions.TransactionManagerV2]
Enabled = false # Default
BlockTime = '10s' # Example
CustomURL = 'https://example.api.io' # Example
CustomURLs = ['https://relay.example/api', 'https://ofa-secondary.example/api'] # Example
DualBroadcast = false # Example
ReadRequestsToMultipleNodes = false # Example
Bundles = false # Example
FastlaneAuctionRequestTimeout = '5s' # Example
FeeBoost = false # DefaultEnabled
Enabled = false # DefaultEnabled enables TransactionManagerV2.
BlockTime
BlockTime = '10s' # ExampleBlockTime controls the frequency of the backfill loop of TransactionManagerV2.
CustomURL
CustomURL = 'https://example.api.io' # ExampleCustomURL configures the base url of a custom endpoint used by the dual broadcast functionality (legacy single endpoint). Deprecated: use CustomURLs instead. Cannot be used together with CustomURLs in the same configuration.
CustomURLs
CustomURLs = ['https://relay.example/api', 'https://ofa-secondary.example/api'] # ExampleCustomURLs configures an ordered list of Order Flow Auction (OFA) endpoint URLs: the first entry is primary (determines broadcast outcome); additional entries are multiplexed as secondaries (fire-and-forget). Cannot be used together with CustomURL in the same configuration.
DualBroadcast
DualBroadcast = false # ExampleDualBroadcast enables DualBroadcast functionality.
ReadRequestsToMultipleNodes
ReadRequestsToMultipleNodes = false # ExampleReadRequestsToMultipleNodes controls whether txm chain client reads use multiplexed calls.
Bundles
Bundles = false # ExampleBundles enables Bundles functionality for SVR.
FastlaneAuctionRequestTimeout
FastlaneAuctionRequestTimeout = '5s' # ExampleFastlaneAuctionRequestTimeout configures the timeout for fastlane auction requests.
FeeBoost
FeeBoost = false # DefaultFeeBoost enables node to immediately boost txs to the max gas price configured
EVM.BalanceMonitor
[EVM.BalanceMonitor]
Enabled = true # DefaultEnabled
Enabled = true # DefaultEnabled balance monitoring for all keys.
EVM.GasEstimator
[EVM.GasEstimator]
Mode = 'BlockHistory' # Default
PriceDefault = '20 gwei' # Default
PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' # Default
PriceMin = '1 gwei' # Default
LimitDefault = 500_000 # Default
LimitMax = 500_000 # Default
LimitMultiplier = '1.0' # Default
LimitTransfer = 21_000 # Default
EstimateLimit = false # Default
SenderAddress = '0x00c11c11c11C11c11C11c11c11C11C11c11C11c1' # Example
BumpMin = '5 gwei' # Default
BumpPercent = 20 # Default
BumpThreshold = 3 # Default
BumpTxDepth = 16 # Example
EIP1559DynamicFees = false # Default
FeeCapDefault = '100 gwei' # Default
TipCapDefault = '1 wei' # Default
TipCapMin = '1 wei' # DefaultMode
Mode = 'BlockHistory' # DefaultMode 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 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.
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.
PriceDefault
PriceDefault = '20 gwei' # DefaultPriceDefault is 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.(Only applies to legacy transactions)
Can be used with the chainlink setgasprice to be updated while the node is still running.
PriceMax
PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether' # DefaultPriceMax is the maximum gas price. Chainlink nodes will never pay more than this for a transaction.
This applies to both legacy and EIP1559 transactions.
Note that it is impossible to disable the maximum limit. Setting this value to zero will prevent paying anything for any transaction (which can be useful in some rare cases).
Most chains by default have the maximum set to 2256-1 Wei which is the maximum allowed gas price on EVM-compatible chains, and is so large it may as well be unlimited.
PriceMin
PriceMin = '1 gwei' # DefaultPriceMin is the minimum gas price. Chainlink nodes will never pay less than this for a transaction.
(Only applies to legacy transactions)
It is possible to force the Chainlink node to use a fixed gas price by setting a combination of these, e.g.
EIP1559DynamicFees = false
PriceMax = 100
PriceMin = 100
PriceDefault = 100
BumpThreshold = 0
Mode = 'FixedPrice'LimitDefault
LimitDefault = 500_000 # DefaultLimitDefault sets 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.
LimitMax
LimitMax = 500_000 # DefaultLimitMax sets a maximum for _estimated_ gas limits. This currently only applies to
Arbitrum GasEstimatorMode.LimitMultiplier
LimitMultiplier = '1.0' # DefaultLimitMultiplier is the 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 L2 transactions which uses a default gas limit of 1 and is also applied to LimitDefault.
LimitTransfer
LimitTransfer = 21_000 # DefaultLimitTransfer is the gas limit used for an ordinary ETH transfer.
EstimateLimit
EstimateLimit = false # DefaultEstimateLimit enables estimating gas limits for transactions. This feature respects the gas limit provided during transaction creation as an upper bound.
SenderAddress
SenderAddress = '0x00c11c11c11C11c11C11c11c11C11C11c11C11c1' # ExampleSenderAddress is optional and can be set to a specific sender address for gas limit estimation (i.e.
EstimateLimit = true). If gas limit estimation is not enabled, this parameter is ignored.If you are using gas limit estimation:
- Setting SenderAddress is optional for most products. If it is set, the from address for the transaction for gas estimation will be set to the inputted SenderAddress. If it is not set, the actual address the transaction is sent from is used if available.
- Setting SenderAddress is neccessary for gas limit estimation to function correctly for CCIP. Gas limit estimation works only in CCIP 1.6 and above if SenderAddress is set to the given example value (0x00c11c11c11C11c11C11c11c11C11C11c11C11c1). This value is hardcoded in the CCIP 1.6 contracts and is not needed for other products.
BumpMin
BumpMin = '5 gwei' # DefaultBumpMin is the minimum fixed amount of wei by which gas is bumped on each transaction attempt.
BumpPercent
BumpPercent = 20 # DefaultBumpPercent is the percentage by which to bump gas on a transaction that has exceeded
BumpThreshold. The larger of BumpPercent and BumpMin is taken for gas bumps.The SuggestedPriceEstimator adds the larger of BumpPercent and BumpMin on top of the price provided by the RPC when bumping a transaction's gas.
BumpThreshold
BumpThreshold = 3 # DefaultBumpThreshold is the number of blocks to wait for a transaction stuck in the mempool before automatically bumping the gas price. Set to 0 to disable gas bumping completely.
BumpTxDepth
BumpTxDepth = 16 # ExampleBumpTxDepth is the number of transactions to gas bump starting from oldest. Set to 0 for no limit (i.e. bump all). Can not be greater than EVM.Transactions.MaxInFlight. If not set, defaults to EVM.Transactions.MaxInFlight.
EIP1559DynamicFees
EIP1559DynamicFees = false # DefaultEIP1559DynamicFees torces EIP-1559 transaction mode. 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 EVM.GasEstimator.BlockHistory.BatchSize 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.
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.
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=PriceMax and tipcap=GasTipCapDefault
- With gas bumping enabled, it will submit all transactions initially with feecap=GasFeeCapDefault and tipcap=GasTipCapDefault.
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>
Bumping works as follows:
- Increase tipcap by max(tipcap * (1 + BumpPercent), tipcap + BumpMin)
- Increase feecap by max(feecap * (1 + BumpPercent), feecap + BumpMin)
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 GasTipCapDefault instead of GasPriceDefault for the tip cap
- FixedPriceEstimator will use GasFeeCapDefault instaed of GasPriceDefault for the fee cap
- PriceMin is ignored for new transactions and GasTipCapMinimum is used instead (default 0)
- PriceMax still represents that absolute upper limit that Chainlink will ever spend (total) on a single tx
- Keeper.GasTipCapBufferPercent is ignored in EIP-1559 mode and Keeper.GasTipCapBufferPercent is used instead
FeeCapDefault
FeeCapDefault = '100 gwei' # DefaultFeeCapDefault controls the fixed initial fee cap, if EIP1559 mode is enabled and
FixedPrice gas estimator is used.TipCapDefault
TipCapDefault = '1 wei' # DefaultTipCapDefault is 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.(Only applies to EIP-1559 transactions)
TipCapMin
TipCapMin = '1 wei' # DefaultTipCapMinimum is the minimum gas tip to use when submitting transactions to the blockchain.
(Only applies to EIP-1559 transactions)
EVM.GasEstimator.DAOracle
[EVM.GasEstimator.DAOracle]
OracleType = 'opstack' # Example
OracleAddress = '0x420000000000000000000000000000000000000F' # Example
CustomGasPriceCalldata = '' # DefaultOracleType
OracleType = 'opstack' # ExampleOracleType refers to the oracle family this config belongs to. Currently the available oracle types are: 'opstack', 'arbitrum', 'zksync', and 'custom_calldata'.
OracleAddress
OracleAddress = '0x420000000000000000000000000000000000000F' # ExampleOracleAddress is the address of the oracle contract.
CustomGasPriceCalldata
CustomGasPriceCalldata = '' # DefaultCustomGasPriceCalldata is optional and can be set to call a custom gas price function at the given OracleAddress.
EVM.GasEstimator.LimitJobType
[EVM.GasEstimator.LimitJobType]
OCR = 100_000 # Example
OCR2 = 100_000 # Example
DR = 100_000 # Example
VRF = 100_000 # Example
FM = 100_000 # Example
Keeper = 100_000 # ExampleOCR
OCR = 100_000 # ExampleOCR overrides LimitDefault for OCR jobs.
OCR2
OCR2 = 100_000 # ExampleOCR2 overrides LimitDefault for OCR2 jobs.
DR
DR = 100_000 # ExampleDR overrides LimitDefault for Direct Request jobs.
VRF
VRF = 100_000 # ExampleVRF overrides LimitDefault for VRF jobs.
FM
FM = 100_000 # ExampleFM overrides LimitDefault for Flux Monitor jobs.
Keeper
Keeper = 100_000 # ExampleKeeper overrides LimitDefault for Keeper jobs.
EVM.GasEstimator.BlockHistory
[EVM.GasEstimator.BlockHistory]
BatchSize = 25 # Default
BlockHistorySize = 8 # Default
CheckInclusionBlocks = 12 # Default
CheckInclusionPercentile = 90 # Default
EIP1559FeeCapBufferBlocks = 13 # Example
TransactionPercentile = 60 # DefaultThese settings allow you to configure how your node calculates gas prices when using the block history estimator.
In most cases, leaving these values at their defaults should give good results.
BatchSize
BatchSize = 25 # DefaultBatchSize sets the maximum number of blocks to fetch in one batch in the block history estimator.
If the
BatchSize variable is set to 0, it defaults to EVM.RPCDefaultBatchSize.BlockHistorySize
BlockHistorySize = 8 # DefaultBlockHistorySize controls the number of past blocks to keep in memory to use as a basis for calculating a percentile gas price.
CheckInclusionBlocks
CheckInclusionBlocks = 12 # DefaultCheckInclusionBlocks is the number of recent blocks to use to detect if there is a transaction propagation/connectivity issue, and to prevent bumping in these cases.
This can help avoid the situation where RPC nodes are not propagating transactions for some non-price-related reason (e.g. go-ethereum bug, networking issue etc) and bumping gas would not help.
Set to zero to disable connectivity checking completely.
CheckInclusionPercentile
CheckInclusionPercentile = 90 # DefaultCheckInclusionPercentile controls the percentile that a transaction must have been higher than for all the blocks in the inclusion check window in order to register as a connectivity issue.
For example, if CheckInclusionBlocks=12 and CheckInclusionPercentile=90 then further bumping will be prevented for any transaction with any attempt that has a higher price than the 90th percentile for the most recent 12 blocks.
EIP1559FeeCapBufferBlocks
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
EIP1559FeeCapBufferBlocks = 13 # ExampleEIP1559FeeCapBufferBlocks 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.
(Only applies to EIP-1559 transactions)
TransactionPercentile
TransactionPercentile = 60 # DefaultTransactionPercentile specifies 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 GasPriceDefault then the higher price will be used as the base price for new transactions.Must be in range 0-100.
Only has an effect if gas updater is enabled.
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.GasEstimator.FeeHistory
[EVM.GasEstimator.FeeHistory]
CacheTimeout = '10s' # DefaultCacheTimeout
CacheTimeout = '10s' # DefaultCacheTimeout is the time to wait in order to refresh the cached values stored in the FeeHistory estimator. A small jitter is applied so the timeout won't be exactly the same each time.
You want this value to be close to the block time. For slower chains, like Ethereum, you can set it to 12s, the same as the block time. For faster chains you can skip a block or two
and set it to two times the block time i.e. on Optimism you can set it to 4s. Ideally, you don't want to go lower than 1s since the RTT times of the RPC requests will be comparable to
the timeout. The estimator is already adding a buffer to account for a potential increase in prices within one or two blocks. On the other hand, slower frequency will fail to refresh
the prices and end up in stale values.
EVM.HeadTracker
[EVM.HeadTracker]
HistoryDepth = 100 # Default
MaxBufferSize = 3 # Default
SamplingInterval = '1s' # Default
FinalityTagBypass = false # Default
MaxAllowedFinalityDepth = 10000 # Default
PersistenceEnabled = true # Default
PersistenceBatchSize = 100 # DefaultThe head tracker continually listens for new heads from the chain.
In addition to these settings, it log warnings if EVM.NoNewHeadsThreshold is exceeded without any new blocks being emitted.
HistoryDepth
HistoryDepth = 100 # DefaultHistoryDepth tracks the top N blocks on top of the latest finalized block to keep in the
heads database table.Note that this can easily result in MORE than
N + finality depth records since in the case of re-orgs we keep multiple heads for a particular block height.Higher values help reduce number of RPC requests performed by TXM's Finalizer and improve TXM's Confirmer reorg protection on restarts.
At the same time, setting the value too high could lead to higher CPU consumption. The following formula could be used to calculate the optimal value:
expected_downtime_on_restart/block_time.MaxBufferSize
MaxBufferSize = 3 # DefaultMaxBufferSize is the maximum number of heads that may be
buffered in front of the head tracker before older heads start to be
dropped. You may think of it as something like the maximum permittable "lag"
for the head tracker before we start dropping heads to keep up.
SamplingInterval
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
SamplingInterval = '1s' # DefaultSamplingInterval means that head tracker callbacks will at maximum be made once in every window of this duration. This is a performance optimisation for fast chains. Set to 0 to disable sampling entirely.
FinalityTagBypass
FinalityTagBypass = false # DefaultFinalityTagBypass disables FinalityTag support in HeadTracker and makes it track blocks up to FinalityDepth from the most recent head.
It should only be used on chains with an extremely large actual finality depth (the number of blocks between the most recent head and the latest finalized block).
Has no effect if
FinalityTagsEnabled = falseMaxAllowedFinalityDepth
MaxAllowedFinalityDepth = 10000 # DefaultMaxAllowedFinalityDepth - defines maximum number of blocks between the most recent head and the latest finalized block.
If actual finality depth exceeds this number, HeadTracker aborts backfill and returns an error.
Has no effect if
FinalityTagsEnabled = falsePersistenceEnabled
PersistenceEnabled = true # DefaultPersistenceEnabled defines whether HeadTracker needs to store heads in the database.
Persistence is helpful on chains with large finality depth, where fetching blocks from the latest to the latest finalized takes a lot of time.
On chains with fast finality, the persistence layer does not improve the chain's load time and only consumes database resources (mainly IO).
NOTE: persistence should not be disabled for products that use LogBroadcaster, as it might lead to missed on-chain events.
PersistenceBatchSize
PersistenceBatchSize = 100 # DefaultPersistenceBatchSize is used to batch head tracker db transactions (inserts and deletes).
If set to 100, the head tracker will insert and delete to the db every 100 heads.
If the head tracker crashes before the batch size is reached (i.e it fails to write the current batch to the db).
Then it will have to load that batch of heads from the rpc on startup (check PersistenceEnabled above).
To limit that initial fetch while also improving db usage, 100 is the default for now.
EVM.KeySpecific
[[EVM.KeySpecific]]
Key = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # Example
GasEstimator.PriceMax = '79 gwei' # ExampleKey
Key = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # ExampleKey is the account to apply these settings to
PriceMax
GasEstimator.PriceMax = '79 gwei' # ExampleGasEstimator.PriceMax overrides the maximum gas price for this key. See EVM.GasEstimator.PriceMax.
EVM.NodePool
[EVM.NodePool]
PollFailureThreshold = 5 # Default
PollSuccessThreshold = 0 # Default
PollInterval = '10s' # Default
SelectionMode = 'HighestHead' # Default
SyncThreshold = 5 # Default
LeaseDuration = '0s' # Default
NodeIsSyncingEnabled = false # Default
FinalizedBlockPollInterval = '5s' # Default
HistoricalBalanceCheckAddress = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # Example
FinalizedStateCheckFailureThreshold = 0 # Default
EnforceRepeatableRead = true # Default
DeathDeclarationDelay = '1m' # Default
NewHeadsPollInterval = '0s' # Default
VerifyChainID = true # Default
ExternalRequestMaxResponseSize = 1000000 # DefaultThe node pool manages multiple RPC endpoints.
In addition to these settings, EVM.NoNewHeadsThreshold controls how long to wait after receiving no new heads before marking the node as out-of-sync.
PollFailureThreshold
PollFailureThreshold = 5 # DefaultPollFailureThreshold indicates how many polls must fail beyond those that succeed in order to mark a node as unreachable.
Set to zero to disable poll checking.
PollSuccessThreshold
PollSuccessThreshold = 0 # DefaultPollSuccessThreshold indicates how many consecutive polls must succeed in order to mark a node as alive once it has been marked as unreachable.
Set to zero to require no successful polls (previous behavior).
PollInterval
PollInterval = '10s' # DefaultPollInterval controls how often to poll the node to check for liveness.
Set to zero to disable poll checking.
SelectionMode
SelectionMode = 'HighestHead' # DefaultSelectionMode controls node selection strategy:
- HighestHead: use the node with the highest head number
- RoundRobin: rotate through nodes, per-request
- PriorityLevel: use the node with the smallest order number
- TotalDifficulty: use the node with the greatest total difficulty
SyncThreshold
SyncThreshold = 5 # DefaultSyncThreshold controls how far a node may lag behind the best node before being marked out-of-sync.
Depending on
SelectionMode, this represents a difference in the number of blocks (HighestHead, RoundRobin, PriorityLevel), or total difficulty (TotalDifficulty).Set to 0 to disable this check.
LeaseDuration
LeaseDuration = '0s' # DefaultLeaseDuration is the minimum duration that the selected "best" node (as defined by SelectionMode) will be used,
before switching to a better one if available. It also controls how often the lease check is done.
Setting this to a low value (under 1m) might cause RPC to switch too aggressively.
Recommended value is over 5m
Set to '0s' to disable
NodeIsSyncingEnabled
NodeIsSyncingEnabled = false # DefaultNodeIsSyncingEnabled is a flag that enables
syncing health check on each reconnection to an RPC.Node transitions and remains in
Syncing state while RPC signals this state (In case of Ethereum eth_syncing returns anything other than false).All of the requests to node in state
Syncing are rejected.Set true to enable this check
FinalizedBlockPollInterval
FinalizedBlockPollInterval = '5s' # DefaultFinalizedBlockPollInterval controls how often to poll RPC for new finalized blocks.
The finalized block is only used to report to the
pool_rpc_node_highest_finalized_block metric. We plan to use itin RPCs health assessment in the future.
If
FinalityTagEnabled = false, poll is not performed and pool_rpc_node_highest_finalized_block isreported based on latest block and finality depth.
Set to 0 to disable.
HistoricalBalanceCheckAddress
HistoricalBalanceCheckAddress = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # ExampleHistoricalBalanceCheckAddress is the probe account for the finalized-state availability check.
The check executes
eth_getBalance for this address at the latest finalized block.If omitted, defaults to the zero address (
0x0000000000000000000000000000000000000000).Finalized block selection follows chain finality settings:
-
FinalityTagEnabled = true: use finalized tag-
FinalityTagEnabled = false: use latest - FinalityDepthThe check is only active when
FinalizedStateCheckFailureThreshold > 0.FinalizedStateCheckFailureThreshold
FinalizedStateCheckFailureThreshold = 0 # DefaultFinalizedStateCheckFailureThreshold is the number of consecutive failures of the finalized state availability check
before the node is marked as FinalizedStateNotAvailable.
Set to 0 to disable the check.
EnforceRepeatableRead
EnforceRepeatableRead = true # DefaultEnforceRepeatableRead defines if Core should only use RPCs whose most recently finalized block is greater or equal to
highest finalized block - FinalizedBlockOffset. In other words, exclude RPCs lagging on latest finalizedblock.
Set false to disable
DeathDeclarationDelay
DeathDeclarationDelay = '1m' # DefaultDeathDeclarationDelay defines the minimum duration an RPC must be in unhealthy state before producing an error log message.
Larger values might be helpful to reduce the noisiness of health checks like
EnforceRepeatableRead = true', which might be falsely
trigger declaration of FinalizedBlockOutOfSync due to insignificant network delays in broadcasting of the finalized state among RPCs.
Should be greater than FinalizedBlockPollInterval.
Unhealthy RPC will not be picked to handle a request even if this option is set to a nonzero value.NewHeadsPollInterval
tomlNewHeadsPollInterval = '0s' # Default
NewHeadsPollInterval define an interval for polling new block periodically using http client rather than subscribe to ws feedSet to 0 to disable.
VerifyChainID
tomlVerifyChainID = true # Default
VerifyChainID enforces RPC Client ChainIDs to match configured ChainIDExternalRequestMaxResponseSize
tomlExternalRequestMaxResponseSize = 1000000 # Default
ExternalRequestMaxResponseSize sets the maximum allowed size (in bytes) for responses to external requests.
Responses larger than this value will be rejected to prevent the node from being overloaded.
Only CRE workflow requests are considered external requests.
Only applies for RPCs configured with HTTP urls. There is no limit for WS only RPCs.
Set to 0 to disable the size check and allow responses of any size.EVM.NodePool.Errors
:warning: _ADVANCED_: _Do not change these settings unless you know what you are doing._
toml[EVM.NodePool.Errors]
NonceTooLow = '(: |^)nonce too low' # Example
NonceTooHigh = '(: |^)nonce too high' # Example
ReplacementTransactionUnderpriced = '(: |^)replacement transaction underpriced' # Example
LimitReached = '(: |^)limit reached' # Example
TransactionAlreadyInMempool = '(: |^)transaction already in mempool' # Example
TerminallyUnderpriced = '(: |^)terminally underpriced' # Example
InsufficientEth = '(: |^)insufficeint eth' # Example
TxFeeExceedsCap = '(: |^)tx fee exceeds cap' # Example
L2FeeTooLow = '(: |^)l2 fee too low' # Example
L2FeeTooHigh = '(: |^)l2 fee too high' # Example
L2Full = '(: |^)l2 full' # Example
TransactionAlreadyMined = '(: |^)transaction already mined' # Example
Fatal = '(: |^)fatal' # Example
ServiceUnavailable = '(: |^)service unavailable' # Example
TooManyResults = '(: |^)too many results' # Example
MissingBlocks = '(: |^)missing blocks' # Example
FinalizedStateUnavailable = '(: |^)(missing trie node|state not available|historical state unavailable)' # Default
Errors enable the node to provide custom regex patterns to match against error messages from RPCs.NonceTooLow
tomlNonceTooLow = '(: |^)nonce too low' # Example
NonceTooLow is a regex pattern to match against nonce too low errors.NonceTooHigh
tomlNonceTooHigh = '(: |^)nonce too high' # Example
NonceTooHigh is a regex pattern to match against nonce too high errors.ReplacementTransactionUnderpriced
tomlReplacementTransactionUnderpriced = '(: |^)replacement transaction underpriced' # Example
ReplacementTransactionUnderpriced is a regex pattern to match against replacement transaction underpriced errors.LimitReached
tomlLimitReached = '(: |^)limit reached' # Example
LimitReached is a regex pattern to match against limit reached errors.TransactionAlreadyInMempool
tomlTransactionAlreadyInMempool = '(: |^)transaction already in mempool' # Example
TransactionAlreadyInMempool is a regex pattern to match against transaction already in mempool errors.TerminallyUnderpriced
tomlTerminallyUnderpriced = '(: |^)terminally underpriced' # Example
TerminallyUnderpriced is a regex pattern to match against terminally underpriced errors.InsufficientEth
tomlInsufficientEth = '(: |^)insufficeint eth' # Example
InsufficientEth is a regex pattern to match against insufficient eth errors.TxFeeExceedsCap
tomlTxFeeExceedsCap = '(: |^)tx fee exceeds cap' # Example
TxFeeExceedsCap is a regex pattern to match against tx fee exceeds cap errors.L2FeeTooLow
tomlL2FeeTooLow = '(: |^)l2 fee too low' # Example
L2FeeTooLow is a regex pattern to match against l2 fee too low errors.L2FeeTooHigh
tomlL2FeeTooHigh = '(: |^)l2 fee too high' # Example
L2FeeTooHigh is a regex pattern to match against l2 fee too high errors.L2Full
tomlL2Full = '(: |^)l2 full' # Example
L2Full is a regex pattern to match against l2 full errors.TransactionAlreadyMined
tomlTransactionAlreadyMined = '(: |^)transaction already mined' # Example
TransactionAlreadyMined is a regex pattern to match against transaction already mined errors.Fatal
tomlFatal = '(: |^)fatal' # Example
Fatal is a regex pattern to match against fatal errors.ServiceUnavailable
tomlServiceUnavailable = '(: |^)service unavailable' # Example
ServiceUnavailable is a regex pattern to match against service unavailable errors.TooManyResults
tomlTooManyResults = '(: |^)too many results' # Example
TooManyResults is a regex pattern to match an eth_getLogs error indicating the result set is too large to returnMissingBlocks
tomlMissingBlocks = '(: |^)missing blocks' # Example
MissingBlocks is a regex pattern to match an eth_getLogs error indicating the rpc server is permanently missing some blocks in the requested block rangeFinalizedStateUnavailable
tomlFinalizedStateUnavailable = '(: |^)(missing trie node|state not available|historical state unavailable)' # Default
FinalizedStateUnavailable is a regex pattern to match errors indicating the RPC cannot serve historical state at the finalized block (e.g., pruned/non-archive node)EVM.OCR
toml[EVM.OCR]
ContractConfirmations = 4 # Default
ContractTransmitterTransmitTimeout = '10s' # Default
DatabaseTimeout = '10s' # Default
DeltaCOverride = "168h" # Default
DeltaCJitterOverride = "1h" # Default
ObservationGracePeriod = '1s' # Default
ContractConfirmations
tomlContractConfirmations = 4 # Default
ContractConfirmations sets OCR.ContractConfirmations for this EVM chain.ContractTransmitterTransmitTimeout
tomlContractTransmitterTransmitTimeout = '10s' # Default
ContractTransmitterTransmitTimeout sets OCR.ContractTransmitterTransmitTimeout for this EVM chain.DatabaseTimeout
tomlDatabaseTimeout = '10s' # Default
DatabaseTimeout sets OCR.DatabaseTimeout for this EVM chain.DeltaCOverride
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
tomlDeltaCOverride = "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
:warning: _ADVANCED_: _Do not change this setting unless you know what you are doing._
tomlDeltaCJitterOverride = "1h" # Default
DeltaCJitterOverride is the range for jitter to add to DeltaCOverride.ObservationGracePeriod
tomlObservationGracePeriod = '1s' # Default
ObservationGracePeriod sets OCR.ObservationGracePeriod for this EVM chain.EVM.Nodes
toml[[EVM.Nodes]]
Name = 'foo' # Example
WSURL = 'wss://web.socket/test' # Example
HTTPURL = 'https://foo.web' # Example
HTTPURLExtraWrite = 'https://foo.web/extra' # Example
SendOnly = false # Default
Order = 100 # Default
IsLoadBalancedRPC = false # Default
Name
tomlName = 'foo' # Example
Name is a unique (per-chain) identifier for this node.WSURL
tomlWSURL = 'wss://web.socket/test' # Example
WSURL is the WS(S) endpoint for this node. Required for primary nodes when LogBroadcasterEnabled is trueHTTPURL
tomlHTTPURL = 'https://foo.web' # Example
HTTPURL is the HTTP(S) endpoint for this node. Required for all nodes.HTTPURLExtraWrite
tomlHTTPURLExtraWrite = 'https://foo.web/extra' # Example
HTTPURLExtraWrite is the HTTP(S) endpoint used for chains that require a separate endpoint for writing on-chain.SendOnly
tomlSendOnly = false # Default
SendOnly limits usage to sending transaction broadcasts only. With this enabled, only HTTPURL is required, and WSURL is not used.Order
tomlOrder = 100 # Default
Order of the node in the pool, will takes effect if SelectionMode is PriorityLevel or will be used as a tie-breaker for HighestHead and TotalDifficultyIsLoadBalancedRPC
tomlIsLoadBalancedRPC = false # Default
IsLoadBalancedRPC indicates whether the http/ws url above has multiple rpc's behind it.
If true, we should try reconnecting to the node even when its the only node in the Nodes list.
If false and its the only node in the nodes list, we will mark it alive even when its out of sync, because it might still be able to send txs.EVM.OCR2.Automation
toml[EVM.OCR2.Automation]
GasLimit = 5400000 # Default
GasLimit
tomlGasLimit = 5400000 # Default
GasLimit controls the gas limit for transmit transactions from ocr2automation job.EVM.Workflow
toml[EVM.Workflow]
FromAddress = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # Example
ForwarderAddress = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # Example
GasLimitDefault = 400_000 # Default
TxAcceptanceState = 2 # Default
PollPeriod = '2s' # Default
AcceptanceTimeout = '30s' # Default
FromAddress
tomlFromAddress = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # Example
FromAddress is Address of the transmitter key to use for workflow writes.ForwarderAddress
tomlForwarderAddress = '0x2a3e23c6f242F5345320814aC8a1b4E58707D292' # Example
ForwarderAddress is the keystone forwarder contract address on chain.GasLimitDefault
tomlGasLimitDefault = 400_000 # Default
GasLimitDefault is the default gas limit for workflow transactions.TxAcceptanceState
tomlTxAcceptanceState = 2 # Default
TxAcceptanceState is the default acceptance state for writer DON tranmissions.PollPeriod
tomlPollPeriod = '2s' # Default
PollPeriod is the default poll period for checking transmission stateAcceptanceTimeout
tomlAcceptanceTimeout = '30s' # Default
AcceptanceTimeout is the default timeout for a tranmission to be accepted on chainCosmos
toml[[Cosmos]]
ChainID = 'Malaga-420' # Example
Enabled = true # Default
Bech32Prefix = 'wasm' # Default
BlockRate = '6s' # Default
BlocksUntilTxTimeout = 30 # Default
ConfirmPollPeriod = '1s' # Default
FallbackGasPrice = '0.015' # Default
GasToken = 'ucosm' # Default
GasLimitMultiplier = '1.5' # Default
MaxMsgsPerBatch = 100 # Default
OCR2CachePollPeriod = '4s' # Default
OCR2CacheTTL = '1m' # Default
TxMsgTimeout = '10m' # Default
ChainID
tomlChainID = 'Malaga-420' # Example
ChainID is the Cosmos chain ID. Mandatory.Enabled
tomlEnabled = true # Default
Enabled enables this chain.Bech32Prefix
tomlBech32Prefix = 'wasm' # Default
Bech32Prefix is the human-readable prefix for addresses on this Cosmos chain. See https://docs.cosmos.network/v0.47/spec/addresses/bech32.BlockRate
tomlBlockRate = '6s' # Default
BlockRate is the average time between blocks.BlocksUntilTxTimeout
tomlBlocksUntilTxTimeout = 30 # Default
BlocksUntilTxTimeout is the number of blocks to wait before giving up on the tx getting confirmed.ConfirmPollPeriod
tomlConfirmPollPeriod = '1s' # Default
ConfirmPollPeriod sets how often check for tx confirmation.FallbackGasPrice
tomlFallbackGasPrice = '0.015' # Default
FallbackGasPrice sets a fallback gas price to use when the estimator is not available.GasToken
tomlGasToken = 'ucosm' # Default
GasToken is the token denomination which is being used to pay gas fees on this chain.GasLimitMultiplier
tomlGasLimitMultiplier = '1.5' # Default
GasLimitMultiplier scales the estimated gas limit.MaxMsgsPerBatch
tomlMaxMsgsPerBatch = 100 # Default
MaxMsgsPerBatch limits the numbers of mesages per transaction batch.OCR2CachePollPeriod
tomlOCR2CachePollPeriod = '4s' # Default
OCR2CachePollPeriod is the rate to poll for the OCR2 state cache.OCR2CacheTTL
tomlOCR2CacheTTL = '1m' # Default
OCR2CacheTTL is the stale OCR2 cache deadline.TxMsgTimeout
tomlTxMsgTimeout = '10m' # Default
TxMsgTimeout is the maximum age for resending transaction before they expire.Cosmos.Nodes
toml[[Cosmos.Nodes]]
Name = 'primary' # Example
TendermintURL = 'http://tender.mint' # Example
Name
tomlName = 'primary' # Example
Name is a unique (per-chain) identifier for this node.TendermintURL
tomlTendermintURL = 'http://tender.mint' # Example
TendermintURL is the HTTP(S) tendermint endpoint for this node.Solana
toml[[Solana]]
ChainID = 'mainnet' # Example
Enabled = true # Default
BlockTime = '500ms' # Default
BalancePollPeriod = '5s' # Default
ConfirmPollPeriod = '500ms' # Default
OCR2CachePollPeriod = '1s' # Default
OCR2CacheTTL = '1m' # Default
TxTimeout = '1m' # Default
TxRetryTimeout = '10s' # Default
TxConfirmTimeout = '30s' # Default
TxExpirationRebroadcast = false # Default
TxRetentionTimeout = '0s' # Default
SkipPreflight = true # Default
Commitment = 'confirmed' # Default
MaxRetries = 0 # Default
FeeEstimatorMode = 'fixed' # Default
ComputeUnitPriceMax = 1000 # Default
ComputeUnitPriceMin = 0 # Default
ComputeUnitPriceDefault = 0 # Default
FeeBumpPeriod = '3s' # Default
BlockHistoryPollPeriod = '5s' # Default
BlockHistorySize = 1 # Default
BlockHistoryBatchLoadSize = 20 # Default
ComputeUnitLimitDefault = 200_000 # Default
EstimateComputeUnitLimit = false # Default
LogPollerStartingLookback = '24h0m0s' # Default
LogPollerCPIEventsEnabled = true # Default
LogPollerSlotsBatchSize = 100 # Default
ChainID
tomlChainID = 'mainnet' # Example
ChainID is the Solana chain ID. Must be one of: mainnet, testnet, devnet, localnet. Mandatory.Enabled
tomlEnabled = true # Default
Enabled enables this chain.BlockTime
tomlBlockTime = '500ms' # Default
BlockTime specifies the average time between blocks on this chainBalancePollPeriod
tomlBalancePollPeriod = '5s' # Default
BalancePollPeriod is the rate to poll for SOL balance and update Prometheus metrics.ConfirmPollPeriod
tomlConfirmPollPeriod = '500ms' # Default
ConfirmPollPeriod is the rate to poll for signature confirmation.OCR2CachePollPeriod
tomlOCR2CachePollPeriod = '1s' # Default
OCR2CachePollPeriod is the rate to poll for the OCR2 state cache.OCR2CacheTTL
tomlOCR2CacheTTL = '1m' # Default
OCR2CacheTTL is the stale OCR2 cache deadline.TxTimeout
tomlTxTimeout = '1m' # Default
TxTimeout is the timeout for sending txes to an RPC endpoint.TxRetryTimeout
tomlTxRetryTimeout = '10s' # Default
TxRetryTimeout is the duration for tx manager to attempt rebroadcasting to RPC, before giving up.TxConfirmTimeout
tomlTxConfirmTimeout = '30s' # Default
TxConfirmTimeout is the duration to wait when confirming a tx signature, before discarding as unconfirmed.TxExpirationRebroadcast
tomlTxExpirationRebroadcast = false # Default
TxExpirationRebroadcast enables or disables transaction rebroadcast if expired. Expiration check is performed every ConfirmPollPeriod`A transaction is considered expired if the blockhash it was sent with is 150 blocks older than the latest blockhash.
TxRetentionTimeout
TxRetentionTimeout = '0s' # DefaultTxRetentionTimeout is the duration to retain transactions in storage after being marked as finalized or errored. Set to 0 to immediately drop transactions.
SkipPreflight
SkipPreflight = true # DefaultSkipPreflight enables or disables preflight checks when sending txs.
Commitment
Commitment = 'confirmed' # DefaultCommitment is the confirmation level for solana state and transactions. (documentation)
MaxRetries
MaxRetries = 0 # DefaultMaxRetries is the maximum number of times the RPC node will automatically rebroadcast a tx.
The default is 0 for custom txm rebroadcasting method, set to -1 to use the RPC node's default retry strategy.
FeeEstimatorMode
FeeEstimatorMode = 'fixed' # DefaultFeeEstimatorMode is the method used to determine the base fee
ComputeUnitPriceMax
ComputeUnitPriceMax = 1000 # DefaultComputeUnitPriceMax is the maximum price per compute unit that a transaction can be bumped to
ComputeUnitPriceMin
ComputeUnitPriceMin = 0 # DefaultComputeUnitPriceMin is the minimum price per compute unit that transaction can have
ComputeUnitPriceDefault
ComputeUnitPriceDefault = 0 # DefaultComputeUnitPriceDefault is the default price per compute unit price, and the starting base fee when FeeEstimatorMode = 'fixed'
FeeBumpPeriod
FeeBumpPeriod = '3s' # DefaultFeeBumpPeriod is the amount of time before a tx is retried with a fee bump. WARNING: If FeeBumpPeriod is shorter than blockhash expiration, multiple valid transactions can exist in parallel. This can result in higher costs and can cause unexpected behaviors if contracts do not de-dupe txs
BlockHistoryPollPeriod
BlockHistoryPollPeriod = '5s' # DefaultBlockHistoryPollPeriod is the rate to poll for blocks in the block history fee estimator
BlockHistorySize
BlockHistorySize = 1 # DefaultBlockHistorySize is the number of blocks to take into consideration when using FeeEstimatorMode = 'blockhistory' to determine compute unit price.
If set to 1, the compute unit price will be determined by the median of the last block's compute unit prices.
If set N > 1, the compute unit price will be determined by the average of the medians of the last N blocks' compute unit prices.
DISCLAIMER: If set to a value greater than BlockHistoryBatchLoadSize, initial estimations during startup would be over smaller block ranges until the cache is filled.
BlockHistoryBatchLoadSize
BlockHistoryBatchLoadSize = 20 # DefaultBlockHistoryBatchLoadSize is the number of latest blocks to fetch from the chain to store in the cache every BlockHistoryPollPeriod.
This config is only relevant if BlockHistorySize > 1 and if BlockHistorySize is greater than BlockHistoryBatchLoadSize.
Ensure the value is greater than the number of blocks that would be produced between each BlockHistoryPollPeriod to avoid gaps in block history.
ComputeUnitLimitDefault
ComputeUnitLimitDefault = 200_000 # DefaultComputeUnitLimitDefault is the compute units limit applied to transactions unless overriden during the txm enqueue
EstimateComputeUnitLimit
EstimateComputeUnitLimit = false # DefaultEstimateComputeUnitLimit enables or disables compute unit limit estimations per transaction. If estimations return 0 used compute, the ComputeUnitLimitDefault value is used, if set.
LogPollerStartingLookback
LogPollerStartingLookback = '24h0m0s' # DefaultLogPollerStartingLookback
LogPollerCPIEventsEnabled
LogPollerCPIEventsEnabled = true # DefaultLogPollerCPIEventsEnabled enables the LogPoller to listen for CPI (Cross-Program Invocation) events.
LogPollerSlotsBatchSize
LogPollerSlotsBatchSize = 100 # DefaultLogPollerSlotsBatchSize is the number of slots to process in a batch when polling for logs. Setting this value too high may increase memory usage, while setting it too low may increase the number of RPC calls and decrease performance.
Solana.Workflow
[Solana.Workflow]
AcceptanceTimeout = '45s' # Default
ForwarderAddress = '14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5' # Example
ForwarderState = '14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5' # Example
FromAddress = '4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e' # Example
GasLimitDefault = 300_000 # Default
Local = false # Default
PollPeriod = '3s' # Default
TxAcceptanceState = 3 # DefaultAcceptanceTimeout
AcceptanceTimeout = '45s' # DefaultAcceptanceTimeout is the default timeout for a tranmission to be accepted on chain
ForwarderAddress
ForwarderAddress = '14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5' # ExampleForwarderAddress is the keystone forwarder program address on chain.
Deprecated: ignored at runtime; use capability config. Kept for TOML compatibility.
ForwarderState
ForwarderState = '14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5' # ExampleForwarderState is the keystone forwarder program state account on chain.
Deprecated: ignored at runtime; use capability config. Kept for TOML compatibility.
FromAddress
FromAddress = '4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e' # ExampleFromAddress is Address of the transmitter key to use for workflow writes.
Deprecated: ignored at runtime; use capability / transmitter config. Kept for TOML compatibility.
GasLimitDefault
GasLimitDefault = 300_000 # DefaultGasLimitDefault is the default gas limit for workflow transactions.
Local
Local = false # DefaultLocal defines if relayer runs against local devnet
PollPeriod
PollPeriod = '3s' # DefaultPollPeriod is the default poll period for checking transmission state
TxAcceptanceState
TxAcceptanceState = 3 # DefaultTxAcceptanceState is the default acceptance state for writer DON tranmissions.
Solana.MultiNode
[Solana.MultiNode]
Enabled = false # Default
PollFailureThreshold = 5 # Default
PollInterval = '10s' # Default
SelectionMode = 'PriorityLevel' # Default
SyncThreshold = 5 # Default
NodeIsSyncingEnabled = false # Default
LeaseDuration = '1m0s' # Default
NewHeadsPollInterval = '10s' # Default
FinalizedBlockPollInterval = '10s' # Default
EnforceRepeatableRead = true # Default
DeathDeclarationDelay = '10s' # Default
VerifyChainID = true # Default
NodeNoNewHeadsThreshold = '10s' # Default
NoNewFinalizedHeadsThreshold = '10s' # Default
FinalityDepth = 0 # Default
FinalityTagEnabled = true # Default
FinalizedBlockOffset = 0 # DefaultEnabled
Enabled = false # DefaultEnabled enables the multinode feature.
PollFailureThreshold
PollFailureThreshold = 5 # DefaultPollFailureThreshold is the number of poll failures beyond poll successes before a node is considered unhealthy.
PollInterval
PollInterval = '10s' # DefaultPollInterval is the rate to poll for node health.
SelectionMode
SelectionMode = 'PriorityLevel' # DefaultSelectionMode is the method used to select the next best node to use.
SyncThreshold
SyncThreshold = 5 # DefaultSyncThreshold is the number of blocks behind the best node that a node can be before it is considered out of sync.
NodeIsSyncingEnabled
NodeIsSyncingEnabled = false # DefaultNodeIsSyncingEnabled enables the feature to avoid sending transactions to nodes that are syncing. Not relavant for Solana.
LeaseDuration
LeaseDuration = '1m0s' # DefaultLeaseDuration is the max duration a node can be leased for.
NewHeadsPollInterval
NewHeadsPollInterval = '10s' # DefaultNewHeadsPollInterval is the rate to poll for new heads.
FinalizedBlockPollInterval
FinalizedBlockPollInterval = '10s' # DefaultFinalizedBlockPollInterval is the rate to poll for the finalized block.
EnforceRepeatableRead
EnforceRepeatableRead = true # DefaultEnforceRepeatableRead enforces the repeatable read guarantee for multinode.
DeathDeclarationDelay
DeathDeclarationDelay = '10s' # DefaultDeathDeclarationDelay is the duration to wait before declaring a node dead.
VerifyChainID
VerifyChainID = true # DefaultVerifyChainID enforces RPC Client ChainIDs to match configured ChainID
NodeNoNewHeadsThreshold
NodeNoNewHeadsThreshold = '10s' # DefaultNodeNoNewHeadsThreshold is the duration to wait before declaring a node unhealthy due to no new heads.
NoNewFinalizedHeadsThreshold
NoNewFinalizedHeadsThreshold = '10s' # DefaultNoNewFinalizedHeadsThreshold is the duration to wait before declaring a node unhealthy due to no new finalized heads.
FinalityDepth
FinalityDepth = 0 # DefaultFinalityDepth is not used when finality tags are enabled.
FinalityTagEnabled
FinalityTagEnabled = true # DefaultFinalityTagEnabled enables the use of finality tags.
FinalizedBlockOffset
FinalizedBlockOffset = 0 # DefaultFinalizedBlockOffset is the offset from the finalized block to use for finality tags.
Solana.Nodes
[[Solana.Nodes]]
Name = 'primary' # Example
URL = 'http://solana.web' # Example
SendOnly = false # Default
Order = 100 # Default
IsLoadBalancedRPC = false # DefaultName
Name = 'primary' # ExampleName is a unique (per-chain) identifier for this node.
URL
URL = 'http://solana.web' # ExampleURL is the HTTP(S) endpoint for this node.
SendOnly
SendOnly = false # DefaultSendOnly is a multinode config that only sends transactions to a node and does not read state
Order
Order = 100 # DefaultOrder specifies the priority for each node. 1 is highest priority down to 100 being the lowest.
IsLoadBalancedRPC
IsLoadBalancedRPC = false # DefaultIsLoadBalancedRPC indicates whether the http/ws url above has multiple rpc's behind it.
If true, we should try reconnecting to the node even when its the only node in the Nodes list.
If false and its the only node in the nodes list, we will mark it alive even when its out of sync, because it might still be able to send txs.
Starknet
[[Starknet]]
ChainID = 'foobar' # Example
FeederURL = 'http://feeder.url' # Example
Enabled = true # Default
OCR2CachePollPeriod = '5s' # Default
OCR2CacheTTL = '1m' # Default
RequestTimeout = '10s' # Default
TxTimeout = '10s' # Default
ConfirmationPoll = '5s' # DefaultChainID
ChainID = 'foobar' # ExampleChainID is the Starknet chain ID.
FeederURL
FeederURL = 'http://feeder.url' # ExampleFeederURL is required to get tx metadata (that the RPC can't)
Enabled
Enabled = true # DefaultEnabled enables this chain.
OCR2CachePollPeriod
OCR2CachePollPeriod = '5s' # DefaultOCR2CachePollPeriod is the rate to poll for the OCR2 state cache.
OCR2CacheTTL
OCR2CacheTTL = '1m' # DefaultOCR2CacheTTL is the stale OCR2 cache deadline.
RequestTimeout
RequestTimeout = '10s' # DefaultRequestTimeout is the RPC client timeout.
TxTimeout
TxTimeout = '10s' # DefaultTxTimeout is the timeout for sending txes to an RPC endpoint.
ConfirmationPoll
ConfirmationPoll = '5s' # DefaultConfirmationPoll is how often to confirmer checks for tx inclusion on chain.
Starknet.Nodes
[[Starknet.Nodes]]
Name = 'primary' # Example
URL = 'http://stark.node' # Example
APIKey = 'key' # ExampleName
Name = 'primary' # ExampleName is a unique (per-chain) identifier for this node.
URL
URL = 'http://stark.node' # ExampleURL is the base HTTP(S) endpoint for this node.
APIKey
APIKey = 'key' # ExampleAPIKey Header is optional and only required for Nethermind RPCs
---