Configuration files originally setup by the Avalanche team. Verified working by the ProtoFire team.
This folder contains all files required to run a Chainlink Node for Avalanche. You need to have docker
and docker-compose
It is recommended you get a Avalanche provider, either by creating your own Node or by using an online provider such as DataHub.
All Chainlink v6 contracts required (including LinkToken , Oracle . AccessControlledAggregator and EACAggregatorProxy) have been tested, verified and working on the Fuji testnet. For the test we did an AVAX/USD price aggregator with only one Oracle node. You can view the already deployed ones here
LinkToken - 0xD3896BDD73E61a4275e27F660dDF095522F0a1D3
Oracle - 0xa5f33f7d680E596d2f13D1e12434C4de8204C678
AccessControlAggregator - 0xDcaD20CA76D7F0df84e50CdD80AeA43cEEA980fc
EACAggregatorProxy - 0x8581D1D42b5Cb8d6fA2A901ebbdD0BD4f19aB9f6
Deploying these contracts required no code modifications, and can be deployed using remix and following the Deploy a Smart Contract on Avalanche Using Remix and MetaMask Guide
There are four files to configure in this folder, .env.chainlink
, .env.postgres
, data/password
and data/api
. All files should already be present in this folder, just configure them to your liking.
.env.chainlink
- All environment variables for the Chainlink Node. The ones present are the ones used for internal testing and validated as working.env.postgres
- All environment variables for the Postgres Database server.data
- This folder is mapped via docker to/chainlink
in the Chainlink Node containerdata/password
- The password used by the Chainlink Node to lock the walletdata/api
- The password used by the Chainlink Node used for login and API calls
For the postgres database password, please make sure they match in both .env.chainlink
and .env.postgres
.
For performance reasons, it is not recommended to use the default RPC endpoints offered by the Avalanche project. The best alternatives are to sign up for a free endpoint at DataHub or to run your own Avalanche node.
For price aggregation, a script is included to automatically clone the External Adapters JS Repo and build the following external adapters
- Cryptocompare
- metalsapi
- alphavantage
You may use the script build_adapters.sh
inside this folder to clone and build these, or you may choose to build external adapters yourself. Be sure to include the External Adapter container inside the docker-compose.yml
file.
To add an external adapter to the docker-compose.yml
file, add a section for your external adapter at the bottom, like so
chainlink-external-cryptocompare:
image: cryptocompare-adapter:latest
ports:
- "8080:8080"
environment:
API_KEY: <API_KEY_HERE>
then, add the container as a requirement to the chainlink
container, like so
services:
chainlink:
image: smartcontract/chainlink:latest
depends_on:
- chainlink-db
- chainlink-external-cryptocompare
...more external adapters containers here...
To configure the external adapter in the chainlink node, simply point to the name of the container and the port it's exposing, like so
For this example node setup, the job spec to be configured in the node is the following (assuming the on-chain aggregator has been set to use 8 decimals):
{
"initiators": [
{
"type": "fluxmonitor",
"params": {
"address": "<AGGREGATOR ADDRESS>",
"requestData": {
"data": {
"from": "ETH",
"to": "USD"
}
},
"feeds": [
{"bridge": "cryptocompare"}
],
"threshold": 0.5,
"absoluteThreshold": 0.01,
"precision": 8,
"pollTimer": {
"period": "1m0s"
},
"idleTimer": {
"duration": "1h0m0s"
}
}
}
],
"tasks": [
{
"type": "multiply",
"confirmations": null,
"params": {
"times": 100000000
}
},
{
"type": "ethint256",
"confirmations": null,
"params": {}
},
{
"type": "ethtx",
"confirmations": null,
"params": {}
}
],
"startAt": null,
"endAt": null
}
To run, simply run docker-compose up
inside this folder after configuring. This will launch all required containers
To stop, simply run docker-compose down
or use CTRL + C