NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #420 by repository stars
Last release 3 years ago
no release in 18 months
Ships fairly regularly
a new release about every 9 days
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
869 releases · first in 2018
If a CLI command is issued after the session has expired, and an api credentials file is found, auto login should now work.
If a CLI command is issued after the session has expired, and an api credentials file is found, auto login should now work.
GasUpdater now works on RSK and xDai
Offchain reporting jobs that have had a latest round requested can now be deleted from the UI without error
Add ETH_GAS_LIMIT_MULTIPLIER configuration option, the gas limit is multiplied by this value before transmission. So a value of 1.1 will add 10% to the on chain gas limit when a transaction is submitted.
Add ETH_MIN_GAS_PRICE_WEI configuration option. This defaults to 1Gwei on mainnet. Chainlink will never send a transaction at a price lower than this value.
Add chainlink node db migrate for running database migrations. It's
recommended to use this and set MIGRATE_DATABASE=false if you want to run
the migrations separately outside of application startup.
Chainlink now automatically cleans up old eth_txes to reduce database size. By default, any eth_txes older than a week are pruned on a regular basis. It is recommended to use the default value, however the default can be overridden by setting the ETH_TX_REAPER_THRESHOLD env var e.g. ETH_TX_REAPER_THRESHOLD=24h. Reaper can be disabled entirely by setting ETH_TX_REAPER_THRESHOLD=0. The reaper will run on startup and again every hour (interval is configurable using ETH_TX_REAPER_INTERVAL).
Heads corresponding to new blocks are now delivered in a sampled way, which is to improve
node performance on fast chains. The frequency is by default 1 second, and can be changed
by setting ETH_HEAD_TRACKER_SAMPLING_INTERVAL env var e.g. ETH_HEAD_TRACKER_SAMPLING_INTERVAL=5s.
Database backups: default directory is now a subdirectory 'backup' of chainlink root dir, and can be changed
to any chosen directory by setting a new configuration value: DATABASE_BACKUP_DIR
One column per quarter.
Add MockOracle.sol for testing contracts
Add MockOracle.sol for testing contracts
Web job types can now be created from the operator UI as a new job.
See example web job spec below:
type = "webhook"
schemaVersion = 1
jobID = "0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46"
observationSource = """
ds [type=http method=GET url="http://example.com"];
ds_parse [type=jsonparse path="data"];
ds -> ds_parse;
"""
// Get v1 job ID:
chainlink job_specs list
// Migrate it to v2:
chainlink jobs migrate fe279ed9c36f4eef9dc1bdb7bef21264
// To undo the migration:
1. Archive the v2 job in the UI
2. Unarchive the v1 job manually in the db:
update job_specs set deleted_at = null where id = 'fe279ed9-c36f-4eef-9dc1-bdb7bef21264'
update initiators set deleted_at = null where job_spec_id = 'fe279ed9-c36f-4eef-9dc1-bdb7bef21264'
Improved support for Optimism chain. Added a new boolean OPTIMISM_GAS_FEES configuration variable which makes a call to estimate gas before all transactions, suitable for use with Optimism's L2 chain. When this option is used ETH_GAS_LIMIT_DEFAULT is ignored.
Chainlink now supports routing certain calls to the eth node over HTTP instead of websocket, when available. This has a number of advantages - HTTP is more robust and simpler than websockets, reducing complexity and allowing us to make large queries without running the risk of hitting websocket send limits. The HTTP url should point to the same node as the ETH_URL and can be specified with an env var like so: ETH_HTTP_URL=https://my.ethereumnode.example/endpoint.
Adding an HTTP endpoint is particularly recommended for BSC, which is hitting websocket limitations on certain queries due to its large block size.
ENABLE_LEGACY_JOB_PIPELINE=false. This can yield marginal performance improvements if you don't need to support the legacy JSON job spec format.Nothing published for this version
Nothing published for this version
Add MockOracle.sol for testing contracts
MockOracle.sol for testing contractstype = "cron"
schemaVersion = 1
schedule = "*/10 * * * *"
observationSource = """
ds [type=http method=GET url="http://example.com"];
ds_parse [type=jsonparse path="data"];
ds -> ds_parse;
"""
JOB_PIPELINE_REAPER_THRESHOLD has been reduced from 1 week to 1 day to save database space. This variable controls how long past job run history for OCR is kept. To keep the old behaviour, you can set JOB_PIPELINE_REAPER_THRESHOLD=168hJOB_PIPELINE_PARALLELISM.TaskRuns in success cases. This reduces
DB load and significantly improves the performance of archiving OCR jobs.Added GAS_UPDATER_BATCH_SIZE option to workaround websocket: read limit exceeded issues on BSC
Basic support for Optimism chain: node no longer gets stuck with 'nonce too low' error if connection is lost
Nothing published for this version
VRF Jobs now support an optional coordinatorAddress field that, when present, will tell the node to check the fulfillment status of any VRF request be
VRF Jobs now support an optional coordinatorAddress field that, when present, will tell the node to check the fulfillment status of any VRF request before attempting the fulfillment transaction. This will assist in the effort to run multiple nodes with one VRF key.
Experimental: Add DATABASE_BACKUP_MODE, DATABASE_BACKUP_FREQUENCY and DATABASE_BACKUP_URL configuration variables
DATABASE_BACKUP_MODE enables the initial backup on node start (with one of the values: none, lite, full where lite excludes
potentially large tables related to job runs, among others). Additionally, if DATABASE_BACKUP_FREQUENCY variable is set to a duration of
at least '1m', it enables periodic backups.DATABASE_BACKUP_URL can be optionally set to point to e.g. a database replica, in order to avoid excessive load on the main one. Example settings:
DATABASE_BACKUP_MODE="full" and DATABASE_BACKUP_FREQUENCY not set, will run a full back only at the start of the node.DATABASE_BACKUP_MODE="lite" and DATABASE_BACKUP_FREQUENCY="1h" will lead to a partial backup on node start and then again a partial backup every one hour.Added periodic resending of eth transactions. This means that we no longer rely exclusively on gas bumping to resend unconfirmed transactions that got "lost" for whatever reason. This has two advantages:
ETH_TX_RESEND_AFTER_THRESHOLD env var (default 30s). Unconfirmed transactions will be resent periodically at this interval. It is recommended to leave this at the default setting, but it can be set to any valid duration or to 0 to disable periodic resending.Logging can now be configured in the Operator UI.
Tuned defaults for certain Eth-compatible chains
Chainlink node now uses different sets of default values depending on the given Chain ID. Tuned configs are built-in for the following chains:
If you have manually set ENV vars specific to these chains, you may want to remove those and allow the node to use its configured defaults instead.
New prometheus metric "tx_manager_num_tx_reverted" which counts the number of reverted transactions on chain.
Under certain circumstances a poorly configured Explorer could delay Chainlink node startup by up to 45 seconds.
Chainlink node now automatically sets the correct nonce on startup if you are restoring from a previous backup (manual setnextnonce is no longer necessary).
Flux monitor jobs should now work correctly with outlier-detection and market-closure external adapters.
Performance improvements to OCR job adds. Removed the pipeline_task_specs table
and added a new column dot_id to the pipeline_task_runs table which links a pipeline_task_run
to a dotID in the pipeline_spec.dot_dag_source.
Fixed bug where node will occasionally submit an invalid OCR transmission which reverts with "address not authorized to sign".
Fixed bug where a node will sometimes double submit on runlog jobs causing reverted transactions on-chain
Add STATS_PUSHER_LOGGING to toggle stats pusher raw message logging (DEBUG level).
Add STATS_PUSHER_LOGGING to toggle stats pusher raw message logging (DEBUG
level).
Add ADMIN_CREDENTIALS_FILE configuration variable
This variable defaults to $ROOT/apicredentials and when defined / the
file exists, any command using the CLI that requires authentication will use it
to automatically log in.
ETH_MAX_UNCONFIRMED_TRANSACTIONS configuration variableChainlink node now has a maximum number of unconfirmed transactions that may be in flight at any one time (per key).
If this limit is reached, further attempts to send transactions will fail and the relevant job will be marked as failed.
Jobs will continue to fail until at least one transaction is confirmed and the queue size is reduced. This is introduced as a sanity limit to prevent unbounded sending of transactions e.g. in the case that the eth node is failing to broadcast to the network.
The default is set to 500 which considered high enough that it should
never be reached under normal operation. This limit can be changed
by setting the ETH_MAX_UNCONFIRMED_TRANSACTIONS environment variable.
requestNewRound enables dedicated requesters to request a fresh report to be sent to the contract right away regardless of heartbeat or deviation.
Name: "head_tracker_eth_connection_errors",
Help: "The total number of eth node connection errors",
Gas bumping can now be disabled by setting ETH_GAS_BUMP_THRESHOLD=0
Support for arbitrum
Node will now fatally error jobs if the total transaction costs exceeds the configured cap (default 1 Eth). Also, it will no longer continue to bump gas on transactions that started hitting this limit and instead continue to resubmit at the highest price that worked.
Node operators should check their geth nodes and remove this cap if configured,
you can do this by running your geth node with --rpc.gascap=0 --rpc.txfeecap=0 or setting these values in your config toml.
Make head backfill asynchronous. This should eliminate some harmless but annoying errors related to backfilling heads, logged on startup and occasionally during normal operation on fast chains like Kovan.
Improvements to the GasUpdater
Various efficiency and correctness improvements have been made to the GasUpdater. It places less load on the ethereum node and now features re-org detection.
Most notably, GasUpdater no longer takes a 24 block delay to "warm up" on application start and instead loads all relevant block history immediately. This means that the application gas price will always be updated correctly after reboot before the first transaction is ever sent, eliminating the previous scenario where the node could send underpriced or overpriced transactions for a period after a reboot, until the gas updater caught up.
ORM_MAX_OPEN_CONNS default from 10 to 20ORM_MAX_IDLE_CONNS default from 5 to 10Each Chainlink node will now use a maximum of 23 database connections (up from previous max of 13). Make sure your postgres database is tuned accordingly, especially if you are running multiple Chainlink nodes on a single database. If you find yourself hitting connection limits, you can consider reducing ORM_MAX_OPEN_CONNS but this may result in degraded performance.
JOB_PIPELINE_MAX_TASK_DURATION is no longer supported
for OCR jobs.Nothing published for this version
Add contexts so that database queries timeout when necessary.
Prevent autosaving Task Spec on when Task Runs are saved to lower database load.
Fix a case where archiving jobs could try to delete it from the external initiator even if the job was not an EI job.
Fixed a UI bug with fluxmonitor jobs where initiator params were bunched up.
JOB_PIPELINE_PARALLELISM.JOB_PIPELINE_MAX_RUN_DURATION has been added which controls maximum duration of the total run.New CLI commands for key management:
chainlink keys eth importchainlink keys eth exportchainlink keys eth deleteJob spawner ORM attempted to claim locally-claimed job warnings/v2/keys/..., and are standardized across key types.P2P_PEER_ID to indicate which key to use.DATABASE_TIMEOUT is now set to 0 by default, so that nodes will wait forever for a lock. If you already have DATABASE_TIMEOUT=0 set explicitly in your env (most node operators) then you don't need to do anything. If you didn't have it set, and you want to keep the old default behaviour where a node exits shortly if it can't get a lock, you can manually set DATABASE_TIMEOUT=500ms in your env.MonitoringEndpoint.An issue where the node would emit warnings on startup for fluxmonitor contracts
Nothing published for this version
OCR bootstrap node now sends telemetry to the endpoint specified in the OCR job spec under MonitoringEndpoint.
MonitoringEndpoint./keys page.ACCOUNT_ADDRESS field from /config page./runs tab back to the operator UI.P2P_NETWORKING_STACK=V1P2P_NETWORKING_STACK=V1V2, then P2PV2_BOOTSTRAPPERS must also be setjobs archive => job_specs archive
jobs create => job_specs create
jobs list => job_specs list
jobs show => job_specs show
jobs createocr => jobs create
jobs deletev2 => jobs delete
jobs run => jobs run
OCR pipeline specs can now be configured on a per-task basis to allow unrestricted network access for http tasks. Example like so:
ds1 [type=http method=GET url="http://example.com" allowunrestrictednetworkaccess="true"];
ds1_parse [type=jsonparse path="USD" lax="true"];
ds1_multiply [type=multiply times=100];
ds1 -> ds1_parse -> ds1_multiply;
Name: "pipeline_run_errors",
Help: "Number of errors for each pipeline spec",
Name: "pipeline_run_total_time_to_completion",
Help: "How long each pipeline run took to finish (from the moment it was created)",
Name: "pipeline_tasks_total_finished",
Help: "The total number of pipline tasks which have finished",
Name: "pipeline_task_execution_time",
Help: "How long each pipeline task took to execute",
Name: "pipeline_task_http_fetch_time",
Help: "Time taken to fully execute the HTTP request",
Name: "pipeline_task_http_response_body_size",
Help: "Size (in bytes) of the HTTP response body",
Name: "pipeline_runs_queued",
Help: "The total number of pipline runs that are awaiting execution",
Name: "pipeline_task_runs_queued",
Help: "The total number of pipline task runs that are awaiting execution",
Numerous key-related UX improvements:
chainlink keys subcommand:
chainlink createextrakey => chainlink keys eth createchainlink admin info => chainlink keys eth listchainlink node p2p [create|list|delete] => chainlink keys p2p [create|list|delete]chainlink node ocr [create|list|delete] => chainlink keys ocr [create|list|delete]chainlink node vrf [create|list|delete] => chainlink keys vrf [create|list|delete]--hard flag to the command, e.g. chainlink keys p2p delete --hard 6.--yes or -y.--ocrpassword flag has been removed. OCR/P2P keys now share the same password at the ETH key (i.e., the password specified with the --password flag).Misc:
P2P_ANNOUNCE_IP and P2P_ANNOUNCE_PORT which allow node operators to override locally detected values for the chainlink node's externally reachable IP/port.OCR_LISTEN_IP and OCR_LISTEN_PORT have been renamed to P2P_LISTEN_IP and P2P_LISTEN_PORT for consistency.JOB_PIPELINE_REAPER_THRESHOLD value from 7d to 168h (hours are the highest time unit allowed by time.Duration).Updated from Go 1.15.4 to 1.15.5.
Nothing published for this version
Nothing published for this version
Hotfix to fix an issue with httpget adapter
Add new subcommand node hard-reset which is used to remove all state for unstarted and pending job runs from the database.
node hard-reset which is used to remove all state for unstarted and pending job runs from the database.Bulletproof transaction manager enabled by default
ETH_SECONDARY_URL option (i.e. concurrent transaction submission to multiple different eth nodes). This also comes with some minor performance improvements in the tx manager and more correct handling of some extremely rare edge cases.Nothing published for this version
Prometheus gas_updater_set_gas_price metric now only shows last gas price instead of every block since restart
Nothing published for this version
Add new env variable ETH_SECONDARY_URL. Default is unset. You may optionally set this to a http(s) ethereum RPC client URL. If set, transactions will
The chainlink node now will bump a limited configurable number of transactions at once. This is configured with the ETH_GAS_BUMP_TX_DEPTH variable whi
Nothing published for this version
Chainlink header images to the following README.md files: root, core, evm-contracts, and evm-test-helpers.
README.md files: root, core,
evm-contracts, and evm-test-helpers.Previously when the node was overloaded with heads there was a minor possibility it could get backed up with a very large head queue, and become unstable. Now, we drop heads instead in this case and noisily emit an error. This means the node should more gracefully handle overload conditions, although this is still dangerous and node operators should deal with it immediately to avoid missing jobs.
A new environment variable is introduced to configure this, called ETH_HEAD_TRACKER_MAX_BUFFER_SIZE. It is recommended to leave this set to the default of "3".
A new prometheus metric is also introduced to track dropped heads, called head_tracker_num_heads_dropped. You may wish to set an alert on a rule such as increase(chainlink_dropped_heads[5m]) > 0.
Nothing published for this version
Performance improvements when using BulletproofTxManager.
Added a workaround for Infura users who are seeing "error getting balance: header not found". This behaviour is due to Infura announcing it has a bloc
ETH_BALANCE_MONITOR_BLOCK_DELAY.Using fromAddress in ethtx task specs has been deprecated. Please use fromAddresses instead.
fromAddresses field in the ethtx task spec.fromAddress in ethtx task specs has been deprecated. Please use fromAddresses instead.IMPORTANT: The selection mechanism for keys has changed. When an ethtx task spec is not pinned to a particular key by defining fromAddress or fromAddresses, the node will now cycle through all available keys in round-robin fashion. This is a change from the previous behaviour where nodes would only pick the earliest created key.
This is done to allow increases in throughput when a node operator has multiple whitelisted addresses for their oracle.
If your node has multiple keys, you will need to take one of the three following actions:
fromAddressesIf your node only has one key, no action is required.
Incorrect sequence on keys table in some edge cases
Nothing published for this version
Nothing published for this version
Added a check on sensitive file ownership that gives a warning if certain files are not owned by the user running chainlink
ethtx tasks now support a new parameter, minRequiredOutgoingConfirmations which allows you to tune how many confirmations are required before moving o
ethtx tasks now support a new parameter, minRequiredOutgoingConfirmations which allows you to tune how many confirmations are required before moving on from an ethtx task on a per-task basis (only works with BulletproofTxManager). If it is not supplied, the default of MIN_OUTGOING_CONFIRMATIONS is used (same as the old behaviour).ETH_FINALITY_DEPTHadmin withdraw command has been removed. This was only ever useful to withdraw LINK if the Oracle contract was owned by the Chainlink node address. It is no longer recommended having the Oracle owner be the chainlink node address.txs create to send the amount in Eth not in Wei (as per the documentation)This release contains a number of features aimed at improving the node's reliability when putting transactions on-chain.
This release contains a number of features aimed at improving the node's reliability when putting transactions on-chain.
setnextnonce. This should never be necessary under normal operation and is included only for use in emergencies.head_tracker_heads_in_queue - The number of heads currently waiting to be executed. You can think of this as the 'load' on the head tracker. Should rarely or never be more than 0.head_tracker_callback_execution_duration - How long it took to execute all callbacks. If the average of this exceeds the time between blocks, your node could lag behind and delay transactions.ENABLE_BULLETPROOF_TX_MANAGER - set this to true to enable the experimental new transaction managerETH_GAS_BUMP_PERCENT default value has been increased from 10% to 20%ETH_GAS_BUMP_THRESHOLD default value has been decreased from 12 to 3ETH_FINALITY_DEPTH specifies how deep protection should be against re-orgs. The default is 50. It only applies if BulletproofTxManager is enabled. It is not recommended changing this setting.EthHeadTrackerHistoryDepth specifies how many heads the head tracker should keep in the database. The default is 100. It is not recommended changing this setting.go generate ./...The node now logs the eth client RPC calls
Solidity: Marked HistoricAggregatorInterface methods (latestAnswer, latestRound, latestTimestamp, getAnswer, getTimestamp) as deprecated on FluxAggreg…
n blocks after a
connection to the ethereum client is reset. This value is specified with an environment
variable BLOCK_BACKFILL_DEPTH.AggregatorInterface.sol to
HistoricAggregatorInterface.sol. Users are encouraged to use the new methods
introduced on the AggregatorInterface(getRoundData and latestRoundData),
as they return metadata to indicate freshness of the data in a single
cross-contract call.HistoricAggregatorInterface methods (latestAnswer,
latestRound, latestTimestamp, getAnswer, getTimestamp) as deprecated
on FluxAggregator, WhitelistedAggregator, AggregatorProxy,
WhitelistedAggregatorProxy.minPayment field on job specs and won't poll if the contract
does not have sufficient funding. This allows certain jobs to require a larger payment
than MINIMUM_CONTRACT_PAYMENT.Fluxmonitor initiators may now optionally include an absoluteThreshold parameter. To trigger a new on-chain report, the absolute difference in the fee
absoluteThreshold
parameter. To trigger a new on-chain report, the absolute difference in the feed
value must change by at least the absoluteThreshold value. If it is
unspecified or zero, fluxmonitor behavior is unchanged.Database Migrations: There a number of database migrations included in this release as part of our ongoing effort to make the node even more reliable
CRON_TZ=UTC * * * * *. Previously, jobs specified without a
time zone would run in the server's native time zone, which in most cases is UTC
but this was never guaranteed.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →