From dd7d2df16d9dd4ed90be413d40e5b4d1d55321f3 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Sat, 4 Dec 2021 18:44:11 -0800 Subject: [PATCH 01/26] Site update initial commit --- 404.md | 2 +- TEMPLATE.md | 2 +- _data/navigation.js | 510 ++++++++++-------- _includes/feed.liquid | 2 +- _includes/home.liquid | 38 ++ _includes/main.liquid | 19 +- _src/docs.css | 87 ++- _src/images/logos/arbitrum.svg | 84 +++ _src/images/logos/avalanche.svg | 15 + _src/images/logos/binance.svg | 1 + _src/images/logos/ethereum.svg | 21 + _src/images/logos/fantom.svg | 1 + _src/images/logos/harmony.svg | 1 + _src/images/logos/huobi.svg | 1 + _src/images/logos/polygon.svg | 16 + _src/images/logos/xdai.svg | 22 + docs/Contract Creators/l2-sequencer-flag.md | 2 +- .../chainlink-alarm-clock.md | 2 +- .../data-provider-nodes.md | 4 +- .../dns-ownership-oracle.md | 2 +- .../finage-global-market-data-oracle.md | 2 +- .../flightaware-chainlink-testnet.md | 2 +- docs/Data Provider Nodes/google-weather.md | 2 +- .../kraken-rates-oracle-node.md | 2 +- docs/Data Provider Nodes/lcx-testnet.md | 2 +- .../contributing-to-chainlink.md | 2 +- .../create-a-chainlinked-project.md | 2 +- .../developer-communications.html | 2 +- docs/Developer Reference/getting-help.md | 2 +- .../hackathon-resources.md | 4 +- .../hackathon-rules-waiver-and-release.md | 2 +- .../link-token-contracts.md | 2 +- .../selecting-data-feeds.md | 2 +- docs/Developer Reference/user-guides.md | 2 +- docs/Introduction/architecture-overview.md | 2 +- .../architecture-decentralized-model.md | 2 +- .../architecture-request-model.md | 2 +- .../bsc-ocr-migration-schedule.md | 2 +- .../off-chain-reporting.md | 2 +- .../getting-started}/acquire-link.md | 4 +- .../deploy-your-first-contract.md | 2 +- .../getting-started}/fund-your-contract.md | 8 +- .../getting-started}/install-metamask.md | 6 +- .../use-your-first-contract.md | 4 +- docs/Introduction/tutorials.md | 36 -- .../tutorials/advanced-tutorial.md | 4 +- .../tutorials/beginners-tutorial.md | 8 +- .../tutorials/intermediates-tutorial.md | 6 +- .../Introduction/tutorials/other-tutorials.md | 8 +- docs/Solana/DataFeeds/data-feeds-solana.md | 2 +- .../DataFeeds/using-data-feeds-solana.md | 2 +- docs/Solana/overview.md | 2 +- docs/Terra/DataFeeds/data-feeds-terra.md | 2 +- .../Terra/DataFeeds/using-data-feeds-terra.md | 2 +- docs/Terra/overview.md | 2 +- docs/Using Any API/api-reference.md | 2 +- docs/Using Any API/contract-addresses.md | 2 +- docs/Using Any API/existing-job-request.md | 2 +- docs/Using Any API/large-responses.md | 2 +- docs/Using Any API/listing-services.md | 2 +- docs/Using Any API/make-a-http-get-request.md | 2 +- .../Using Any API/multi-variable-responses.md | 2 +- .../Using Any API/request-and-receive-data.md | 2 +- .../binance-smart-chain-price-feeds.md | 2 +- docs/Using Price Feeds/feed-registry.html | 2 +- .../get-the-latest-price.html | 2 +- .../historical-price-data.html | 2 +- .../price-feeds-api-reference.md | 2 +- .../price-feeds-migration-august-2020.md | 2 +- docs/Using Price Feeds/reference-contracts.md | 2 +- .../reference-contracts/ens.html | 2 +- .../using-chainlink-reference-contracts.md | 2 +- .../chainlink-vrf-api-reference.md | 2 +- docs/Using Randomness/chainlink-vrf.md | 2 +- docs/Using Randomness/get-a-random-number.md | 2 +- docs/Using Randomness/vrf-best-practices.md | 2 +- docs/Using Randomness/vrf-contracts.md | 2 +- .../vrf-security-considerations.md | 2 +- .../chainlink-keepers/compatible-contracts.md | 2 +- docs/chainlink-keepers/faqs.md | 2 +- docs/chainlink-keepers/introduction.md | 2 +- docs/chainlink-keepers/overview.html | 2 +- docs/chainlink-keepers/register-upkeep.md | 4 +- docs/chainlink-keepers/utility-contracts.md | 2 +- contracts.md => ethereum.md | 8 +- getting-started.md | 9 + home.md | 89 +++ contracts-nonevm.md => solana.md | 29 +- terra.md | 43 ++ 89 files changed, 817 insertions(+), 391 deletions(-) create mode 100644 _includes/home.liquid create mode 100644 _src/images/logos/arbitrum.svg create mode 100644 _src/images/logos/avalanche.svg create mode 100644 _src/images/logos/binance.svg create mode 100644 _src/images/logos/ethereum.svg create mode 100644 _src/images/logos/fantom.svg create mode 100644 _src/images/logos/harmony.svg create mode 100644 _src/images/logos/huobi.svg create mode 100644 _src/images/logos/polygon.svg create mode 100644 _src/images/logos/xdai.svg rename docs/{Developer Reference/user-guides => Introduction/getting-started}/acquire-link.md (98%) rename docs/{Developer Reference/user-guides => Introduction/getting-started}/deploy-your-first-contract.md (99%) rename docs/{Developer Reference/user-guides => Introduction/getting-started}/fund-your-contract.md (91%) rename docs/{Developer Reference/user-guides => Introduction/getting-started}/install-metamask.md (96%) rename docs/{Developer Reference/user-guides => Introduction/getting-started}/use-your-first-contract.md (97%) delete mode 100644 docs/Introduction/tutorials.md rename contracts.md => ethereum.md (96%) create mode 100644 getting-started.md create mode 100644 home.md rename contracts-nonevm.md => solana.md (61%) create mode 100644 terra.md diff --git a/404.md b/404.md index 50ea44612c4..01761d4fed6 100644 --- a/404.md +++ b/404.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum title: "Page Not Found (404)" eleventyExcludeFromCollections: true permalink: /404.html diff --git a/TEMPLATE.md b/TEMPLATE.md index cece3a6b744..1f2d6b6a0c4 100644 --- a/TEMPLATE.md +++ b/TEMPLATE.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "[insert title here]" permalink: "[insert path here]" diff --git a/_data/navigation.js b/_data/navigation.js index a26de3a73a0..e92628d655c 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -1,252 +1,155 @@ module.exports = { navigation: { - nodeOperator: [ + gettingStarted: [ { - section: 'NODE OPERATORS', + section: 'Getting Started', contents: [ { - url: '/docs/node-versions/', - title: 'Node Versions' }, - { - url: '/docs/running-a-chainlink-node/', - title: 'Running a Chainlink Node', + title: 'Install, configure & fund MetaMask', + url: '/docs/install-metamask/', }, { - url: '/docs/fulfilling-requests/', - title: 'Fulfilling Requests' }, - { - url: '/docs/run-an-ethereum-client/', - title: 'Run an Ethereum Client', + title: 'Acquire testnet LINK', + url: '/docs/acquire-link/', }, { - url: '/docs/performing-system-maintenance/', - title: 'Performing System Maintenance', + title: 'Deploy your first contract', + url: '/docs/deploy-your-first-contract/', }, { - url: '/docs/connecting-to-a-remote-database/', - title: 'Connecting to a Remote Database', + title: 'Fund your contract', + url: '/docs/fund-your-contract/', }, { - url: '/docs/configuration-variables/', - title: 'Configuration Variables', + title: 'Use your first contract!', + url: '/docs/use-your-first-contract/', }, + ], + }, + { + section: 'Beginner Contracts', + contents: [ { - url: '/docs/enabling-https-connections/', - title: 'Enabling HTTPS Connections', + title: 'Use a Data Feed', + url: '/docs/beginners-tutorial/', }, { - url: '/docs/best-security-practices/', - title: 'Best Security and Operating Practices', + title: 'Random Numbers', + url: '/docs/intermediates-tutorial/', }, { - url: '/docs/best-practices-aws/', - title: 'Best Practices for Nodes on AWS', - }, + title: 'API Calls', + url: '/docs/advanced-tutorial/', + } + ], + }, + { + section: 'Resources', + contents: [ { - url: '/docs/miscellaneous/', - title: 'Miscellaneous' + title: 'Learning Resources', + url: '/docs/other-tutorials/', }, ], }, { - section: 'ORACLE JOBS', + section: 'Next Steps', contents: [ { - url: '/docs/jobs/migration-v1-v2', - title: 'Migrating to v2 Jobs', + title: 'Architecture Overview ↗', + url: '/docs/architecture-overview/', }, { - url: '/docs/jobs/', - title: 'Jobs', - children: [ - { - url: '/docs/jobs/types/cron/', - title: 'Cron' - }, - { - url: '/docs/jobs/types/direct-request/', - title: 'Direct Request', - }, - { - url: '/docs/jobs/types/flux-monitor/', - title: 'Flux Monitor', - }, - { - url: '/docs/jobs/types/keeper/', - title: 'Keeper' - }, - { - url: '/docs/jobs/types/offchain-reporting/', - title: 'Off-chain Reporting', - }, - { - url: '/docs/jobs/types/webhook/', - title: 'Webhook' - }, - ], + title: 'Run a Chainlink Node ↗', + url: '/chainlink-nodes/', }, + ], + }, + ], + ethereum: [ + { + section: 'Overview', + contents: [ { - url: '/docs/tasks/', - title: 'Tasks', + title: 'Architecture Overview', + url: '/docs/architecture-overview/', children: [ { - url: '/docs/jobs/task-types/pipelines/', - title: 'Job Pipelines' - }, - { - url: '/docs/jobs/task-types/http/', - title: 'HTTP' - }, - { - url: '/docs/jobs/task-types/bridge/', - title: 'Bridge' - }, - { - url: '/docs/jobs/task-types/jsonparse/', - title: 'JSON Parse' - }, - { - url: '/docs/jobs/task-types/cborparse/', - title: 'CBOR Parse' - }, - { - url: '/docs/jobs/task-types/eth-abi-decode/', - title: 'ETH ABI Decode', - }, - { - url: '/docs/jobs/task-types/eth-abi-decode-log/', - title: 'ETH ABI Decode Log', - }, - { - url: '/docs/jobs/task-types/eth-abi-encode/', - title: 'ETH ABI Encode', - }, - { - url: '/docs/jobs/task-types/eth-call/', - title: 'ETH Call' - }, - { - url: '/docs/jobs/task-types/eth-tx/', - title: 'ETH Tx' - }, - { - url: '/docs/jobs/task-types/multiply/', - title: 'Multiply' - }, - { - url: '/docs/jobs/task-types/divide/', - title: 'Divide' - }, - - { - url: '/docs/jobs/task-types/any/', - title: 'Any' - }, - { - url: '/docs/jobs/task-types/mean/', - title: 'Mean' - }, - { - url: '/docs/jobs/task-types/median/', - title: 'Median' + title: 'Basic Request Model', + url: '/docs/architecture-request-model/', }, { - url: '/docs/jobs/task-types/mode/', - title: 'Mode' + title: 'Decentralized Data Model', + url: '/docs/architecture-decentralized-model/', }, { - url: '/docs/jobs/task-types/sum/', - title: 'Sum' + title: 'Off-Chain Reporting', + url: '/docs/off-chain-reporting/', }, ], }, ], }, { - section: 'EXTERNAL ADAPTERS', + section: 'Services', contents: [ { - url: '/docs/external-adapters/', - title: 'Introduction' + title: 'Data Feeds ↗', + url: '/docs/using-chainlink-reference-contracts/', }, { - url: '/docs/contract-creators/', - title: 'External Adapters in Solidity', + title: 'Chainlink VRF ↗', + url: '/docs/chainlink-vrf/', }, { - url: '/docs/developers/', - title: 'Building External Adapters' + title: 'Chainlink Keepers ↗', + url: '/docs/chainlink-keepers/introduction/', }, { - url: '/docs/node-operators/', - title: 'Bridges: Adding External Adapters to Nodes', + title: 'Using Any API ↗', + url: '/docs/request-and-receive-data/', }, ], }, { - section: 'EXTERNAL INITIATORS', + section: 'Resources', contents: [ { - url: '/docs/external-initiators-introduction/', - title: 'Introduction', + title: 'Install Instructions', + url: '/docs/create-a-chainlinked-project/', }, { - url: '/docs/building-external-initiators/', - title: 'Building External Initiators', + title: 'LINK Token Contracts', + url: '/docs/link-token-contracts/' }, { - url: '/docs/external-initiators-in-nodes/', - title: 'Adding External Initiators to Nodes', + title: 'Developer Communications', + url: '/docs/developer-communications/', }, - ], - }, - ], - smartContract: [ - { - section: 'INTRODUCTION', - contents: [ { - title: 'Tutorials', - url: '/docs/tutorials/', - children: [ - { - title: 'The Basics', - url: '/docs/beginners-tutorial/', - }, - { - title: 'Random Numbers', - url: '/docs/intermediates-tutorial/', - }, - { - title: 'API Calls', - url: '/docs/advanced-tutorial/', - } - ], + title: 'Getting Help', + url: '/docs/getting-help/', }, { - title: 'Architecture Overview', - url: '/docs/architecture-overview/', - children: [ - { - title: 'Basic Request Model', - url: '/docs/architecture-request-model/', - }, - { - title: 'Decentralized Data Model', - url: '/docs/architecture-decentralized-model/', - }, - { - title: 'Off-Chain Reporting', - url: '/docs/off-chain-reporting/', - }, - ], + title: 'Data Provider Nodes', + url: '/docs/data-provider-nodes/', }, { - title: 'Learning Resources', - url: '/docs/other-tutorials/', - } + title: 'Selecting Data Feeds', + url: '/docs/selecting-data-feeds/', + }, + { + title: 'Hackathon Resources', + url: '/docs/hackathon-resources/', + }, + { + title: 'Contributing to Chainlink', + url: '/docs/contributing-to-chainlink/' + }, ], }, + ], + ethereumDataFeeds: [ { section: 'USING DATA FEEDS', contents: [ @@ -322,14 +225,12 @@ module.exports = { title: 'Moonriver Data Feeds', url: '/docs/data-feeds-moonriver/', }, - { - title: 'Non-EVM Data Feeds ↗', - url: '/non-evm/', - }, ], }, ], }, + ], + ethereumVRF: [ { section: 'USING RANDOMNESS', contents: [ @@ -359,6 +260,8 @@ module.exports = { }, ], }, + ], + ethereumKeepers: [ { section: 'USING CHAINLINK KEEPERS', contents: [ @@ -388,6 +291,8 @@ module.exports = { }, ], }, + ], + ethereumAnyAPI: [ { section: 'USING ANY API', contents: [ @@ -425,97 +330,244 @@ module.exports = { }, ], }, + ], + terra: [ { - section: 'DEVELOPER REFERENCE', + section: 'TERRA', contents: [ { - title: 'Install Instructions', - url: '/docs/create-a-chainlinked-project/', + title: 'Overview', + url: '/docs/terra/', }, { - title: 'LINK Token Contracts', - url: '/docs/link-token-contracts/' + title: 'Using Data Feeds', + url: '/docs/terra/using-data-feeds-terra/', }, { - title: 'Developer Communications', - url: '/docs/developer-communications/', + title: 'Terra Data Feeds', + url: '/docs/terra/data-feeds-terra/', }, + ], + }, + ], + solana: [ + { + section: 'Solana', + contents: [ { - title: 'Getting Help', - url: '/docs/getting-help/', + title: 'Overview', + url: '/docs/solana/', }, { - title: 'Data Provider Nodes', - url: '/docs/data-provider-nodes/', + title: 'Using Data Feeds', + url: '/docs/solana/using-data-feeds-solana/', }, { - title: 'Selecting Data Feeds', - url: '/docs/selecting-data-feeds/', + title: 'Solana Data Feeds', + url: '/docs/solana/data-feeds-solana/', }, - { title: 'Hackathon Resources', url: '/docs/hackathon-resources/' }, - { title: 'Contributing to Chainlink', url: '/docs/contributing-to-chainlink/' }, + + ], + }, + ], + nodeOperator: [ + { + section: 'NODE OPERATORS', + contents: [ { - title: 'User Guides', - url: '/docs/user-guides/', + url: '/docs/node-versions/', + title: 'Node Versions', + }, + { + url: '/docs/running-a-chainlink-node/', + title: 'Running a Chainlink Node', + }, + { + url: '/docs/fulfilling-requests/', + title: 'Fulfilling Requests' }, + { + url: '/docs/run-an-ethereum-client/', + title: 'Run an Ethereum Client', + }, + { + url: '/docs/performing-system-maintenance/', + title: 'Performing System Maintenance', + }, + { + url: '/docs/connecting-to-a-remote-database/', + title: 'Connecting to a Remote Database', + }, + { + url: '/docs/configuration-variables/', + title: 'Configuration Variables', + }, + { + url: '/docs/enabling-https-connections/', + title: 'Enabling HTTPS Connections', + }, + { + url: '/docs/best-security-practices/', + title: 'Best Security and Operating Practices', + }, + { + url: '/docs/best-practices-aws/', + title: 'Best Practices for Nodes on AWS', + }, + { + url: '/docs/miscellaneous/', + title: 'Miscellaneous' + }, + ], + }, + { + section: 'ORACLE JOBS', + contents: [ + { + url: '/docs/jobs/migration-v1-v2', + title: 'Migrating to v2 Jobs', + }, + { + url: '/docs/jobs/', + title: 'Jobs', children: [ { - title: 'Install, configure & fund MetaMask', - url: '/docs/install-metamask/', + url: '/docs/jobs/types/cron/', + title: 'Cron' }, { - title: 'Acquire testnet LINK', - url: '/docs/acquire-link/', + url: '/docs/jobs/types/direct-request/', + title: 'Direct Request', }, { - title: 'Deploy your first contract', - url: '/docs/deploy-your-first-contract/', + url: '/docs/jobs/types/flux-monitor/', + title: 'Flux Monitor', }, { - title: 'Fund your contract', - url: '/docs/fund-your-contract/', + url: '/docs/jobs/types/keeper/', + title: 'Keeper' }, { - title: 'Use your first contract!', - url: '/docs/use-your-first-contract/', + url: '/docs/jobs/types/offchain-reporting/', + title: 'Off-chain Reporting', + }, + { + url: '/docs/jobs/types/webhook/', + title: 'Webhook' + }, + ], + }, + { + url: '/docs/tasks/', + title: 'Tasks', + children: [ + { + url: '/docs/jobs/task-types/pipelines/', + title: 'Job Pipelines' + }, + { + url: '/docs/jobs/task-types/http/', + title: 'HTTP' + }, + { + url: '/docs/jobs/task-types/bridge/', + title: 'Bridge' + }, + { + url: '/docs/jobs/task-types/jsonparse/', + title: 'JSON Parse' + }, + { + url: '/docs/jobs/task-types/cborparse/', + title: 'CBOR Parse' + }, + { + url: '/docs/jobs/task-types/eth-abi-decode/', + title: 'ETH ABI Decode', + }, + { + url: '/docs/jobs/task-types/eth-abi-decode-log/', + title: 'ETH ABI Decode Log', + }, + { + url: '/docs/jobs/task-types/eth-abi-encode/', + title: 'ETH ABI Encode', + }, + { + url: '/docs/jobs/task-types/eth-call/', + title: 'ETH Call' + }, + { + url: '/docs/jobs/task-types/eth-tx/', + title: 'ETH Tx' + }, + { + url: '/docs/jobs/task-types/multiply/', + title: 'Multiply' + }, + { + url: '/docs/jobs/task-types/divide/', + title: 'Divide' + }, + + { + url: '/docs/jobs/task-types/any/', + title: 'Any' + }, + { + url: '/docs/jobs/task-types/mean/', + title: 'Mean' + }, + { + url: '/docs/jobs/task-types/median/', + title: 'Median' + }, + { + url: '/docs/jobs/task-types/mode/', + title: 'Mode' + }, + { + url: '/docs/jobs/task-types/sum/', + title: 'Sum' }, ], }, ], }, - ], - nonEvm: [ { - section: 'SOLANA', + section: 'EXTERNAL ADAPTERS', contents: [ { - title: 'Overview', - url: '/docs/solana/', + url: '/docs/external-adapters/', + title: 'Introduction' }, { - title: 'Using Data Feeds', - url: '/docs/solana/using-data-feeds-solana/', + url: '/docs/contract-creators/', + title: 'External Adapters in Solidity', }, { - title: 'Solana Data Feeds', - url: '/docs/solana/data-feeds-solana/', + url: '/docs/developers/', + title: 'Building External Adapters' + }, + { + url: '/docs/node-operators/', + title: 'Bridges: Adding External Adapters to Nodes', }, - ], }, { - section: 'TERRA', + section: 'EXTERNAL INITIATORS', contents: [ { - title: 'Overview', - url: '/docs/terra/', + url: '/docs/external-initiators-introduction/', + title: 'Introduction', }, { - title: 'Using Data Feeds', - url: '/docs/terra/using-data-feeds-terra/', + url: '/docs/building-external-initiators/', + title: 'Building External Initiators', }, { - title: 'Terra Data Feeds', - url: '/docs/terra/data-feeds-terra/', + url: '/docs/external-initiators-in-nodes/', + title: 'Adding External Initiators to Nodes', }, ], }, diff --git a/_includes/feed.liquid b/_includes/feed.liquid index d09b74a40c4..d1a21e70aa8 100644 --- a/_includes/feed.liquid +++ b/_includes/feed.liquid @@ -1,6 +1,6 @@ --- layout: ./nodes.liquid -section: smartContract +section: ethereum --- {% case metadata.ecosystem %} diff --git a/_includes/home.liquid b/_includes/home.liquid new file mode 100644 index 00000000000..91ca6faef4f --- /dev/null +++ b/_includes/home.liquid @@ -0,0 +1,38 @@ +--- +layout: ./main.liquid +--- +
+
+ + {% if title %} +
+

{{title}}

+
+
+ + Suggest Edits + +
+
+
+ {% endif %} + + {{content}} + {% if whatsnext %} +
+
+

What's Next

+ + + {% for page in whatsnext %} + + + + {% endfor %} +
+ › {{page[0]}} +
+
+ {% endif %} +
+
diff --git a/_includes/main.liquid b/_includes/main.liquid index 33eba843849..8deec5a5047 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -81,27 +81,28 @@ src="/chainlink-docs.svg" loading="lazy" style="height:40px;width:176px;max-width:176px" alt="Chainlink Developers"> + +
- - + + + +
- {% include _search.html %} - - +
-
- {{ content }} -
-
+ {{ content }} + +
diff --git a/_src/docs.css b/_src/docs.css index 9c8cc2e3941..612460ddd2a 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -138,6 +138,16 @@ a.anchor img { margin: 0 0 0 8px; } +/** Home page */ + +.home-content { + display: flex; +} +.home-content > div { + margin: 0px auto; + padding: 0 16px 16px 16px; +} + /** Side navigation */ .nav-content { display: flex; @@ -478,6 +488,79 @@ hr { font-display: swap; } +/** Custom Feature Cards **/ + +.cl-servicecard { + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.cl-servicecard h2 { + margin-top: 8px; +} + +.cl-servicecard > div { + width: 300px; + min-width: 280px; + max-width: 320px; + margin: 8px; + padding: 8px; + border-radius: 8px; + border: 1px solid #dee7fc; + align-items: center; + text-align: center; + flex: 1; +} + +.cl-servicecard-logos { + display: flex; + flex-flow: row-reverse; + justify-content: center; + margin-top: 12px; + white-space: nowrap; +} + +.cl-servicecard-logos img { + max-height: 40px; + margin-left: -3px; + margin-right: -3px; + transition: all 0.2s; +} + +.cl-servicecard-logos:hover img { + margin-left: -2px; + margin-right: -2px; + cursor: pointer; + transform: translate(0, -8px); + } + +.cl-button--servicecard-sm { + padding: 2px !important; + padding-left: 10px !important; + padding-right: 10px !important; +} + +.cl-button--servicecard { + display: inline-block; + width: 100%; + border: 2px solid #375bd2; + margin: 2px auto; + border-radius: 6px; + box-sizing: border-box; + text-decoration: none !important; + color: #375bd2; + text-align: center; + transition: all 0.2s; +} + +.cl-button--servicecard:hover { + color: #ffffff; + background-color: #375bd2; +} + + + /** Imported from old site **/ .cl-custom-page { text-align: center; @@ -673,10 +756,6 @@ img { display: inline-block; } -.nav-content img { - margin: 8px; -} - svg:not(:root) { overflow: hidden; } diff --git a/_src/images/logos/arbitrum.svg b/_src/images/logos/arbitrum.svg new file mode 100644 index 00000000000..ecb44e47ea2 --- /dev/null +++ b/_src/images/logos/arbitrum.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + diff --git a/_src/images/logos/avalanche.svg b/_src/images/logos/avalanche.svg new file mode 100644 index 00000000000..a5787eac687 --- /dev/null +++ b/_src/images/logos/avalanche.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/_src/images/logos/binance.svg b/_src/images/logos/binance.svg new file mode 100644 index 00000000000..91a66e05f6b --- /dev/null +++ b/_src/images/logos/binance.svg @@ -0,0 +1 @@ +bi \ No newline at end of file diff --git a/_src/images/logos/ethereum.svg b/_src/images/logos/ethereum.svg new file mode 100644 index 00000000000..684e968735f --- /dev/null +++ b/_src/images/logos/ethereum.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + diff --git a/_src/images/logos/fantom.svg b/_src/images/logos/fantom.svg new file mode 100644 index 00000000000..e501d1efe1e --- /dev/null +++ b/_src/images/logos/fantom.svg @@ -0,0 +1 @@ +fa \ No newline at end of file diff --git a/_src/images/logos/harmony.svg b/_src/images/logos/harmony.svg new file mode 100644 index 00000000000..b5af5c090d9 --- /dev/null +++ b/_src/images/logos/harmony.svg @@ -0,0 +1 @@ +harmony-one-logo \ No newline at end of file diff --git a/_src/images/logos/huobi.svg b/_src/images/logos/huobi.svg new file mode 100644 index 00000000000..efa2cf48c2b --- /dev/null +++ b/_src/images/logos/huobi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_src/images/logos/polygon.svg b/_src/images/logos/polygon.svg new file mode 100644 index 00000000000..a5bb6124fc3 --- /dev/null +++ b/_src/images/logos/polygon.svg @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/_src/images/logos/xdai.svg b/_src/images/logos/xdai.svg new file mode 100644 index 00000000000..044b3395a70 --- /dev/null +++ b/_src/images/logos/xdai.svg @@ -0,0 +1,22 @@ + + + + +Group 6 +Created with Sketch. + + + + + + + + + + + + diff --git a/docs/Contract Creators/l2-sequencer-flag.md b/docs/Contract Creators/l2-sequencer-flag.md index 7565eecb353..34f4c8ae8f7 100644 --- a/docs/Contract Creators/l2-sequencer-flag.md +++ b/docs/Contract Creators/l2-sequencer-flag.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "L2 Sequencer Health Flag" permalink: "docs/l2-sequencer-flag/" diff --git a/docs/Data Provider Nodes/chainlink-alarm-clock.md b/docs/Data Provider Nodes/chainlink-alarm-clock.md index 431731369cd..c4eae70c2aa 100644 --- a/docs/Data Provider Nodes/chainlink-alarm-clock.md +++ b/docs/Data Provider Nodes/chainlink-alarm-clock.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Chainlink Alarm Clock (Testnet)" permalink: "docs/chainlink-alarm-clock/" diff --git a/docs/Data Provider Nodes/data-provider-nodes.md b/docs/Data Provider Nodes/data-provider-nodes.md index 66f7a570d6d..93e17ba412d 100644 --- a/docs/Data Provider Nodes/data-provider-nodes.md +++ b/docs/Data Provider Nodes/data-provider-nodes.md @@ -1,11 +1,11 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Data Provider Nodes" permalink: "docs/data-provider-nodes/" --- -# Introduction to Data Provider Nodes +# Overview Chainlink has facilitated the launch of several new oracle data services that allow dApps to access rich data from external data sources. These oracles expand the types of data available on Chainlink and include data and use cases that do not fit into the traditional Chainlink feed model. diff --git a/docs/Data Provider Nodes/dns-ownership-oracle.md b/docs/Data Provider Nodes/dns-ownership-oracle.md index 42d11b5f0e9..9b565a7bf6c 100644 --- a/docs/Data Provider Nodes/dns-ownership-oracle.md +++ b/docs/Data Provider Nodes/dns-ownership-oracle.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "DNS Ownership Oracle" permalink: "docs/dns-ownership-oracle/" diff --git a/docs/Data Provider Nodes/finage-global-market-data-oracle.md b/docs/Data Provider Nodes/finage-global-market-data-oracle.md index a3bea454849..664386f7950 100644 --- a/docs/Data Provider Nodes/finage-global-market-data-oracle.md +++ b/docs/Data Provider Nodes/finage-global-market-data-oracle.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Finage Global Market Data Oracle" permalink: "docs/finage-global-market-data-oracle/" diff --git a/docs/Data Provider Nodes/flightaware-chainlink-testnet.md b/docs/Data Provider Nodes/flightaware-chainlink-testnet.md index 114555ad3d8..a4a436d6fdb 100644 --- a/docs/Data Provider Nodes/flightaware-chainlink-testnet.md +++ b/docs/Data Provider Nodes/flightaware-chainlink-testnet.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "FlightAware Chainlink (Testnet)" permalink: "docs/flightaware-chainlink-testnet/" diff --git a/docs/Data Provider Nodes/google-weather.md b/docs/Data Provider Nodes/google-weather.md index e92c5d2819a..341165129ff 100644 --- a/docs/Data Provider Nodes/google-weather.md +++ b/docs/Data Provider Nodes/google-weather.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Google Weather Oracle" permalink: "docs/google-weather/" diff --git a/docs/Data Provider Nodes/kraken-rates-oracle-node.md b/docs/Data Provider Nodes/kraken-rates-oracle-node.md index b70e268f544..de8a29cc9e4 100644 --- a/docs/Data Provider Nodes/kraken-rates-oracle-node.md +++ b/docs/Data Provider Nodes/kraken-rates-oracle-node.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Kraken Rates Oracle Node" permalink: "docs/kraken-rates-oracle-node/" diff --git a/docs/Data Provider Nodes/lcx-testnet.md b/docs/Data Provider Nodes/lcx-testnet.md index 2e6e51d8415..6a842ef78fb 100644 --- a/docs/Data Provider Nodes/lcx-testnet.md +++ b/docs/Data Provider Nodes/lcx-testnet.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "LCX (Testnet)" permalink: "docs/lcx-testnet/" diff --git a/docs/Developer Reference/contributing-to-chainlink.md b/docs/Developer Reference/contributing-to-chainlink.md index 1e0840b6b90..df45309fb90 100644 --- a/docs/Developer Reference/contributing-to-chainlink.md +++ b/docs/Developer Reference/contributing-to-chainlink.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Contributing to Chainlink" permalink: "docs/contributing-to-chainlink/" diff --git a/docs/Developer Reference/create-a-chainlinked-project.md b/docs/Developer Reference/create-a-chainlinked-project.md index e05e1867da5..1a8e752a651 100644 --- a/docs/Developer Reference/create-a-chainlinked-project.md +++ b/docs/Developer Reference/create-a-chainlinked-project.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Install Instructions" permalink: "docs/create-a-chainlinked-project/" diff --git a/docs/Developer Reference/developer-communications.html b/docs/Developer Reference/developer-communications.html index 4e3c87ce954..78b3d2d8498 100644 --- a/docs/Developer Reference/developer-communications.html +++ b/docs/Developer Reference/developer-communications.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Developer Communications" permalink: "docs/developer-communications/" diff --git a/docs/Developer Reference/getting-help.md b/docs/Developer Reference/getting-help.md index 36c5c78d0d5..8677f3f7d7f 100644 --- a/docs/Developer Reference/getting-help.md +++ b/docs/Developer Reference/getting-help.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Getting Support" permalink: "docs/getting-help/" diff --git a/docs/Developer Reference/hackathon-resources.md b/docs/Developer Reference/hackathon-resources.md index 4e738958c61..28d0dc5ea4a 100644 --- a/docs/Developer Reference/hackathon-resources.md +++ b/docs/Developer Reference/hackathon-resources.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Hackathon Resources" permalink: "docs/hackathon-resources/" @@ -37,7 +37,7 @@ Always refer back to the [getting help](/docs/getting-help) page for the latest Be sure to check the documentation in the links above for in depth-descriptions of everything. -New? Start with [Beginners - The Basics](../beginners-tutorial/), and follow everything in [Tutorials](../tutorials/) +New? See the [Getting Started Guide](/getting-started/). - [Beginners - The Basics](../beginners-tutorial/) - [Step-by-step guide to working with smart contracts](/docs/intermediates-tutorial) - [Video Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) diff --git a/docs/Developer Reference/hackathon-rules-waiver-and-release.md b/docs/Developer Reference/hackathon-rules-waiver-and-release.md index ed7377576f1..929b98b17f8 100644 --- a/docs/Developer Reference/hackathon-rules-waiver-and-release.md +++ b/docs/Developer Reference/hackathon-rules-waiver-and-release.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Hackathon Rules, Waiver & Release, and Code of Conduct" permalink: "docs/hackathon-rules-waiver-release-and-code-of-conduct/" diff --git a/docs/Developer Reference/link-token-contracts.md b/docs/Developer Reference/link-token-contracts.md index fba0fb977b2..cd91e7a83c8 100644 --- a/docs/Developer Reference/link-token-contracts.md +++ b/docs/Developer Reference/link-token-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "LINK Token Contracts" permalink: "docs/link-token-contracts/" diff --git a/docs/Developer Reference/selecting-data-feeds.md b/docs/Developer Reference/selecting-data-feeds.md index 25cfc571471..a892f0c12e3 100644 --- a/docs/Developer Reference/selecting-data-feeds.md +++ b/docs/Developer Reference/selecting-data-feeds.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Selecting Quality Data Feeds" permalink: "docs/selecting-data-feeds/" diff --git a/docs/Developer Reference/user-guides.md b/docs/Developer Reference/user-guides.md index 457b3bee41a..b0642d55758 100644 --- a/docs/Developer Reference/user-guides.md +++ b/docs/Developer Reference/user-guides.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "User Guides" permalink: "docs/user-guides/" diff --git a/docs/Introduction/architecture-overview.md b/docs/Introduction/architecture-overview.md index c81e9d522e4..dcae3c5a9fe 100644 --- a/docs/Introduction/architecture-overview.md +++ b/docs/Introduction/architecture-overview.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Architecture Overview" permalink: "docs/architecture-overview/" diff --git a/docs/Introduction/architecture-overview/architecture-decentralized-model.md b/docs/Introduction/architecture-overview/architecture-decentralized-model.md index ac32831c84f..bb68af82ff3 100644 --- a/docs/Introduction/architecture-overview/architecture-decentralized-model.md +++ b/docs/Introduction/architecture-overview/architecture-decentralized-model.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Decentralized Data Model" permalink: "docs/architecture-decentralized-model/" diff --git a/docs/Introduction/architecture-overview/architecture-request-model.md b/docs/Introduction/architecture-overview/architecture-request-model.md index 9c6bfe81958..affc7ac5e17 100644 --- a/docs/Introduction/architecture-overview/architecture-request-model.md +++ b/docs/Introduction/architecture-overview/architecture-request-model.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Basic Request Model" permalink: "docs/architecture-request-model/" diff --git a/docs/Introduction/architecture-overview/bsc-ocr-migration-schedule.md b/docs/Introduction/architecture-overview/bsc-ocr-migration-schedule.md index 3c64d486b62..195ad7a0cb9 100644 --- a/docs/Introduction/architecture-overview/bsc-ocr-migration-schedule.md +++ b/docs/Introduction/architecture-overview/bsc-ocr-migration-schedule.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "BSC OCR Migration Schedule" permalink: "docs/bsc-ocr-migration-schedule/" diff --git a/docs/Introduction/architecture-overview/off-chain-reporting.md b/docs/Introduction/architecture-overview/off-chain-reporting.md index 6f1c33750e2..deb50d6fb90 100644 --- a/docs/Introduction/architecture-overview/off-chain-reporting.md +++ b/docs/Introduction/architecture-overview/off-chain-reporting.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Off-Chain Reporting" permalink: "docs/off-chain-reporting/" diff --git a/docs/Developer Reference/user-guides/acquire-link.md b/docs/Introduction/getting-started/acquire-link.md similarity index 98% rename from docs/Developer Reference/user-guides/acquire-link.md rename to docs/Introduction/getting-started/acquire-link.md index 97f797fe0ad..8a6a7a2411c 100644 --- a/docs/Developer Reference/user-guides/acquire-link.md +++ b/docs/Introduction/getting-started/acquire-link.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Acquire testnet LINK" permalink: "docs/acquire-link/" @@ -13,7 +13,7 @@ This page will show you how to obtain and add testnet LINK to MetaMask. If you a * Go to the Chainlink Kovan Faucet site: https://faucets.chain.link/kovan > 👍 Note -> +> > You can also get testnet LINK on other test networks, such as Rinkeby, from https://faucets.chain.link/rinkeby. ![Link Kovan Faucet](/files/faucet.png) diff --git a/docs/Developer Reference/user-guides/deploy-your-first-contract.md b/docs/Introduction/getting-started/deploy-your-first-contract.md similarity index 99% rename from docs/Developer Reference/user-guides/deploy-your-first-contract.md rename to docs/Introduction/getting-started/deploy-your-first-contract.md index e576a9e35ab..7b35bd9ac67 100644 --- a/docs/Developer Reference/user-guides/deploy-your-first-contract.md +++ b/docs/Introduction/getting-started/deploy-your-first-contract.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Deploy your first contract" permalink: "docs/deploy-your-first-contract/" diff --git a/docs/Developer Reference/user-guides/fund-your-contract.md b/docs/Introduction/getting-started/fund-your-contract.md similarity index 91% rename from docs/Developer Reference/user-guides/fund-your-contract.md rename to docs/Introduction/getting-started/fund-your-contract.md index 407bfd5f507..6c0c5f7b9e0 100644 --- a/docs/Developer Reference/user-guides/fund-your-contract.md +++ b/docs/Introduction/getting-started/fund-your-contract.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Fund your contract" permalink: "docs/fund-your-contract/" @@ -8,7 +8,7 @@ whatsnext: {"Use your first contract!":"/docs/use-your-first-contract/"} --- This guide explains how to fund your Solidity contract with LINK using the Remix IDE. -# Retrieveing the contract address +# Retrieveing the contract address * Deploy your contract and wait until you see a new contract in the `Deployed Contracts` section. * Copy the contract address to your clipboard using the copy icon located near the contract title on the left side panel. @@ -25,5 +25,5 @@ This guide explains how to fund your Solidity contract with LINK using the Remix ![Metamask Send Link Screen](/files/867073d-metamask.png) > 🚧 Transaction fee didn't update? -> -> You may need to click **Fastest**, **Fast**, **Slow**, or **Advanced Options** after entering the **Amount** to update the gas limit for the token transfer to be successful. \ No newline at end of file +> +> You may need to click **Fastest**, **Fast**, **Slow**, or **Advanced Options** after entering the **Amount** to update the gas limit for the token transfer to be successful. diff --git a/docs/Developer Reference/user-guides/install-metamask.md b/docs/Introduction/getting-started/install-metamask.md similarity index 96% rename from docs/Developer Reference/user-guides/install-metamask.md rename to docs/Introduction/getting-started/install-metamask.md index be2652278bd..e5d999d1e1c 100644 --- a/docs/Developer Reference/user-guides/install-metamask.md +++ b/docs/Introduction/getting-started/install-metamask.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Install, configure & fund MetaMask" permalink: "docs/install-metamask/" @@ -20,11 +20,11 @@ MetaMask is a wallet that runs as a self-contained application inside your brows ## Install & Configure -Go to: metamask.io and install the browser extension in Chrome or Firefox. +Go to: metamask.io and install the browser extension in Chrome or Firefox. * After installing the MetaMask extension, open the extension by clicking on the MetaMask Fox icon. If prompted to use the New Look, do so. * Create a new vault. -* You will be presented with a 12-word mnemonic phrase; copy that phrase down in a very secure location that only you can access. +* You will be presented with a 12-word mnemonic phrase; copy that phrase down in a very secure location that only you can access. * Change the network selection from `Main Ethereum Network` to the `Kovan Test Network`. ## Fund your address with Ether diff --git a/docs/Developer Reference/user-guides/use-your-first-contract.md b/docs/Introduction/getting-started/use-your-first-contract.md similarity index 97% rename from docs/Developer Reference/user-guides/use-your-first-contract.md rename to docs/Introduction/getting-started/use-your-first-contract.md index 4ba13c72778..52125e322bd 100644 --- a/docs/Developer Reference/user-guides/use-your-first-contract.md +++ b/docs/Introduction/getting-started/use-your-first-contract.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Use your first contract!" permalink: "docs/use-your-first-contract/" @@ -43,4 +43,4 @@ whatsnext: {"Introduction to Data Feeds":"/docs/using-chainlink-reference-contra ![Remix Price Result Message](/files/d24f0f2-remix.png) -If you see a value for the `currentPrice` variable, then Chainlink has successfully responded to your contract with the current price of ETH. Now you're ready to write more complex smart contracts that execute based on real-world data. \ No newline at end of file +If you see a value for the `currentPrice` variable, then Chainlink has successfully responded to your contract with the current price of ETH. Now you're ready to write more complex smart contracts that execute based on real-world data. diff --git a/docs/Introduction/tutorials.md b/docs/Introduction/tutorials.md deleted file mode 100644 index 8ec50c2243c..00000000000 --- a/docs/Introduction/tutorials.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: nodes.liquid -section: smartContract -date: Last Modified -title: "Tutorials" -permalink: "docs/tutorials/" -whatsnext: {"The Basics tutorial":"/docs/beginners-tutorial/", "Random Numbers tutorial":"/docs/intermediates-tutorial/", "API Calls tutorial":"/docs/advanced-tutorial/"} -hidden: false ---- -![Chainlink Abstract Banner](/files/a4c6c80-85d09b6-19facd8-banner.png) - -We've compiled a series of tutorials designed to teach smart contracts basics and how to use them to consume data from the Chainlink oracle ecosystem. - -# The Basics Tutorial - -If you're new to smart contract development, this is a great place to start. We walk you through developing your first smart contract that interacts with Chainlink. - -Try out the [The Basics tutorial](../beginners-tutorial/). - -# Random Numbers Tutorial - -Randomness is very difficult to generate on blockchains. The reason for this is because every node must come to the same conclusion, forming a consensus. [Chainlink VRF](../chainlink-vrf/) solves this by allowing smart contracts to consume random numbers. - -Try out the [Random Numbers tutorial](../intermediates-tutorial/) on consuming random numbers in smart contracts. - -# API Calls Tutorial - -Learn more about how the Chainlink Request and Receive cycle works under the hood, and how you can use this powerful software to feed data to your smart contracts. - -Try the [API Calls tutorial](../advanced-tutorial/). - -# Other Tutorials - -Learn from other examples of how you can use Chainlink Oracles. - -See the list of [other tutorials](../other-tutorials/) that are available. diff --git a/docs/Introduction/tutorials/advanced-tutorial.md b/docs/Introduction/tutorials/advanced-tutorial.md index bc08edb0008..cb00d72d46c 100644 --- a/docs/Introduction/tutorials/advanced-tutorial.md +++ b/docs/Introduction/tutorials/advanced-tutorial.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "API Calls: Using Any API" permalink: "docs/advanced-tutorial/" @@ -263,7 +263,7 @@ contract sportContract is ChainlinkClient { # 5. How do I deploy to testnet? -Your contract is complete and ready to be compiled and deployed. You can see a complete version of the contract in Remix: +Your contract is complete and ready to be compiled and deployed. You can see a complete version of the contract in Remix:
Deploy this contract using Remix ↗ diff --git a/docs/Introduction/tutorials/beginners-tutorial.md b/docs/Introduction/tutorials/beginners-tutorial.md index ce48aba8508..2451c3865af 100644 --- a/docs/Introduction/tutorials/beginners-tutorial.md +++ b/docs/Introduction/tutorials/beginners-tutorial.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "The Basics: Using Hybrid Smart Contracts" permalink: "docs/beginners-tutorial/" @@ -84,7 +84,7 @@ contract HelloWorld { } ``` -## Variables +## Variables Again, like Javascript, contracts can have state variables and local variables. **State variables** are variables with values that are permanently stored in contract storage. The values of **local variables**, however, are present only until the function is executing. There are also different types of variables you can use within Solidity, such as `string`, `uint256`, etc. Check out the [Solidity documentation](https://docs.soliditylang.org/en/v0.8.7/) to learn more about the different kinds of variables and types. @@ -144,7 +144,7 @@ Chainlink data feeds are sources of data [aggregated from many independent Chain ![Chainlink Feeds List](/images/contract-devs/price-aggr.png) ## Information about Interfaces -Before using data feeds, it's important to understand how interfaces work in Solidity. An **interface** is another concept that will be familiar to programmers of other languages. +Before using data feeds, it's important to understand how interfaces work in Solidity. An **interface** is another concept that will be familiar to programmers of other languages. Interfaces define functions without their implementation, leaving inheriting contracts to define the actual implementation themselves. This makes it easier to know what functions to call in a contract. Here's an example of an interface: @@ -155,7 +155,7 @@ Interfaces define functions without their implementation, leaving inheriting con Deploy this contract using Remix ↗
-For this example, `override` is necessary in the `Test` contract function because it overrides the base function contained in the `numberComparison` interface. The contract uses `pure` instead of `view` because the `isSameNum` function in the `Test` contract does not return a storage variable. +For this example, `override` is necessary in the `Test` contract function because it overrides the base function contained in the `numberComparison` interface. The contract uses `pure` instead of `view` because the `isSameNum` function in the `Test` contract does not return a storage variable. ## Using Chainlink Data Feeds diff --git a/docs/Introduction/tutorials/intermediates-tutorial.md b/docs/Introduction/tutorials/intermediates-tutorial.md index 314148a4c47..aa868c68b25 100644 --- a/docs/Introduction/tutorials/intermediates-tutorial.md +++ b/docs/Introduction/tutorials/intermediates-tutorial.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Random Numbers: Using Chainlink VRF" permalink: "docs/intermediates-tutorial/" @@ -53,7 +53,7 @@ Randomness, on the other hand, cannot be reference data. If the result of random # 3. What is the payment process for generating a random number? -In return for providing the service of generating a random number, oracles are paid in [**LINK**](../link-token-contracts/). The contract that requests the randomness must pay for the service during the request. +In return for providing the service of generating a random number, oracles are paid in [**LINK**](../link-token-contracts/). The contract that requests the randomness must pay for the service during the request. LINK conforms to the ERC-677 token standard, which is an extension of ERC-20. This standard is what enables data to be encoded in token transfers. This is integral to the Request and Receive cycle. [Click here](https://github.com/ethereum/EIPs/issues/677) to learn more about ERC-677. @@ -63,7 +63,7 @@ For example, if the current price of Chainlink VRF is 0.1 LINK, the requesting c # 4. How can I use Chainlink VRF? -To see a basic implementation of Chainlink VRF, see [Get a Random Number](../get-a-random-number/). In this section, you will create an application that uses Chainlink VRF to generate randomness. The contract used in this application will have a [*Game of Thrones*](https://en.wikipedia.org/wiki/Game_of_Thrones) theme. +To see a basic implementation of Chainlink VRF, see [Get a Random Number](../get-a-random-number/). In this section, you will create an application that uses Chainlink VRF to generate randomness. The contract used in this application will have a [*Game of Thrones*](https://en.wikipedia.org/wiki/Game_of_Thrones) theme. The contract will request randomness from Chainlink VRF. The result of the randomness will transform into a number between 1 and 20, mimicking the rolling of a 20 sided die. Each number represents a *Game of Thrones* house. If the dice land on the value 1, the user is assigned house Targaryan, 2 for Lannister, and so on. A full list of houses can be found [here](https://gameofthrones.fandom.com/wiki/Great_House). diff --git a/docs/Introduction/tutorials/other-tutorials.md b/docs/Introduction/tutorials/other-tutorials.md index a12e5722609..04f26f7c753 100644 --- a/docs/Introduction/tutorials/other-tutorials.md +++ b/docs/Introduction/tutorials/other-tutorials.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: gettingStarted date: Last Modified title: "Learning Resources" permalink: "docs/other-tutorials/" @@ -96,7 +96,7 @@ Below is a list of applications of Chainlink's products and services sorted by d ## Starter Kits -Our Starter Kits help jumpstart your full-stack development process. You can get starter kits for Brownie (Python), Truffle (Javascript), and Hardhat (Javascript). See the [Engineering Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) playlist to learn more about each kit and how to use them. +Our Starter Kits help jumpstart your full-stack development process. You can get starter kits for Brownie (Python), Truffle (Javascript), and Hardhat (Javascript). See the [Engineering Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) playlist to learn more about each kit and how to use them. - [Chainlink Brownie Starter Kit (Python)](https://github.com/smartcontractkit/chainlink-mix) - [Chainlink Truffle Starter Kit (Javascript)](https://github.com/smartcontractkit/truffle-starter-kit) @@ -109,7 +109,7 @@ Our Starter Kits help jumpstart your full-stack development process. You can get ## More Inspiration -Looking for more ways to use Chainlink? Here are some resources that discuss Chainlink's use cases as well as the winning projects we've had in our previous hackathons. There is also a link to the Marketplace where you can find the latest data provider nodes and explore the network. +Looking for more ways to use Chainlink? Here are some resources that discuss Chainlink's use cases as well as the winning projects we've had in our previous hackathons. There is also a link to the Marketplace where you can find the latest data provider nodes and explore the network. - [77 Use Cases by Chainlink](https://blog.chain.link/44-ways-to-enhance-your-smart-contract-with-chainlink/) - [Past Hackathon Winning Projects](/docs/example-projects) @@ -129,4 +129,4 @@ The Chainlink community is an inviting group of engineers that is always looking - [Twitter](https://mobile.twitter.com/chainlink) - [Reddit](https://www.reddit.com/r/Chainlink/) - [Telegram](https://t.me/chainlinkofficial) -- [Blog](https://blog.chain.link) \ No newline at end of file +- [Blog](https://blog.chain.link) diff --git a/docs/Solana/DataFeeds/data-feeds-solana.md b/docs/Solana/DataFeeds/data-feeds-solana.md index fd7f5c1077b..5fc8b9b8aa3 100644 --- a/docs/Solana/DataFeeds/data-feeds-solana.md +++ b/docs/Solana/DataFeeds/data-feeds-solana.md @@ -1,6 +1,6 @@ --- layout: feed.liquid -section: nonEvm +section: solana title: "Solana Feeds" stub: data-feeds-solana permalink: "docs/solana/data-feeds-solana/" diff --git a/docs/Solana/DataFeeds/using-data-feeds-solana.md b/docs/Solana/DataFeeds/using-data-feeds-solana.md index 7230fc96244..836b6ebb797 100644 --- a/docs/Solana/DataFeeds/using-data-feeds-solana.md +++ b/docs/Solana/DataFeeds/using-data-feeds-solana.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: nonEvm +section: solana date: Last Modified title: "Using Data Feeds (Solana)" permalink: "docs/solana/using-data-feeds-solana/" diff --git a/docs/Solana/overview.md b/docs/Solana/overview.md index 109b53c8536..bdf8637950b 100644 --- a/docs/Solana/overview.md +++ b/docs/Solana/overview.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: nonEvm +section: solana date: Last Modified title: "Solana on Chainlink" permalink: "docs/solana/" diff --git a/docs/Terra/DataFeeds/data-feeds-terra.md b/docs/Terra/DataFeeds/data-feeds-terra.md index 0f77c087fc2..72d0e0f7933 100644 --- a/docs/Terra/DataFeeds/data-feeds-terra.md +++ b/docs/Terra/DataFeeds/data-feeds-terra.md @@ -1,6 +1,6 @@ --- layout: feed.liquid -section: nonEvm +section: terra title: "Terra Feeds" stub: data-feeds-terra permalink: "docs/terra/data-feeds-terra/" diff --git a/docs/Terra/DataFeeds/using-data-feeds-terra.md b/docs/Terra/DataFeeds/using-data-feeds-terra.md index 87cb60f0390..a30f3ebc52f 100644 --- a/docs/Terra/DataFeeds/using-data-feeds-terra.md +++ b/docs/Terra/DataFeeds/using-data-feeds-terra.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: nonEvm +section: terra date: Last Modified title: "Using Data Feeds (Terra)" permalink: "docs/terra/using-data-feeds-terra/" diff --git a/docs/Terra/overview.md b/docs/Terra/overview.md index 31e44b42bec..ad8ef904fd7 100644 --- a/docs/Terra/overview.md +++ b/docs/Terra/overview.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: nonEvm +section: terra date: Last Modified title: "Terra on Chainlink" permalink: "docs/terra/" diff --git a/docs/Using Any API/api-reference.md b/docs/Using Any API/api-reference.md index 72386109aa0..706440a8e2f 100644 --- a/docs/Using Any API/api-reference.md +++ b/docs/Using Any API/api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "ChainlinkClient API Reference" permalink: "docs/chainlink-framework/" diff --git a/docs/Using Any API/contract-addresses.md b/docs/Using Any API/contract-addresses.md index 93b0ffb8ece..4c5ad8605fe 100644 --- a/docs/Using Any API/contract-addresses.md +++ b/docs/Using Any API/contract-addresses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Contract Addresses" permalink: "docs/decentralized-oracles-ethereum-mainnet/" diff --git a/docs/Using Any API/existing-job-request.md b/docs/Using Any API/existing-job-request.md index c7706598b38..731e243ef1d 100644 --- a/docs/Using Any API/existing-job-request.md +++ b/docs/Using Any API/existing-job-request.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Make an Existing Job Request" permalink: "docs/existing-job-request/" diff --git a/docs/Using Any API/large-responses.md b/docs/Using Any API/large-responses.md index 752d1ded229..0e4f1a052b6 100644 --- a/docs/Using Any API/large-responses.md +++ b/docs/Using Any API/large-responses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Large Responses" permalink: "docs/large-responses/" diff --git a/docs/Using Any API/listing-services.md b/docs/Using Any API/listing-services.md index 4c7b17a1399..7c1b71eb0c0 100644 --- a/docs/Using Any API/listing-services.md +++ b/docs/Using Any API/listing-services.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Find Existing Jobs" permalink: "docs/listing-services/" diff --git a/docs/Using Any API/make-a-http-get-request.md b/docs/Using Any API/make-a-http-get-request.md index 7458624d9ca..52b15f79828 100644 --- a/docs/Using Any API/make-a-http-get-request.md +++ b/docs/Using Any API/make-a-http-get-request.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Make a GET Request" permalink: "docs/make-a-http-get-request/" diff --git a/docs/Using Any API/multi-variable-responses.md b/docs/Using Any API/multi-variable-responses.md index 9698a1fd6f1..8238763c0f6 100644 --- a/docs/Using Any API/multi-variable-responses.md +++ b/docs/Using Any API/multi-variable-responses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Multi-Variable Responses" permalink: "docs/multi-variable-responses/" diff --git a/docs/Using Any API/request-and-receive-data.md b/docs/Using Any API/request-and-receive-data.md index 09bd651e4a9..0fc36ffcb95 100644 --- a/docs/Using Any API/request-and-receive-data.md +++ b/docs/Using Any API/request-and-receive-data.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Introduction to Using Any API" permalink: "docs/request-and-receive-data/" diff --git a/docs/Using Price Feeds/binance-smart-chain-price-feeds.md b/docs/Using Price Feeds/binance-smart-chain-price-feeds.md index f9fc45380f0..39ba9243027 100644 --- a/docs/Using Price Feeds/binance-smart-chain-price-feeds.md +++ b/docs/Using Price Feeds/binance-smart-chain-price-feeds.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Binance Smart Chain Data Feeds" permalink: "docs/binance-smart-chain-price-feeds/" diff --git a/docs/Using Price Feeds/feed-registry.html b/docs/Using Price Feeds/feed-registry.html index 51d5da71337..bbde6e9730f 100644 --- a/docs/Using Price Feeds/feed-registry.html +++ b/docs/Using Price Feeds/feed-registry.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Feed Registry" permalink: "docs/feed-registry/" diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index e410348bc77..6ff781102cd 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Using Data Feeds (EVM)" permalink: "docs/get-the-latest-price/" diff --git a/docs/Using Price Feeds/historical-price-data.html b/docs/Using Price Feeds/historical-price-data.html index a829702ecb2..bf0ba758e7d 100644 --- a/docs/Using Price Feeds/historical-price-data.html +++ b/docs/Using Price Feeds/historical-price-data.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Historical Price Data" permalink: "docs/historical-price-data/" diff --git a/docs/Using Price Feeds/price-feeds-api-reference.md b/docs/Using Price Feeds/price-feeds-api-reference.md index 64887cb76d7..0f55edcb8a9 100644 --- a/docs/Using Price Feeds/price-feeds-api-reference.md +++ b/docs/Using Price Feeds/price-feeds-api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Data Feeds API Reference" permalink: "docs/price-feeds-api-reference/" diff --git a/docs/Using Price Feeds/price-feeds-migration-august-2020.md b/docs/Using Price Feeds/price-feeds-migration-august-2020.md index 5c01bb66a8a..00b38c488b5 100644 --- a/docs/Using Price Feeds/price-feeds-migration-august-2020.md +++ b/docs/Using Price Feeds/price-feeds-migration-august-2020.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Data Feeds August 2020" permalink: "docs/price-feeds-migration-august-2020/" diff --git a/docs/Using Price Feeds/reference-contracts.md b/docs/Using Price Feeds/reference-contracts.md index 0673b17d313..1e8c19ff4d5 100644 --- a/docs/Using Price Feeds/reference-contracts.md +++ b/docs/Using Price Feeds/reference-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Data Feeds Contract Addresses" permalink: "docs/reference-contracts/" diff --git a/docs/Using Price Feeds/reference-contracts/ens.html b/docs/Using Price Feeds/reference-contracts/ens.html index 82187799185..aa85f934dd4 100644 --- a/docs/Using Price Feeds/reference-contracts/ens.html +++ b/docs/Using Price Feeds/reference-contracts/ens.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "ENS" permalink: "docs/ens/" diff --git a/docs/Using Price Feeds/using-chainlink-reference-contracts.md b/docs/Using Price Feeds/using-chainlink-reference-contracts.md index ffc29b1438c..4557a917a38 100644 --- a/docs/Using Price Feeds/using-chainlink-reference-contracts.md +++ b/docs/Using Price Feeds/using-chainlink-reference-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Introduction to Data Feeds" permalink: "docs/using-chainlink-reference-contracts/" diff --git a/docs/Using Randomness/chainlink-vrf-api-reference.md b/docs/Using Randomness/chainlink-vrf-api-reference.md index 0352a1ce456..b8a2cbafd06 100644 --- a/docs/Using Randomness/chainlink-vrf-api-reference.md +++ b/docs/Using Randomness/chainlink-vrf-api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Chainlink VRF API Reference" permalink: "docs/chainlink-vrf-api-reference/" diff --git a/docs/Using Randomness/chainlink-vrf.md b/docs/Using Randomness/chainlink-vrf.md index 3f25a119f97..f16e4764215 100644 --- a/docs/Using Randomness/chainlink-vrf.md +++ b/docs/Using Randomness/chainlink-vrf.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Introduction to Chainlink VRF" permalink: "docs/chainlink-vrf/" diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/get-a-random-number.md index e42e375b841..7cf7326c869 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Get a Random Number" permalink: "docs/get-a-random-number/" diff --git a/docs/Using Randomness/vrf-best-practices.md b/docs/Using Randomness/vrf-best-practices.md index cd922eda2f0..3712dbc0b7e 100644 --- a/docs/Using Randomness/vrf-best-practices.md +++ b/docs/Using Randomness/vrf-best-practices.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "VRF Best Practices" permalink: "docs/chainlink-vrf-best-practices/" diff --git a/docs/Using Randomness/vrf-contracts.md b/docs/Using Randomness/vrf-contracts.md index 73be661edb2..4a5b922da23 100644 --- a/docs/Using Randomness/vrf-contracts.md +++ b/docs/Using Randomness/vrf-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "Chainlink VRF Contract Addresses" permalink: "docs/vrf-contracts/" diff --git a/docs/Using Randomness/vrf-security-considerations.md b/docs/Using Randomness/vrf-security-considerations.md index 858e05a4124..12781a17fab 100644 --- a/docs/Using Randomness/vrf-security-considerations.md +++ b/docs/Using Randomness/vrf-security-considerations.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereum date: Last Modified title: "VRF Security Considerations" permalink: "docs/vrf-security-considerations/" diff --git a/docs/chainlink-keepers/compatible-contracts.md b/docs/chainlink-keepers/compatible-contracts.md index 333524c6fd0..7c8efe5ebdc 100644 --- a/docs/chainlink-keepers/compatible-contracts.md +++ b/docs/chainlink-keepers/compatible-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereumKeepers date: Last Modified title: 'Making Keeper-compatible Contracts' whatsnext: diff --git a/docs/chainlink-keepers/faqs.md b/docs/chainlink-keepers/faqs.md index c5e8259e0c2..0bd15c39046 100644 --- a/docs/chainlink-keepers/faqs.md +++ b/docs/chainlink-keepers/faqs.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereumKeepers date: Last Modified title: 'Chainlink Keepers Frequently Asked Questions' --- diff --git a/docs/chainlink-keepers/introduction.md b/docs/chainlink-keepers/introduction.md index f0c6ad32d4f..16971bbaa8d 100644 --- a/docs/chainlink-keepers/introduction.md +++ b/docs/chainlink-keepers/introduction.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereumKeepers date: Last Modified title: 'Introduction to Chainlink Keepers' whatsnext: diff --git a/docs/chainlink-keepers/overview.html b/docs/chainlink-keepers/overview.html index 6c374db8f88..3ae8a6584d8 100644 --- a/docs/chainlink-keepers/overview.html +++ b/docs/chainlink-keepers/overview.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereumKeepers date: Last Modified title: 'Keepers Network Overview' networks: diff --git a/docs/chainlink-keepers/register-upkeep.md b/docs/chainlink-keepers/register-upkeep.md index f58e92a4f06..a2118162a2b 100644 --- a/docs/chainlink-keepers/register-upkeep.md +++ b/docs/chainlink-keepers/register-upkeep.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereumKeepers date: Last Modified title: 'Register Keeper Upkeep for a Contract' whatsnext: @@ -72,7 +72,7 @@ Registering an Upkeep with the Chainlink Keepers App notifies the Keeper Network ![Confirm LINK Transfer](/images/contract-devs/keeper/keeper-confirm-transfer.png) * Receive a success message and verify that the funds were added to the Upkeep ![Funds Added Successful Message](/images/contract-devs/keeper/keeper-add-funds.png) - + Note: Funds added to your upkeep will not be available for use by the Keeper Network until the minimum number of block confirmations have passed. This differs from chain to chain. # How Funding Works diff --git a/docs/chainlink-keepers/utility-contracts.md b/docs/chainlink-keepers/utility-contracts.md index 8c713eff4ed..04c7b6d16ff 100644 --- a/docs/chainlink-keepers/utility-contracts.md +++ b/docs/chainlink-keepers/utility-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: smartContract +section: ethereumKeepers date: Last Modified title: 'Keeper Utility Contracts' whatsnext: diff --git a/contracts.md b/ethereum.md similarity index 96% rename from contracts.md rename to ethereum.md index 32162ac33f4..d21047cd1b8 100644 --- a/contracts.md +++ b/ethereum.md @@ -1,11 +1,13 @@ --- layout: nodes.liquid -section: smartContract -title: "Chainlink Smart Contract Docs" +section: ethereum +title: "Chainlink on Ethereum Chains" date: Last Modified -permalink: / +permalink: /ethereum/ --- + +
diff --git a/getting-started.md b/getting-started.md new file mode 100644 index 00000000000..64b1f4b6e87 --- /dev/null +++ b/getting-started.md @@ -0,0 +1,9 @@ +--- +layout: nodes.liquid +section: gettingStarted +title: "Chainlink Getting Started Guide" +date: Last Modified +permalink: /getting-started/ +--- + +Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services. diff --git a/home.md b/home.md new file mode 100644 index 00000000000..1073a6e1a92 --- /dev/null +++ b/home.md @@ -0,0 +1,89 @@ +--- +layout: home.liquid +section: ethereum +title: "Chainlink Documentation" +date: Last Modified +permalink: / +landing: true +--- + +
+
+
+
+

New to Chainlink and Smart Contracts?

+

+ Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum. +

+
+ + Getting Started Guide + +
+

Networks and Services

+ +
+
+

Need to run your own Chainlink Node?

+

+ Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. +

+
+ + Node Operator's Guide + +
+
+
diff --git a/contracts-nonevm.md b/solana.md similarity index 61% rename from contracts-nonevm.md rename to solana.md index efca05a34b4..53469ee6495 100644 --- a/contracts-nonevm.md +++ b/solana.md @@ -1,9 +1,9 @@ --- layout: nodes.liquid -section: nonEvm -title: "Chainlink Documentation (Non-EVM)" +section: solana +title: "Chainlink on Solana" date: Last Modified -permalink: /non-evm/ +permalink: /solana/ ---
@@ -19,8 +19,8 @@ permalink: /non-evm/

Use Data Feeds on Solana

@@ -29,19 +29,6 @@ permalink: /non-evm/ Data feeds on Solana

-
-
- -

Use Data Feeds on Terra

-

- Terra is an application-specific blockchain built on the Cosmos SDK and Tendermint consensus. You can use Chainlink Data Feeds on the Terra network to connect your smart contracts to the real-world market prices of assets. -

- Data feeds on Terra -
-
New to Smart Contracts?

Start with the Ethereum network and build your first smart contract connected to off-chain data in our - Beginner's Walkthrough. + Getting Started Guide.

- - Start Building + + Getting Started Guide
diff --git a/terra.md b/terra.md new file mode 100644 index 00000000000..ba836dd6501 --- /dev/null +++ b/terra.md @@ -0,0 +1,43 @@ +--- +layout: nodes.liquid +section: terra +title: "Chainlink on Terra" +date: Last Modified +permalink: /terra/ +--- + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services. +

+
+
+
+ +

Use Data Feeds on Terra

+

+ Terra is an application-specific blockchain built on the Cosmos SDK and Tendermint consensus. You can use Chainlink Data Feeds on the Terra network to connect your smart contracts to the real-world market prices of assets. +

+ Data feeds on Terra +
+
+
+
+
+ +
+

New to Chainlink and Smart Contracts?

+

+ Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum. +

+ + Getting Started Guide + +
+
+
+
From 275d06860842d047b0113ae808c74d59969ea895 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Sun, 5 Dec 2021 12:30:35 -0800 Subject: [PATCH 02/26] Navigation reorganization, homepage improvements, add section tags --- _data/navigation.js | 164 ++++++++++++------ _src/docs.css | 46 ++--- _src/images/misc/arrow-right.svg | 4 + docs/Using Any API/api-reference.md | 2 +- docs/Using Any API/contract-addresses.md | 2 +- docs/Using Any API/existing-job-request.md | 2 +- docs/Using Any API/large-responses.md | 2 +- docs/Using Any API/listing-services.md | 2 +- docs/Using Any API/make-a-http-get-request.md | 2 +- .../Using Any API/multi-variable-responses.md | 2 +- .../Using Any API/request-and-receive-data.md | 2 +- .../Using Price Feeds/arbitrum-price-feeds.md | 9 +- .../avalanche-price-feeds.md | 8 +- .../binance-smart-chain-addresses.md | 8 +- .../binance-smart-chain-price-feeds.md | 15 +- .../Using Price Feeds/data-feeds-moonriver.md | 8 +- .../ethereum-addresses.md | 9 +- docs/Using Price Feeds/fantom-price-feeds.md | 8 +- docs/Using Price Feeds/feed-registry.html | 6 +- .../get-the-latest-price.html | 2 +- docs/Using Price Feeds/harmony-price-feeds.md | 8 +- .../historical-price-data.html | 2 +- .../huobi-eco-chain-price-feeds.md | 8 + docs/Using Price Feeds/matic-addresses.md | 10 ++ .../Using Price Feeds/optimism-price-feeds.md | 9 +- .../price-feeds-api-reference.md | 28 ++- .../price-feeds-migration-august-2020.md | 7 +- docs/Using Price Feeds/reference-contracts.md | 2 +- .../reference-contracts/ens.html | 2 +- .../using-chainlink-reference-contracts.md | 2 +- docs/Using Price Feeds/xdai-price-feeds.md | 9 + .../chainlink-vrf-api-reference.md | 2 +- docs/Using Randomness/chainlink-vrf.md | 2 +- docs/Using Randomness/get-a-random-number.md | 2 +- docs/Using Randomness/vrf-best-practices.md | 2 +- docs/Using Randomness/vrf-contracts.md | 2 +- .../vrf-security-considerations.md | 2 +- docs/huobi-eco-chain-price-feeds.md | 9 - docs/matic-addresses.md | 10 -- docs/xdai-price-feeds.md | 10 -- home.md | 118 +++++++++---- 41 files changed, 309 insertions(+), 240 deletions(-) create mode 100644 _src/images/misc/arrow-right.svg rename docs/{ => Using Price Feeds}/binance-smart-chain-addresses.md (56%) rename docs/{ => Using Price Feeds}/ethereum-addresses.md (53%) create mode 100644 docs/Using Price Feeds/huobi-eco-chain-price-feeds.md create mode 100644 docs/Using Price Feeds/matic-addresses.md create mode 100644 docs/Using Price Feeds/xdai-price-feeds.md delete mode 100644 docs/huobi-eco-chain-price-feeds.md delete mode 100644 docs/matic-addresses.md delete mode 100644 docs/xdai-price-feeds.md diff --git a/_data/navigation.js b/_data/navigation.js index e92628d655c..98e571f74d2 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -59,6 +59,22 @@ module.exports = { title: 'Architecture Overview ↗', url: '/docs/architecture-overview/', }, + { + title: 'Data Feeds ↗', + url: '/docs/using-chainlink-reference-contracts/', + }, + { + title: 'Chainlink VRF ↗', + url: '/docs/chainlink-vrf/', + }, + { + title: 'Chainlink Keepers ↗', + url: '/docs/chainlink-keepers/introduction/', + }, + { + title: 'Using Any API ↗', + url: '/docs/request-and-receive-data/', + }, { title: 'Run a Chainlink Node ↗', url: '/chainlink-nodes/', @@ -122,6 +138,10 @@ module.exports = { title: 'LINK Token Contracts', url: '/docs/link-token-contracts/' }, + { + title: 'Using ENS with Chainlink', + url: '/docs/ens/' + }, { title: 'Developer Communications', url: '/docs/developer-communications/', @@ -177,10 +197,6 @@ module.exports = { title: 'Contract Addresses', url: '/docs/reference-contracts/', children: [ - { - title: 'ENS', - url: '/docs/ens/' - }, { title: 'Ethereum Data Feeds', url: '/docs/ethereum-addresses/', @@ -229,6 +245,15 @@ module.exports = { }, ], }, + { + section: 'Other', + contents: [ + { + title: 'Ethereum Home ↗', + url: '/ethereum/', + }, + ], + }, ], ethereumVRF: [ { @@ -260,6 +285,15 @@ module.exports = { }, ], }, + { + section: 'Other', + contents: [ + { + title: 'Ethereum Home ↗', + url: '/ethereum/', + }, + ], + }, ], ethereumKeepers: [ { @@ -291,6 +325,15 @@ module.exports = { }, ], }, + { + section: 'Other', + contents: [ + { + title: 'Ethereum Home ↗', + url: '/ethereum/', + }, + ], + }, ], ethereumAnyAPI: [ { @@ -330,15 +373,29 @@ module.exports = { }, ], }, + { + section: 'Other', + contents: [ + { + title: 'Ethereum Home ↗', + url: '/ethereum/', + }, + ], + }, ], terra: [ { - section: 'TERRA', + section: 'Terra', contents: [ { title: 'Overview', url: '/docs/terra/', }, + ], + }, + { + section: 'Data Feeds', + contents: [ { title: 'Using Data Feeds', url: '/docs/terra/using-data-feeds-terra/', @@ -358,6 +415,11 @@ module.exports = { title: 'Overview', url: '/docs/solana/', }, + ], + }, + { + section: 'Data Feeds', + contents: [ { title: 'Using Data Feeds', url: '/docs/solana/using-data-feeds-solana/', @@ -366,7 +428,6 @@ module.exports = { title: 'Solana Data Feeds', url: '/docs/solana/data-feeds-solana/', }, - ], }, ], @@ -375,47 +436,48 @@ module.exports = { section: 'NODE OPERATORS', contents: [ { - url: '/docs/node-versions/', title: 'Node Versions', + url: '/docs/node-versions/', }, { - url: '/docs/running-a-chainlink-node/', title: 'Running a Chainlink Node', + url: '/docs/running-a-chainlink-node/', }, { + title: 'Fulfilling Requests', url: '/docs/fulfilling-requests/', - title: 'Fulfilling Requests' }, + }, { - url: '/docs/run-an-ethereum-client/', title: 'Run an Ethereum Client', + url: '/docs/run-an-ethereum-client/', }, { - url: '/docs/performing-system-maintenance/', title: 'Performing System Maintenance', + url: '/docs/performing-system-maintenance/', }, { url: '/docs/connecting-to-a-remote-database/', title: 'Connecting to a Remote Database', }, { - url: '/docs/configuration-variables/', title: 'Configuration Variables', + url: '/docs/configuration-variables/', }, { - url: '/docs/enabling-https-connections/', title: 'Enabling HTTPS Connections', + url: '/docs/enabling-https-connections/', }, { - url: '/docs/best-security-practices/', title: 'Best Security and Operating Practices', + url: '/docs/best-security-practices/', }, { - url: '/docs/best-practices-aws/', title: 'Best Practices for Nodes on AWS', + url: '/docs/best-practices-aws/', }, { + title: 'Miscellaneous', url: '/docs/miscellaneous/', - title: 'Miscellaneous' }, ], }, @@ -423,36 +485,36 @@ module.exports = { section: 'ORACLE JOBS', contents: [ { - url: '/docs/jobs/migration-v1-v2', title: 'Migrating to v2 Jobs', + url: '/docs/jobs/migration-v1-v2/', }, { - url: '/docs/jobs/', title: 'Jobs', + url: '/docs/jobs/', children: [ { + title: 'Cron', url: '/docs/jobs/types/cron/', - title: 'Cron' }, { - url: '/docs/jobs/types/direct-request/', title: 'Direct Request', + url: '/docs/jobs/types/direct-request/', }, { - url: '/docs/jobs/types/flux-monitor/', title: 'Flux Monitor', + url: '/docs/jobs/types/flux-monitor/', }, { + title: 'Keeper', url: '/docs/jobs/types/keeper/', - title: 'Keeper' }, { - url: '/docs/jobs/types/offchain-reporting/', title: 'Off-chain Reporting', + url: '/docs/jobs/types/offchain-reporting/', }, { + title: 'Webhook', url: '/docs/jobs/types/webhook/', - title: 'Webhook' }, ], }, @@ -461,73 +523,73 @@ module.exports = { title: 'Tasks', children: [ { + title: 'Job Pipelines', url: '/docs/jobs/task-types/pipelines/', - title: 'Job Pipelines' }, { + title: 'HTTP', url: '/docs/jobs/task-types/http/', - title: 'HTTP' }, { + title: 'Bridge', url: '/docs/jobs/task-types/bridge/', - title: 'Bridge' }, { + title: 'JSON Parse', url: '/docs/jobs/task-types/jsonparse/', - title: 'JSON Parse' }, { + title: 'CBOR Parse', url: '/docs/jobs/task-types/cborparse/', - title: 'CBOR Parse' }, { - url: '/docs/jobs/task-types/eth-abi-decode/', title: 'ETH ABI Decode', + url: '/docs/jobs/task-types/eth-abi-decode/', }, { - url: '/docs/jobs/task-types/eth-abi-decode-log/', title: 'ETH ABI Decode Log', + url: '/docs/jobs/task-types/eth-abi-decode-log/', }, { - url: '/docs/jobs/task-types/eth-abi-encode/', title: 'ETH ABI Encode', + url: '/docs/jobs/task-types/eth-abi-encode/', }, { + title: 'ETH Call', url: '/docs/jobs/task-types/eth-call/', - title: 'ETH Call' }, { + title: 'ETH Tx', url: '/docs/jobs/task-types/eth-tx/', - title: 'ETH Tx' }, { + title: 'Multiply', url: '/docs/jobs/task-types/multiply/', - title: 'Multiply' }, { + title: 'Divide', url: '/docs/jobs/task-types/divide/', - title: 'Divide' }, { + title: 'Any', url: '/docs/jobs/task-types/any/', - title: 'Any' }, { + title: 'Mean', url: '/docs/jobs/task-types/mean/', - title: 'Mean' }, { + title: 'Median', url: '/docs/jobs/task-types/median/', - title: 'Median' }, { + title: 'Mode', url: '/docs/jobs/task-types/mode/', - title: 'Mode' }, { + title: 'Sum', url: '/docs/jobs/task-types/sum/', - title: 'Sum' }, ], }, @@ -537,20 +599,20 @@ module.exports = { section: 'EXTERNAL ADAPTERS', contents: [ { + title: 'Introduction', url: '/docs/external-adapters/', - title: 'Introduction' }, { - url: '/docs/contract-creators/', title: 'External Adapters in Solidity', + url: '/docs/contract-creators/', }, { + title: 'Building External Adapters', url: '/docs/developers/', - title: 'Building External Adapters' }, { - url: '/docs/node-operators/', title: 'Bridges: Adding External Adapters to Nodes', + url: '/docs/node-operators/', }, ], }, @@ -558,16 +620,16 @@ module.exports = { section: 'EXTERNAL INITIATORS', contents: [ { - url: '/docs/external-initiators-introduction/', title: 'Introduction', + url: '/docs/external-initiators-introduction/', }, { - url: '/docs/building-external-initiators/', title: 'Building External Initiators', + url: '/docs/building-external-initiators/', }, { - url: '/docs/external-initiators-in-nodes/', title: 'Adding External Initiators to Nodes', + url: '/docs/external-initiators-in-nodes/', }, ], }, @@ -577,16 +639,16 @@ module.exports = { section: 'v1 JSON JOBS [REMOVED]', contents: [ { + title: 'Job Specifications', url: '/docs/job-specifications/', - title: 'Job Specifications' }, { + title: 'Core Adapters', url: '/docs/core-adapters/', - title: 'Core Adapters' }, { + title: 'Initiators', url: '/docs/initiators/', - title: 'Initiators' }, ], }, diff --git a/_src/docs.css b/_src/docs.css index 612460ddd2a..d085af24c95 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -497,7 +497,8 @@ hr { } .cl-servicecard h2 { - margin-top: 8px; + margin-top: 16px; + margin-bottom: 32px; } .cl-servicecard > div { @@ -529,37 +530,36 @@ hr { } .cl-servicecard-logos:hover img { - margin-left: -2px; - margin-right: -2px; + margin-left: -1px; + margin-right: -1px; cursor: pointer; - transform: translate(0, -8px); + transform: scale(1.1); } -.cl-button--servicecard-sm { - padding: 2px !important; - padding-left: 10px !important; - padding-right: 10px !important; +.cl-servicecard-link { + display: block; + margin: 16px 32px; + text-align: left; } -.cl-button--servicecard { - display: inline-block; - width: 100%; - border: 2px solid #375bd2; - margin: 2px auto; - border-radius: 6px; - box-sizing: border-box; - text-decoration: none !important; - color: #375bd2; - text-align: center; +.cl-servicecard-link > a { + color: #6d7380; transition: all 0.2s; } -.cl-button--servicecard:hover { - color: #ffffff; - background-color: #375bd2; +.cl-servicecard-link:hover > a { + color: #375bd2; } +.cl-servicecard-link > img { + float: right; + width: 12px; + transition: all 0.2s; +} +.cl-servicecard-link:hover > img { + transform: translate(5px, 0px); +} /** Imported from old site **/ .cl-custom-page { @@ -588,7 +588,7 @@ hr { flex: 1; } .cl-featuredcard > div > div { - height: 250px; + max-height: 225px; } .cl-button--ghost-sm { @@ -603,7 +603,7 @@ hr { padding-left: 20px; padding-right: 20px; border: 2px solid #375bd2; - margin: 24px auto; + margin: 6px auto; border-radius: 6px; box-sizing: border-box; text-decoration: none !important; diff --git a/_src/images/misc/arrow-right.svg b/_src/images/misc/arrow-right.svg new file mode 100644 index 00000000000..ea209b9dcf3 --- /dev/null +++ b/_src/images/misc/arrow-right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/Using Any API/api-reference.md b/docs/Using Any API/api-reference.md index 706440a8e2f..35a11b708f2 100644 --- a/docs/Using Any API/api-reference.md +++ b/docs/Using Any API/api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "ChainlinkClient API Reference" permalink: "docs/chainlink-framework/" diff --git a/docs/Using Any API/contract-addresses.md b/docs/Using Any API/contract-addresses.md index 4c5ad8605fe..f069f5df8f3 100644 --- a/docs/Using Any API/contract-addresses.md +++ b/docs/Using Any API/contract-addresses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Contract Addresses" permalink: "docs/decentralized-oracles-ethereum-mainnet/" diff --git a/docs/Using Any API/existing-job-request.md b/docs/Using Any API/existing-job-request.md index 731e243ef1d..b6bf528c430 100644 --- a/docs/Using Any API/existing-job-request.md +++ b/docs/Using Any API/existing-job-request.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Make an Existing Job Request" permalink: "docs/existing-job-request/" diff --git a/docs/Using Any API/large-responses.md b/docs/Using Any API/large-responses.md index 0e4f1a052b6..7fa7f92f4e1 100644 --- a/docs/Using Any API/large-responses.md +++ b/docs/Using Any API/large-responses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Large Responses" permalink: "docs/large-responses/" diff --git a/docs/Using Any API/listing-services.md b/docs/Using Any API/listing-services.md index 7c1b71eb0c0..43e1bc46778 100644 --- a/docs/Using Any API/listing-services.md +++ b/docs/Using Any API/listing-services.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Find Existing Jobs" permalink: "docs/listing-services/" diff --git a/docs/Using Any API/make-a-http-get-request.md b/docs/Using Any API/make-a-http-get-request.md index 52b15f79828..fa5f09cf11e 100644 --- a/docs/Using Any API/make-a-http-get-request.md +++ b/docs/Using Any API/make-a-http-get-request.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Make a GET Request" permalink: "docs/make-a-http-get-request/" diff --git a/docs/Using Any API/multi-variable-responses.md b/docs/Using Any API/multi-variable-responses.md index 8238763c0f6..652958756d0 100644 --- a/docs/Using Any API/multi-variable-responses.md +++ b/docs/Using Any API/multi-variable-responses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Multi-Variable Responses" permalink: "docs/multi-variable-responses/" diff --git a/docs/Using Any API/request-and-receive-data.md b/docs/Using Any API/request-and-receive-data.md index 0fc36ffcb95..543bddc5646 100644 --- a/docs/Using Any API/request-and-receive-data.md +++ b/docs/Using Any API/request-and-receive-data.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumAnyAPI date: Last Modified title: "Introduction to Using Any API" permalink: "docs/request-and-receive-data/" diff --git a/docs/Using Price Feeds/arbitrum-price-feeds.md b/docs/Using Price Feeds/arbitrum-price-feeds.md index ec74af4e49d..a6bd8c12a42 100644 --- a/docs/Using Price Feeds/arbitrum-price-feeds.md +++ b/docs/Using Price Feeds/arbitrum-price-feeds.md @@ -1,16 +1,11 @@ --- layout: feed.liquid title: "Arbitrum Feeds" +section: "ethereumDataFeeds" stub: arbitrum-price-feeds permalink: "docs/arbitrum-price-feeds/" -metadata: +metadata: l2healthflag: "arbitrum" - image: - 0: "https://files.readme.io/8dc5d76-cl.png" - 1: "cl.png" - 2: 1459 - 3: 1459 - 4: "#dbe1f8" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/avalanche-price-feeds.md b/docs/Using Price Feeds/avalanche-price-feeds.md index 84fd59f54b6..949fb669d99 100644 --- a/docs/Using Price Feeds/avalanche-price-feeds.md +++ b/docs/Using Price Feeds/avalanche-price-feeds.md @@ -1,15 +1,9 @@ --- layout: feed.liquid title: "Avalanche Feeds" +section: "ethereumDataFeeds" stub: avalanche-price-feeds permalink: "docs/avalanche-price-feeds/" -metadata: - image: - 0: "https://files.readme.io/8dc5d76-cl.png" - 1: "cl.png" - 2: 1459 - 3: 1459 - 4: "#dbe1f8" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/binance-smart-chain-addresses.md b/docs/Using Price Feeds/binance-smart-chain-addresses.md similarity index 56% rename from docs/binance-smart-chain-addresses.md rename to docs/Using Price Feeds/binance-smart-chain-addresses.md index d8a8d7658e2..46239c3944b 100644 --- a/docs/binance-smart-chain-addresses.md +++ b/docs/Using Price Feeds/binance-smart-chain-addresses.md @@ -1,10 +1,10 @@ --- layout: feed.liquid title: "Binance Smart Chain Data Feeds" +section: "ethereumDataFeeds" +permalink: "/docs/binance-smart-chain-addresses/" stub: binance-smart-chain-addresses-price -metadata: +metadata: description: "Chainlink Data Feeds on Binance Smart Chain" - image: - 0: "/files/OpenGraph_V3.png" --- -(content rendered programatically by layout) \ No newline at end of file +(content rendered programatically by layout) diff --git a/docs/Using Price Feeds/binance-smart-chain-price-feeds.md b/docs/Using Price Feeds/binance-smart-chain-price-feeds.md index 39ba9243027..a4bbb36c4b3 100644 --- a/docs/Using Price Feeds/binance-smart-chain-price-feeds.md +++ b/docs/Using Price Feeds/binance-smart-chain-price-feeds.md @@ -1,13 +1,10 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Binance Smart Chain Data Feeds" permalink: "docs/binance-smart-chain-price-feeds/" hidden: true -metadata: - image: - 0: "/files/OpenGraph_V3.png" --- # Introduction to Data Feeds @@ -35,7 +32,7 @@ import "@chainlink/contracts/src/v0.6/interfaces/AggregatorInterface.sol"; contract PriceConsumer { AggregatorInterface internal priceFeed; - + /** * Network: Binance Smart Chain * Aggregator: BNB/USD @@ -44,7 +41,7 @@ contract PriceConsumer { constructor() public { priceFeed = AggregatorInterface(0x859AAa51961284C94d970B47E82b8771942F1980); } - + /** * Returns the latest price */ @@ -106,7 +103,7 @@ import "@chainlink/contracts/src/v0.6/interfaces/AggregatorInterface.sol"; contract PriceConsumer { AggregatorInterface internal priceFeed; - + /** * Network: Binance Smart Chain * Aggregator: BNB/USD @@ -115,7 +112,7 @@ contract PriceConsumer { constructor() public { priceFeed = AggregatorInterface(0x859AAa51961284C94d970B47E82b8771942F1980); } - + /** * Returns historical data from previous update rounds */ @@ -285,4 +282,4 @@ Chainlink data feed contracts are updated on a regular basis by multiple Chainli |BTC/BUSD|`0x0893AaF58f62279909F9F6FF2E5642f53342e77F`| |LINK/USD|`0x1a1517EB62382140E713DE3a341D468a4D66B6BE`| |BNB/USD|`0x859AAa51961284C94d970B47E82b8771942F1980`| -|DAI/BNB|`0x9d3425CE0F3766a949e622E535Ce16EDF5098448`| \ No newline at end of file +|DAI/BNB|`0x9d3425CE0F3766a949e622E535Ce16EDF5098448`| diff --git a/docs/Using Price Feeds/data-feeds-moonriver.md b/docs/Using Price Feeds/data-feeds-moonriver.md index bf578d62ed6..fe7cc2b9bd6 100644 --- a/docs/Using Price Feeds/data-feeds-moonriver.md +++ b/docs/Using Price Feeds/data-feeds-moonriver.md @@ -1,15 +1,9 @@ --- layout: feed.liquid title: "Moonriver Feeds" +section: "ethereumDataFeeds" stub: data-feeds-moonriver permalink: "docs/data-feeds-moonriver/" -metadata: - image: - 0: "https://files.readme.io/8dc5d76-cl.png" - 1: "cl.png" - 2: 1459 - 3: 1459 - 4: "#dbe1f8" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/ethereum-addresses.md b/docs/Using Price Feeds/ethereum-addresses.md similarity index 53% rename from docs/ethereum-addresses.md rename to docs/Using Price Feeds/ethereum-addresses.md index a7f2caa60fd..537c8bc8bce 100644 --- a/docs/ethereum-addresses.md +++ b/docs/Using Price Feeds/ethereum-addresses.md @@ -1,11 +1,10 @@ --- layout: feed.liquid title: "Ethereum Data Feeds" +section: "ethereumDataFeeds" +permalink: "/docs/ethereum-addresses/" stub: ethereum-addresses -metadata: +metadata: description: "Chainlink Data Feeds on Ethereum Blockchains" - image: - 0: "/files/OpenGraph_V3.png" - --- -(content rendered programatically by layout) \ No newline at end of file +(content rendered programatically by layout) diff --git a/docs/Using Price Feeds/fantom-price-feeds.md b/docs/Using Price Feeds/fantom-price-feeds.md index d13f5d1f12e..3b82270a822 100644 --- a/docs/Using Price Feeds/fantom-price-feeds.md +++ b/docs/Using Price Feeds/fantom-price-feeds.md @@ -1,15 +1,9 @@ --- layout: feed.liquid title: "Fantom Feeds" +section: "ethereumDataFeeds" stub: fantom-price-feeds permalink: "docs/fantom-price-feeds/" -metadata: - image: - 0: "https://files.readme.io/8dc5d76-cl.png" - 1: "cl.png" - 2: 1459 - 3: 1459 - 4: "#dbe1f8" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/feed-registry.html b/docs/Using Price Feeds/feed-registry.html index bbde6e9730f..d37506a58de 100644 --- a/docs/Using Price Feeds/feed-registry.html +++ b/docs/Using Price Feeds/feed-registry.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Feed Registry" permalink: "docs/feed-registry/" @@ -16,8 +16,8 @@ The Chainlink Feed Registry is an on-chain mapping of assets to feeds. It enables you to query Chainlink data feeds from asset addresses directly, without needing to know the feed contract addresses. They enable smart contracts to get the latest price of an asset in a single call, from a single contract. -> 📘 -> +> 📘 +> > The Feed Registry only lists feeds with a canonical token address on a network. Non-token feeds such as stock indexes are not supported because they do not have a canonical token address. # Base and Quote diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index 6ff781102cd..a5d56b4d186 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Using Data Feeds (EVM)" permalink: "docs/get-the-latest-price/" diff --git a/docs/Using Price Feeds/harmony-price-feeds.md b/docs/Using Price Feeds/harmony-price-feeds.md index 473b6d6c1ba..5196c121d0b 100644 --- a/docs/Using Price Feeds/harmony-price-feeds.md +++ b/docs/Using Price Feeds/harmony-price-feeds.md @@ -1,15 +1,9 @@ --- layout: feed.liquid title: "Harmony Feeds" +section: "ethereumDataFeeds" stub: harmony-price-feeds permalink: "docs/harmony-price-feeds/" -metadata: - image: - 0: "https://files.readme.io/8dc5d76-cl.png" - 1: "cl.png" - 2: 1459 - 3: 1459 - 4: "#dbe1f8" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/historical-price-data.html b/docs/Using Price Feeds/historical-price-data.html index bf0ba758e7d..43c6e4e9502 100644 --- a/docs/Using Price Feeds/historical-price-data.html +++ b/docs/Using Price Feeds/historical-price-data.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Historical Price Data" permalink: "docs/historical-price-data/" diff --git a/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md b/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md new file mode 100644 index 00000000000..9de40a00808 --- /dev/null +++ b/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md @@ -0,0 +1,8 @@ +--- +layout: feed.liquid +title: "Huobi Eco Chain Data Feeds" +section: "ethereumDataFeeds" +permalink: "docs/huobi-eco-chain-price-feeds/" +stub: huobi-eco-chain-price-feeds +--- +(content rendered programatically by layout) diff --git a/docs/Using Price Feeds/matic-addresses.md b/docs/Using Price Feeds/matic-addresses.md new file mode 100644 index 00000000000..f61218edb78 --- /dev/null +++ b/docs/Using Price Feeds/matic-addresses.md @@ -0,0 +1,10 @@ +--- +layout: feed.liquid +title: "Polygon (Matic) Data Feeds" +section: "ethereumDataFeeds" +permalink: "/docs/matic-addresses/" +stub: matic-addresses +metadata: + description: "Chainlink Data Feeds on the Polygon (Matic) Network" +--- +(content rendered programatically by layout) diff --git a/docs/Using Price Feeds/optimism-price-feeds.md b/docs/Using Price Feeds/optimism-price-feeds.md index a735894fd04..e13c208b1fa 100644 --- a/docs/Using Price Feeds/optimism-price-feeds.md +++ b/docs/Using Price Feeds/optimism-price-feeds.md @@ -1,16 +1,11 @@ --- layout: feed.liquid title: "Optimism Feeds" +section: "ethereumDataFeeds" stub: optimism-price-feeds permalink: "docs/optimism-price-feeds/" -metadata: +metadata: l2healthflag: "optimism" - image: - 0: "https://files.readme.io/8dc5d76-cl.png" - 1: "cl.png" - 2: 1459 - 3: 1459 - 4: "#dbe1f8" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/price-feeds-api-reference.md b/docs/Using Price Feeds/price-feeds-api-reference.md index 0f55edcb8a9..6e29d40a4a3 100644 --- a/docs/Using Price Feeds/price-feeds-api-reference.md +++ b/docs/Using Price Feeds/price-feeds-api-reference.md @@ -1,13 +1,11 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Data Feeds API Reference" permalink: "docs/price-feeds-api-reference/" -metadata: +metadata: description: "API reference for using Chainlink Data Feeds in smart contracts." - image: - 0: "/files/OpenGraph_V3.png" --- API reference for `AggregatorV3Interface`. @@ -48,12 +46,12 @@ function description() external view returns (string memory) Get data about a specific round, using the `roundId`. ```javascript Solidity -function getRoundData(uint80 _roundId) external view +function getRoundData(uint80 _roundId) external view returns ( - uint80 roundId, - int256 answer, - uint256 startedAt, - uint256 updatedAt, + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, uint80 answeredInRound ) ``` @@ -75,12 +73,12 @@ function getRoundData(uint80 _roundId) external view Get the price from the latest round. ```javascript Solidity -function latestRoundData() external view +function latestRoundData() external view returns ( - uint80 roundId, - int256 answer, - uint256 startedAt, - uint256 updatedAt, + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, uint80 answeredInRound ) ``` @@ -103,4 +101,4 @@ function version() external view returns (uint256) * `RETURN`: The version number. -___ \ No newline at end of file +___ diff --git a/docs/Using Price Feeds/price-feeds-migration-august-2020.md b/docs/Using Price Feeds/price-feeds-migration-august-2020.md index 00b38c488b5..3e558f9f448 100644 --- a/docs/Using Price Feeds/price-feeds-migration-august-2020.md +++ b/docs/Using Price Feeds/price-feeds-migration-august-2020.md @@ -1,13 +1,10 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Data Feeds August 2020" permalink: "docs/price-feeds-migration-august-2020/" hidden: true -metadata: - image: - 0: "/files/OpenGraph_V3.png" --- Chainlink Data Feeds give smart contract developers a simple way to fetch current and historical asset prices. Asset prices are updated by decentralized oracle networks which aggregate results from high-quality data providers. @@ -181,4 +178,4 @@ Chainlink Data Feeds give smart contract developers a simple way to fetch curren |XTZ/USD|`0xC6F39246494F25BbCb0A8018796890037Cb5980C`| |ZRX/ETH|`0xBc3f28Ccc21E9b5856E81E6372aFf57307E2E883`| |sCEX/USD|`0xA85646318D20C684f6251097d24A6e74Fe1ED5eB`| -|sDEFI/USD|`0x70179FB2F3A0a5b7FfB36a235599De440B0922ea`| \ No newline at end of file +|sDEFI/USD|`0x70179FB2F3A0a5b7FfB36a235599De440B0922ea`| diff --git a/docs/Using Price Feeds/reference-contracts.md b/docs/Using Price Feeds/reference-contracts.md index 1e8c19ff4d5..ad5fcd1016e 100644 --- a/docs/Using Price Feeds/reference-contracts.md +++ b/docs/Using Price Feeds/reference-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Data Feeds Contract Addresses" permalink: "docs/reference-contracts/" diff --git a/docs/Using Price Feeds/reference-contracts/ens.html b/docs/Using Price Feeds/reference-contracts/ens.html index aa85f934dd4..b0dc2bc8410 100644 --- a/docs/Using Price Feeds/reference-contracts/ens.html +++ b/docs/Using Price Feeds/reference-contracts/ens.html @@ -2,7 +2,7 @@ layout: nodes.liquid section: ethereum date: Last Modified -title: "ENS" +title: "Using ENS with Chainlink" permalink: "docs/ens/" excerpt: "Ethereum Name Service" metadata: diff --git a/docs/Using Price Feeds/using-chainlink-reference-contracts.md b/docs/Using Price Feeds/using-chainlink-reference-contracts.md index 4557a917a38..2c2d9fd728b 100644 --- a/docs/Using Price Feeds/using-chainlink-reference-contracts.md +++ b/docs/Using Price Feeds/using-chainlink-reference-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: "ethereumDataFeeds" date: Last Modified title: "Introduction to Data Feeds" permalink: "docs/using-chainlink-reference-contracts/" diff --git a/docs/Using Price Feeds/xdai-price-feeds.md b/docs/Using Price Feeds/xdai-price-feeds.md new file mode 100644 index 00000000000..f0a7eb4d86d --- /dev/null +++ b/docs/Using Price Feeds/xdai-price-feeds.md @@ -0,0 +1,9 @@ +--- +layout: feed.liquid +title: "xDai Data Feeds" +section: "ethereumDataFeeds" +permalink: "/docs/xdai-price-feeds/" +stub: xdai-price-feeds +date: Last Modified +--- +(content rendered programatically by layout) diff --git a/docs/Using Randomness/chainlink-vrf-api-reference.md b/docs/Using Randomness/chainlink-vrf-api-reference.md index b8a2cbafd06..bcf52dfe641 100644 --- a/docs/Using Randomness/chainlink-vrf-api-reference.md +++ b/docs/Using Randomness/chainlink-vrf-api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumVRF date: Last Modified title: "Chainlink VRF API Reference" permalink: "docs/chainlink-vrf-api-reference/" diff --git a/docs/Using Randomness/chainlink-vrf.md b/docs/Using Randomness/chainlink-vrf.md index f16e4764215..be21340fe01 100644 --- a/docs/Using Randomness/chainlink-vrf.md +++ b/docs/Using Randomness/chainlink-vrf.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumVRF date: Last Modified title: "Introduction to Chainlink VRF" permalink: "docs/chainlink-vrf/" diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/get-a-random-number.md index 7cf7326c869..dbb43b70922 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumVRF date: Last Modified title: "Get a Random Number" permalink: "docs/get-a-random-number/" diff --git a/docs/Using Randomness/vrf-best-practices.md b/docs/Using Randomness/vrf-best-practices.md index 3712dbc0b7e..f639437b828 100644 --- a/docs/Using Randomness/vrf-best-practices.md +++ b/docs/Using Randomness/vrf-best-practices.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumVRF date: Last Modified title: "VRF Best Practices" permalink: "docs/chainlink-vrf-best-practices/" diff --git a/docs/Using Randomness/vrf-contracts.md b/docs/Using Randomness/vrf-contracts.md index 4a5b922da23..9d8d69c440c 100644 --- a/docs/Using Randomness/vrf-contracts.md +++ b/docs/Using Randomness/vrf-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumVRF date: Last Modified title: "Chainlink VRF Contract Addresses" permalink: "docs/vrf-contracts/" diff --git a/docs/Using Randomness/vrf-security-considerations.md b/docs/Using Randomness/vrf-security-considerations.md index 12781a17fab..0f12680e216 100644 --- a/docs/Using Randomness/vrf-security-considerations.md +++ b/docs/Using Randomness/vrf-security-considerations.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereum +section: ethereumVRF date: Last Modified title: "VRF Security Considerations" permalink: "docs/vrf-security-considerations/" diff --git a/docs/huobi-eco-chain-price-feeds.md b/docs/huobi-eco-chain-price-feeds.md deleted file mode 100644 index 1933d64858b..00000000000 --- a/docs/huobi-eco-chain-price-feeds.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: feed.liquid -title: "Huobi Eco Chain Data Feeds" -stub: huobi-eco-chain-price-feeds -metadata: - image: - 0: "/files/OpenGraph_V3.png" ---- -(content rendered programatically by layout) \ No newline at end of file diff --git a/docs/matic-addresses.md b/docs/matic-addresses.md deleted file mode 100644 index 39592be1032..00000000000 --- a/docs/matic-addresses.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: feed.liquid -title: "Polygon (Matic) Data Feeds" -stub: matic-addresses -metadata: - description: "Chainlink Data Feeds on Matic Network" - image: - 0: "/files/OpenGraph_V3.png" ---- -(content rendered programatically by layout) \ No newline at end of file diff --git a/docs/xdai-price-feeds.md b/docs/xdai-price-feeds.md deleted file mode 100644 index 6a76b4feaa1..00000000000 --- a/docs/xdai-price-feeds.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: feed.liquid -title: "xDai Data Feeds" -stub: xdai-price-feeds -metadata: - image: - 0: "/files/8dc5d76-cl.png" -date: Last Modified ---- -(content rendered programatically by layout) \ No newline at end of file diff --git a/home.md b/home.md index 1073a6e1a92..b8d3ee9599b 100644 --- a/home.md +++ b/home.md @@ -23,55 +23,103 @@ landing: true

Networks and Services

From 1e8a1b0018e0397e66a9964716074937a713458a Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 6 Dec 2021 21:22:48 -0800 Subject: [PATCH 03/26] Restructure nav and add navigation filters --- _data/navigation.js | 190 +++++++----------- _includes/main.liquid | 2 +- docs/Example Job Specs/large-response-job.md | 1 + docs/Example Job Specs/multi-word-job.md | 3 +- docs/External Adapters/contract-creators.md | 1 + docs/External Adapters/developers.md | 1 + docs/External Adapters/external-adapters.md | 1 + docs/External Adapters/node-operators.md | 1 + .../building-external-initiators.md | 1 + .../external-initiators-in-nodes.md | 1 + .../external-initiators-introduction.md | 1 + docs/Node Operators/best-practices-aws.md | 1 + .../Node Operators/best-security-practices.md | 1 + .../Node Operators/configuration-variables.md | 1 + .../connecting-to-a-remote-database.md | 3 +- .../enabling-https-connections.md | 5 +- docs/Node Operators/fulfilling-requests.md | 1 + docs/Node Operators/miscellaneous.md | 1 + docs/Node Operators/node-versions.md | 1 + .../performing-system-maintenance.md | 9 +- docs/Node Operators/proof-of-reserves-btc.md | 3 +- docs/Node Operators/run-an-ethereum-client.md | 5 +- .../running-a-chainlink-node.md | 1 + docs/Oracle Jobs/Job Types/cron.md | 1 + docs/Oracle Jobs/Job Types/direct_request.md | 1 + docs/Oracle Jobs/Job Types/flux_monitor.md | 1 + docs/Oracle Jobs/Job Types/keeper.md | 1 + .../Job Types/offchain_reporting.md | 1 + docs/Oracle Jobs/Job Types/webhook.md | 1 + docs/Oracle Jobs/Task Types/pipelines.md | 1 + docs/Oracle Jobs/Task Types/task_any.md | 1 + docs/Oracle Jobs/Task Types/task_bridge.md | 1 + docs/Oracle Jobs/Task Types/task_cborparse.md | 1 + docs/Oracle Jobs/Task Types/task_divide.md | 1 + .../Task Types/task_eth_abi_decode.md | 1 + .../Task Types/task_eth_abi_decode_log.md | 1 + .../Task Types/task_eth_abi_encode.md | 1 + docs/Oracle Jobs/Task Types/task_eth_call.md | 1 + docs/Oracle Jobs/Task Types/task_eth_tx.md | 1 + docs/Oracle Jobs/Task Types/task_http.md | 1 + docs/Oracle Jobs/Task Types/task_jsonparse.md | 1 + docs/Oracle Jobs/Task Types/task_mean.md | 1 + docs/Oracle Jobs/Task Types/task_median.md | 1 + docs/Oracle Jobs/Task Types/task_mode.md | 1 + docs/Oracle Jobs/Task Types/task_multiply.md | 1 + docs/Oracle Jobs/Task Types/task_sum.md | 1 + docs/Oracle Jobs/Task Types/tasks.md | 1 + docs/Oracle Jobs/jobs.md | 1 + docs/Oracle Jobs/migration-v1-v2.md | 1 + docs/Using Any API/api-reference.md | 2 +- docs/Using Any API/contract-addresses.md | 2 +- docs/Using Any API/existing-job-request.md | 2 +- docs/Using Any API/large-responses.md | 2 +- docs/Using Any API/listing-services.md | 2 +- docs/Using Any API/make-a-http-get-request.md | 2 +- .../Using Any API/multi-variable-responses.md | 2 +- .../Using Any API/request-and-receive-data.md | 2 +- .../Using Price Feeds/arbitrum-price-feeds.md | 5 +- .../avalanche-price-feeds.md | 6 +- .../binance-smart-chain-addresses.md | 5 +- .../binance-smart-chain-price-feeds.md | 8 +- .../Using Price Feeds/data-feeds-moonriver.md | 6 +- docs/Using Price Feeds/ethereum-addresses.md | 7 +- docs/Using Price Feeds/fantom-price-feeds.md | 6 +- docs/Using Price Feeds/feed-registry.html | 2 +- .../get-the-latest-price.html | 2 +- docs/Using Price Feeds/harmony-price-feeds.md | 6 +- .../historical-price-data.html | 2 +- .../huobi-eco-chain-price-feeds.md | 7 +- docs/Using Price Feeds/matic-addresses.md | 5 +- .../Using Price Feeds/optimism-price-feeds.md | 5 +- .../price-feeds-api-reference.md | 2 +- .../price-feeds-migration-august-2020.md | 6 +- docs/Using Price Feeds/reference-contracts.md | 2 +- .../using-chainlink-reference-contracts.md | 2 +- docs/Using Price Feeds/xdai-price-feeds.md | 6 +- .../chainlink-vrf-api-reference.md | 2 +- docs/Using Randomness/chainlink-vrf.md | 2 +- docs/Using Randomness/get-a-random-number.md | 2 +- docs/Using Randomness/vrf-best-practices.md | 2 +- docs/Using Randomness/vrf-contracts.md | 2 +- .../vrf-security-considerations.md | 2 +- .../chainlink-keepers/compatible-contracts.md | 2 +- docs/chainlink-keepers/faqs.md | 2 +- docs/chainlink-keepers/introduction.md | 2 +- docs/chainlink-keepers/overview.html | 2 +- docs/chainlink-keepers/register-upkeep.md | 2 +- docs/chainlink-keepers/utility-contracts.md | 2 +- 88 files changed, 222 insertions(+), 169 deletions(-) diff --git a/_data/navigation.js b/_data/navigation.js index 98e571f74d2..a851c991dab 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -106,70 +106,6 @@ module.exports = { }, ], }, - { - section: 'Services', - contents: [ - { - title: 'Data Feeds ↗', - url: '/docs/using-chainlink-reference-contracts/', - }, - { - title: 'Chainlink VRF ↗', - url: '/docs/chainlink-vrf/', - }, - { - title: 'Chainlink Keepers ↗', - url: '/docs/chainlink-keepers/introduction/', - }, - { - title: 'Using Any API ↗', - url: '/docs/request-and-receive-data/', - }, - ], - }, - { - section: 'Resources', - contents: [ - { - title: 'Install Instructions', - url: '/docs/create-a-chainlinked-project/', - }, - { - title: 'LINK Token Contracts', - url: '/docs/link-token-contracts/' - }, - { - title: 'Using ENS with Chainlink', - url: '/docs/ens/' - }, - { - title: 'Developer Communications', - url: '/docs/developer-communications/', - }, - { - title: 'Getting Help', - url: '/docs/getting-help/', - }, - { - title: 'Data Provider Nodes', - url: '/docs/data-provider-nodes/', - }, - { - title: 'Selecting Data Feeds', - url: '/docs/selecting-data-feeds/', - }, - { - title: 'Hackathon Resources', - url: '/docs/hackathon-resources/', - }, - { - title: 'Contributing to Chainlink', - url: '/docs/contributing-to-chainlink/' - }, - ], - }, - ], - ethereumDataFeeds: [ { section: 'USING DATA FEEDS', contents: [ @@ -187,7 +123,8 @@ module.exports = { }, { title: 'Feed Registry', - url: '/docs/feed-registry/' + url: '/docs/feed-registry/', + filters: ['ethereum'], }, { title: 'API Reference', @@ -200,64 +137,69 @@ module.exports = { { title: 'Ethereum Data Feeds', url: '/docs/ethereum-addresses/', + filters: ['ethereum'], }, { title: 'Binance Smart Chain Data Feeds', url: '/docs/binance-smart-chain-addresses/', + filters: ['binance'], }, { title: 'Polygon (Matic) Data Feeds', url: '/docs/matic-addresses/', + filters: ['polygon'], }, { title: 'xDai Data Feeds', url: '/docs/xdai-price-feeds/', + filters: ['xdai'], }, { title: 'Huobi Eco Chain Data Feeds', url: '/docs/huobi-eco-chain-price-feeds/', + filters: ['huobi'], }, { title: 'Avalanche Data Feeds', url: '/docs/avalanche-price-feeds/', + filters: ['avalanche'], }, { title: 'Fantom Data Feeds', url: '/docs/fantom-price-feeds/', + filters: ['fantom'], }, { title: 'Arbitrum Data Feeds', url: '/docs/arbitrum-price-feeds/', + filters: ['arbitrum'], }, { title: 'Harmony Data Feeds', url: '/docs/harmony-price-feeds/', + filters: ['arbitrum'], }, { title: 'Optimism Data Feeds', url: '/docs/optimism-price-feeds/', + filters: ['optimism'], }, { title: 'Moonriver Data Feeds', url: '/docs/data-feeds-moonriver/', + filters: ['moonriver'], }, ], }, ], }, - { - section: 'Other', - contents: [ - { - title: 'Ethereum Home ↗', - url: '/ethereum/', - }, - ], - }, - ], - ethereumVRF: [ { section: 'USING RANDOMNESS', + filters: [ + 'ethereum', + 'binance', + 'polygon', + ], contents: [ { title: 'Introduction to Chainlink VRF', @@ -286,18 +228,50 @@ module.exports = { ], }, { - section: 'Other', + section: 'USING ANY API', + filters: ['ethereum'], contents: [ { - title: 'Ethereum Home ↗', - url: '/ethereum/', + title: 'Introduction to Using Any API', + url: '/docs/request-and-receive-data/', + }, + { + title: 'Make a GET Request', + url: '/docs/make-a-http-get-request/', + }, + { + title: 'Make an Existing Job Request', + url: '/docs/existing-job-request/', + }, + { + title: 'Multi-Variable Responses', + url: '/docs/multi-variable-responses/', + }, + { + title: 'Large Responses', + url: '/docs/large-responses/', + }, + { + title: 'Find Existing Jobs', + url: '/docs/listing-services/' + }, + { + title: 'API Reference', + url: '/docs/chainlink-framework/' + }, + { + title: 'Contract Addresses', + url: '/docs/decentralized-oracles-ethereum-mainnet/', }, ], }, - ], - ethereumKeepers: [ { section: 'USING CHAINLINK KEEPERS', + filters: [ + 'ethereum', + 'binance', + 'polygon', + ], contents: [ { title: 'Introduction', @@ -326,59 +300,43 @@ module.exports = { ], }, { - section: 'Other', - contents: [ - { - title: 'Ethereum Home ↗', - url: '/ethereum/', - }, - ], - }, - ], - ethereumAnyAPI: [ - { - section: 'USING ANY API', + section: 'Resources', contents: [ { - title: 'Introduction to Using Any API', - url: '/docs/request-and-receive-data/', + title: 'Install Instructions', + url: '/docs/create-a-chainlinked-project/', }, { - title: 'Make a GET Request', - url: '/docs/make-a-http-get-request/', + title: 'LINK Token Contracts', + url: '/docs/link-token-contracts/' }, { - title: 'Make an Existing Job Request', - url: '/docs/existing-job-request/', + title: 'Using ENS with Chainlink', + url: '/docs/ens/' }, { - title: 'Multi-Variable Responses', - url: '/docs/multi-variable-responses/', + title: 'Developer Communications', + url: '/docs/developer-communications/', }, { - title: 'Large Responses', - url: '/docs/large-responses/', + title: 'Getting Help', + url: '/docs/getting-help/', }, { - title: 'Find Existing Jobs', - url: '/docs/listing-services/' + title: 'Data Provider Nodes', + url: '/docs/data-provider-nodes/', }, { - title: 'API Reference', - url: '/docs/chainlink-framework/' + title: 'Selecting Data Feeds', + url: '/docs/selecting-data-feeds/', }, { - title: 'Contract Addresses', - url: '/docs/decentralized-oracles-ethereum-mainnet/', + title: 'Hackathon Resources', + url: '/docs/hackathon-resources/', }, - ], - }, - { - section: 'Other', - contents: [ { - title: 'Ethereum Home ↗', - url: '/ethereum/', + title: 'Contributing to Chainlink', + url: '/docs/contributing-to-chainlink/' }, ], }, diff --git a/_includes/main.liquid b/_includes/main.liquid index 8deec5a5047..58e892dcfcb 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -88,7 +88,7 @@ - +
diff --git a/docs/Example Job Specs/large-response-job.md b/docs/Example Job Specs/large-response-job.md index 6df1d427aba..803314969c2 100644 --- a/docs/Example Job Specs/large-response-job.md +++ b/docs/Example Job Specs/large-response-job.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: 'MultiWord Example Job Spec' permalink: "docs/example-job-spec-large/" diff --git a/docs/Example Job Specs/multi-word-job.md b/docs/Example Job Specs/multi-word-job.md index 682a6b5609a..b0acc42b131 100644 --- a/docs/Example Job Specs/multi-word-job.md +++ b/docs/Example Job Specs/multi-word-job.md @@ -1,11 +1,12 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: 'MultiWord Example Job Spec' permalink: "docs/example-job-spec-multi-word/" --- -This is an example v1 job spec for returning multiple responses in 1 Chainlink API Call. +This is an example v1 job spec for returning multiple responses in 1 Chainlink API Call. ```json { diff --git a/docs/External Adapters/contract-creators.md b/docs/External Adapters/contract-creators.md index 13ca134ba24..33cd3b8b7bd 100644 --- a/docs/External Adapters/contract-creators.md +++ b/docs/External Adapters/contract-creators.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "External Adapters in Solidity" permalink: "docs/contract-creators/" diff --git a/docs/External Adapters/developers.md b/docs/External Adapters/developers.md index 20e61ff9410..a90cf4cc5be 100644 --- a/docs/External Adapters/developers.md +++ b/docs/External Adapters/developers.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Building External Adapters" permalink: "docs/developers/" diff --git a/docs/External Adapters/external-adapters.md b/docs/External Adapters/external-adapters.md index 62aeca748e3..a2ae8f38be5 100644 --- a/docs/External Adapters/external-adapters.md +++ b/docs/External Adapters/external-adapters.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "External Adapters Introduction" permalink: "docs/external-adapters/" diff --git a/docs/External Adapters/node-operators.md b/docs/External Adapters/node-operators.md index d28004a153d..12ebeb023d9 100644 --- a/docs/External Adapters/node-operators.md +++ b/docs/External Adapters/node-operators.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Bridges: Adding External Adapters to Nodes" permalink: "docs/node-operators/" diff --git a/docs/External Initiators/building-external-initiators.md b/docs/External Initiators/building-external-initiators.md index 9f7d33896c4..53f3651cddc 100644 --- a/docs/External Initiators/building-external-initiators.md +++ b/docs/External Initiators/building-external-initiators.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Building External Initiators" permalink: "docs/building-external-initiators/" diff --git a/docs/External Initiators/external-initiators-in-nodes.md b/docs/External Initiators/external-initiators-in-nodes.md index 9e508ff56d2..ef001e73144 100644 --- a/docs/External Initiators/external-initiators-in-nodes.md +++ b/docs/External Initiators/external-initiators-in-nodes.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Adding External Initiators to Nodes" permalink: "docs/external-initiators-in-nodes/" diff --git a/docs/External Initiators/external-initiators-introduction.md b/docs/External Initiators/external-initiators-introduction.md index f177fa4f70b..d66df3febe9 100644 --- a/docs/External Initiators/external-initiators-introduction.md +++ b/docs/External Initiators/external-initiators-introduction.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Introduction" permalink: "docs/external-initiators-introduction/" diff --git a/docs/Node Operators/best-practices-aws.md b/docs/Node Operators/best-practices-aws.md index 4291eef725d..df333fe0b4c 100644 --- a/docs/Node Operators/best-practices-aws.md +++ b/docs/Node Operators/best-practices-aws.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Best Practices for Deploying Nodes on AWS" permalink: "docs/best-practices-aws/" diff --git a/docs/Node Operators/best-security-practices.md b/docs/Node Operators/best-security-practices.md index ff71b014829..785e73a3fdb 100644 --- a/docs/Node Operators/best-security-practices.md +++ b/docs/Node Operators/best-security-practices.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Best Security and Operating Practices" permalink: "docs/best-security-practices/" diff --git a/docs/Node Operators/configuration-variables.md b/docs/Node Operators/configuration-variables.md index 2995aa2414b..e2ed995cbde 100644 --- a/docs/Node Operators/configuration-variables.md +++ b/docs/Node Operators/configuration-variables.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Configuration Variables" permalink: "docs/configuration-variables/" diff --git a/docs/Node Operators/connecting-to-a-remote-database.md b/docs/Node Operators/connecting-to-a-remote-database.md index 18f8148ed5d..ce07dd3eba1 100644 --- a/docs/Node Operators/connecting-to-a-remote-database.md +++ b/docs/Node Operators/connecting-to-a-remote-database.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Connecting to a Remote Database" permalink: "docs/connecting-to-a-remote-database/" @@ -37,4 +38,4 @@ You will need to change the following placeholders to their real values: - `$PASSWORD`: The user's password - `$SERVER`: The server name or IP address of the database server - `$PORT`: The port that the database is listening on -- `$DATABASE`: The database to use for the Chainlink node \ No newline at end of file +- `$DATABASE`: The database to use for the Chainlink node diff --git a/docs/Node Operators/enabling-https-connections.md b/docs/Node Operators/enabling-https-connections.md index e84eb0e3ca2..e9da3835bc3 100644 --- a/docs/Node Operators/enabling-https-connections.md +++ b/docs/Node Operators/enabling-https-connections.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Enabling HTTPS Connections" permalink: "docs/enabling-https-connections/" @@ -8,7 +9,7 @@ whatsnext: {"Miscellaneous":"/docs/miscellaneous/"} This guide will walk you through how to generate your own self-signed certificates for use by the Chainlink node. You can also substitute self-signed certificates with certificates of your own, like those created by Let's Encrypt. > 📘 Important -> +> > You will need [OpenSSL](https://www.openssl.org) in order to generate your own self-signed certificates. Create a directory `tls/` within your local Chainlink directory: @@ -75,4 +76,4 @@ cd ~/.chainlink-kovan && docker run -p 6689:6689 -v ~/.chainlink-kovan:/chainlin cd ~/.chainlink && docker run -p 6689:6689 -v ~/.chainlink:/chainlink -it --env-file=.env smartcontract/chainlink local n ``` -Now when running the node, you can access it by navigating to [https://localhost:6689](https://localhost:6689) if running on the same machine or with a ssh tunnel. \ No newline at end of file +Now when running the node, you can access it by navigating to [https://localhost:6689](https://localhost:6689) if running on the same machine or with a ssh tunnel. diff --git a/docs/Node Operators/fulfilling-requests.md b/docs/Node Operators/fulfilling-requests.md index 5f922b39614..24f6795c6c1 100644 --- a/docs/Node Operators/fulfilling-requests.md +++ b/docs/Node Operators/fulfilling-requests.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Fulfilling Requests" permalink: "docs/fulfilling-requests/" diff --git a/docs/Node Operators/miscellaneous.md b/docs/Node Operators/miscellaneous.md index d42ca971f83..470c211c9f1 100644 --- a/docs/Node Operators/miscellaneous.md +++ b/docs/Node Operators/miscellaneous.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Miscellaneous" permalink: "docs/miscellaneous/" diff --git a/docs/Node Operators/node-versions.md b/docs/Node Operators/node-versions.md index f7abe856967..c536187f31b 100644 --- a/docs/Node Operators/node-versions.md +++ b/docs/Node Operators/node-versions.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Node Versions and Upgrades" permalink: "docs/node-versions/" diff --git a/docs/Node Operators/performing-system-maintenance.md b/docs/Node Operators/performing-system-maintenance.md index 28d8256398e..bd48b838312 100644 --- a/docs/Node Operators/performing-system-maintenance.md +++ b/docs/Node Operators/performing-system-maintenance.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Performing System Maintenance" permalink: "docs/performing-system-maintenance/" @@ -14,7 +15,7 @@ Whether you use Docker or the binary to run the node, the database file will nee ## Maintenance and Image Update Example > 📘 Note -> +> > This example uses Docker to run the Chainlink node, see the [Running a Chainlink Node](../running-a-chainlink-node/) page for instructions on how to set it up. First, pull the latest Docker image for your desired tag based on release version (latest is used in this example): @@ -72,7 +73,7 @@ docker kill jovial_shirley The output returns the name "jovial_shirley" (or what your container's name was) and if you look at the log of your second container, you'll notice that it has taken over. -At this point, you're now running the latest image on your secondary container. If you have any system maintenance to perform on your primary machine, you may do so now. +At this point, you're now running the latest image on your secondary container. If you have any system maintenance to perform on your primary machine, you may do so now. Next, you will simply need to run the container again with the local port 6688 in order to go back to normal operations. @@ -91,7 +92,7 @@ You should see the same `[INFO]` message that the node is waiting for lock on th ## Failover Node Example > 📘 Note -> +> > This example uses Docker to run the Chainlink node, see the [Running a Chainlink Node](../running-a-chainlink-node/) page for instructions on how to set it up. You may want to run multiple instances of the Chainlink node on the same machine, so that if one instance goes down, the secondary instance can automatically pick up requests. Building off the concepts in the previous example, we'll use Docker to have primary and a secondary containers referencing the same database file. @@ -171,4 +172,4 @@ docker attach secondary However, it will not produce any output while waiting for a lock on the database. -Congratulations! You now have a redundant setup of Chainlink nodes in case your primary container goes down. Get comfortable with the process by passing control of the database file back and forth between the `chainlink` and `secondary` containers. \ No newline at end of file +Congratulations! You now have a redundant setup of Chainlink nodes in case your primary container goes down. Get comfortable with the process by passing control of the database file back and forth between the `chainlink` and `secondary` containers. diff --git a/docs/Node Operators/proof-of-reserves-btc.md b/docs/Node Operators/proof-of-reserves-btc.md index c29ab92d40d..b62ebdd7c51 100644 --- a/docs/Node Operators/proof-of-reserves-btc.md +++ b/docs/Node Operators/proof-of-reserves-btc.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Proof of Reserves (BTC)" permalink: "docs/proof-of-reserves-btc/" @@ -556,4 +557,4 @@ If the test job has ran successfully, add the following job to your node. Rename Once added, open a PR with the Job ID associated with the job above. Base this PR off the branch of the PR sent to you by the Chainlink team. -Make sure that your `MINIMUM_CONTRACT_PAYMENT_LINK_JUELS` environment variable is low enough to accept the payment amount from the aggregator contract on mainnet. \ No newline at end of file +Make sure that your `MINIMUM_CONTRACT_PAYMENT_LINK_JUELS` environment variable is low enough to accept the payment amount from the aggregator contract on mainnet. diff --git a/docs/Node Operators/run-an-ethereum-client.md b/docs/Node Operators/run-an-ethereum-client.md index 268f85f5c53..c9c7a2a2f03 100644 --- a/docs/Node Operators/run-an-ethereum-client.md +++ b/docs/Node Operators/run-an-ethereum-client.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Run an Ethereum Client" permalink: "docs/run-an-ethereum-client/" @@ -53,7 +54,7 @@ docker start -i eth Return to [Running a Chainlink Node](../running-a-chainlink-node/). -## Parity +## Parity [OpenEthereum's Documentation](https://openethereum.github.io/index) @@ -175,4 +176,4 @@ ETH_URL=wss://eth-mainnet.alchemyapi.io/v2/YOUR_PROJECT_ID ## Additional Tools -- [Chainlink ETH Failover Proxy](https://github.com/Fiews/ChainlinkEthFailover) \ No newline at end of file +- [Chainlink ETH Failover Proxy](https://github.com/Fiews/ChainlinkEthFailover) diff --git a/docs/Node Operators/running-a-chainlink-node.md b/docs/Node Operators/running-a-chainlink-node.md index 196926d6fb0..fab69c5fd5d 100644 --- a/docs/Node Operators/running-a-chainlink-node.md +++ b/docs/Node Operators/running-a-chainlink-node.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Running a Chainlink Node" permalink: "docs/running-a-chainlink-node/" diff --git a/docs/Oracle Jobs/Job Types/cron.md b/docs/Oracle Jobs/Job Types/cron.md index b3a44320221..fd9270ff1c8 100644 --- a/docs/Oracle Jobs/Job Types/cron.md +++ b/docs/Oracle Jobs/Job Types/cron.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Cron Jobs" permalink: "docs/jobs/types/cron/" diff --git a/docs/Oracle Jobs/Job Types/direct_request.md b/docs/Oracle Jobs/Job Types/direct_request.md index 504eb56a77a..6dcaef25715 100644 --- a/docs/Oracle Jobs/Job Types/direct_request.md +++ b/docs/Oracle Jobs/Job Types/direct_request.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Direct Request Jobs" permalink: "docs/jobs/types/direct-request/" diff --git a/docs/Oracle Jobs/Job Types/flux_monitor.md b/docs/Oracle Jobs/Job Types/flux_monitor.md index a11f56378ea..5f184fc438a 100644 --- a/docs/Oracle Jobs/Job Types/flux_monitor.md +++ b/docs/Oracle Jobs/Job Types/flux_monitor.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Flux Monitor Jobs" permalink: "docs/jobs/types/flux-monitor/" diff --git a/docs/Oracle Jobs/Job Types/keeper.md b/docs/Oracle Jobs/Job Types/keeper.md index 63563b8b82e..c8f593823fe 100644 --- a/docs/Oracle Jobs/Job Types/keeper.md +++ b/docs/Oracle Jobs/Job Types/keeper.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Keeper Jobs" permalink: "docs/jobs/types/keeper/" diff --git a/docs/Oracle Jobs/Job Types/offchain_reporting.md b/docs/Oracle Jobs/Job Types/offchain_reporting.md index 81c619e6dac..a8208a954c4 100644 --- a/docs/Oracle Jobs/Job Types/offchain_reporting.md +++ b/docs/Oracle Jobs/Job Types/offchain_reporting.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Offchain Reporting Jobs" permalink: "docs/jobs/types/offchain-reporting/" diff --git a/docs/Oracle Jobs/Job Types/webhook.md b/docs/Oracle Jobs/Job Types/webhook.md index 07e6a71716b..9212eefdff3 100644 --- a/docs/Oracle Jobs/Job Types/webhook.md +++ b/docs/Oracle Jobs/Job Types/webhook.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Webhook Jobs" permalink: "docs/jobs/types/webhook/" diff --git a/docs/Oracle Jobs/Task Types/pipelines.md b/docs/Oracle Jobs/Task Types/pipelines.md index 4c2fe344e32..981e1773eef 100644 --- a/docs/Oracle Jobs/Task Types/pipelines.md +++ b/docs/Oracle Jobs/Task Types/pipelines.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Job Pipelines" permalink: "docs/jobs/task-types/pipelines/" diff --git a/docs/Oracle Jobs/Task Types/task_any.md b/docs/Oracle Jobs/Task Types/task_any.md index ca95d1b0f4c..b392ba045cc 100644 --- a/docs/Oracle Jobs/Task Types/task_any.md +++ b/docs/Oracle Jobs/Task Types/task_any.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "'Any' Task" permalink: "docs/jobs/task-types/any/" diff --git a/docs/Oracle Jobs/Task Types/task_bridge.md b/docs/Oracle Jobs/Task Types/task_bridge.md index a3501aa1cc5..4bb0103d3b1 100644 --- a/docs/Oracle Jobs/Task Types/task_bridge.md +++ b/docs/Oracle Jobs/Task Types/task_bridge.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Bridge Task" permalink: "docs/jobs/task-types/bridge/" diff --git a/docs/Oracle Jobs/Task Types/task_cborparse.md b/docs/Oracle Jobs/Task Types/task_cborparse.md index 61eb3860dc2..c685a0594e1 100644 --- a/docs/Oracle Jobs/Task Types/task_cborparse.md +++ b/docs/Oracle Jobs/Task Types/task_cborparse.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "CBOR Parse Task" permalink: "docs/jobs/task-types/cborparse/" diff --git a/docs/Oracle Jobs/Task Types/task_divide.md b/docs/Oracle Jobs/Task Types/task_divide.md index 3d86e9c9008..bba36feed03 100644 --- a/docs/Oracle Jobs/Task Types/task_divide.md +++ b/docs/Oracle Jobs/Task Types/task_divide.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Divide Task" permalink: "docs/jobs/task-types/divide/" diff --git a/docs/Oracle Jobs/Task Types/task_eth_abi_decode.md b/docs/Oracle Jobs/Task Types/task_eth_abi_decode.md index 57899005d66..7f22c72469b 100644 --- a/docs/Oracle Jobs/Task Types/task_eth_abi_decode.md +++ b/docs/Oracle Jobs/Task Types/task_eth_abi_decode.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "ETH ABI Decode Task" permalink: "docs/jobs/task-types/eth-abi-decode/" diff --git a/docs/Oracle Jobs/Task Types/task_eth_abi_decode_log.md b/docs/Oracle Jobs/Task Types/task_eth_abi_decode_log.md index 0656e95b151..7035dd338c8 100644 --- a/docs/Oracle Jobs/Task Types/task_eth_abi_decode_log.md +++ b/docs/Oracle Jobs/Task Types/task_eth_abi_decode_log.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "ETH ABI Decode Log Task" permalink: "docs/jobs/task-types/eth-abi-decode-log/" diff --git a/docs/Oracle Jobs/Task Types/task_eth_abi_encode.md b/docs/Oracle Jobs/Task Types/task_eth_abi_encode.md index ac687444a13..ee98e94a4e1 100644 --- a/docs/Oracle Jobs/Task Types/task_eth_abi_encode.md +++ b/docs/Oracle Jobs/Task Types/task_eth_abi_encode.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "ETH ABI Encode Task" permalink: "docs/jobs/task-types/eth-abi-encode/" diff --git a/docs/Oracle Jobs/Task Types/task_eth_call.md b/docs/Oracle Jobs/Task Types/task_eth_call.md index 469fb01f99d..4c10eb49f75 100644 --- a/docs/Oracle Jobs/Task Types/task_eth_call.md +++ b/docs/Oracle Jobs/Task Types/task_eth_call.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "ETH Call Task" permalink: "docs/jobs/task-types/eth-call/" diff --git a/docs/Oracle Jobs/Task Types/task_eth_tx.md b/docs/Oracle Jobs/Task Types/task_eth_tx.md index 36d1ca5902c..75cc05257cf 100644 --- a/docs/Oracle Jobs/Task Types/task_eth_tx.md +++ b/docs/Oracle Jobs/Task Types/task_eth_tx.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "ETH Tx Task" permalink: "docs/jobs/task-types/eth-tx/" diff --git a/docs/Oracle Jobs/Task Types/task_http.md b/docs/Oracle Jobs/Task Types/task_http.md index 226103f0ff3..0a786252566 100644 --- a/docs/Oracle Jobs/Task Types/task_http.md +++ b/docs/Oracle Jobs/Task Types/task_http.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "HTTP Task" permalink: "docs/jobs/task-types/http/" diff --git a/docs/Oracle Jobs/Task Types/task_jsonparse.md b/docs/Oracle Jobs/Task Types/task_jsonparse.md index e46b476f0fa..be416fd4122 100644 --- a/docs/Oracle Jobs/Task Types/task_jsonparse.md +++ b/docs/Oracle Jobs/Task Types/task_jsonparse.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "JSON Parse Task" permalink: "docs/jobs/task-types/jsonparse/" diff --git a/docs/Oracle Jobs/Task Types/task_mean.md b/docs/Oracle Jobs/Task Types/task_mean.md index fae15e6685b..0b4e6ed77bc 100644 --- a/docs/Oracle Jobs/Task Types/task_mean.md +++ b/docs/Oracle Jobs/Task Types/task_mean.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Mean Task" permalink: "docs/jobs/task-types/mean/" diff --git a/docs/Oracle Jobs/Task Types/task_median.md b/docs/Oracle Jobs/Task Types/task_median.md index 50dd1f09545..8d55750cf3f 100644 --- a/docs/Oracle Jobs/Task Types/task_median.md +++ b/docs/Oracle Jobs/Task Types/task_median.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Median Task" permalink: "docs/jobs/task-types/median/" diff --git a/docs/Oracle Jobs/Task Types/task_mode.md b/docs/Oracle Jobs/Task Types/task_mode.md index fc3bede04bc..92b2a1e8653 100644 --- a/docs/Oracle Jobs/Task Types/task_mode.md +++ b/docs/Oracle Jobs/Task Types/task_mode.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Mode Task" permalink: "docs/jobs/task-types/mode/" diff --git a/docs/Oracle Jobs/Task Types/task_multiply.md b/docs/Oracle Jobs/Task Types/task_multiply.md index 7b68c04f25f..3fa127569d4 100644 --- a/docs/Oracle Jobs/Task Types/task_multiply.md +++ b/docs/Oracle Jobs/Task Types/task_multiply.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Multiply Task" permalink: "docs/jobs/task-types/multiply/" diff --git a/docs/Oracle Jobs/Task Types/task_sum.md b/docs/Oracle Jobs/Task Types/task_sum.md index e07317aceda..206c619ccd5 100644 --- a/docs/Oracle Jobs/Task Types/task_sum.md +++ b/docs/Oracle Jobs/Task Types/task_sum.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Sum Task" permalink: "docs/jobs/task-types/sum/" diff --git a/docs/Oracle Jobs/Task Types/tasks.md b/docs/Oracle Jobs/Task Types/tasks.md index d10d45fc714..ad7263f2b6e 100644 --- a/docs/Oracle Jobs/Task Types/tasks.md +++ b/docs/Oracle Jobs/Task Types/tasks.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Tasks" permalink: "docs/tasks/" diff --git a/docs/Oracle Jobs/jobs.md b/docs/Oracle Jobs/jobs.md index 80a6934ac9f..a3852f5f0f2 100644 --- a/docs/Oracle Jobs/jobs.md +++ b/docs/Oracle Jobs/jobs.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "v2 Jobs" permalink: "docs/jobs/" diff --git a/docs/Oracle Jobs/migration-v1-v2.md b/docs/Oracle Jobs/migration-v1-v2.md index 2e84fbd936a..9844e88abfb 100644 --- a/docs/Oracle Jobs/migration-v1-v2.md +++ b/docs/Oracle Jobs/migration-v1-v2.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Migrating to v2 Jobs" permalink: "docs/jobs/migration-v1-v2/" diff --git a/docs/Using Any API/api-reference.md b/docs/Using Any API/api-reference.md index 35a11b708f2..706440a8e2f 100644 --- a/docs/Using Any API/api-reference.md +++ b/docs/Using Any API/api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "ChainlinkClient API Reference" permalink: "docs/chainlink-framework/" diff --git a/docs/Using Any API/contract-addresses.md b/docs/Using Any API/contract-addresses.md index f069f5df8f3..4c5ad8605fe 100644 --- a/docs/Using Any API/contract-addresses.md +++ b/docs/Using Any API/contract-addresses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Contract Addresses" permalink: "docs/decentralized-oracles-ethereum-mainnet/" diff --git a/docs/Using Any API/existing-job-request.md b/docs/Using Any API/existing-job-request.md index b6bf528c430..731e243ef1d 100644 --- a/docs/Using Any API/existing-job-request.md +++ b/docs/Using Any API/existing-job-request.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Make an Existing Job Request" permalink: "docs/existing-job-request/" diff --git a/docs/Using Any API/large-responses.md b/docs/Using Any API/large-responses.md index 7fa7f92f4e1..0e4f1a052b6 100644 --- a/docs/Using Any API/large-responses.md +++ b/docs/Using Any API/large-responses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Large Responses" permalink: "docs/large-responses/" diff --git a/docs/Using Any API/listing-services.md b/docs/Using Any API/listing-services.md index 43e1bc46778..7c1b71eb0c0 100644 --- a/docs/Using Any API/listing-services.md +++ b/docs/Using Any API/listing-services.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Find Existing Jobs" permalink: "docs/listing-services/" diff --git a/docs/Using Any API/make-a-http-get-request.md b/docs/Using Any API/make-a-http-get-request.md index fa5f09cf11e..52b15f79828 100644 --- a/docs/Using Any API/make-a-http-get-request.md +++ b/docs/Using Any API/make-a-http-get-request.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Make a GET Request" permalink: "docs/make-a-http-get-request/" diff --git a/docs/Using Any API/multi-variable-responses.md b/docs/Using Any API/multi-variable-responses.md index 652958756d0..8238763c0f6 100644 --- a/docs/Using Any API/multi-variable-responses.md +++ b/docs/Using Any API/multi-variable-responses.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Multi-Variable Responses" permalink: "docs/multi-variable-responses/" diff --git a/docs/Using Any API/request-and-receive-data.md b/docs/Using Any API/request-and-receive-data.md index 543bddc5646..0fc36ffcb95 100644 --- a/docs/Using Any API/request-and-receive-data.md +++ b/docs/Using Any API/request-and-receive-data.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumAnyAPI +section: ethereum date: Last Modified title: "Introduction to Using Any API" permalink: "docs/request-and-receive-data/" diff --git a/docs/Using Price Feeds/arbitrum-price-feeds.md b/docs/Using Price Feeds/arbitrum-price-feeds.md index a6bd8c12a42..1a85b3e0ba7 100644 --- a/docs/Using Price Feeds/arbitrum-price-feeds.md +++ b/docs/Using Price Feeds/arbitrum-price-feeds.md @@ -1,11 +1,14 @@ --- layout: feed.liquid title: "Arbitrum Feeds" -section: "ethereumDataFeeds" +section: ethereum stub: arbitrum-price-feeds permalink: "docs/arbitrum-price-feeds/" metadata: l2healthflag: "arbitrum" + description: "Chainlink Data Feeds on Arbitrum" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/avalanche-price-feeds.md b/docs/Using Price Feeds/avalanche-price-feeds.md index 949fb669d99..8eb791bed22 100644 --- a/docs/Using Price Feeds/avalanche-price-feeds.md +++ b/docs/Using Price Feeds/avalanche-price-feeds.md @@ -1,9 +1,13 @@ --- layout: feed.liquid title: "Avalanche Feeds" -section: "ethereumDataFeeds" +section: ethereum stub: avalanche-price-feeds permalink: "docs/avalanche-price-feeds/" +metadata: + description: "Chainlink Data Feeds on Avalanche" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/binance-smart-chain-addresses.md b/docs/Using Price Feeds/binance-smart-chain-addresses.md index 46239c3944b..78ebd019d3a 100644 --- a/docs/Using Price Feeds/binance-smart-chain-addresses.md +++ b/docs/Using Price Feeds/binance-smart-chain-addresses.md @@ -1,10 +1,13 @@ --- layout: feed.liquid title: "Binance Smart Chain Data Feeds" -section: "ethereumDataFeeds" +section: ethereum permalink: "/docs/binance-smart-chain-addresses/" stub: binance-smart-chain-addresses-price metadata: description: "Chainlink Data Feeds on Binance Smart Chain" + image: + 0: "/files/OpenGraph_V3.png" +date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/binance-smart-chain-price-feeds.md b/docs/Using Price Feeds/binance-smart-chain-price-feeds.md index a4bbb36c4b3..92eba33d363 100644 --- a/docs/Using Price Feeds/binance-smart-chain-price-feeds.md +++ b/docs/Using Price Feeds/binance-smart-chain-price-feeds.md @@ -1,10 +1,14 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" -date: Last Modified +section: ethereum title: "Binance Smart Chain Data Feeds" permalink: "docs/binance-smart-chain-price-feeds/" hidden: true +metadata: + description: "Chainlink Data Feeds on Binance Smart Chain" + image: + 0: "/files/OpenGraph_V3.png" +date: Last Modified --- # Introduction to Data Feeds diff --git a/docs/Using Price Feeds/data-feeds-moonriver.md b/docs/Using Price Feeds/data-feeds-moonriver.md index fe7cc2b9bd6..53024a89cc4 100644 --- a/docs/Using Price Feeds/data-feeds-moonriver.md +++ b/docs/Using Price Feeds/data-feeds-moonriver.md @@ -1,9 +1,13 @@ --- layout: feed.liquid title: "Moonriver Feeds" -section: "ethereumDataFeeds" +section: ethereum stub: data-feeds-moonriver permalink: "docs/data-feeds-moonriver/" +metadata: + description: "Chainlink Data Feeds on Moonriver" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/ethereum-addresses.md b/docs/Using Price Feeds/ethereum-addresses.md index 537c8bc8bce..c3e3288b461 100644 --- a/docs/Using Price Feeds/ethereum-addresses.md +++ b/docs/Using Price Feeds/ethereum-addresses.md @@ -1,10 +1,13 @@ --- layout: feed.liquid title: "Ethereum Data Feeds" -section: "ethereumDataFeeds" +section: ethereum permalink: "/docs/ethereum-addresses/" stub: ethereum-addresses metadata: - description: "Chainlink Data Feeds on Ethereum Blockchains" + description: "Chainlink Data Feeds on Ethereum" + image: + 0: "/files/OpenGraph_V3.png" +date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/fantom-price-feeds.md b/docs/Using Price Feeds/fantom-price-feeds.md index 3b82270a822..dca95142002 100644 --- a/docs/Using Price Feeds/fantom-price-feeds.md +++ b/docs/Using Price Feeds/fantom-price-feeds.md @@ -1,9 +1,13 @@ --- layout: feed.liquid title: "Fantom Feeds" -section: "ethereumDataFeeds" +section: ethereum stub: fantom-price-feeds permalink: "docs/fantom-price-feeds/" +metadata: + description: "Chainlink Data Feeds on Fantom" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/feed-registry.html b/docs/Using Price Feeds/feed-registry.html index d37506a58de..0c183816cea 100644 --- a/docs/Using Price Feeds/feed-registry.html +++ b/docs/Using Price Feeds/feed-registry.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Feed Registry" permalink: "docs/feed-registry/" diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index a5d56b4d186..6ff781102cd 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Using Data Feeds (EVM)" permalink: "docs/get-the-latest-price/" diff --git a/docs/Using Price Feeds/harmony-price-feeds.md b/docs/Using Price Feeds/harmony-price-feeds.md index 5196c121d0b..202df17fb9c 100644 --- a/docs/Using Price Feeds/harmony-price-feeds.md +++ b/docs/Using Price Feeds/harmony-price-feeds.md @@ -1,9 +1,13 @@ --- layout: feed.liquid title: "Harmony Feeds" -section: "ethereumDataFeeds" +section: ethereum stub: harmony-price-feeds permalink: "docs/harmony-price-feeds/" +metadata: + description: "Chainlink Data Feeds on Harmony" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/historical-price-data.html b/docs/Using Price Feeds/historical-price-data.html index 43c6e4e9502..bf0ba758e7d 100644 --- a/docs/Using Price Feeds/historical-price-data.html +++ b/docs/Using Price Feeds/historical-price-data.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Historical Price Data" permalink: "docs/historical-price-data/" diff --git a/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md b/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md index 9de40a00808..5b538b1ace1 100644 --- a/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md +++ b/docs/Using Price Feeds/huobi-eco-chain-price-feeds.md @@ -1,8 +1,13 @@ --- layout: feed.liquid title: "Huobi Eco Chain Data Feeds" -section: "ethereumDataFeeds" +section: ethereum permalink: "docs/huobi-eco-chain-price-feeds/" stub: huobi-eco-chain-price-feeds +metadata: + description: "Chainlink Data Feeds on Ethereum" + image: + 0: "/files/OpenGraph_V3.png" +date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/matic-addresses.md b/docs/Using Price Feeds/matic-addresses.md index f61218edb78..3730dfb7b1f 100644 --- a/docs/Using Price Feeds/matic-addresses.md +++ b/docs/Using Price Feeds/matic-addresses.md @@ -1,10 +1,13 @@ --- layout: feed.liquid title: "Polygon (Matic) Data Feeds" -section: "ethereumDataFeeds" +section: ethereum permalink: "/docs/matic-addresses/" stub: matic-addresses metadata: description: "Chainlink Data Feeds on the Polygon (Matic) Network" + image: + 0: "/files/OpenGraph_V3.png" +date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/optimism-price-feeds.md b/docs/Using Price Feeds/optimism-price-feeds.md index e13c208b1fa..70b1f3bac47 100644 --- a/docs/Using Price Feeds/optimism-price-feeds.md +++ b/docs/Using Price Feeds/optimism-price-feeds.md @@ -1,11 +1,14 @@ --- layout: feed.liquid title: "Optimism Feeds" -section: "ethereumDataFeeds" +section: ethereum stub: optimism-price-feeds permalink: "docs/optimism-price-feeds/" metadata: l2healthflag: "optimism" + description: "Chainlink Data Feeds on Ethereum" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Price Feeds/price-feeds-api-reference.md b/docs/Using Price Feeds/price-feeds-api-reference.md index 6e29d40a4a3..b415d862c18 100644 --- a/docs/Using Price Feeds/price-feeds-api-reference.md +++ b/docs/Using Price Feeds/price-feeds-api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Data Feeds API Reference" permalink: "docs/price-feeds-api-reference/" diff --git a/docs/Using Price Feeds/price-feeds-migration-august-2020.md b/docs/Using Price Feeds/price-feeds-migration-august-2020.md index 3e558f9f448..c4fd4760138 100644 --- a/docs/Using Price Feeds/price-feeds-migration-august-2020.md +++ b/docs/Using Price Feeds/price-feeds-migration-august-2020.md @@ -1,10 +1,14 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Data Feeds August 2020" permalink: "docs/price-feeds-migration-august-2020/" hidden: true +metadata: + description: "Chainlink Data Feeds on Ethereum" + image: + 0: "/files/OpenGraph_V3.png" --- Chainlink Data Feeds give smart contract developers a simple way to fetch current and historical asset prices. Asset prices are updated by decentralized oracle networks which aggregate results from high-quality data providers. diff --git a/docs/Using Price Feeds/reference-contracts.md b/docs/Using Price Feeds/reference-contracts.md index ad5fcd1016e..1e8c19ff4d5 100644 --- a/docs/Using Price Feeds/reference-contracts.md +++ b/docs/Using Price Feeds/reference-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Data Feeds Contract Addresses" permalink: "docs/reference-contracts/" diff --git a/docs/Using Price Feeds/using-chainlink-reference-contracts.md b/docs/Using Price Feeds/using-chainlink-reference-contracts.md index 2c2d9fd728b..4557a917a38 100644 --- a/docs/Using Price Feeds/using-chainlink-reference-contracts.md +++ b/docs/Using Price Feeds/using-chainlink-reference-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: "ethereumDataFeeds" +section: ethereum date: Last Modified title: "Introduction to Data Feeds" permalink: "docs/using-chainlink-reference-contracts/" diff --git a/docs/Using Price Feeds/xdai-price-feeds.md b/docs/Using Price Feeds/xdai-price-feeds.md index f0a7eb4d86d..91c71cdec69 100644 --- a/docs/Using Price Feeds/xdai-price-feeds.md +++ b/docs/Using Price Feeds/xdai-price-feeds.md @@ -1,9 +1,13 @@ --- layout: feed.liquid title: "xDai Data Feeds" -section: "ethereumDataFeeds" +section: ethereum permalink: "/docs/xdai-price-feeds/" stub: xdai-price-feeds +metadata: + description: "Chainlink Data Feeds on xDai" + image: + 0: "/files/OpenGraph_V3.png" date: Last Modified --- (content rendered programatically by layout) diff --git a/docs/Using Randomness/chainlink-vrf-api-reference.md b/docs/Using Randomness/chainlink-vrf-api-reference.md index bcf52dfe641..b8a2cbafd06 100644 --- a/docs/Using Randomness/chainlink-vrf-api-reference.md +++ b/docs/Using Randomness/chainlink-vrf-api-reference.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumVRF +section: ethereum date: Last Modified title: "Chainlink VRF API Reference" permalink: "docs/chainlink-vrf-api-reference/" diff --git a/docs/Using Randomness/chainlink-vrf.md b/docs/Using Randomness/chainlink-vrf.md index be21340fe01..f16e4764215 100644 --- a/docs/Using Randomness/chainlink-vrf.md +++ b/docs/Using Randomness/chainlink-vrf.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumVRF +section: ethereum date: Last Modified title: "Introduction to Chainlink VRF" permalink: "docs/chainlink-vrf/" diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/get-a-random-number.md index dbb43b70922..7cf7326c869 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumVRF +section: ethereum date: Last Modified title: "Get a Random Number" permalink: "docs/get-a-random-number/" diff --git a/docs/Using Randomness/vrf-best-practices.md b/docs/Using Randomness/vrf-best-practices.md index f639437b828..3712dbc0b7e 100644 --- a/docs/Using Randomness/vrf-best-practices.md +++ b/docs/Using Randomness/vrf-best-practices.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumVRF +section: ethereum date: Last Modified title: "VRF Best Practices" permalink: "docs/chainlink-vrf-best-practices/" diff --git a/docs/Using Randomness/vrf-contracts.md b/docs/Using Randomness/vrf-contracts.md index 9d8d69c440c..4a5b922da23 100644 --- a/docs/Using Randomness/vrf-contracts.md +++ b/docs/Using Randomness/vrf-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumVRF +section: ethereum date: Last Modified title: "Chainlink VRF Contract Addresses" permalink: "docs/vrf-contracts/" diff --git a/docs/Using Randomness/vrf-security-considerations.md b/docs/Using Randomness/vrf-security-considerations.md index 0f12680e216..12781a17fab 100644 --- a/docs/Using Randomness/vrf-security-considerations.md +++ b/docs/Using Randomness/vrf-security-considerations.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumVRF +section: ethereum date: Last Modified title: "VRF Security Considerations" permalink: "docs/vrf-security-considerations/" diff --git a/docs/chainlink-keepers/compatible-contracts.md b/docs/chainlink-keepers/compatible-contracts.md index 7c8efe5ebdc..fbd92369790 100644 --- a/docs/chainlink-keepers/compatible-contracts.md +++ b/docs/chainlink-keepers/compatible-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumKeepers +section: ethereum date: Last Modified title: 'Making Keeper-compatible Contracts' whatsnext: diff --git a/docs/chainlink-keepers/faqs.md b/docs/chainlink-keepers/faqs.md index 0bd15c39046..0781beef74e 100644 --- a/docs/chainlink-keepers/faqs.md +++ b/docs/chainlink-keepers/faqs.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumKeepers +section: ethereum date: Last Modified title: 'Chainlink Keepers Frequently Asked Questions' --- diff --git a/docs/chainlink-keepers/introduction.md b/docs/chainlink-keepers/introduction.md index 16971bbaa8d..eb757ce2807 100644 --- a/docs/chainlink-keepers/introduction.md +++ b/docs/chainlink-keepers/introduction.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumKeepers +section: ethereum date: Last Modified title: 'Introduction to Chainlink Keepers' whatsnext: diff --git a/docs/chainlink-keepers/overview.html b/docs/chainlink-keepers/overview.html index 3ae8a6584d8..4db5b5c195a 100644 --- a/docs/chainlink-keepers/overview.html +++ b/docs/chainlink-keepers/overview.html @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumKeepers +section: ethereum date: Last Modified title: 'Keepers Network Overview' networks: diff --git a/docs/chainlink-keepers/register-upkeep.md b/docs/chainlink-keepers/register-upkeep.md index a2118162a2b..9f6bb15bfb5 100644 --- a/docs/chainlink-keepers/register-upkeep.md +++ b/docs/chainlink-keepers/register-upkeep.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumKeepers +section: ethereum date: Last Modified title: 'Register Keeper Upkeep for a Contract' whatsnext: diff --git a/docs/chainlink-keepers/utility-contracts.md b/docs/chainlink-keepers/utility-contracts.md index 04c7b6d16ff..188d62f7944 100644 --- a/docs/chainlink-keepers/utility-contracts.md +++ b/docs/chainlink-keepers/utility-contracts.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: ethereumKeepers +section: ethereum date: Last Modified title: 'Keeper Utility Contracts' whatsnext: From bb4da4b446c8d5ed6298385c504f64f78c14e0fa Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 6 Dec 2021 23:12:32 -0800 Subject: [PATCH 04/26] Add temporary top nav and add landing pages for each chain --- _data/navigation.js | 4 +- _includes/main.liquid | 88 +++- _includes/nodes.liquid | 9 +- _src/docs.css | 41 +- _src/images/logos/chainlink.svg | 1 + 404.md => docs/404.md | 0 docs/Chains/arbitrum.md | 107 ++++ docs/Chains/avalanche.md | 107 ++++ docs/Chains/binance.md | 138 +++++ ethereum.md => docs/Chains/ethereum.md | 5 +- docs/Chains/fantom.md | 107 ++++ docs/Chains/harmony.md | 107 ++++ docs/Chains/huobi.md | 107 ++++ docs/Chains/moonriver.md | 106 ++++ docs/Chains/optimism.md | 106 ++++ docs/Chains/polygon.md | 138 +++++ solana.md => docs/Chains/solana.md | 3 +- terra.md => docs/Chains/terra.md | 1 + docs/Chains/xdai.md | 107 ++++ .../Introduction/getting-started.md | 0 .../Node Operators/chainlink-nodes.md | 1 + docs/home.md | 482 ++++++++++++++++++ home.md | 137 ----- 23 files changed, 1736 insertions(+), 166 deletions(-) create mode 100644 _src/images/logos/chainlink.svg rename 404.md => docs/404.md (100%) create mode 100644 docs/Chains/arbitrum.md create mode 100644 docs/Chains/avalanche.md create mode 100644 docs/Chains/binance.md rename ethereum.md => docs/Chains/ethereum.md (96%) create mode 100644 docs/Chains/fantom.md create mode 100644 docs/Chains/harmony.md create mode 100644 docs/Chains/huobi.md create mode 100644 docs/Chains/moonriver.md create mode 100644 docs/Chains/optimism.md create mode 100644 docs/Chains/polygon.md rename solana.md => docs/Chains/solana.md (87%) rename terra.md => docs/Chains/terra.md (97%) create mode 100644 docs/Chains/xdai.md rename getting-started.md => docs/Introduction/getting-started.md (100%) rename chainlink-nodes.md => docs/Node Operators/chainlink-nodes.md (99%) create mode 100644 docs/home.md delete mode 100644 home.md diff --git a/_data/navigation.js b/_data/navigation.js index a851c991dab..0a2f4315c66 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -56,7 +56,7 @@ module.exports = { section: 'Next Steps', contents: [ { - title: 'Architecture Overview ↗', + title: 'Chainlink Architecture ↗', url: '/docs/architecture-overview/', }, { @@ -87,7 +87,7 @@ module.exports = { section: 'Overview', contents: [ { - title: 'Architecture Overview', + title: 'Chainlink Architecture', url: '/docs/architecture-overview/', children: [ { diff --git a/_includes/main.liquid b/_includes/main.liquid index 58e892dcfcb..62dc895311c 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -80,16 +80,100 @@ aria-label="home">Chainlink Developers - + + + + + + + {% include _search.html %} diff --git a/_includes/nodes.liquid b/_includes/nodes.liquid index b37d3ade899..761eb19a23d 100644 --- a/_includes/nodes.liquid +++ b/_includes/nodes.liquid @@ -24,11 +24,11 @@ layout: ./main.liquid {% endfor %} {% else %} {{destination.title}} - + {% endif %} - + {% endfor %} @@ -40,6 +40,9 @@ layout: ./main.liquid {% if title %}
+ {% if logo %} + + {% endif %}

{{title}}

@@ -69,4 +72,4 @@ layout: ./main.liquid
{% endif %}
-
\ No newline at end of file +
diff --git a/_src/docs.css b/_src/docs.css index d085af24c95..79be45a27bc 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -488,25 +488,25 @@ hr { font-display: swap; } -/** Custom Feature Cards **/ +/** Custom Chain Cards **/ -.cl-servicecard { +.cl-chaincard { display: flex; flex-wrap: wrap; justify-content: center; } -.cl-servicecard h2 { +.cl-chaincard h2 { margin-top: 16px; margin-bottom: 32px; } -.cl-servicecard > div { +.cl-chaincard > div { width: 300px; min-width: 280px; max-width: 320px; margin: 8px; - padding: 8px; + padding: 4px; border-radius: 8px; border: 1px solid #dee7fc; align-items: center; @@ -514,7 +514,7 @@ hr { flex: 1; } -.cl-servicecard-logos { +.cl-chaincard-logos { display: flex; flex-flow: row-reverse; justify-content: center; @@ -522,42 +522,38 @@ hr { white-space: nowrap; } -.cl-servicecard-logos img { +.cl-chaincard-logos img { max-height: 40px; - margin-left: -3px; - margin-right: -3px; transition: all 0.2s; } -.cl-servicecard-logos:hover img { - margin-left: -1px; - margin-right: -1px; +.cl-chaincard-logos:hover img { cursor: pointer; - transform: scale(1.1); + transform: scale(1.2); } -.cl-servicecard-link { +.cl-chaincard-link { display: block; - margin: 16px 32px; + margin: 12px 32px; text-align: left; } -.cl-servicecard-link > a { +.cl-chaincard-link > a { color: #6d7380; transition: all 0.2s; } -.cl-servicecard-link:hover > a { +.cl-chaincard-link:hover > a { color: #375bd2; } -.cl-servicecard-link > img { +.cl-chaincard-link > img { float: right; width: 12px; transition: all 0.2s; } -.cl-servicecard-link:hover > img { +.cl-chaincard-link:hover > img { transform: translate(5px, 0px); } @@ -810,6 +806,13 @@ body { display: inline-block; } +/* The logo next to the page title */ +img.page-logo { + margin: 30px 10px 0px 0px; + max-height: 50px; + max-width: 50px; +} + h1, h2, h3, diff --git a/_src/images/logos/chainlink.svg b/_src/images/logos/chainlink.svg new file mode 100644 index 00000000000..bf4cd5374e2 --- /dev/null +++ b/_src/images/logos/chainlink.svg @@ -0,0 +1 @@ +Asset 1 \ No newline at end of file diff --git a/404.md b/docs/404.md similarity index 100% rename from 404.md rename to docs/404.md diff --git a/docs/Chains/arbitrum.md b/docs/Chains/arbitrum.md new file mode 100644 index 00000000000..2ca0e381a7c --- /dev/null +++ b/docs/Chains/arbitrum.md @@ -0,0 +1,107 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Arbitrum" +logo: "/images/logos/arbitrum.svg" +date: Last Modified +permalink: /arbitrum/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/avalanche.md b/docs/Chains/avalanche.md new file mode 100644 index 00000000000..d4469fbab5c --- /dev/null +++ b/docs/Chains/avalanche.md @@ -0,0 +1,107 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Avalanche" +logo: "/images/logos/avalanche.svg" +date: Last Modified +permalink: /avalanche/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/binance.md b/docs/Chains/binance.md new file mode 100644 index 00000000000..7f792758ac5 --- /dev/null +++ b/docs/Chains/binance.md @@ -0,0 +1,138 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Binance" +logo: "/images/logos/binance.svg" +date: Last Modified +permalink: /binance/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Generate Verifiable Random Numbers (VRF)

+

+ Use Chainlink VRF to consume randomness in your smart contracts. +

+
+ Learn More +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+ +
+

Automate and Maintain with Chainlink Keepers

+

+ Chainlink Keepers provide smart contract developers, decentralized applications (dApps), and decentralized autonomous organizations (DAOs) with a highly reliable, decentralized, and cost-efficient method of automating smart contract functions and regular contract maintenance. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/ethereum.md b/docs/Chains/ethereum.md similarity index 96% rename from ethereum.md rename to docs/Chains/ethereum.md index d21047cd1b8..0dbf24cd978 100644 --- a/ethereum.md +++ b/docs/Chains/ethereum.md @@ -1,7 +1,8 @@ --- layout: nodes.liquid section: ethereum -title: "Chainlink on Ethereum Chains" +title: "Chainlink on Ethereum" +logo: "/images/logos/ethereum.svg" date: Last Modified permalink: /ethereum/ --- @@ -15,7 +16,7 @@ permalink: /ethereum/ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology.

- Learn more about Chainlink's products and services with our step‑by‑step tutorials and documentation: + The following products are available for {{title}}:

diff --git a/docs/Chains/fantom.md b/docs/Chains/fantom.md new file mode 100644 index 00000000000..68d1561197a --- /dev/null +++ b/docs/Chains/fantom.md @@ -0,0 +1,107 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Fantom" +logo: "/images/logos/fantom.svg" +date: Last Modified +permalink: /fantom/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/harmony.md b/docs/Chains/harmony.md new file mode 100644 index 00000000000..66716bd5ed1 --- /dev/null +++ b/docs/Chains/harmony.md @@ -0,0 +1,107 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Harmony" +logo: "/images/logos/harmony.svg" +date: Last Modified +permalink: /harmony/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/huobi.md b/docs/Chains/huobi.md new file mode 100644 index 00000000000..701120b269b --- /dev/null +++ b/docs/Chains/huobi.md @@ -0,0 +1,107 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Huobi" +logo: "/images/logos/huobi.svg" +date: Last Modified +permalink: /huobi/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/moonriver.md b/docs/Chains/moonriver.md new file mode 100644 index 00000000000..9db25e62f39 --- /dev/null +++ b/docs/Chains/moonriver.md @@ -0,0 +1,106 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Moonriver" +date: Last Modified +permalink: /moonriver/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/optimism.md b/docs/Chains/optimism.md new file mode 100644 index 00000000000..f9ff3105892 --- /dev/null +++ b/docs/Chains/optimism.md @@ -0,0 +1,106 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Optimism" +date: Last Modified +permalink: /optimism/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/docs/Chains/polygon.md b/docs/Chains/polygon.md new file mode 100644 index 00000000000..b177776d01f --- /dev/null +++ b/docs/Chains/polygon.md @@ -0,0 +1,138 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on Polygon" +logo: "/images/logos/polygon.svg" +date: Last Modified +permalink: /polygon/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Generate Verifiable Random Numbers (VRF)

+

+ Use Chainlink VRF to consume randomness in your smart contracts. +

+
+ Learn More +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+ +
+

Automate and Maintain with Chainlink Keepers

+

+ Chainlink Keepers provide smart contract developers, decentralized applications (dApps), and decentralized autonomous organizations (DAOs) with a highly reliable, decentralized, and cost-efficient method of automating smart contract functions and regular contract maintenance. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/solana.md b/docs/Chains/solana.md similarity index 87% rename from solana.md rename to docs/Chains/solana.md index 53469ee6495..1f03501544d 100644 --- a/solana.md +++ b/docs/Chains/solana.md @@ -2,6 +2,7 @@ layout: nodes.liquid section: solana title: "Chainlink on Solana" +logo: "/images/logos/solana.svg" date: Last Modified permalink: /solana/ --- @@ -13,7 +14,7 @@ permalink: /solana/ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services.

- Chainlink services are now available on networks outside of the Ethereum EVM ecosystem. These services run natively on their respective networks and have no dependencies on other blockchains. + The following products are available for {{title}}:

diff --git a/terra.md b/docs/Chains/terra.md similarity index 97% rename from terra.md rename to docs/Chains/terra.md index ba836dd6501..ff0c80a119f 100644 --- a/terra.md +++ b/docs/Chains/terra.md @@ -2,6 +2,7 @@ layout: nodes.liquid section: terra title: "Chainlink on Terra" +logo: "/images/logos/terra.svg" date: Last Modified permalink: /terra/ --- diff --git a/docs/Chains/xdai.md b/docs/Chains/xdai.md new file mode 100644 index 00000000000..6e5b8f4f73b --- /dev/null +++ b/docs/Chains/xdai.md @@ -0,0 +1,107 @@ +--- +layout: nodes.liquid +section: ethereum +title: "Chainlink on xDai" +logo: "/images/logos/xdai.svg" +date: Last Modified +permalink: /xdai/ +--- + + + +
+
+
+

+ Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. +

+

+ The following products are available for {{title}}: +

+
+
+
+ +
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+ +
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+
+
+
+
+

New to Ethereum and Smart Contracts?

+

+ Build your first smart contract connected to off-chain data feeds. +

+
+ + Start Building + +
+
+
+

Chainlink Architecture Overview

+

+ Discover how the Chainlink ecosystem bridges the gap between + off-chain data and smart contracts. +

+
+ + Architecture + +
+
+
+

Explore Chainlink Developer Tools

+ +
+
+
+
diff --git a/getting-started.md b/docs/Introduction/getting-started.md similarity index 100% rename from getting-started.md rename to docs/Introduction/getting-started.md diff --git a/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md similarity index 99% rename from chainlink-nodes.md rename to docs/Node Operators/chainlink-nodes.md index b6e845a95f0..32d1857a872 100644 --- a/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -2,6 +2,7 @@ layout: nodes.liquid date: Last Modified title: "Chainlink Node Docs" +permalink: /chainlink-nodes/ ---
diff --git a/docs/home.md b/docs/home.md new file mode 100644 index 00000000000..bfe8926f057 --- /dev/null +++ b/docs/home.md @@ -0,0 +1,482 @@ +--- +layout: home.liquid +section: ethereum +title: "Chainlink Documentation" +date: Last Modified +permalink: / +landing: true +--- + +
+
+
+
+

New to Chainlink and Smart Contracts?

+

+ Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum. +

+
+ + Getting Started Guide + +
+

Networks and Products

+ +
+
+

Need to run your own Chainlink Node?

+

+ Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. +

+
+ + Node Operator's Guide + +
+
+
diff --git a/home.md b/home.md deleted file mode 100644 index b8d3ee9599b..00000000000 --- a/home.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -layout: home.liquid -section: ethereum -title: "Chainlink Documentation" -date: Last Modified -permalink: / -landing: true ---- - -
-
-
-
-

New to Chainlink and Smart Contracts?

-

- Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum. -

-
- - Getting Started Guide - -
-

Networks and Services

-
- -
-
- -
-

Solana

- - -
-
-
- -
-

Terra

- - -
-
-
-
-

Need to run your own Chainlink Node?

-

- Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. -

-
- - Node Operator's Guide - -
-
-
From b96e391a8aa0708a7518dafad402c1b855728f86 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Tue, 7 Dec 2021 14:16:56 -0800 Subject: [PATCH 05/26] Update homepage to improve links --- _src/docs.css | 54 ++- _src/images/logos/moonriver.png | Bin 0 -> 18229 bytes _src/images/logos/optimism-uniswap.svg | 48 ++ docs/home.md | 594 ++++++++++--------------- 4 files changed, 312 insertions(+), 384 deletions(-) create mode 100644 _src/images/logos/moonriver.png create mode 100644 _src/images/logos/optimism-uniswap.svg diff --git a/_src/docs.css b/_src/docs.css index 79be45a27bc..007b33c65c0 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -498,62 +498,76 @@ hr { .cl-chaincard h2 { margin-top: 16px; - margin-bottom: 32px; } .cl-chaincard > div { width: 300px; - min-width: 280px; + min-width: 275px; max-width: 320px; margin: 8px; - padding: 4px; border-radius: 8px; border: 1px solid #dee7fc; - align-items: center; text-align: center; flex: 1; } -.cl-chaincard-logos { - display: flex; - flex-flow: row-reverse; - justify-content: center; - margin-top: 12px; - white-space: nowrap; +.cl-chaincard-logo { + display: block; + padding-top: 12px; + padding-left: 12px; + padding-right: 12px; } -.cl-chaincard-logos img { +.cl-chaincard-logo > img { + height: 40px; max-height: 40px; transition: all 0.2s; } -.cl-chaincard-logos:hover img { +.cl-chaincard-logo:hover > img { cursor: pointer; transform: scale(1.2); } -.cl-chaincard-link { - display: block; - margin: 12px 32px; +.cl-chaincard-logo:hover > h2 { + cursor: pointer; + color: #6d7380; +} + +.cl-chaincard-links { + list-style-type: none; + padding: 8px; + margin: 0px; text-align: left; } -.cl-chaincard-link > a { +.cl-chaincard-links > li { + margin-bottom: 12px; +} + +.cl-chaincard-links > li > a { + display: flex; + flex-direction: row; + justify-content: space-between; + padding-left: 24px; + padding-right: 24px; + cursor: pointer; color: #6d7380; transition: all 0.2s; } -.cl-chaincard-link:hover > a { +.cl-chaincard-links > li:hover > a { color: #375bd2; } -.cl-chaincard-link > img { - float: right; +.cl-chaincard-links > li > a > img { + margin-left: auto; + margin-right: 0px; width: 12px; transition: all 0.2s; } -.cl-chaincard-link:hover > img { +.cl-chaincard-links > li:hover > a > img { transform: translate(5px, 0px); } diff --git a/_src/images/logos/moonriver.png b/_src/images/logos/moonriver.png new file mode 100644 index 0000000000000000000000000000000000000000..fefc768f001cc68cf6343b535ab9d314d9bc07a0 GIT binary patch literal 18229 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 literal 0 HcmV?d00001 diff --git a/_src/images/logos/optimism-uniswap.svg b/_src/images/logos/optimism-uniswap.svg new file mode 100644 index 00000000000..fa31aeaa13d --- /dev/null +++ b/_src/images/logos/optimism-uniswap.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + diff --git a/docs/home.md b/docs/home.md index bfe8926f057..f4e1846c6ec 100644 --- a/docs/home.md +++ b/docs/home.md @@ -24,447 +24,313 @@ landing: true
-
-
-
-
+ -

xDai

- - - + + + +
-
+ -

Huobi

- - - + + + +
-
-
+ -

Fantom

- - - + + + +
-
-
-
From 6cb936eb9855a0f8e623d618557e0ba2492475d4 Mon Sep 17 00:00:00 2001 From: ritika-b Date: Wed, 8 Dec 2021 00:19:21 -0700 Subject: [PATCH 06/26] Create the new Getting Started landing page * Create the new Getting Started landing page --- docs/Introduction/getting-started.md | 135 ++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 2 deletions(-) diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index 64b1f4b6e87..68556189f94 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -1,9 +1,140 @@ --- layout: nodes.liquid section: gettingStarted -title: "Chainlink Getting Started Guide" +title: "Getting Started with Chainlink" date: Last Modified permalink: /getting-started/ --- -Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services. +## Start your journey with Chainlink. + +Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. To get started with Chainlink: + +1. Learn how to [set up install and fund Metamask](/docs/install-metamask). +2. [Acquire testnet LINK](/docs/acquire-link/). +3. [Deploy](/docs/deploy-your-first-contract/), [fund](/docs/fund-your-contract/), and [use your first smart contract](/docs/use-your-first-contract/). + +## Build you first application. + +Pick a topic and build your first application using Chainlink with our step‑by‑step tutorials. If you're a beginner, we recommend starting with our [Data Feeds](/docs/beginners-tutorial/) tutorial. + +
+
+
+

Get Data Feeds in your Smart Contracts

+

+ Retrieve the latest prices and data points of assets in your smart + contracts. +

+
+ + Learn More + +
+
+
+

Generate Verifiable Random Numbers (VRF)

+

+ Use Chainlink VRF to consume randomness in your smart contracts. +

+
+ Learn More +
+
+
+

Call External APIs from Smart Contracts

+

+ Request & Receive data from any API using the Chainlink contract + library. +

+
+ + Learn More + +
+
+ +## Dive deeper into Chainlink product and services. + +Comprehensive tools and docs for all of Chainlink's products and services. + + +

+

+Need to run your own Chainlink node? Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. + +## Find the resources you need. +Find all the right resources to get the most out of Chainlink. + + + From 53ed548c632b2abfe18683d5a35ab26809dbd9f3 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 8 Dec 2021 22:44:41 -0800 Subject: [PATCH 07/26] Scale down the homepage again, apply design style, start content reorg --- _data/navigation.js | 54 +-- _includes/main.liquid | 18 +- _src/docs.css | 72 ++- ...e6e24b376ed9ab5c1e_programming-browser.svg | 20 + .../misc/5f75b5fde8d4beb3824522bb_lock.svg | 20 + ...75cc9f74f7124d70ad4f0a_file-code-check.svg | 35 ++ .../misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg | 37 ++ ...771e39793e0f78a75547bf_board-game-dice.svg | 69 +++ ...5f85d14b6782933bd5a70060_decentralized.svg | 106 +++++ ...5f8825a8a76298e280868970_refresh-money.svg | 24 + ...5f96ab4b4db522072b7ff30c_book-bookmark.svg | 31 ++ .../misc/61095848a2a30f150520167b_keepers.svg | 22 + docs/Additional Information/faq.md | 4 +- docs/Chains/arbitrum.md | 107 ----- docs/Chains/avalanche.md | 107 ----- docs/Chains/binance.md | 138 ------ docs/Chains/ethereum.md | 113 +++-- docs/Chains/fantom.md | 107 ----- docs/Chains/harmony.md | 107 ----- docs/Chains/huobi.md | 107 ----- docs/Chains/moonriver.md | 106 ----- docs/Chains/optimism.md | 106 ----- docs/Chains/polygon.md | 138 ------ docs/Chains/solana.md | 1 - docs/Chains/terra.md | 1 - docs/Chains/xdai.md | 107 ----- .../chainlink-alarm-clock.md | 2 +- .../dns-ownership-oracle.md | 2 +- .../finage-global-market-data-oracle.md | 2 +- docs/Data Provider Nodes/google-weather.md | 2 +- .../kraken-rates-oracle-node.md | 2 +- docs/Data Provider Nodes/lcx-testnet.md | 2 +- .../create-a-chainlinked-project.md | 16 +- .../hackathon-resources.md | 1 - docs/Introduction/getting-started.md | 4 +- .../getting-started/your-first-contract.md | 120 +++++ .../tutorials/beginners-tutorial.md | 2 +- docs/Node Operators/chainlink-nodes.md | 123 +++-- .../using-any-api.md} | 10 +- .../get-the-latest-price.html | 13 +- .../using-chainlink-vrf.md} | 12 +- ...dom-number.md => vrf-example-contracts.md} | 15 +- docs/home.md | 428 +++++------------- firebase.json | 12 +- 44 files changed, 832 insertions(+), 1693 deletions(-) create mode 100644 _src/images/misc/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg create mode 100644 _src/images/misc/5f75b5fde8d4beb3824522bb_lock.svg create mode 100644 _src/images/misc/5f75cc9f74f7124d70ad4f0a_file-code-check.svg create mode 100644 _src/images/misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg create mode 100644 _src/images/misc/5f771e39793e0f78a75547bf_board-game-dice.svg create mode 100644 _src/images/misc/5f85d14b6782933bd5a70060_decentralized.svg create mode 100644 _src/images/misc/5f8825a8a76298e280868970_refresh-money.svg create mode 100644 _src/images/misc/5f96ab4b4db522072b7ff30c_book-bookmark.svg create mode 100644 _src/images/misc/61095848a2a30f150520167b_keepers.svg delete mode 100644 docs/Chains/arbitrum.md delete mode 100644 docs/Chains/avalanche.md delete mode 100644 docs/Chains/binance.md delete mode 100644 docs/Chains/fantom.md delete mode 100644 docs/Chains/harmony.md delete mode 100644 docs/Chains/huobi.md delete mode 100644 docs/Chains/moonriver.md delete mode 100644 docs/Chains/optimism.md delete mode 100644 docs/Chains/polygon.md delete mode 100644 docs/Chains/xdai.md create mode 100644 docs/Introduction/getting-started/your-first-contract.md rename docs/{Introduction/tutorials/advanced-tutorial.md => Using Any API/using-any-api.md} (94%) rename docs/{Introduction/tutorials/intermediates-tutorial.md => Using Randomness/using-chainlink-vrf.md} (95%) rename docs/Using Randomness/{get-a-random-number.md => vrf-example-contracts.md} (82%) diff --git a/_data/navigation.js b/_data/navigation.js index 0a2f4315c66..f157f002bb2 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -21,33 +21,20 @@ module.exports = { url: '/docs/fund-your-contract/', }, { - title: 'Use your first contract!', + title: 'Use your first contract', url: '/docs/use-your-first-contract/', }, - ], - }, - { - section: 'Beginner Contracts', - contents: [ { - title: 'Use a Data Feed', + title: 'Learn how smart contracts work', url: '/docs/beginners-tutorial/', }, - { - title: 'Random Numbers', - url: '/docs/intermediates-tutorial/', - }, - { - title: 'API Calls', - url: '/docs/advanced-tutorial/', - } ], }, { section: 'Resources', contents: [ { - title: 'Learning Resources', + title: 'Videos and Tutorials', url: '/docs/other-tutorials/', }, ], @@ -124,7 +111,6 @@ module.exports = { { title: 'Feed Registry', url: '/docs/feed-registry/', - filters: ['ethereum'], }, { title: 'API Reference', @@ -137,57 +123,47 @@ module.exports = { { title: 'Ethereum Data Feeds', url: '/docs/ethereum-addresses/', - filters: ['ethereum'], }, { title: 'Binance Smart Chain Data Feeds', url: '/docs/binance-smart-chain-addresses/', - filters: ['binance'], }, { title: 'Polygon (Matic) Data Feeds', url: '/docs/matic-addresses/', - filters: ['polygon'], }, { title: 'xDai Data Feeds', url: '/docs/xdai-price-feeds/', - filters: ['xdai'], }, { title: 'Huobi Eco Chain Data Feeds', url: '/docs/huobi-eco-chain-price-feeds/', - filters: ['huobi'], }, { title: 'Avalanche Data Feeds', url: '/docs/avalanche-price-feeds/', - filters: ['avalanche'], }, { title: 'Fantom Data Feeds', url: '/docs/fantom-price-feeds/', - filters: ['fantom'], }, { title: 'Arbitrum Data Feeds', url: '/docs/arbitrum-price-feeds/', - filters: ['arbitrum'], }, { title: 'Harmony Data Feeds', url: '/docs/harmony-price-feeds/', - filters: ['arbitrum'], }, { title: 'Optimism Data Feeds', url: '/docs/optimism-price-feeds/', - filters: ['optimism'], }, { title: 'Moonriver Data Feeds', url: '/docs/data-feeds-moonriver/', - filters: ['moonriver'], + }, ], }, @@ -195,20 +171,20 @@ module.exports = { }, { section: 'USING RANDOMNESS', - filters: [ - 'ethereum', - 'binance', - 'polygon', - ], + contents: [ { title: 'Introduction to Chainlink VRF', url: '/docs/chainlink-vrf/', }, { - title: 'Get a Random Number', + title: 'Using Chainlink VRF', url: '/docs/get-a-random-number/' }, + { + title: 'Example Contracts', + url: '/docs/vrf-example-contracts/', + }, { title: 'API Reference', url: '/docs/chainlink-vrf-api-reference/' @@ -229,12 +205,15 @@ module.exports = { }, { section: 'USING ANY API', - filters: ['ethereum'], contents: [ { title: 'Introduction to Using Any API', url: '/docs/request-and-receive-data/', }, + { + title: 'Using Any API', + url: '/docs/using-any-api/', + }, { title: 'Make a GET Request', url: '/docs/make-a-http-get-request/', @@ -267,11 +246,6 @@ module.exports = { }, { section: 'USING CHAINLINK KEEPERS', - filters: [ - 'ethereum', - 'binance', - 'polygon', - ], contents: [ { title: 'Introduction', diff --git a/_includes/main.liquid b/_includes/main.liquid index 62dc895311c..cbfbde8f5db 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -84,6 +84,7 @@ + - {% include _search.html %} diff --git a/_src/docs.css b/_src/docs.css index 007b33c65c0..911925da215 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -119,8 +119,12 @@ rdme-callout[theme='warn'] > *:first-child { border-bottom: 2px solid #375bd2; color: #375bd2; } -#nav-container .tab a { - margin-right: 15px; +#nav-container .tab { + text-align: center; + margin-top: auto; + margin-bottom: auto; + margin-right: 8px; + margin-left: 8px; } a:hover, #nav-container .tab a:hover { @@ -171,7 +175,7 @@ navigation { } navigation a { display: block; - color: #666; + color: #6D7380; padding-left: 16px; } navigation a:hover { @@ -201,7 +205,7 @@ navigation .menu { font-weight: bold; text-transform: uppercase; padding-left: 16px; - color: #384248; + color: #1A2B6B; } /* notification */ @@ -496,13 +500,13 @@ hr { justify-content: center; } -.cl-chaincard h2 { - margin-top: 16px; +.cl-chaincard h3 { + margin-top: 12px; } .cl-chaincard > div { width: 300px; - min-width: 275px; + min-width: 270px; max-width: 320px; margin: 8px; border-radius: 8px; @@ -513,23 +517,28 @@ hr { .cl-chaincard-logo { display: block; - padding-top: 12px; - padding-left: 12px; - padding-right: 12px; + max-width: 280px; + margin-left: auto; + margin-right: auto; + padding-top: 16px; } .cl-chaincard-logo > img { - height: 40px; - max-height: 40px; + height: 32px; + max-height: 32px; + margin-left: -5px; + margin-right: -5px; transition: all 0.2s; } .cl-chaincard-logo:hover > img { cursor: pointer; - transform: scale(1.2); + margin-left: -3px; + margin-right: -3px; + transform: scale(1.075); } -.cl-chaincard-logo:hover > h2 { +.cl-chaincard-logo:hover > h3 { cursor: pointer; color: #6d7380; } @@ -594,11 +603,34 @@ hr { display: flex; flex-direction: column; align-items: center; - text-align: center; + text-align: left; flex: 1; } -.cl-featuredcard > div > div { - max-height: 225px; + +.cl-featuredcard > div > h2 { + margin-top: 16px; +} + +.card-icon-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 56px; + height: 56px; + min-height: 56px; + min-width: 56px; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + border: 1px solid #dfe7fb; + border-radius: 28px; + background-color: #f5f7fd; } .cl-button--ghost-sm { @@ -833,11 +865,11 @@ h3, h4, h5, h6 { - color: #384248; + color: #1A2B6B; font-weight: 700; margin-bottom: 10px; margin-top: 40px; - line-height: 44px; + line-height: 24px; } h1.page-title { @@ -850,7 +882,7 @@ h1 { } h2 { - font-size: 26px; + font-size: 32px; line-height: 32px; font-weight: 400; } diff --git a/_src/images/misc/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg b/_src/images/misc/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg new file mode 100644 index 00000000000..87bee71e685 --- /dev/null +++ b/_src/images/misc/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f75b5fde8d4beb3824522bb_lock.svg b/_src/images/misc/5f75b5fde8d4beb3824522bb_lock.svg new file mode 100644 index 00000000000..f901f8d36ca --- /dev/null +++ b/_src/images/misc/5f75b5fde8d4beb3824522bb_lock.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f75cc9f74f7124d70ad4f0a_file-code-check.svg b/_src/images/misc/5f75cc9f74f7124d70ad4f0a_file-code-check.svg new file mode 100644 index 00000000000..3b6828d2ebd --- /dev/null +++ b/_src/images/misc/5f75cc9f74f7124d70ad4f0a_file-code-check.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg b/_src/images/misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg new file mode 100644 index 00000000000..7551338cbeb --- /dev/null +++ b/_src/images/misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f771e39793e0f78a75547bf_board-game-dice.svg b/_src/images/misc/5f771e39793e0f78a75547bf_board-game-dice.svg new file mode 100644 index 00000000000..9982b813d6d --- /dev/null +++ b/_src/images/misc/5f771e39793e0f78a75547bf_board-game-dice.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f85d14b6782933bd5a70060_decentralized.svg b/_src/images/misc/5f85d14b6782933bd5a70060_decentralized.svg new file mode 100644 index 00000000000..cfc5b6f5956 --- /dev/null +++ b/_src/images/misc/5f85d14b6782933bd5a70060_decentralized.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f8825a8a76298e280868970_refresh-money.svg b/_src/images/misc/5f8825a8a76298e280868970_refresh-money.svg new file mode 100644 index 00000000000..f5eb952434a --- /dev/null +++ b/_src/images/misc/5f8825a8a76298e280868970_refresh-money.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/5f96ab4b4db522072b7ff30c_book-bookmark.svg b/_src/images/misc/5f96ab4b4db522072b7ff30c_book-bookmark.svg new file mode 100644 index 00000000000..2b363f08444 --- /dev/null +++ b/_src/images/misc/5f96ab4b4db522072b7ff30c_book-bookmark.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/61095848a2a30f150520167b_keepers.svg b/_src/images/misc/61095848a2a30f150520167b_keepers.svg new file mode 100644 index 00000000000..ff073e0038a --- /dev/null +++ b/_src/images/misc/61095848a2a30f150520167b_keepers.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Additional Information/faq.md b/docs/Additional Information/faq.md index e549ff80ee7..87960544c74 100644 --- a/docs/Additional Information/faq.md +++ b/docs/Additional Information/faq.md @@ -109,7 +109,7 @@ If you already have a project started and would like to integrate Chainlink, you Resources: * [Create a Chainlinked Project](../create-a-chainlinked-project/) -* [Example Walkthrough](../intermediates-tutorial/) +* [Example Walkthrough](/docs/get-a-random-number/) * How to use Chainlink with Truffle ## Can Chainlink be used to connect to <*some blockchain/API*>? @@ -126,7 +126,7 @@ You can use the Chainlink Market< Resources: * [Create a Chainlinked Project](../create-a-chainlinked-project/) -* [Example Walkthrough](../intermediates-tutorial/) +* [Example Walkthrough](/docs/get-a-random-number/) * Chainlink Market * [Chainlink Contract Reference](../chainlink-framework/#sendchainlinkrequestto) diff --git a/docs/Chains/arbitrum.md b/docs/Chains/arbitrum.md deleted file mode 100644 index 2ca0e381a7c..00000000000 --- a/docs/Chains/arbitrum.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Arbitrum" -logo: "/images/logos/arbitrum.svg" -date: Last Modified -permalink: /arbitrum/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/avalanche.md b/docs/Chains/avalanche.md deleted file mode 100644 index d4469fbab5c..00000000000 --- a/docs/Chains/avalanche.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Avalanche" -logo: "/images/logos/avalanche.svg" -date: Last Modified -permalink: /avalanche/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/binance.md b/docs/Chains/binance.md deleted file mode 100644 index 7f792758ac5..00000000000 --- a/docs/Chains/binance.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Binance" -logo: "/images/logos/binance.svg" -date: Last Modified -permalink: /binance/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Generate Verifiable Random Numbers (VRF)

-

- Use Chainlink VRF to consume randomness in your smart contracts. -

-
- Learn More -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
- -
-

Automate and Maintain with Chainlink Keepers

-

- Chainlink Keepers provide smart contract developers, decentralized applications (dApps), and decentralized autonomous organizations (DAOs) with a highly reliable, decentralized, and cost-efficient method of automating smart contract functions and regular contract maintenance. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/ethereum.md b/docs/Chains/ethereum.md index 0dbf24cd978..c1bd7b7f7a8 100644 --- a/docs/Chains/ethereum.md +++ b/docs/Chains/ethereum.md @@ -1,8 +1,7 @@ --- layout: nodes.liquid section: ethereum -title: "Chainlink on Ethereum" -logo: "/images/logos/ethereum.svg" +title: "Chainlink on Ethereum Chains" date: Last Modified permalink: /ethereum/ --- @@ -15,56 +14,77 @@ permalink: /ethereum/

Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology.

-

- The following products are available for {{title}}: -

-
-

Get Data Feeds in your Smart Contracts

+ +

Get Data Feeds in your Smart Contracts

Retrieve the latest prices and data points of assets in your smart contracts.

+ +
+ Learn More + Right arrow +
+
- - Learn More -
-
-

Generate Verifiable Random Numbers (VRF)

+ +

Generate Verifiable Random Numbers (VRF)

Use Chainlink VRF to consume randomness in your smart contracts.

+ +
+ Learn More + Right arrow +
+
- Learn More
-
-

Call External APIs from Smart Contracts

+ +

Call External APIs from Smart Contracts

Request & Receive data from any API using the Chainlink contract library.

+ +
+ Learn More + Right arrow +
+
- - Learn More +
+
+ @@ -75,43 +95,16 @@ permalink: /ethereum/ class="cl-image-featured" height="80" style="max-width:80px" /> -
-

Automate and Maintain with Chainlink Keepers

-

- Chainlink Keepers provide smart contract developers, decentralized applications (dApps), and decentralized autonomous organizations (DAOs) with a highly reliable, decentralized, and cost-efficient method of automating smart contract functions and regular contract maintenance. -

-
+

Automate and Maintain with Chainlink Keepers

+

+ Chainlink Keepers provide smart contract developers, decentralized applications (dApps), and decentralized autonomous organizations (DAOs) with a highly reliable, decentralized, and cost-efficient method of automating smart contract functions and regular contract maintenance. +

- Learn More + Getting Started Guide
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-

Explore Chainlink Developer Tools

diff --git a/docs/Chains/fantom.md b/docs/Chains/fantom.md deleted file mode 100644 index 68d1561197a..00000000000 --- a/docs/Chains/fantom.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Fantom" -logo: "/images/logos/fantom.svg" -date: Last Modified -permalink: /fantom/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/harmony.md b/docs/Chains/harmony.md deleted file mode 100644 index 66716bd5ed1..00000000000 --- a/docs/Chains/harmony.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Harmony" -logo: "/images/logos/harmony.svg" -date: Last Modified -permalink: /harmony/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/huobi.md b/docs/Chains/huobi.md deleted file mode 100644 index 701120b269b..00000000000 --- a/docs/Chains/huobi.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Huobi" -logo: "/images/logos/huobi.svg" -date: Last Modified -permalink: /huobi/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/moonriver.md b/docs/Chains/moonriver.md deleted file mode 100644 index 9db25e62f39..00000000000 --- a/docs/Chains/moonriver.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Moonriver" -date: Last Modified -permalink: /moonriver/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/optimism.md b/docs/Chains/optimism.md deleted file mode 100644 index f9ff3105892..00000000000 --- a/docs/Chains/optimism.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Optimism" -date: Last Modified -permalink: /optimism/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/polygon.md b/docs/Chains/polygon.md deleted file mode 100644 index b177776d01f..00000000000 --- a/docs/Chains/polygon.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on Polygon" -logo: "/images/logos/polygon.svg" -date: Last Modified -permalink: /polygon/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Generate Verifiable Random Numbers (VRF)

-

- Use Chainlink VRF to consume randomness in your smart contracts. -

-
- Learn More -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
- -
-

Automate and Maintain with Chainlink Keepers

-

- Chainlink Keepers provide smart contract developers, decentralized applications (dApps), and decentralized autonomous organizations (DAOs) with a highly reliable, decentralized, and cost-efficient method of automating smart contract functions and regular contract maintenance. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Chains/solana.md b/docs/Chains/solana.md index 1f03501544d..bd3884450a7 100644 --- a/docs/Chains/solana.md +++ b/docs/Chains/solana.md @@ -2,7 +2,6 @@ layout: nodes.liquid section: solana title: "Chainlink on Solana" -logo: "/images/logos/solana.svg" date: Last Modified permalink: /solana/ --- diff --git a/docs/Chains/terra.md b/docs/Chains/terra.md index ff0c80a119f..ba836dd6501 100644 --- a/docs/Chains/terra.md +++ b/docs/Chains/terra.md @@ -2,7 +2,6 @@ layout: nodes.liquid section: terra title: "Chainlink on Terra" -logo: "/images/logos/terra.svg" date: Last Modified permalink: /terra/ --- diff --git a/docs/Chains/xdai.md b/docs/Chains/xdai.md deleted file mode 100644 index 6e5b8f4f73b..00000000000 --- a/docs/Chains/xdai.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -title: "Chainlink on xDai" -logo: "/images/logos/xdai.svg" -date: Last Modified -permalink: /xdai/ ---- - - - -
-
-
-

- Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

-

- The following products are available for {{title}}: -

-
-
-
- -
-

Get Data Feeds in your Smart Contracts

-

- Retrieve the latest prices and data points of assets in your smart - contracts. -

-
- - Learn More - -
-
- -
-

Call External APIs from Smart Contracts

-

- Request & Receive data from any API using the Chainlink contract - library. -

-
- - Learn More - -
-
-
-
-
-
-

New to Ethereum and Smart Contracts?

-

- Build your first smart contract connected to off-chain data feeds. -

-
- - Start Building - -
-
-
-

Chainlink Architecture Overview

-

- Discover how the Chainlink ecosystem bridges the gap between - off-chain data and smart contracts. -

-
- - Architecture - -
-
-
-

Explore Chainlink Developer Tools

- -
-
-
-
diff --git a/docs/Data Provider Nodes/chainlink-alarm-clock.md b/docs/Data Provider Nodes/chainlink-alarm-clock.md index c4eae70c2aa..d672cf9d753 100644 --- a/docs/Data Provider Nodes/chainlink-alarm-clock.md +++ b/docs/Data Provider Nodes/chainlink-alarm-clock.md @@ -18,7 +18,7 @@ You can use Chainlink to trigger a smart contract at a specified time. Using thi # Steps For Using This Oracle -- Write and deploy your [Chainlinked](../intermediates-tutorial/) contract using the network details below +- Write and deploy your contract using the network details below - Fund it with [LINK](../link-token-contracts/) (0.1 LINK is required per-request/) - Call your [request method](./#chainlink-examples) diff --git a/docs/Data Provider Nodes/dns-ownership-oracle.md b/docs/Data Provider Nodes/dns-ownership-oracle.md index 9b565a7bf6c..2fe3bc6c4bd 100644 --- a/docs/Data Provider Nodes/dns-ownership-oracle.md +++ b/docs/Data Provider Nodes/dns-ownership-oracle.md @@ -9,7 +9,7 @@ This oracle checks Google’s DNS service to determine if a given domain is owne # Steps For Using This Oracle -- Write and deploy your [Chainlink](../intermediates-tutorial/) contract using the network details below +- Write and deploy your contract using the network details below - Fund it with [LINK](../link-token-contracts/) - Call your [request method](./#chainlink-examples) diff --git a/docs/Data Provider Nodes/finage-global-market-data-oracle.md b/docs/Data Provider Nodes/finage-global-market-data-oracle.md index 664386f7950..97f9bb43f6f 100644 --- a/docs/Data Provider Nodes/finage-global-market-data-oracle.md +++ b/docs/Data Provider Nodes/finage-global-market-data-oracle.md @@ -10,7 +10,7 @@ Finage is a leading real-time stock, forex, and cryptocurrency data provider. Th # Steps For Using This Oracle -- Write and deploy your [Chainlink](..//intermediates-tutorial/) contract using the network details below +- Write and deploy your contract using the network details below - Fund it with [LINK](../link-token-contracts/) - Call your [request method](./#chainlink-examples) diff --git a/docs/Data Provider Nodes/google-weather.md b/docs/Data Provider Nodes/google-weather.md index 341165129ff..d378fdbfba4 100644 --- a/docs/Data Provider Nodes/google-weather.md +++ b/docs/Data Provider Nodes/google-weather.md @@ -48,7 +48,7 @@ You will need to use the following LINK token address, oracle address, and JobSp # Steps For Using This Oracle -- Write and deploy your [Chainlinked](../intermediates-tutorial/) contract using the network details above. +- Write and deploy your contract using the network details above. - Fund it with [LINK](../link-token-contracts/) - Call your request method diff --git a/docs/Data Provider Nodes/kraken-rates-oracle-node.md b/docs/Data Provider Nodes/kraken-rates-oracle-node.md index de8a29cc9e4..a9dfed717f0 100644 --- a/docs/Data Provider Nodes/kraken-rates-oracle-node.md +++ b/docs/Data Provider Nodes/kraken-rates-oracle-node.md @@ -12,7 +12,7 @@ This Chainlink has a dedicated connection to 📘 Important > -> If you're new to smart contract development and want a step-by-step guide, try out our [Beginner Walkthrough](../intermediates-tutorial/) +> If you're new to smart contract development and want a step-by-step guide, try out our [Getting Started Guide](/getting-started/) # Install into Existing Projects @@ -25,7 +25,7 @@ Chainlink is supported by HardhatNPM @@ -107,11 +107,11 @@ ___ # Using Chainlink Contracts -Once you have the Chainlink library installed, you can leverage the Chainlink ecosystem. +Once you have the Chainlink library installed, you can leverage the Chainlink ecosystem. -If you're interested in retrieving up to date crypto prices in your contracts, learn more about our [Data Feeds](../using-chainlink-reference-contracts/). +If you're interested in retrieving up to date crypto prices in your contracts, learn more about our [Data Feeds](../using-chainlink-reference-contracts/). -If you need to consume randomness in your contracts, learn about [Chainlink VRF](../chainlink-vrf/). +If you need to consume randomness in your contracts, learn about [Chainlink VRF](../chainlink-vrf/). And if you want your contracts to retrieve data from off-chain APIs, learn about [Using Any API](../request-and-receive-data/). @@ -119,4 +119,4 @@ And if you want your contracts to retrieve data from off-chain APIs, learn about See our blog post on Testing Chainlink Smart Contracts or watch the Chainlink Hackathon Workshop. -Tests samples can be found on Hardhat Starter Kit and Truffle Starter Kit respectively. \ No newline at end of file +Tests samples can be found on Hardhat Starter Kit and Truffle Starter Kit respectively. diff --git a/docs/Developer Reference/hackathon-resources.md b/docs/Developer Reference/hackathon-resources.md index 28d0dc5ea4a..bbba34f4f6e 100644 --- a/docs/Developer Reference/hackathon-resources.md +++ b/docs/Developer Reference/hackathon-resources.md @@ -39,7 +39,6 @@ Be sure to check the documentation in the links above for in depth-descriptions New? See the [Getting Started Guide](/getting-started/). - [Beginners - The Basics](../beginners-tutorial/) -- [Step-by-step guide to working with smart contracts](/docs/intermediates-tutorial) - [Video Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) - [What is Ethereum?](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) - [Developer Blog (many tutorials)](https://blog.chain.link/tag/developers/) diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index 68556189f94..6caaef361d7 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -14,6 +14,8 @@ Chainlink turns your smart contracts into hybrid smart contracts, giving them ac 2. [Acquire testnet LINK](/docs/acquire-link/). 3. [Deploy](/docs/deploy-your-first-contract/), [fund](/docs/fund-your-contract/), and [use your first smart contract](/docs/use-your-first-contract/). + + ## Dive deeper into Chainlink product and services. @@ -137,4 +140,3 @@ Find all the right resources to get the most out of Chainlink.
- diff --git a/docs/Introduction/getting-started/your-first-contract.md b/docs/Introduction/getting-started/your-first-contract.md new file mode 100644 index 00000000000..f465d23f04c --- /dev/null +++ b/docs/Introduction/getting-started/your-first-contract.md @@ -0,0 +1,120 @@ +--- +layout: nodes.liquid +section: smartContract +date: Last Modified +title: "Deploy Your First Contract" +permalink: "docs/your-first-contract/" +excerpt: "Smart Contracts and Chainlink" +whatsnext: {"Connect Contracts to Oracles":"/docs/connect-to-oracles/", "Obtain Random Numbers for a Contract":"/docs/get-a-random-number/", "Call Public APIs from a Contract":"/docs/using-any-api/"} +metadata: + title: "Deploy Your First Contract" + description: "Learn how to create and deploy smart contracts to the Ethereum blockchain." +--- + +This guide teaches you each step required to create, deploy, and use smart contracts written in the [Solidity](https://soliditylang.org) language. You can follow these examples without any knowledge about Ethereum or blockchains. + +Writing a smart contract is very similar to writing application code, but the code runs on the Ethereum blockchain network rather than running on a server or VM. In general, you operate smart contracts using the following process: + +1. **Write:** Write a contract to define how the contract functions, what data it can store, what other contracts it interacts with, and what external APIs it might call. + +1. **Compile:** Pass your smart contract code through a compiler to translate the contract into byte that the blockchain can understand. For example, [Solidity](https://soliditylang.org) code must be compiled before it can run in the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/). + +1. **Deploy:** Send the compiled smart contract to the blockchain. From that point forward, the contract cannot be altered. However, you can still interact with the contract in several ways. + +1. **Fund:** Send tokens or cryptocurrency to your contract address. Some contracts require cryptocurrency funds if they interact with other contracts or oracles. These funds pay for the work that the blockchain network does to facilitate those interactions. For example, contracts that use Chainlink oracle networks often need LINK tokens to pay for the work done by the oracle nodes. + +1. **Run functions:** When you run the functions that you defined for the contract, the network processes those functions and modifies the state of your contract. For some functions, the network charges a small fee to complete the work. Your contract can also have functions that transfer funds to other contracts or wallets. + +To help you learn how smart contracts work, you can create, deploy, and run smart contracts on a test network. All of the tools that you need are free and require no signup or registration. You can complete all of the necessary steps using your web browser. + +## Install and fund MetaMask + +Deploying smart contracts requires a wallet and test ETH. Install MetaMask, configure it to use the Kovan test network, and fund your wallet with test ETH. + +1. [Install and configure the MetaMask extension](https://metamask.io/download) in your browser. + +1. After the extension is installed, open your browser extension list and click MetaMask to open the MetaMask menu. + ![Screenshot showing the browser extension list with MetaMask installed.](/files/openMetaMask.png) + +1. Follow the instructions in MetaMask to create a new MetaMask wallet. + +1. Set MetaMask to use the Kovan Test Network. + ![Screenshot showing the network selection menu in MetaMask. The Kovan Test Network is selected.](/files/selectKovan.png) + +1. Go to the [Chainlink Faucet](https://linkfaucet.protofire.io/kovan) and send 0.1 test ETH to your MetaMask wallet address. You can copy your address by clicking the account name in MetaMask. + +Now you should have some ETH in your MetaMask wallet on the Kovan testnet. + +## Create and deploy your contract + +Deploy and run a smart contract on the Kovan testnet using the following process: + +1. [Open this example contract](https://remix.ethereum.org/#gist=762a9bc18c31109f61790c4e6c2da6e9) in the Remix IDE. This `helloWorld.sol` sample contract prepares Remix with code that you can deploy and run. We will walk through the code later. + +1. On the left panel, expand the sample folder and click `HelloWorld.sol` to open the contents of the contract. You can modify the code in this editor when you write your own contract. + ![Screenshot showing the HelloWorld.sol file highlighted.](/files/selectHelloWorld.png) + +1. Because we already wrote the code for you, you can start the compile step. On the left side of Remix, click the **Solidity Compiler** tab to view the compiler settings. + ![Screenshot showing the Compiler tab and its settings.](/files/selectSolidityCompiler.png) + +1. For this contract, you can use the default compiler settings. Click the **Compile HelloWorld.sol** button to compile the contract. This converts the contract from Solidity into bytecode that the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/) can understand. Remix automatically detects the correct compiler version depending on the `pragma` specified in the contract. + ![Screenshot of the Compile button.](/files/compileHelloWorld.png) + +1. After Remix compiles the contract, you can deploy it to the Ethereum blockchain. On the left side of Remix, click the **Deploy and Run** tab to view the deployment settings. + ![Screenshot of the Deploy tab and its settings.](/files/selectSolidityCompiler.png) + +1. In the deployment settings, select **Injected Web3** environment. This activates MetaMask and asks you to connect the wallet to Remix, which allows Remix to receive ETH from your MetaMask wallet. Accept the connection. + +1. Next to the **Deploy** button, enter a message that you want to send with the smart contract when you deploy it. This contract is written with a constructor that sets an initial message when you deploy the contract. + ![Screenshot of the Deploy button with "Hello world!" as the defined message.](/files/deployHelloWorld.png) + +1. Click the **Deploy** button to deploy the contract and its initial message to the blockchain network. MetaMask opens and asks you to confirm payment for deploying the contract. Ensure that MetaMask is set to the Kovan network before you accept the transaction. + +If your contract deployed correctly, you will see your contract listed under the **Deployed Contracts** section in Remix. The contract has an address just like a wallet address. You can return to the address any time to execute functions or retrieve variables. To see details about your deployed contract, you can copy the contract address from the list in Remix and search for it in the [Etherscan Kovan Testnet Explorer](https://kovan.etherscan.io/). + +## Run your contract functions + +After you deploy a smart contract you cannot alter the code or change the initial variables. However, you can run the functions that you defined and retrieve the values of state variables in the contract. + +1. Click the name of your deployed contract to view the details. This view shows all of the functions and variables that you can interact with. + ![Screenshot showing the list of deployed contracts with the functions and variables of your deployed contract.](/files/deployedContracts.png) + +1. Click `message` to view the current value of the message variable. This retrieves the message that you defined when you first deployed the contract. + +1. Enter a new message value next to the `updateMessage` function. + +1. Click `updateMessage` to run that function and send the new message to your contract. Because this function makes a change to the variable, it makes a change to the block chain and requires some ETH to pay for the work. MetaMask opens and asks you to confirm payment for this action. + +1. After the update is complete, click `message` again to retrieve the new message. It might take a few seconds to update, but eventually the response shows the value that you entered for the `updateMessage` function. + +Now you know how to run example contracts in Remix and execute functions in those contracts. You can write your own contracts and test them using this same process. + +## Learn how the contract works + +The smart contract that you deployed is simple, but it demonstrates the basic building blocks that you can use to create your own decentralized applications. + +```solidity +pragma solidity >=0.7.0 <0.9.0; +contract HelloWorld { + string public message; + constructor(string memory initialMessage) { + message = initialMessage; + } + function updateMessage(string memory newMessage) public { + message = newMessage; + } +} +``` +The `helloWorld.sol` contract has the following components: + ++ `pragma solidity >=0.7.0 <0.9.0;` defines the versions of the [Solidity compiler](https://docs.soliditylang.org/en/latest/installing-solidity.html) that this contract can use. For this example, any version of `0.7.x` or `0.8.x` is acceptable, but not version `0.9.0` or above. + ++ `contract HelloWorld {}` defines the contract. Think of this as being similar to declaring a class in JavaScript. The contract implementation is inside this definition. + ++ `string public message;` creates a state variable named `message`. To find out more about all the types of variables you can use within Solidity, see the [Solidity documentation](https://docs.soliditylang.org/en/latest/). + ++ `constructor(string memory initialMessage) {}` sets the state of the contract when you first deploy it. In `HelloWorld`, the constructor takes in a `string` parameter and sets it as the `message` state variable. + ++ `function updateMessage(string memory newMessage) public {}` is a function that modifies the contract state. The `updateMessage` function changes the current `message` variable to the value that you define when you call this function. + +If you want to learn more about what components are available for smart contracts, read the Solidity [Structure of a Contract](https://docs.soliditylang.org/en/latest/structure-of-a-contract.html) guide. When you are ready, you can [learn how to connect your contract to an oracle](../connect-to-oracles/). diff --git a/docs/Introduction/tutorials/beginners-tutorial.md b/docs/Introduction/tutorials/beginners-tutorial.md index 2451c3865af..79bf5eb3ba7 100644 --- a/docs/Introduction/tutorials/beginners-tutorial.md +++ b/docs/Introduction/tutorials/beginners-tutorial.md @@ -5,7 +5,7 @@ date: Last Modified title: "The Basics: Using Hybrid Smart Contracts" permalink: "docs/beginners-tutorial/" excerpt: "Smart Contracts and Chainlink" -whatsnext: {"Get the Latest Price":"/docs/get-the-latest-price/", "Deploy your First Contract":"/docs/deploy-your-first-contract/", "Random Numbers Tutorial":"/docs/intermediates-tutorial/"} +whatsnext: {"Get the Latest Price":"/docs/get-the-latest-price/", "Random Numbers Guide":"/docs/get-a-random-number/"} metadata: title: "The Basics Tutorial" description: "Learn what smart contracts are, how to write them, and how to use Chainlink data feeds to deploy your very own Chainlink smart contract." diff --git a/docs/Node Operators/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md index 32d1857a872..45f311d7d52 100644 --- a/docs/Node Operators/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -1,5 +1,6 @@ --- layout: nodes.liquid +section: nodeOperator date: Last Modified title: "Chainlink Node Docs" permalink: /chainlink-nodes/ @@ -16,54 +17,74 @@ permalink: /chainlink-nodes/
-
-

Set Up a Chainlink Node

+ +

Set Up a Chainlink Node

Install and Run your own node on a local machine or remote server.

+ +
+ Learn More + Right arrow +
+
- - Learn More -
-
-

Fulfill Your First Job Request

-

- Deploy an Oracle contract and make job requests to your node. -

+ +

Fulfill Your First Job Request

+

+ Deploy an Oracle contract and make job requests to your node. +

+ +
+ Learn More + Right arrow +
+
- - Learn More -
+
+ +

Add External Adapters to Your Node

+

+ Bring high-quality data and premium web APIs to contract developers. +

+ +
+ Learn More + Right arrow +
+
+
+
+
+
+
+
-
-

Add External Adapters to Your Node

-

- Bring high-quality data and premium web APIs to contract developers. -

-
- - Learn More - +
+

New to Chainlink Nodes?

+

+ Learn the best security and operating practices for node operators +

+ + Getting Started Guide +
@@ -73,40 +94,14 @@ permalink: /chainlink-nodes/ />

New to Chainlinks Nodes?

- Learn the best security and operating practices for node operators + Learn the best practices for securely operating nodes.

Learn More
-
-
-
-

Core Adapters

-

- Explore tasks that need to be performed to complete defined job -

- - Learn More - -
-
-

Core Initiators

-

- Find types of conditions that initiate job requests -

- - Learn More - -
-
-

Explore Chainlink Node Tools

diff --git a/docs/Introduction/tutorials/advanced-tutorial.md b/docs/Using Any API/using-any-api.md similarity index 94% rename from docs/Introduction/tutorials/advanced-tutorial.md rename to docs/Using Any API/using-any-api.md index cb00d72d46c..365da0ae9a3 100644 --- a/docs/Introduction/tutorials/advanced-tutorial.md +++ b/docs/Using Any API/using-any-api.md @@ -1,9 +1,9 @@ --- layout: nodes.liquid -section: gettingStarted +section: ethereum date: Last Modified -title: "API Calls: Using Any API" -permalink: "docs/advanced-tutorial/" +title: "Using Any API" +permalink: "docs/using-any-api/" excerpt: "Calling APIs from Smart Contracts" whatsnext: {"Make a GET Request":"/docs/make-a-http-get-request/", "Make an Existing Job Request":"/docs/existing-job-request/"} metadata: @@ -13,7 +13,7 @@ metadata: > 👍 Requirements > -> This tutorial requires basic knowledge about Ethereum, smart contracts, and the Chainlink Request & Receive cycle. If you're unfamiliar with those concepts, follow the [The Basics](../beginners-tutorial/) and [Random Numbers](../intermediates-tutorial/) tutorials. +> This guide requires basic knowledge about smart contracts. If you are new to smart contract development, read the [Getting Started Guide](/getting-started/) before you start this guide.

https://www.youtube.com/watch?v=ay4rXZhAefs @@ -37,7 +37,7 @@ In this tutorial, you will learn how to request data from a public API in a smar The request and receive cycle describes how a smart contract requests data from an oracle and receives the response in a separate transaction. If you need a refresher, check out the [Basic Request Model](../architecture-request-model/). -In the [Random Numbers](../intermediates-tutorial/) tutorial, you requested randomness from a VRF oracle, then await the response. The fulfillment function is already given to us from the `VRFConsumerBase` contract, so oracles already know where to send the response to. However, with API calls, the contract itself *defines* which function it wants to receive the response to. +With API calls, the contract itself *defines* which function it wants to receive the response to. Before creating any code, you should understand how Oracle jobs can get data on-chain. diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index 6ff781102cd..87387d89b18 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -2,11 +2,11 @@ layout: nodes.liquid section: ethereum date: Last Modified -title: "Using Data Feeds (EVM)" +title: "Using Data Feeds" permalink: "docs/get-the-latest-price/" whatsnext: {"Historical Price Data":"/docs/historical-price-data/", "Data Feeds API Reference":"/docs/price-feeds-api-reference/", "Data Feeds Contract Addresses":"/docs/reference-contracts/"} metadata: - title: "Using Data Feeds (EVM)" + title: "Using Data Feeds" description: "How to use Chainlink Data Feeds in your smart contracts." image: 0: "/files/OpenGraph_V3.png" @@ -16,16 +16,9 @@ Chainlink Data Feeds are the quickest way to connect your smart contracts to the real-world market prices of assets. For example, one use for data feeds is to enable smart contracts to retrieve the latest pricing data of an asset in a single call. -Data feeds are available on the following networks: -- **EVM-compatible networks** -- [Solana](/docs/solana/using-data-feeds-solana/) -- [Terra](/docs/terra/using-data-feeds-terra/) - -This guide applies specifically to using data feeds on EVM-compatible networks. - {% include data-quality.md %} -You can use smart contracts to get asset prices on EVM-compatible networks. These examples show you how to get the price of Ethereum (ETH) on the Ethereum network, but you can modify the examples to work on other EVM-compatible networks as well. The list of data feeds for each network are available on the [Data Feed Contracts](../reference-contracts/) page. For development, use testnet data feeds such as the [ETH/USD Feed](https://kovan.etherscan.io/address/0x9326BFA02ADD2366b30bacB125260Af641031331) on the Kovan testnet. +You can use smart contracts to get asset prices on Ethereum chains. These examples show you how to get the price of Ethereum (ETH) on the Ethereum network, but you can modify the examples to work on other Ethereum chains as well. The list of data feeds for each network are available on the [Data Feed Contracts](../reference-contracts/) page. For development, use testnet data feeds such as the [ETH/USD Feed](https://kovan.etherscan.io/address/0x9326BFA02ADD2366b30bacB125260Af641031331) on the Kovan testnet. > 📘 New Feed Registry > You can use the [Feed Registry](../feed-registry/) to reference data feed assets by name or currency identifier instead of by pair/proxy address. diff --git a/docs/Introduction/tutorials/intermediates-tutorial.md b/docs/Using Randomness/using-chainlink-vrf.md similarity index 95% rename from docs/Introduction/tutorials/intermediates-tutorial.md rename to docs/Using Randomness/using-chainlink-vrf.md index aa868c68b25..a68da28f743 100644 --- a/docs/Introduction/tutorials/intermediates-tutorial.md +++ b/docs/Using Randomness/using-chainlink-vrf.md @@ -1,11 +1,11 @@ --- layout: nodes.liquid -section: gettingStarted +section: ethereum date: Last Modified -title: "Random Numbers: Using Chainlink VRF" -permalink: "docs/intermediates-tutorial/" +title: "Using Chainlink VRF" +permalink: "docs/get-a-random-number/" excerpt: "Using Chainlink VRF" -whatsnext: {"Get a Random Number":"/docs/get-a-random-number/", "API Calls tutorial":"/docs/advanced-tutorial/"} +whatsnext: {"VRF Example Contracts":"/docs/vrf-example-contracts/", "API Reference":"/docs/chainlink-vrf-api-reference/", "Contract Addresses":"/docs/vrf-contracts/"} metadata: title: "Random Numbers: Using Chainlink VRF" description: "Learn how to use randomness in your smart contracts using Chainlink VRF." @@ -15,7 +15,7 @@ metadata: > 👍 Requirements > -> This tutorial assumes that you have basic knowledge about Ethereum and writing and deploying smart contracts. If you are new to smart contract development, start with [The Basics: Data Feeds](../beginners-tutorial/) tutorial before starting this tutorial. +> This guide assumes that you have basic knowledge about writing and deploying smart contracts. If you are new to smart contract development, read the [Getting Started Guide](/getting-started/) before you start this guide.

https://www.youtube.com/watch?v=JqZWariqh5s @@ -27,7 +27,7 @@ metadata: # Overview -In this tutorial, you will learn about generating randomness on blockchains. This includes learning how to implement a Request and Receive cycle with Chainlink oracles and how to consume random numbers with Chainlink VRF in smart contracts. +In this guide, you will learn about generating randomness on blockchains. This includes learning how to implement a Request and Receive cycle with Chainlink oracles and how to consume random numbers with Chainlink VRF in smart contracts. **Table of Contents** diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/vrf-example-contracts.md similarity index 82% rename from docs/Using Randomness/get-a-random-number.md rename to docs/Using Randomness/vrf-example-contracts.md index 7cf7326c869..0570c027a30 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/vrf-example-contracts.md @@ -2,26 +2,27 @@ layout: nodes.liquid section: ethereum date: Last Modified -title: "Get a Random Number" -permalink: "docs/get-a-random-number/" +title: "Example Contracts" +permalink: "docs/vrf-example-contracts/" whatsnext: {"API Reference":"/docs/chainlink-vrf-api-reference/", "Contract Addresses":"/docs/vrf-contracts/"} metadata: description: "How to generate a random number inside a smart contract using Chainlink VRF." image: 0: "/files/OpenGraph_V3.png" --- -This page explains how to get a random number inside a smart contract using Chainlink VRF. +This page shows examples for how to get a random number inside a smart contract using Chainlink VRF. -# Random Number Consumer +# Overview -Chainlink VRF follows the [Request & Receive Data](../request-and-receive-data/) cycle. To consume randomness, your contract should inherit from `VRFConsumerBase` and define two required functions +Chainlink VRF follows the [Request & Receive Data](../request-and-receive-data/) cycle. To consume randomness, your contract should inherit from [`VRFConsumerBase`](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/VRFConsumerBase.sol) and define two required functions: -1. `requestRandomness`, which makes the initial request for randomness. -2. `fulfillRandomness`, which is the function that receives and does something with verified randomness. +- `requestRandomness`, which makes the initial request for randomness. +- `fulfillRandomness`, which is the function that receives and does something with verified randomness. The contract should own enough LINK to pay the specified fee. The beginner walkthrough explains how to [fund your contract](../fund-your-contract/). Note, the below values have to be configured correctly for VRF requests to work. You can find the respective values for your network in the [VRF Contracts page](../vrf-contracts). + - `LINK Token` - LINK token address on the corresponding network (Ethereum, Polygon, BSC, etc) - `VRF Coordinator` - address of the Chainlink VRF Coordinator - `Key Hash` - public key against which randomness is generated diff --git a/docs/home.md b/docs/home.md index f4e1846c6ec..c4fb1535d29 100644 --- a/docs/home.md +++ b/docs/home.md @@ -1,6 +1,5 @@ --- layout: home.liquid -section: ethereum title: "Chainlink Documentation" date: Last Modified permalink: / @@ -9,340 +8,137 @@ landing: true

-
+
+
+ +

New to Chainlink and Smart Contracts?

Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum.

-
- - Getting Started Guide - -
-

Networks and Products

- +
- -
diff --git a/firebase.json b/firebase.json index 06d69746b25..2f1e1336090 100644 --- a/firebase.json +++ b/firebase.json @@ -126,7 +126,17 @@ "source": "/docs/chainlink-keepers/best-practices", "destination": "/docs/chainlink-keepers/compatible-contracts/", "type": 301 - } + }, + { + "source": "/docs/intermediates-tutorial/", + "destination": "docs/get-a-random-number/", + "type": 301 + }, + { + "source": "/docs/intermediates-tutorial", + "destination": "docs/get-a-random-number/", + "type": 301 + }, ] } } From 3e15d1b1b35a64efd17021b9ac34f47df879e797 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Fri, 10 Dec 2021 10:12:14 -0800 Subject: [PATCH 08/26] Navigation and home page enhancements --- _data/navigation.js | 8 ++++-- docs/Chains/solana.md | 26 +++++++++---------- .../create-a-chainlinked-project.md | 4 +-- .../Node Operators/best-security-practices.md | 4 +-- docs/Node Operators/chainlink-nodes.md | 19 ++------------ docs/Node Operators/fulfilling-requests.md | 2 +- docs/Node Operators/miscellaneous.md | 2 +- .../running-a-chainlink-node.md | 4 +-- 8 files changed, 29 insertions(+), 40 deletions(-) diff --git a/_data/navigation.js b/_data/navigation.js index f157f002bb2..fb9cba06c8a 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -277,7 +277,11 @@ module.exports = { section: 'Resources', contents: [ { - title: 'Install Instructions', + title: 'Videos and Tutorials', + url: '/docs/other-tutorials/', + }, + { + title: 'Framework Install Instructions', url: '/docs/create-a-chainlinked-project/', }, { @@ -400,7 +404,7 @@ module.exports = { url: '/docs/enabling-https-connections/', }, { - title: 'Best Security and Operating Practices', + title: 'Security and Operation Best Practices', url: '/docs/best-security-practices/', }, { diff --git a/docs/Chains/solana.md b/docs/Chains/solana.md index bd3884450a7..522e97ed5a3 100644 --- a/docs/Chains/solana.md +++ b/docs/Chains/solana.md @@ -29,19 +29,19 @@ permalink: /solana/ Data feeds on Solana
-
- -

New to Smart Contracts?

-

- Start with the Ethereum network and build your first smart contract connected to off-chain data in our - Getting Started Guide. -

- - Getting Started Guide - +
+
+
+ +
+

New to Chainlink and Smart Contracts?

+

+ Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum. +

+ + Getting Started Guide + +
diff --git a/docs/Developer Reference/create-a-chainlinked-project.md b/docs/Developer Reference/create-a-chainlinked-project.md index 422fb4bf71b..5a151cc3f76 100644 --- a/docs/Developer Reference/create-a-chainlinked-project.md +++ b/docs/Developer Reference/create-a-chainlinked-project.md @@ -2,7 +2,7 @@ layout: nodes.liquid section: ethereum date: Last Modified -title: "Install Instructions" +title: "Framework Install Instructions" permalink: "docs/create-a-chainlinked-project/" whatsnext: {"Introduction to Data Feeds":"/docs/using-chainlink-reference-contracts/", "Introduction to Chainlink VRF":"/docs/chainlink-vrf/", "Introduction to Using Any API":"/docs/request-and-receive-data/"} metadata: @@ -17,7 +17,7 @@ This page explains how to install and use the [Chainlink Library](../chainlink-f > 📘 Important > -> If you're new to smart contract development and want a step-by-step guide, try out our [Getting Started Guide](/getting-started/) +> If you're new to smart contract development and want a step-by-step guide, try out our [Getting Started Guide](/getting-started/) # Install into Existing Projects diff --git a/docs/Node Operators/best-security-practices.md b/docs/Node Operators/best-security-practices.md index 785e73a3fdb..e7034551e1f 100644 --- a/docs/Node Operators/best-security-practices.md +++ b/docs/Node Operators/best-security-practices.md @@ -2,10 +2,10 @@ layout: nodes.liquid section: nodeOperator date: Last Modified -title: "Best Security and Operating Practices" +title: "Security and Operation Best Practices" permalink: "docs/best-security-practices/" --- -The following information provides a set of best security and operating practices that node operators need to utilize at a minimum to enhance the security and reliability of their infrastructure. +The following information provides a set of security and operation best practices that node operators need to use at a minimum to enhance the security and reliability of their infrastructure. ## Restricting Access diff --git a/docs/Node Operators/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md index 45f311d7d52..dba222dc249 100644 --- a/docs/Node Operators/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -80,28 +80,13 @@ permalink: /chainlink-nodes/

New to Chainlink Nodes?

- Learn the best security and operating practices for node operators + Learn the best practices for node operators to enhance the security and reliability of your infrastructure.

- Getting Started Guide + Security and Operation Best Practices
-
- -

New to Chainlinks Nodes?

-

- Learn the best practices for securely operating nodes. -

- - Learn More - -

Explore Chainlink Node Tools

diff --git a/docs/Node Operators/fulfilling-requests.md b/docs/Node Operators/fulfilling-requests.md index 24f6795c6c1..793d16b9f3e 100644 --- a/docs/Node Operators/fulfilling-requests.md +++ b/docs/Node Operators/fulfilling-requests.md @@ -4,7 +4,7 @@ section: nodeOperator date: Last Modified title: "Fulfilling Requests" permalink: "docs/fulfilling-requests/" -whatsnext: {"Performing System Maintenance":"/docs/performing-system-maintenance/", "v2 Jobs":"/docs/jobs/", "Best Security and Operating Practices":"/docs/best-security-practices/"} +whatsnext: {"Performing System Maintenance":"/docs/performing-system-maintenance/", "v2 Jobs":"/docs/jobs/", "Security and Operation Best Practices":"/docs/best-security-practices/"} metadata: title: "Chainlink Node Operators: Fulfilling Requests" description: "Deploy your own Oracle contract and add jobs to your node so that it can provide data to smart contracts." diff --git a/docs/Node Operators/miscellaneous.md b/docs/Node Operators/miscellaneous.md index 470c211c9f1..f0f560a577f 100644 --- a/docs/Node Operators/miscellaneous.md +++ b/docs/Node Operators/miscellaneous.md @@ -4,7 +4,7 @@ section: nodeOperator date: Last Modified title: "Miscellaneous" permalink: "docs/miscellaneous/" -whatsnext: {"Best Security and Operating Practices":"/docs/best-security-practices/"} +whatsnext: {"Security and Operation Best Practices":"/docs/best-security-practices/"} --- ## Execute Commands Running Docker diff --git a/docs/Node Operators/running-a-chainlink-node.md b/docs/Node Operators/running-a-chainlink-node.md index fab69c5fd5d..0e783a77ffb 100644 --- a/docs/Node Operators/running-a-chainlink-node.md +++ b/docs/Node Operators/running-a-chainlink-node.md @@ -4,7 +4,7 @@ section: nodeOperator date: Last Modified title: "Running a Chainlink Node" permalink: "docs/running-a-chainlink-node/" -whatsnext: {"Fulfilling Requests":"/docs/fulfilling-requests/", "Performing System Maintenance":"/docs/performing-system-maintenance/", "Miscellaneous":"/docs/miscellaneous/", "Best Security and Operating Practices":"/docs/best-security-practices/"} +whatsnext: {"Fulfilling Requests":"/docs/fulfilling-requests/", "Performing System Maintenance":"/docs/performing-system-maintenance/", "Miscellaneous":"/docs/miscellaneous/", "Security and Operation Best Practices":"/docs/best-security-practices/"} metadata: title: "Running a Chainlink Node" description: "Run your own Chainlink node using this guide which explains the requirements and basics for getting started." @@ -229,4 +229,4 @@ The first time running the image, it will ask you for a password and confirmatio > > You will need to send some ETH to your node's address in order for it to fulfill requests. You can view your node's ETH address when the node starts up or on the Configuration page of the GUI. -You can now connect to your Chainlink node's UI interface by navigating to [http://localhost:6688](http://localhost:6688). If using a VPS, you can create a [SSH tunnel](https://www.howtogeek.com/168145/how-to-use-ssh-tunneling/) to your node for `6688:localhost:6688` to enable connectivity to the GUI. Typically this is done with `ssh -i $KEY $USER@$REMOTE-IP -L 6688:localhost:6688 -N`. A SSH tunnel is recommended over opening up ports specific to the Chainlink node to be public facing. See our [Best Security and Operating Practices](../best-security-practices/) page for more details on how to secure your node. +You can now connect to your Chainlink node's UI interface by navigating to [http://localhost:6688](http://localhost:6688). If using a VPS, you can create a [SSH tunnel](https://www.howtogeek.com/168145/how-to-use-ssh-tunneling/) to your node for `6688:localhost:6688` to enable connectivity to the GUI. Typically this is done with `ssh -i $KEY $USER@$REMOTE-IP -L 6688:localhost:6688 -N`. A SSH tunnel is recommended over opening up ports specific to the Chainlink node to be public facing. See the [Security and Operation Best Practices](../best-security-practices/) page for more details on how to secure your node. From 5120c6802c7e7372c286ff583b62de3650104491 Mon Sep 17 00:00:00 2001 From: Stephen Fluin Date: Fri, 10 Dec 2021 14:54:10 -0600 Subject: [PATCH 09/26] animate between chain logos --- .gitignore | 1 + _src/animate-chain-transitions.ts | 28 ++++++++++++ _src/docs.css | 10 ++--- docs/{home.md => home.html} | 74 ++++++++++++++++++++----------- package.json | 4 +- 5 files changed, 81 insertions(+), 36 deletions(-) create mode 100644 _src/animate-chain-transitions.ts rename docs/{home.md => home.html} (66%) diff --git a/.gitignore b/.gitignore index 6017e7a6c93..d570d1f2a3d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ addresses.json # Only keep TS version _src/index.js _src/keepers-configuration.js +_src/animate-chain-transitions.js .test/ diff --git a/_src/animate-chain-transitions.ts b/_src/animate-chain-transitions.ts new file mode 100644 index 00000000000..99413018062 --- /dev/null +++ b/_src/animate-chain-transitions.ts @@ -0,0 +1,28 @@ +document.addEventListener('DOMContentLoaded', () => { + const faders: HTMLDivElement[] = []; + document.querySelectorAll('.fader').forEach(element => { + faders.push(element); + }); + // Setup any faders on the page + for(let fader of faders) { + // Setup to only show first one + (fader.children[0]).style.opacity = '1'; + for(let i = 1;ifader.children[i]).style.opacity = '0'; + } + + // Fade the current to the next every interval + let currentFader = 0; + + setInterval(() => { + let nextFader = currentFader + 1; + if(nextFader >= fader.children.length) { + nextFader = 0; + } + (fader.children[currentFader]).style.opacity = '0'; + (fader.children[nextFader]).style.opacity = '1'; + currentFader = nextFader; + }, 5000); + } + +}); \ No newline at end of file diff --git a/_src/docs.css b/_src/docs.css index 911925da215..a697cd04ae8 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -523,18 +523,14 @@ hr { padding-top: 16px; } -.cl-chaincard-logo > img { +.cl-chaincard-logo img { height: 32px; max-height: 32px; - margin-left: -5px; - margin-right: -5px; - transition: all 0.2s; + transition: all 0.2s, opacity 0.5s ease-in-out; } -.cl-chaincard-logo:hover > img { +.cl-chaincard-logo:hover img { cursor: pointer; - margin-left: -3px; - margin-right: -3px; transform: scale(1.075); } diff --git a/docs/home.md b/docs/home.html similarity index 66% rename from docs/home.md rename to docs/home.html index c4fb1535d29..1a8060395be 100644 --- a/docs/home.md +++ b/docs/home.html @@ -1,6 +1,6 @@ --- layout: home.liquid -title: "Chainlink Documentation" +title: 'Chainlink Documentation' date: Last Modified permalink: / landing: true @@ -31,17 +31,37 @@

Networks and Products

\ No newline at end of file diff --git a/package.json b/package.json index 499c8d8ad6d..274e5fa9f6a 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "private": true, "scripts": { "test": "npx hardhat compile", - "serve": "NODE_ENV=development concurrently \"watchify _src/index.ts -p [ tsify ] -o _src/index.js\" \"watchify _src/keepers-configuration.ts -p [ tsify ] -o _src/keepers-configuration.js\" \"npx @11ty/eleventy --serve --port=4200\"", - "build": "browserify _src/index.ts -t [ uglifyify ] -p [ tsify ] -o _src/index.js && browserify _src/keepers-configuration.ts -t [ uglifyify ] -p [ tsify ] -o _src/keepers-configuration.js && rm -rf _site && npx @11ty/eleventy", + "serve": "NODE_ENV=development concurrently \"watchify _src/index.ts -p [ tsify ] -o _src/index.js\" \"watchify _src/keepers-configuration.ts -p [ tsify ] -o _src/keepers-configuration.js\" \"watchify _src/animate-chain-transitions.ts -p [ tsify ] -o _src/animate-chain-transitions.js\" \"npx @11ty/eleventy --serve --port=4200\"", + "build": "browserify _src/index.ts -t [ uglifyify ] -p [ tsify ] -o _src/index.js && browserify _src/keepers-configuration.ts -t [ uglifyify ] -p [ tsify ] -o _src/keepers-configuration.js && browserify _src/animate-chain-transitions.ts -t [ uglifyify ] -p [ tsify ] -o _src/animate-chain-transitions.js && rm -rf _site && npx @11ty/eleventy", "deploy": "yarn build && firebase deploy", "process": "yarn ts-node _tools/process-data.ts", "linkcheck": "yarn ts-node _tools/linkcheck.ts" From 67d9dae851967aab1dfdd4ff651d8db8072fb7a0 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Sat, 11 Dec 2021 12:12:59 -0800 Subject: [PATCH 10/26] Adjust animation style --- _src/animate-chain-transitions.ts | 8 ++++---- _src/docs.css | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/_src/animate-chain-transitions.ts b/_src/animate-chain-transitions.ts index 99413018062..9f3e52fc20e 100644 --- a/_src/animate-chain-transitions.ts +++ b/_src/animate-chain-transitions.ts @@ -13,7 +13,7 @@ document.addEventListener('DOMContentLoaded', () => { // Fade the current to the next every interval let currentFader = 0; - + setInterval(() => { let nextFader = currentFader + 1; if(nextFader >= fader.children.length) { @@ -22,7 +22,7 @@ document.addEventListener('DOMContentLoaded', () => { (fader.children[currentFader]).style.opacity = '0'; (fader.children[nextFader]).style.opacity = '1'; currentFader = nextFader; - }, 5000); + }, 2500); } - -}); \ No newline at end of file + +}); diff --git a/_src/docs.css b/_src/docs.css index a697cd04ae8..426f93bed63 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -526,12 +526,12 @@ hr { .cl-chaincard-logo img { height: 32px; max-height: 32px; - transition: all 0.2s, opacity 0.5s ease-in-out; + transition: all 0.1s, opacity 0.4s ease-in-out; } .cl-chaincard-logo:hover img { cursor: pointer; - transform: scale(1.075); + transform: scale(1.1); } .cl-chaincard-logo:hover > h3 { From ee47bff91bf1e0e0a165a84b27fbb33210d2fd0f Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Sat, 11 Dec 2021 14:54:32 -0800 Subject: [PATCH 11/26] Apply new style for remix callouts. Standardize usage of remix callouts. --- _src/docs.css | 62 ++++++++++++++++++- .../chainlink-alarm-clock.md | 4 +- .../dns-ownership-oracle.md | 4 +- .../finage-global-market-data-oracle.md | 4 +- docs/Data Provider Nodes/google-weather.md | 4 +- .../kraken-rates-oracle-node.md | 4 +- docs/Data Provider Nodes/lcx-testnet.md | 4 +- .../link-token-contracts.md | 2 +- .../tutorials/beginners-tutorial.md | 16 +++-- docs/Node Operators/best-practices-aws.md | 4 +- docs/Node Operators/chainlink-nodes.md | 4 +- .../DataFeeds/using-data-feeds-solana.md | 5 -- .../Terra/DataFeeds/using-data-feeds-terra.md | 5 -- docs/Using Any API/existing-job-request.md | 4 +- docs/Using Any API/large-responses.md | 4 +- docs/Using Any API/make-a-http-get-request.md | 4 +- .../Using Any API/multi-variable-responses.md | 4 +- docs/Using Any API/using-any-api.md | 9 ++- docs/Using Price Feeds/feed-registry.html | 11 +--- .../get-the-latest-price.html | 12 ++-- .../historical-price-data.html | 23 ++++--- docs/Using Price Feeds/reference-contracts.md | 4 +- .../reference-contracts/ens.html | 2 +- .../using-chainlink-reference-contracts.md | 6 -- docs/Using Randomness/using-chainlink-vrf.md | 8 +-- .../Using Randomness/vrf-example-contracts.md | 10 +-- .../chainlink-keepers/compatible-contracts.md | 10 +-- docs/chainlink-keepers/register-upkeep.md | 2 +- 28 files changed, 137 insertions(+), 98 deletions(-) diff --git a/_src/docs.css b/_src/docs.css index 426f93bed63..86def0988e1 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -355,11 +355,67 @@ hr { } .cl-section--one h3 { font-size: 18px; + +/* Callout buttons for Remix and other redirects*/ +/* Applies to the first button, then applies different style to n+2 buttons */ } .remix-callout { - display: flex; - flex-direction: column; - align-items: center; + display: inline-flex; + flex-wrap: wrap; +} + +.remix-callout > a:nth-of-type(1) { + padding: 8px; + padding-left: 20px; + padding-right: 20px; + border: 2px solid #375bd2; + margin: 0px 6px 32px 6px; + border-radius: 6px; + box-sizing: border-box; + text-decoration: none !important; + color: #ffffff; + background-color: #375bd2; + text-align: center; + transition: all 0.2s; +} + +.remix-callout > a:nth-of-type(1):hover { + color: #ffffff; + background-color: #1a2b6b; + border: 2px solid #0c162c; +} + +.remix-callout > a:nth-of-type(1):active { + color: #ffffff; + background-color: #0c162c; + border: 2px solid #0c162c; +} + +.remix-callout > a:nth-of-type(n+2) { + padding: 8px; + padding-left: 20px; + padding-right: 20px; + border: 2px solid #375bd2; + margin: 0px 6px 32px 6px; + border-radius: 6px; + box-sizing: border-box; + text-decoration: none !important; + color: #375bd2; + background-color: #ffffff; + text-align: center; + transition: all 0.2s; +} + +.remix-callout > a:nth-of-type(n+2):hover { + color: #1a2b6b; + background-color: #f5f7fd; + border: 2px solid #1a2b6b; +} + +.remix-callout > a:nth-of-type(n+2):active { + color: #0c162c; + background-color: #f5f7fd; + border: 2px solid #0c162c; } /** Search */ diff --git a/docs/Data Provider Nodes/chainlink-alarm-clock.md b/docs/Data Provider Nodes/chainlink-alarm-clock.md index d672cf9d753..af705e2934d 100644 --- a/docs/Data Provider Nodes/chainlink-alarm-clock.md +++ b/docs/Data Provider Nodes/chainlink-alarm-clock.md @@ -55,8 +55,8 @@ contract ChainlinkAlarmClock is ChainlinkClient { ``` # Tasks diff --git a/docs/Data Provider Nodes/dns-ownership-oracle.md b/docs/Data Provider Nodes/dns-ownership-oracle.md index 2fe3bc6c4bd..ac42895ea77 100644 --- a/docs/Data Provider Nodes/dns-ownership-oracle.md +++ b/docs/Data Provider Nodes/dns-ownership-oracle.md @@ -96,8 +96,8 @@ contract DnsOwnershipChainlink is ChainlinkClient { ``` # Tasks diff --git a/docs/Data Provider Nodes/finage-global-market-data-oracle.md b/docs/Data Provider Nodes/finage-global-market-data-oracle.md index 97f9bb43f6f..a4344e1e24e 100644 --- a/docs/Data Provider Nodes/finage-global-market-data-oracle.md +++ b/docs/Data Provider Nodes/finage-global-market-data-oracle.md @@ -91,8 +91,8 @@ contract FinageChainlink is ChainlinkClient { ``` # Tasks diff --git a/docs/Data Provider Nodes/google-weather.md b/docs/Data Provider Nodes/google-weather.md index d378fdbfba4..3b3cf948e47 100644 --- a/docs/Data Provider Nodes/google-weather.md +++ b/docs/Data Provider Nodes/google-weather.md @@ -62,8 +62,8 @@ Import `ChainlinkClient.sol` into your contract so you can inherit the `Chainlin ``` diff --git a/docs/Data Provider Nodes/kraken-rates-oracle-node.md b/docs/Data Provider Nodes/kraken-rates-oracle-node.md index a9dfed717f0..7a0f99110a5 100644 --- a/docs/Data Provider Nodes/kraken-rates-oracle-node.md +++ b/docs/Data Provider Nodes/kraken-rates-oracle-node.md @@ -95,8 +95,8 @@ contract KrakenChainlink is ChainlinkClient { ``` # Tasks diff --git a/docs/Data Provider Nodes/lcx-testnet.md b/docs/Data Provider Nodes/lcx-testnet.md index e3b066100ee..3478793dd58 100644 --- a/docs/Data Provider Nodes/lcx-testnet.md +++ b/docs/Data Provider Nodes/lcx-testnet.md @@ -87,8 +87,8 @@ contract LCXChainlink is ChainlinkClient { ``` # Tasks diff --git a/docs/Developer Reference/link-token-contracts.md b/docs/Developer Reference/link-token-contracts.md index cd91e7a83c8..dddf7fc5e56 100644 --- a/docs/Developer Reference/link-token-contracts.md +++ b/docs/Developer Reference/link-token-contracts.md @@ -84,7 +84,7 @@ The LINK token is an ERC677 token that inherits functionality from the ERC20 tok -------------------- -# Other EVM Compatible Chains +# Other Ethereum Chains LINK is native to Ethereum, so to use LINK on other chains, it must be bridged. This guide explains how to bridge and swap tokens to other chains. diff --git a/docs/Introduction/tutorials/beginners-tutorial.md b/docs/Introduction/tutorials/beginners-tutorial.md index 79bf5eb3ba7..5cad22f71df 100644 --- a/docs/Introduction/tutorials/beginners-tutorial.md +++ b/docs/Introduction/tutorials/beginners-tutorial.md @@ -59,15 +59,17 @@ The structure of a smart contract is similar to that of a class in Javascript, w ```solidity {% include samples/Tutorials/HelloWorld.sol %} ``` + ## Define the Version of Solidity The first thing that every Solidity file must have is the Solidity version definition. The version HelloWorld.sol is using is 0.8.7, defined by `pragma solidity 0.8.7;` -You can see the latest versions of the Solidity compiler [here](https://github.com/ethereum/solc-bin/blob/gh-pages/bin/list.txt/?target=_blank). You may also notice Solidity files containing definitions with multiple versions of Solidity: +You can see the latest versions of the Solidity compiler [here](https://github.com/ethereum/solc-bin/blob/gh-pages/bin/list.txt/?target=_blank). You might also notice Solidity files containing definitions with multiple versions of Solidity: ```solidity pragma solidity >=0.7.0 <0.9.0; @@ -152,7 +154,8 @@ Interfaces define functions without their implementation, leaving inheriting con {% include samples/Tutorials/Test.sol %} ``` For this example, `override` is necessary in the `Test` contract function because it overrides the base function contained in the `numberComparison` interface. The contract uses `pure` instead of `view` because the `isSameNum` function in the `Test` contract does not return a storage variable. @@ -187,7 +190,8 @@ You should have the code. What you need next is a compiler. Fortunately for us, Remix also has support for samples. This means that Remix can load code from Github, and in this case, `PriceConsumerV3.sol` Click the button below to open a new tab, then once Remix has loaded, find the **docs.chain.link** > **samples** > **PriceFeeds** folder in the File Explorer on the left-hand side, and click on the file to open the code in the editor. ![Remix Select PriceConsumerV3.sol](/files/beginner-tutorial-remix-snapshot.png) @@ -243,7 +247,7 @@ Remix should automatically detect the correct compiler version depending on the ![Remix Click Complile PriceConsumerV3.sol](/files/99af570-Screenshot_2020-11-27_at_10.45.44.png) -Click it, and you will see some details below it by scrolling down. There might be a few yellow warnings, but don't worry about those for now. If the warnings are red, revisit your code and troubleshoot any bugs or errors which may be present. +Click it, and you will see some details below it by scrolling down. There might be a few yellow warnings, but don't worry about those for now. If the warnings are red, revisit your code and troubleshoot any bugs or errors which might be present. ## Deploying @@ -253,7 +257,7 @@ This screen might seem a little more intimidating, but do not fret. This is wher Click **ENVIRONMENT**. the selected value should currently be **Javascript VM**. Instead, select **Injected Web3**. This should trigger a Metamask notification asking for permission to connect. Accept it, and your address should be automatically loaded into the **ACCOUNT** menu below **ENVIRONMENT**. -Once that's done, check that the **CONTRACT** menu displays the name of your contract. In many cases, Remix defaults to deploying the first contract which appears alphabetically in the menu; to prevent errors, select the correct contract, then click **Deploy**. Another Metamask notification will pop up asking for permission, and detailing how much GAS it will cost in testnet ETH. Confirm the transaction and await confirmation! This may take a few seconds depending on the network, so be patient. +Once that's done, check that the **CONTRACT** menu displays the name of your contract. In many cases, Remix defaults to deploying the first contract which appears alphabetically in the menu; to prevent errors, select the correct contract, then click **Deploy**. Another Metamask notification will pop up asking for permission, and detailing how much GAS it will cost in testnet ETH. Confirm the transaction and await confirmation! This might take a few seconds depending on the network, so be patient. ## Get the Price diff --git a/docs/Node Operators/best-practices-aws.md b/docs/Node Operators/best-practices-aws.md index df333fe0b4c..a8bff18f682 100644 --- a/docs/Node Operators/best-practices-aws.md +++ b/docs/Node Operators/best-practices-aws.md @@ -8,8 +8,8 @@ permalink: "docs/best-practices-aws/" You can deploy a Chainlink node on the AWS Cloud using [AWS Quick Start](https://aws.amazon.com/quickstart) to deploy a highly available and secure Chainlink node on the AWS Cloud. -
- Deploy a Chainlink Node on AWS ↗ + ## Created resources diff --git a/docs/Node Operators/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md index dba222dc249..3c957eb3b95 100644 --- a/docs/Node Operators/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -95,7 +95,7 @@ permalink: /chainlink-nodes/ -

Chainlink Market ↗

+

Chainlink Market

@@ -103,7 +103,7 @@ permalink: /chainlink-nodes/ -

Chainlink Oracle Reputation ↗

+

Chainlink Oracle Reputation

diff --git a/docs/Solana/DataFeeds/using-data-feeds-solana.md b/docs/Solana/DataFeeds/using-data-feeds-solana.md index 836b6ebb797..f2499a48b68 100644 --- a/docs/Solana/DataFeeds/using-data-feeds-solana.md +++ b/docs/Solana/DataFeeds/using-data-feeds-solana.md @@ -11,11 +11,6 @@ metadata: Chainlink Data Feeds are the quickest way to connect your smart contracts to the real-world market prices of assets. For example, one use for data feeds is to enable smart contracts to retrieve the latest pricing data of an asset in a single call. -Price data feeds are available on the following networks: -- **Solana** -- [Terra](/docs/terra/using-data-feeds-terra/) -- [EVM-compatible networks](/docs/get-the-latest-price/) - This guide applies specifically to using data feeds on the [Solana network](https://solana.com/). To get the full list of Chainlink Data Feeds running on the Solana Devnet, see the [Solana Feeds](/docs/solana/data-feeds-solana/) page. You can view the program ID that owns these feeds in the [Solana Devnet Explorer](https://solscan.io/account/2yqG9bzKHD59MxD9q7ExLvnDhNycB3wkvKXFQSpBoiaE?cluster=devnet). {% include data-quality.md %} diff --git a/docs/Terra/DataFeeds/using-data-feeds-terra.md b/docs/Terra/DataFeeds/using-data-feeds-terra.md index a30f3ebc52f..8ad4f9d7ba4 100644 --- a/docs/Terra/DataFeeds/using-data-feeds-terra.md +++ b/docs/Terra/DataFeeds/using-data-feeds-terra.md @@ -11,11 +11,6 @@ metadata: Chainlink Data Feeds are the quickest way to connect your smart contracts to the real-world market prices of assets. For example, one use for data feeds is to enable smart contracts to retrieve the latest pricing data of an asset in a single call. -Price data feeds are available on the following networks: -- **Terra** -- [Solana](/docs/solana/using-data-feeds-solana/) -- [EVM-compatible networks](/docs/get-the-latest-price/) - This guide applies specifically to using data feeds on the [Terra network](https://www.terra.money/). To get the full list of Chainlink Data Feeds running on the Terra Devnet, see the [Terra Feeds](/docs/terra/data-feeds-terra/) page. {% include data-quality.md %} diff --git a/docs/Using Any API/existing-job-request.md b/docs/Using Any API/existing-job-request.md index 731e243ef1d..6893ca1ac3c 100644 --- a/docs/Using Any API/existing-job-request.md +++ b/docs/Using Any API/existing-job-request.md @@ -27,8 +27,8 @@ You can find the job spec for this example on [GitHub](https://github.com/smartc > Making a job request will fail unless your deployed contract has enough LINK to pay for it. **Learn how to [Acquire testnet LINK](../acquire-link/) and [Fund your contract](../fund-your-contract/)**. ```solidity diff --git a/docs/Using Any API/large-responses.md b/docs/Using Any API/large-responses.md index 0e4f1a052b6..6ed8b8650ec 100644 --- a/docs/Using Any API/large-responses.md +++ b/docs/Using Any API/large-responses.md @@ -18,8 +18,8 @@ To consume an API with a large responses, your contract should inherit from [Cha > ```solidity Kovan diff --git a/docs/Using Any API/make-a-http-get-request.md b/docs/Using Any API/make-a-http-get-request.md index 52b15f79828..228d1540e8b 100644 --- a/docs/Using Any API/make-a-http-get-request.md +++ b/docs/Using Any API/make-a-http-get-request.md @@ -24,8 +24,8 @@ Currently, any return value must fit within 32 bytes, if the value is bigger tha > Making a GET request will fail unless your deployed contract has enough LINK to pay for it. **Learn how to [Acquire testnet LINK](../acquire-link/) and [Fund your contract](../fund-your-contract/)**. ```solidity Kovan diff --git a/docs/Using Any API/multi-variable-responses.md b/docs/Using Any API/multi-variable-responses.md index 8238763c0f6..6054e64c284 100644 --- a/docs/Using Any API/multi-variable-responses.md +++ b/docs/Using Any API/multi-variable-responses.md @@ -24,8 +24,8 @@ To consume an API with multiple responses, your contract should inherit from [Ch > ```solidity Kovan diff --git a/docs/Using Any API/using-any-api.md b/docs/Using Any API/using-any-api.md index 365da0ae9a3..11d7cc56642 100644 --- a/docs/Using Any API/using-any-api.md +++ b/docs/Using Any API/using-any-api.md @@ -98,8 +98,8 @@ Let's see what this looks like in a contract: ``` Here is a breakdown of each component of this contract: @@ -266,10 +266,9 @@ contract sportContract is ChainlinkClient { Your contract is complete and ready to be compiled and deployed. You can see a complete version of the contract in Remix: -
If you don't know how to deploy a contract to the Kovan testnet from Remix, follow [The Basics](/docs/beginners-tutorial) tutorial. To make a job request, you *must* have enough LINK to pay for it. Learn how to [acquire testnet LINK](../acquire-link/) and [fund your contract](../fund-your-contract/). Once these steps are completed, you should be able to get sports data. diff --git a/docs/Using Price Feeds/feed-registry.html b/docs/Using Price Feeds/feed-registry.html index 0c183816cea..fa43b9cb717 100644 --- a/docs/Using Price Feeds/feed-registry.html +++ b/docs/Using Price Feeds/feed-registry.html @@ -72,13 +72,9 @@ {% endmarkdown %} -
- - + {% markdown %} @@ -100,7 +96,6 @@ -
Latest LINK / USD Price: diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index 87387d89b18..be2548f6778 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -16,6 +16,8 @@ Chainlink Data Feeds are the quickest way to connect your smart contracts to the real-world market prices of assets. For example, one use for data feeds is to enable smart contracts to retrieve the latest pricing data of an asset in a single call. +This guide applies specifically to using data feeds on Ethereum Chains. To get the full list of Chainlink Data Feeds running on the Ethereum Chains, see the [Reference Contracts](/docs/reference-contracts/) page. + {% include data-quality.md %} You can use smart contracts to get asset prices on Ethereum chains. These examples show you how to get the price of Ethereum (ETH) on the Ethereum network, but you can modify the examples to work on other Ethereum chains as well. The list of data feeds for each network are available on the [Data Feed Contracts](../reference-contracts/) page. For development, use testnet data feeds such as the [ETH/USD Feed](https://kovan.etherscan.io/address/0x9326BFA02ADD2366b30bacB125260Af641031331) on the Kovan testnet. @@ -37,13 +39,9 @@ {% include samples/PriceFeeds/PriceConsumerV3.sol %} ``` -
- - The `latestRoundData` function returns five values representing information about the latest price data. See the [Data Feeds API Reference](../price-feeds-api-reference/) for more details. @@ -84,7 +82,7 @@ diff --git a/docs/Using Price Feeds/historical-price-data.html b/docs/Using Price Feeds/historical-price-data.html index bf0ba758e7d..3d7261ace2c 100644 --- a/docs/Using Price Feeds/historical-price-data.html +++ b/docs/Using Price Feeds/historical-price-data.html @@ -39,15 +39,15 @@ ## Solidity - - ```solidity Kovan {% include samples/PriceFeeds/HistoricalPriceConsumer.sol %} ``` + + ## Javascript ```javascript Kovan @@ -72,7 +72,12 @@ }) } - + {% markdown %} ## Python @@ -83,8 +88,6 @@ {% endmarkdown %} -
- + diff --git a/docs/Using Price Feeds/reference-contracts.md b/docs/Using Price Feeds/reference-contracts.md index 1e8c19ff4d5..3889bb1f439 100644 --- a/docs/Using Price Feeds/reference-contracts.md +++ b/docs/Using Price Feeds/reference-contracts.md @@ -17,7 +17,7 @@ Chainlink Data Feed contracts are updated on a regular basis by multiple Chainli > > See the [LINK Token Contracts](../link-token-contracts/) page for the details of LINK on each blockchain. -- EVM-compatible networks +- Ethereum Chains - [Ethereum Data Feeds](../ethereum-addresses/) - [Binance Smart Chain Data Feeds](../binance-smart-chain-addresses/) - [Polygon (Matic) Data Feeds](../matic-addresses/) @@ -29,6 +29,6 @@ Chainlink Data Feed contracts are updated on a regular basis by multiple Chainli - [Harmony Data Feeds](../harmony-price-feeds/) - [Optimism Data Feeds](../optimism-price-feeds/) - [Moonriver Data Feeds](../data-feeds-moonriver/) -- Non-EVM networks +- Other chains - [Solana Data Feeds](/docs/solana/data-feeds-solana/) - [Terra Data Feeds](/docs/terra/data-feeds-terra/) diff --git a/docs/Using Price Feeds/reference-contracts/ens.html b/docs/Using Price Feeds/reference-contracts/ens.html index b0dc2bc8410..357626064dd 100644 --- a/docs/Using Price Feeds/reference-contracts/ens.html +++ b/docs/Using Price Feeds/reference-contracts/ens.html @@ -132,7 +132,7 @@

Lookup


-

Manual Lookup

+

Manual Lookup

/ diff --git a/docs/Using Price Feeds/using-chainlink-reference-contracts.md b/docs/Using Price Feeds/using-chainlink-reference-contracts.md index 4557a917a38..4db78db3593 100644 --- a/docs/Using Price Feeds/using-chainlink-reference-contracts.md +++ b/docs/Using Price Feeds/using-chainlink-reference-contracts.md @@ -17,12 +17,6 @@ metadata: Chainlink Data Feeds are the quickest way to connect your smart contracts to the real-world market prices of assets. For example, one use for data feeds is to enable smart contracts to retrieve the latest pricing data of an asset in a single call. -Data feeds are available on the following networks: - -- [EVM-compatible networks](/docs/get-the-latest-price/) -- [Solana](/docs/solana/using-data-feeds-solana/) -- [Terra](/docs/terra/using-data-feeds-terra/) - # Retrieve the Latest Asset Prices Often, smart contracts need to act upon prices of assets in real-time. This is especially true in DeFi. diff --git a/docs/Using Randomness/using-chainlink-vrf.md b/docs/Using Randomness/using-chainlink-vrf.md index a68da28f743..e5daf504242 100644 --- a/docs/Using Randomness/using-chainlink-vrf.md +++ b/docs/Using Randomness/using-chainlink-vrf.md @@ -295,13 +295,13 @@ contract VRFD20 is VRFConsumerBase, ConfirmedOwner(msg.sender) { } ``` -You have now completed all necessary functions to generate randomness and assign the user a *Game of Thrones* house. We've added a few helper functions in there to make using the contract easier and more flexible. You can deploy and interact with the complete contract in Remix: - +You have now completed all necessary functions to generate randomness and assign the user a *Game of Thrones* house. We've added a few helper functions in there to make using the contract easier and more flexible. You can deploy and interact with the complete contract in Remix. + # 5. How do I deploy to testnet? You will now deploy your completed contract. This deployment is slightly different than the example in the [The Basics: Using Data Feeds](/docs/beginners-tutorial/#7-how-do-i-deploy-to-testnet) tutorial. In our case, you will have to pass in parameters to the constructor upon deployment. diff --git a/docs/Using Randomness/vrf-example-contracts.md b/docs/Using Randomness/vrf-example-contracts.md index 0570c027a30..c7787da3cac 100644 --- a/docs/Using Randomness/vrf-example-contracts.md +++ b/docs/Using Randomness/vrf-example-contracts.md @@ -36,15 +36,15 @@ Note, the below values have to be configured correctly for VRF requests to work. > > Requesting randomness will fail unless your deployed contract has enough LINK to pay for it. **Learn how to [Acquire testnet LINK](../acquire-link/) and [Fund your contract](../fund-your-contract/)**. - - ```solidity Kovan {% include samples/VRF/RandomNumberConsumer.sol %} ``` + + > 🚧 Maximum Gas for Callback > > If your `fulfillRandomness` function uses more than 200k gas, the transaction will fail. diff --git a/docs/chainlink-keepers/compatible-contracts.md b/docs/chainlink-keepers/compatible-contracts.md index fbd92369790..f872446ad85 100644 --- a/docs/chainlink-keepers/compatible-contracts.md +++ b/docs/chainlink-keepers/compatible-contracts.md @@ -151,15 +151,15 @@ You can perform complex and broad off-chain computation, then execute on-chain s ## Example Contract The example below represents a simple counter contract. Each time `performUpkeep` is called, it increments its counter by one. - - ```solidity {% include samples/Keepers/KeepersCounter.sol %} ``` + + > ❗️ **WARNING** > Do **NOT** attempt to send LINK to your contract like you do with [VRF](../../get-a-random-number/). For Chainlink Keepers, contracts are funded via the registry rather than within your contract. diff --git a/docs/chainlink-keepers/register-upkeep.md b/docs/chainlink-keepers/register-upkeep.md index 9f6bb15bfb5..43ba4c0657d 100644 --- a/docs/chainlink-keepers/register-upkeep.md +++ b/docs/chainlink-keepers/register-upkeep.md @@ -14,7 +14,7 @@ whatsnext: This guide explains how to register a Keeper-compatible contract with the Chainlink Keeper Network. To find more information about deploying a Keeper-compatible contract, see the [Making Compatible Contracts](../compatible-contracts) page. Register your contracts in the Chainlink Keepers App: After you register, you can interact directly with the [registry contract](https://etherscan.io/address/0x7b3EC232b08BD7b4b3305BE0C044D907B2DF960B#code) functions such as `cancelUpkeep` and `addFunds`. From 162ac7aef0ef95bc6f8353f49a9e4bbe3b81ee97 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Sun, 12 Dec 2021 17:24:34 -0800 Subject: [PATCH 12/26] Rewrite Getting Started content. Organize landing pages and navigation. --- TEMPLATE.md | 8 +- _data/navigation.js | 50 ++-- _src/docs.css | 5 +- _src/files/7d69188-metamask.png | Bin 19019 -> 0 bytes ...f570-Screenshot_2020-11-27_at_10.45.44.png | Bin 4375 -> 0 bytes ...7c39-Screenshot_2020-11-27_at_10.56.56.png | Bin 9870 -> 0 bytes _src/files/d30579b-metamask.png | Bin 6983 -> 0 bytes .../getting-started/compileHelloWorld.png | Bin 0 -> 5178 bytes .../compilePriceConsumerV3.png | Bin 0 -> 17157 bytes .../getting-started/confirmTransaction.png | Bin 0 -> 51786 bytes _src/images/getting-started/connectRemix.png | Bin 0 -> 44809 bytes .../getting-started/deployHelloWorld.png | Bin 0 -> 10657 bytes .../getting-started/deployPriceConsumerV3.png | Bin 0 -> 15641 bytes .../getting-started/deployedContract.png | Bin 0 -> 33087 bytes .../deployedContractPriceConsumerV3.png | Bin 0 -> 15315 bytes _src/images/getting-started/fundedWallet.png | Bin 0 -> 38433 bytes .../images/getting-started/getLatestPrice.png | Bin 0 -> 17550 bytes .../getting-started/metamaskImportTokens.png | Bin 0 -> 41476 bytes _src/images/getting-started/openMetaMask.png | Bin 0 -> 17892 bytes _src/images/getting-started/runHelloWorld.png | Bin 0 -> 45004 bytes .../getting-started/runHelloWorldAgain.png | Bin 0 -> 13607 bytes .../getting-started/runUpdateMessage.png | Bin 0 -> 18658 bytes _src/images/getting-started/selectKovan.png | Bin 0 -> 37120 bytes .../getting-started/selectPriceConsumerV3.png | Bin 0 -> 29228 bytes .../selectSolidityCompiler.png | Bin 0 -> 16631 bytes .../getting-started/selectSolidityDeploy.png | Bin 0 -> 18568 bytes _src/images/getting-started/selectWeb3.png | Bin 0 -> 37670 bytes ...b524261854d093d_multiple-users-network.svg | 71 +++++ ...b67ab88bcfe_common-file-text-chainlink.svg | 46 +++ docs/Chains/ethereum.md | 10 +- docs/Developer Reference/getting-help.md | 16 +- .../hackathon-resources.md | 1 - docs/Developer Reference/user-guides.md | 15 - docs/Introduction/getting-started.md | 261 ++++++++-------- .../getting-started/acquire-link.md | 42 ++- .../getting-started/conceptual-overview.md | 176 +++++++++++ .../getting-started/consuming-data-feeds.md | 84 ++++++ .../deploy-your-first-contract.md | 124 +++++--- .../getting-started/fund-your-contract.md | 26 +- .../getting-started/install-metamask.md | 35 --- .../other-tutorials.md | 2 +- .../use-your-first-contract.md | 46 --- .../getting-started/your-first-contract.md | 120 -------- .../tutorials/beginners-tutorial.md | 280 ------------------ .../tutorials/intermediates-tutorial.md} | 14 +- docs/Node Operators/fulfilling-requests.md | 2 +- docs/Using Any API/using-any-api.md | 2 +- ...le-contracts.md => get-a-random-number.md} | 2 +- docs/home.html | 2 +- firebase.json | 58 +++- 50 files changed, 752 insertions(+), 746 deletions(-) delete mode 100644 _src/files/7d69188-metamask.png delete mode 100644 _src/files/99af570-Screenshot_2020-11-27_at_10.45.44.png delete mode 100644 _src/files/ca77c39-Screenshot_2020-11-27_at_10.56.56.png delete mode 100644 _src/files/d30579b-metamask.png create mode 100644 _src/images/getting-started/compileHelloWorld.png create mode 100644 _src/images/getting-started/compilePriceConsumerV3.png create mode 100644 _src/images/getting-started/confirmTransaction.png create mode 100644 _src/images/getting-started/connectRemix.png create mode 100644 _src/images/getting-started/deployHelloWorld.png create mode 100644 _src/images/getting-started/deployPriceConsumerV3.png create mode 100644 _src/images/getting-started/deployedContract.png create mode 100644 _src/images/getting-started/deployedContractPriceConsumerV3.png create mode 100644 _src/images/getting-started/fundedWallet.png create mode 100644 _src/images/getting-started/getLatestPrice.png create mode 100644 _src/images/getting-started/metamaskImportTokens.png create mode 100644 _src/images/getting-started/openMetaMask.png create mode 100644 _src/images/getting-started/runHelloWorld.png create mode 100644 _src/images/getting-started/runHelloWorldAgain.png create mode 100644 _src/images/getting-started/runUpdateMessage.png create mode 100644 _src/images/getting-started/selectKovan.png create mode 100644 _src/images/getting-started/selectPriceConsumerV3.png create mode 100644 _src/images/getting-started/selectSolidityCompiler.png create mode 100644 _src/images/getting-started/selectSolidityDeploy.png create mode 100644 _src/images/getting-started/selectWeb3.png create mode 100644 _src/images/misc/5f75ccd99b524261854d093d_multiple-users-network.svg create mode 100644 _src/images/misc/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg delete mode 100644 docs/Developer Reference/user-guides.md create mode 100644 docs/Introduction/getting-started/conceptual-overview.md create mode 100644 docs/Introduction/getting-started/consuming-data-feeds.md delete mode 100644 docs/Introduction/getting-started/install-metamask.md rename docs/Introduction/{tutorials => getting-started}/other-tutorials.md (97%) delete mode 100644 docs/Introduction/getting-started/use-your-first-contract.md delete mode 100644 docs/Introduction/getting-started/your-first-contract.md delete mode 100644 docs/Introduction/tutorials/beginners-tutorial.md rename docs/{Using Randomness/using-chainlink-vrf.md => Introduction/tutorials/intermediates-tutorial.md} (94%) rename docs/Using Randomness/{vrf-example-contracts.md => get-a-random-number.md} (98%) diff --git a/TEMPLATE.md b/TEMPLATE.md index 1f2d6b6a0c4..0897775dc20 100644 --- a/TEMPLATE.md +++ b/TEMPLATE.md @@ -10,13 +10,13 @@ metadata: image: 0: "insert image here" --- -*This doc is meant to be used as a template for creating a tutorial doc. Contributors should emulate the structure of this document when creating new pages. The content of this doc comes from beginners-tutorial.md.* +*This doc is meant to be used as a template for creating a tutorial doc. Contributors should emulate the structure of this document when creating new pages. The content of this doc comes from the Getting Started Guides.* *Prerequisites should have its own block at the beginning of the tutorial. Tell the user what tools are required, what knowledge they should already have, and where to go if they need previous reading. Provide links to the other docs pages.* > 👍 Prerequisites > > This tutorial requires .... If you're unfamiliar with these concepts, follow ... -> or +> or > New to []? We'll walk you through... *If a tutorial has a corresponding YouTube tutorial, link it at the beginning of the page.* @@ -57,7 +57,7 @@ A valuable feature of smart contracts is that they can store and manage on-chain *Notice how users are given external links to read more about concepts such as ETH or ERC20 tokens. They do not have to undertake a separate search.* -Smart contracts can connect to real-world market prices of assets to produce powerful applications. Chainlink's **[Data Feeds](../using-chainlink-reference-contracts/)** feature allows users to quickly and securely connect smart contracts to such assets in a single call. +Smart contracts can connect to real-world market prices of assets to produce powerful applications. Chainlink's **[Data Feeds](../using-chainlink-reference-contracts/)** feature allows users to quickly and securely connect smart contracts to such assets in a single call. # 2. What language is a smart contract written in? @@ -110,4 +110,4 @@ To learn more about data feeds, read the Data Feed blog posts: - [Build a dApp on Binance Smart Chain With Secure Data Feeds](https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/) - [The 3 Levels of Data Aggregation in Chainlink Price Feeds](https://blog.chain.link/levels-of-data-aggregation-in-chainlink-price-feeds/) -To explore more applications for data feeds, check out our [other tutorials](/docs/other-tutorials/#data-feeds-applications). \ No newline at end of file +To explore more applications for data feeds, check out our [other tutorials](/docs/other-tutorials/#data-feeds-applications). diff --git a/_data/navigation.js b/_data/navigation.js index fb9cba06c8a..9144fb3031e 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -5,28 +5,28 @@ module.exports = { section: 'Getting Started', contents: [ { - title: 'Install, configure & fund MetaMask', - url: '/docs/install-metamask/', + title: 'Conceptual Overview', + url: '/docs/conceptual-overview/', }, { - title: 'Acquire testnet LINK', - url: '/docs/acquire-link/', + title: 'Deploy Your First Contract', + url: '/docs/deploy-your-first-contract/', }, { - title: 'Deploy your first contract', - url: '/docs/deploy-your-first-contract/', + title: 'Consuming Data Feeds', + url: '/docs/consuming-data-feeds/', }, { - title: 'Fund your contract', - url: '/docs/fund-your-contract/', + title: 'Get Random Numbers', + url: '/docs/get-a-random-number/' }, { - title: 'Use your first contract', - url: '/docs/use-your-first-contract/', + title: 'Acquire testnet LINK', + url: '/docs/acquire-link/', }, { - title: 'Learn how smart contracts work', - url: '/docs/beginners-tutorial/', + title: 'Fund Your Contracts', + url: '/docs/fund-your-contract/', }, ], }, @@ -42,6 +42,10 @@ module.exports = { { section: 'Next Steps', contents: [ + { + title: 'Request Public API Data ↗', + url: '/docs/using-any-api/', + }, { title: 'Chainlink Architecture ↗', url: '/docs/architecture-overview/', @@ -94,7 +98,7 @@ module.exports = { ], }, { - section: 'USING DATA FEEDS', + section: 'DATA FEEDS', contents: [ { title: 'Introduction to Data Feeds', @@ -116,6 +120,10 @@ module.exports = { title: 'API Reference', url: '/docs/price-feeds-api-reference/', }, + { + title: 'Using ENS with Data Feeds', + url: '/docs/ens/' + }, { title: 'Contract Addresses', url: '/docs/reference-contracts/', @@ -177,13 +185,9 @@ module.exports = { title: 'Introduction to Chainlink VRF', url: '/docs/chainlink-vrf/', }, - { - title: 'Using Chainlink VRF', - url: '/docs/get-a-random-number/' - }, { title: 'Example Contracts', - url: '/docs/vrf-example-contracts/', + url: '/docs/get-a-random-number/', }, { title: 'API Reference', @@ -204,7 +208,7 @@ module.exports = { ], }, { - section: 'USING ANY API', + section: 'Connect to any API', contents: [ { title: 'Introduction to Using Any API', @@ -245,10 +249,10 @@ module.exports = { ], }, { - section: 'USING CHAINLINK KEEPERS', + section: 'CHAINLINK KEEPERS', contents: [ { - title: 'Introduction', + title: 'Introduction to Keepers', url: '/docs/chainlink-keepers/introduction/', }, { @@ -288,10 +292,6 @@ module.exports = { title: 'LINK Token Contracts', url: '/docs/link-token-contracts/' }, - { - title: 'Using ENS with Chainlink', - url: '/docs/ens/' - }, { title: 'Developer Communications', url: '/docs/developer-communications/', diff --git a/_src/docs.css b/_src/docs.css index 86def0988e1..d95484a925a 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -918,14 +918,15 @@ h4, h5, h6 { color: #1A2B6B; - font-weight: 700; + font-weight: 400; margin-bottom: 10px; margin-top: 40px; line-height: 24px; } h1.page-title { - font-size: 34px; + font-size: 40px; + line-height: 56px; } h1 { diff --git a/_src/files/7d69188-metamask.png b/_src/files/7d69188-metamask.png deleted file mode 100644 index a4bbaf0919344ba26101f96f17da01679f54c7f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19019 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 diff --git a/_src/files/99af570-Screenshot_2020-11-27_at_10.45.44.png b/_src/files/99af570-Screenshot_2020-11-27_at_10.45.44.png deleted file mode 100644 index a369157e4d3fd282b8e402a39c6a0d60b959fc1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4375 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 diff --git a/_src/files/ca77c39-Screenshot_2020-11-27_at_10.56.56.png b/_src/files/ca77c39-Screenshot_2020-11-27_at_10.56.56.png deleted file mode 100644 index 666c93853b69b300c2051c0847e741a8aefe3420..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9870 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 yJB90o?XLzArBYMUQf!pBiuxZD-$PIU diff --git a/_src/files/d30579b-metamask.png b/_src/files/d30579b-metamask.png deleted file mode 100644 index 086e60efed1634745873482ebe86cc9d91be08bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6983 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 diff --git a/_src/images/getting-started/compileHelloWorld.png b/_src/images/getting-started/compileHelloWorld.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1d6c7f9a3bc9d29ea1ea2f279f8e53385c0e8e GIT binary patch literal 5178 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 literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/compilePriceConsumerV3.png b/_src/images/getting-started/compilePriceConsumerV3.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7bbc67b3e22767d3b9d181cf668b7a6b63a76d GIT binary patch literal 17157 zcmeHtbx<76@+THtgS!R@?y|T`aCcwaS=`-82oT&taCdhLZUKV31$PK`OTJI*epgqo z>h8ZsAv-hOJ>8$~8K!4CQb|Dy1(5&|0s;a>Mp|420s_(i{MiH^7W^A;yVU~%0+q{4 zO$(%A>`vzB>|kzX3nT-1Is(an9#-ZM5FU%=sa9Wzno&YtF0llmxIe8sbsY<=bq(Hz z>*)NlkCpne!dWsrJWN$B3FF*zKQH8P2j>q&Mp18Rn9|v6(rU1TS??qzhjuF-11#@*yd^P_&85};QQpAdn>{gw>^kvUU_+Wd4I3NayTDq zfRlK&%zHAAQW+}ir>&N~Hb3%}tIprqu5y0-+Ev#7u{3{=n(=zrd#w7Fi)W6=h9+wX zh4HD{7x^@Em1cEqE!o_5xbWLs&k2ca4V;(csB>naHE7%dmHQrvkGH?!eW;RBx_Y*n z&wQJIbwBcQ37K5s`gd+=m?d~WZf4iqoZsi$3&wT)kU!2I*`>5uG)PXIu!=q2x=h|n zXv6h-Q4+kF5IQY8bWIe>F8nnykqa+W_^?`jyTM_gW!Lw$J;ST@j%TywK-p(`*5mpo zlzJ)Aoz2;_rIRugAJa_+(Z|H0Cwb0evx9=mJ3T97lQ9~1K^KES=d%Ra&yof^+Q@Cw zW9>0D@1yi^IMsO4g=}R$+6|hvCUKmgyKhcsXpKf6el*;0XKtJKexEOOcqLUMK=_bBjQ>U~2Il3%gbMAst)zA3lJAs9_KXW{h zLZ6G|fU`VRTLLGWq_Ow-*8-hdi*XlN(kblEtSbDxe4Yc}jRfA0$dfjE1DVkKUp}mg z&P%Ocyrea+7e9=R`c5oW)-+_ko1-+H;JV5g5WQW|yJvKdPLc87_KMt^dgHbzcv!~w zEv)P_Po7)Db;~@U#(HGiWLV*_K_3tGj}SS6O3T^j1?R{eu&`Vr}SgutwWe&YP4!)_sOWe z_?hl&RN}G34+Z_22P&X1ZBkc^2}g@kHJuT-)uIdvja8GKpYne@4 zEXw7Bkv|1B-0554MsQ)8G5Gdip^wL-U$|ON+6liUQ8yYf6V_=B==+|`LBjO$@TX2Iib@$}CKp;q-|{CuB%(zO4$hjGJku2zC0QuKJw(?p>|T6v z0Cs#eBr?V8)V}kmA9K(g^QF*D9XV4CZuJQ(Y{~)$YAIS8=w}F!+h5PN0iUzja9ZuH z`-Oqs3hf^h-mRvNDpIUgUvr4qlFlIRA0TX}%;-wWBYotX68S7cf9`>mKEJ!a-2X6a zqCv?yKadD$NUUG9wX;S+pqO@LXUbM!-NCn8B!i`Q(B)y{Qa3`Paur0{NBPl9<{EFSpF5@S{)0}mCJBDJidNj=0(gbY=Bb8$dY`Wqx=>Sx}@ ziRBo19Q#aVKtCVo5F;tD(?IDb3NgWF^;b&#)uE?>?Ja3bOqI$3c{lz`-&ONYXD}MyXOV!JO;SOe&*i z-+MP3AyFngw)9@trjW&+#-!2p3x1At_d0_98~`H}FvQ2dLc6%TrP~-!JB#o`1w=;t z**WVT^yzbM^1by^Tm*pfeO7g4 zUj{MB{obH2&@z2%gu~7|g2A5L{jH`zNHULtV0n!f*yNok-rlkQDRtqgtLs_^1B&M8r__2+7M|= zeb4VQi|3OM2zgs^8??3-9y1CN}ZM z;)_^9s`!m;Ee8gv5}^ZF`dPh$t}LHNEe+&2J_uy3_jVMmxXC;Q5i90$CzW9VzP|w# zN~B8o+))Gga{4L1X7Ni|@O^sbAz?_d;9!y42oo4f*YK%gEW!!yDk70Q&kC6O?x6&g z2SFM7g~~MnK~c=SI#L5SGxIK>&#p`7lh!IsO^j?Sz)%Xjf3Ad7uJjsu-n68L|Hb% z>eh-d3bq#LQuhm|KCrV-^9Oo7s{}M;90iKNR)l6isd7$z)DkI*VE!#PC!8b9H5b7x z{59V+4@GMUt_GmNlX&okj+q$yl<@}@u{+@z2X8DEWUC`U68|C_60Xdzi){-9olv>`iwu5|Mw_yG4#Q8@)2=5_tO7BD z+4Ca{hCn+J{-^gPvFRA9FcoEHleOAKD>j*|*t}A%59Ygh>{yMX*hriB@8R0;4%Yey z)w*(BE%6by>md=97t}^mXP)p;&d5CBNODUs_2_Bws5p6=Y?$^~(J;fS+u7LwE4daw zB5#no7S2{sn`Y4ohh*x=W29erCFZT-Hd7;)2h~}QYtCprd*+J5=1s|I`Jipc4ng(& zhrwy)w$kU`MKs%-mXLUfa@lcVc%J*4EdvSW@IAqkJv5SH;bK3>8-A?I$4w1KOiVZq zbfE6}=l3|FpnOFXVb7-wM8H~%A}{t3Q*M*?q)Q9$LZwcuw9@4Z&8ix#*364kbMSyGl(N z#h$cNi@o1_)XgVqMPZ_}#=aD(l*$~^yUZ&*?}534xcxTn*GE?S@q^tElciavwyL
`pgoF& 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
-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౏XaI|l*YRzCSu$ySq4{mrmR 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 Nc)I$ztaD0e0svXH9;*NV literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/metamaskImportTokens.png b/_src/images/getting-started/metamaskImportTokens.png new file mode 100644 index 0000000000000000000000000000000000000000..e84b4ba05716f489fb746544d2424105f3f0bb46 GIT binary patch literal 41476 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 literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/openMetaMask.png b/_src/images/getting-started/openMetaMask.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec61f44f347bb438a1e3a5f16ec3173fdcf0ca5 GIT binary patch literal 17892 zcmaic1yojD*X=_iAR*mg&?!iFBi$W>ba!_tAtfMP64KI*v~+iuNO#xW&->l@T0jiRC~9U29ky_<~_v0$w}Ec_Qg{Yj&_&3{bID+6`9)+BwNWOW$GQe zd83V~vNUUw0hVYvGG!py>zJ5ilfn1OM6DZpWH7DE-5!Zg4T6$w+7$$tn4itQeVFgs z>rzRrZTHCJ>hG_7?=8<~I*#y}yrInfzNcZc@)ujKDF>S*$s0Tw(h_GD`cxu^K(2gC zo-I`FXtiOTv>MB(n!`Q=0;azMGP(uakvMo2$j@HlOezZFa;#VHe%Jgx>O0;mxOw}= zk#@7lKh~Ixc$A{a_gL_HsZ=d3?KrMOI_s|6K|sQPlxehtclhe(2D^g)Dw};?-2?G+ z!`t|CPn`%-7`TOB-7Y#Rm;M8!hR1y|a&rlR>>);2?t-~?{cy25S$0!$|){Z z<6dS7YX|$Qmq_N}-NLo!;^}M^;jyctXJ?U!boCfw6%}F%1sc9U?s^>){A%XVG@jqj z&v2Syb2b0y zjQIirE=xf$MUWjHMy0TjDaFq6d%A5N(T#jat7m9~EpQ;i3wmkQjn}oh-JB*wBs3TA zHDWEYM3Be4m;RU;JH|xN$Q>kjWh`|U8HLy}Xg`C1TQRDv87ZUE8^i9+sI=8gb{D;1 zWMbBa8%KEE!v7gImHmvK+gP3qK4g4iVy?xD^Xc)bjg=@$S!(7}sOlpm7Y;XV zR#Pu09?u_>GaQNBJH{;2C-K*>UzSNpiHWDvI(D(&zR`qC4T3>zM1Rmo>@gUo_qH0F z9P7sv(Zx@AYW6s@EV+k)g@a4xv?CJ@MT>>C>Y1!}XDCcLbIeQJZA>v~vsn|1lF^2U z=#Id`!p=6jSd}I`kh}&Fu4o5Ke(rybkRZ}f7nHdG_dZx zp5qwV@H>)%4UOC!OmnyA=1*j7hIkEFlHnw>LMY1|u&L$G8&AuvpUI|iofN5=&!p`3 z=jCUO;vio0)R#E*Y;|3CbG*!WL=9J$*`ZEdOz`WP@LOBtbz&~QhcWU=-)9ts^~ank zZaQon*tp1z7I-fq5!&mO&g=Fk2t&ZWjf~H|0^VO{f2FN${_5`P$WQHTOjzS#KfRyr z=~KazBP-Rc^Z-RZq;faeU1q9{cA4vX4pP- zz=H+iTQ2{Rxnj;<>HBb7oH6o8x7~~Qds(R6fEwDg!D)U@2g}DU6Q9QfKO{6l>76f( zNkj0rwau6Mz76Q$(L!4xhRg12A^3|+qB%E88%A0(#Ei_OztmKxWa5KiWZ}0oC)=s zDs-Gd*dm{-;sPUjwPy)bMkp#8CcB9mNUK5kHtEuo(2d2K)|{nMY;PIECjG8zy4LvF zArLXVX9L}=pG^04B0_N@B48d}L9948Z^p(@moT-~6waEB^}nJF!4z?qv_<$&`}@Cc zdfh#CN=iy)6p#)W|7#`~`QjeUR+}qoG)Uw8$ zo#@KdhJ#qX06TRkwA-lNw5m_|lmi0IA-kPhj%$t$_B`pc2d&HJC&JNZ9fW+I$^(%_+rl$9J5c z+djL#zQ!aXnlHR*uwN4i3i4Mk-kL_oI;_Y@>u%VtD=ZV}K{&K#bzYR_Zepj)U) zm-dUA_v&o!Ntw3X{LvT-M1lxAPw`av`@Etn!e;g2H(XrxV`tbTB!dl3+q+Ao-^U6G z#>+`#DLr8ys)Iuiv!@FC`uaL`)rH+PQF&afBL)!W=FF~Hx6yi>ws$bgs1IbHp_`ov zv?YRhDoiXdXNGKTZ9PYa1+z#Kex>jO1qJ1l&b+Iu3lfu_exTM!mk=HkgE^eeyX`|S zQM|^9@m!=-J$J&=o`;l#H=}c`nn8X$Juj!3M8<>g!OJag&}eJ(GegeHj?WeoDe5-b z8}{5clm*D*dA7B^nqU{^XfHLoz^(oYfO~%1Jh9WYX79d)yLohUH06JkB^=~_f6@yh zB_*{wz}$A;=&}a=!9GR0`p_|N4(lxR_DJJ^zS<@FIv}8 zk&%xrTZDrU8=gQmaceov6MEC$;eqZLMIzG+B}N;UNm8a@Z^m*tXu7K3?|*Q6565QuK*2*}K2Hrd)r6lQEea*uYzA!};*Ty&gw<>6TeSPt%T&pTy*rG5u zH`gGpya_X>sGrR*cT7r12-5q7)W%+WSr&C_@8Yj>qh(SQG3OUBQDB%7nwsAvIb+p} zUE0X8v4i9bHdfn%YHW)g8!hGL#o+BZn4@`_CX@`GhM^x=Wdg z$`(fb$bHM&P-Be^YS#B-*u1fQ2kJHzZ(PS=9{EnMa(OYK2X&)|j)o^fery8Co;j>YePd^0HjigzrsOm=c zSqm4BWlh`|x^W#}U2UnV<8|ldiG?C&PgslE0~?`u z!z>S%(;u{fq$lk7zRfLlU6sDa9=s<}El^2f)=YU{bmY3KWghn?kz^(-rS zdHJaJ9&`5TZ=o%VpQbEd(b2sqP-*|juB59iJDltd@pjQ>r^BU^A=Hk-OP2`B%*3!v z2y81)6bd2(^Rz9``u76ApdAtZy2^OQEy{DBN-m{~*seJshvxYqY@C*mh!m#b$-4OW z@84OhXIXlph~4IRHhTC6N3%Pnq@_QAA3bm7$f5)Tl$McsMM;@G?DFvN&~Wo7HJQhy z=uSJ}){#e#OOMIh$ERYxiC1|N*!UI-dVky1m#tBE#^Hzz+r`Hab@_ z`gARfn0Rzc+3lUvJG)u+nS&ggFA;1W40x!P38>_P>`WD814BCD&}(Mfq! zH=GqU^nzZ5qZCZ^?KH#A*V@V{8bVA}Xeose&pk=;B0|Q)QRqrIVBzi?tb}-n)856W z7mJiu=8hHh3Hk+0czC3>DN5a4vg*>XzPtSyCu|7nRrr@Le+HBJzN^TFjZn^mb#rI7|IbSyNL)>BBSAh-AOgrGC4O zo*3WCEG;rSDB52&(ok@AW*-|H(`3MNJ(NXU{lbg5w!OWrU(ovSv^;qHqpN1vbtsh=RD?62x>#*y-v~?SkKeR`OyUys==E(up73EDg8YtHVD3R{rDX$i0W=_f3HuJrotPaJV86{JVJ-W%LRsv&vqr$L=3FVccMM z!@wY(o;H(@o}ZkY+$N4PB@GxKH(2JCP3Y}=wb`%1B4Ln$%?4l3wMWgvlY)xR6qAuL z+~~4rS-L7CBh%t(S~1;=A2t*oEgvRd43O7)@dQ@Z3^opdP=pXal@p;vZpeh$d#-y? zyjC8@08jq4Y|3ieiSU?FMRp$k0@Q()M!cL>qK)^49u$$7Inp%Y>xVq2>hA9D@%%co zrd3mWuA?A%Rp!8=J^Grzqr=&UM}W_nE*!H|#m|h`cQmS*r(sQDxxNEg7n%LFFe>BKBUapw;NL^j!c8fN;mh$Ml{!A1@Lbs)R9u9k@wxGI^ua4>}|Z zsAwqsSMdV=J}{%>SWVKYTH?wVM35_NJAs{#V(8L%jA0v;Q~TUNH-|>c ztrE4~ciw}qA;^?v-{cFkC~EC|H0ZnewMchU=*}{ zfE7|9YoqmO#fD??l?gw>Vjii77!47RN%uGCLi4iznI}%fpnwd1uhW^f$EjDypf7m5ooO4dGE)Fe-}nFh zk+ba)YBsj`FQmMUK|&^5D?g1T-?FhK3;MOu0*@MNkMF01Q1ZuvQ*errbCW(@MYgm@u9uNOjeQ8 zl?fRXDs(+x9T#|#>4k?9C0)-IZ$?ty4dn7l1^Pq3cd-O7lyq@pz(Ykb0|T7|-7s*s zA3uI1J-=2*449l$9W<>1W9wsA1ivkwAMhSE3-NLBKj{lp)QWAJ8)weETG82tP%l37Z`k_yjYjedX?f zPVT#Y-saR-2)IejIp;Fs@7Ah{4Wb?6wanXnfpr7AV0JO)gIkW z3qqH!)UmB&Fk|bUczK+G-Xs>mOjZsUEfDZEf44L@ZWM`xh< z-I@f_Wtbig>yEnq`K)2aMmOH^^Xo@f{Q6O(Ix1M=nwk$^S7Gig#z+psE92d+i3R9K zF{g6LJ2N$fW~Tktl1;q)ie^(e$N_5>3G4p_{YqeXFe3x5?uIt?`go5`h|u7{iPp<= zaC^Aduk+U{ogKC_VeRD0lleHA5$BQ9sgx^bLip(yycRre;^`ZLRhfTE;kxnZH>28& z))q$WdxMp#=c@uI)Fw3V!|w+5Wto1l(zk`}{KV+K;@z;6AOEO=ZPB$l+D~srji}i4^nMVv@v27-(e6=ra)KE1w?t zu2+M|p2+?Z9|)AY;ra{+CizJ_Og^35i8DJG5TklwKelJQWH!AsZ(^&qBPdG~-KS+4 z1(ce0ovj?b4I+|b8jX!@PI2oWy$aLAO`$KSZ}RzVs!^DnV8qq&DfNyv%cfhG53*`` zgYIg&5}p{z_kUkERMwhQm~Lo%Gw(j=pKOM#!xYW;nsi#^{FFi&@cQ}%^oCC zuVd9GOgdjpxsGAjqc{w6aj{Q$yU+;p-t6XU%fQs>n;;mS~(OWKyvu4v_&$scqhim!2r+=+!yMD*| z=i&4acgbfvqATbDkZb4qcrUx^f5wTa$xl&A|8 z)Ei{Z@27EQFV)}Pwsr0(4tx96KEEOgC7ipnbCUMm z9C3%*Ie+H-|Kl<>{D9$ddmv;dWyXPsr;(x zR7(g$VCd|Do=HbJwlT`YOZ3~@2lPNkfsLsei&_8uE)#D)Ype~jl>Wb)+t(~JJwKOd zah^9tulZdQ2hdWp5WY0Gdk7SK+EQti(i|Q=WFEEKB`#^?O?Z_YqB({=p8b4VL$Fh4 z#odou=#3?Od9x$NG`YO8VQpY5?t|SC;&kr!d>zYAVH}sGy2FQLPW4v1EADkqFyj%r zVoQrjsku0nb#1*!WNiLKub}&M9}ZHz?}5))yvIF8zIw)COh}^Kp>fna65C%!v_Lz3 zZ-pOZ&=AcUy)yLWrtjNT`RYY5BtLp*SsR59MZ;?@Vx#&(BFuA$5BYE3BL3r;V1Hft&hYO2$FI)y^6HJpR0S`%nH8 zKx3sLa2l8L++Ghcyl5q~Nr#3@K6PCXp2(u&rt4_bEFhddS@i*OiH4TeLE{lx$kq|F z3t^R1A8F{`g}=lI#`+&f|9`4=SB-3b019OnE(-dyT(!O0zZWn=Jeh!E`uOA?nA33v zWkWvoU{2H;SC!wxfF{mjsvF~&$6DI&9b$bISxQ{=blV< z1TT$tc*6^NoJFjvjQLNv?OObT<1&lRYJgQML^O|jLB^lCVs}|}kIr}oiM>Dh=yXZB)RBkVtnXmI(uAf@;Hse1aZs5o#P0PT{*us@OUeO|fX z>h+3njnPscLQy9+e?W%UeppdNoNYDPSs=c??+wqKIkD?wWONZCAYHh1;%GwF=)+1J zHW);WQ2FeAZQE$T^U08YbwNR3Emy&^{QjS%krSRtm!xvb3n~5d%3zFMf+uNNfr?^hE)!TS}Hz+LzBlt#;&%4+yQ zWRc>2mz2f1sT-cWOg&X}2WaZehC3Ngx?qun_v=mng-~4;ljDOKgZptte`HVerifNf z$=J+$GTw29cg@tnpcT1yG=?+|^RaI@^a#3h`n;Na*9N^V&0c{p`sK$_OJ_aDRCn}* zwWlW!{kV;CBM4;?aSv{RncvUX22E9rYau0?rAhbkjRwdLa5pEt*krg?PUxxyPE}>q z2**{Z(taOKQ@!|)Og>!W`pI~P9;TTrpt4;{S`wz`GnmX>57)otJh_gi=UQ52wEUcY z!qe7NOiD?K=&X)?!@Y9W-EVSFzqP2a2S4U?Zui;i7~R$u+kaSF%(dTBKjn$Fz)BBK z_$jOa`$|Y*Uh>9}ad1oXlqa$5Ca#JDKkLnI?F!4;Nz=|46;Aq;*au;r)F+N;jEO>% zWHB+yGBfdz?IjGYhD6=?2_ak`7D^ua{CjWY&o7HQg{bbOC5I=u_ZgHYta=8T`SRI# zAjQwHJp*ZT32Yb#&bx-alb@~(d7Zz}4sw3@WT~)!t<_vqbG&(qvmbkPe82zme3Vub z)v1rw3K@O+1EXV(7<#coGQh$~Fci+$d@sT@ER6PbI%eB=QdkB!S|9FkB<}TO>_5J~ zT|MMG**)4Z`zx}-^yuwti5V?0`ixXv-a2C>GpRr^7_Wt_|K-sS53R{^_w(i2zchwm zMsFl7pTX3PtS@<7VLBc8oa=e`2T>k;o}~RnTibR{LO(trRE&@cr#F+5^bCOOdDsf0 zQpen9#Y-scTWA@`hu>~qDl9ETVWykS#ON2SPSlVexS(jZQ9B$6hx?)snX+A9mfL74 zXz$@r#KqcKfBZQ0{W+ExfvTp${+iIR{h^%`wsBHP-qTvS^x`!Puk!F@qb!d<=o(BQ zg%)V5FG+by#|sJ330{miVYqf0@(*bc*V<=gy%Aj}%aKIRg4@S`YSOGRC_6Mk@V?SQ zX_%&)>7A?OGI0q!@JeiE2^*{rBV>D>_$@=!qteX4v-QLaZ@o(mzLpdYz8*HsDkSSn*57C@OB)2JwqdVA>aEfV)ovUQhn(SZX;t-JOUFUF;1hL zUf15V;PHCzREyjAhVhL>GR|1?DhI}Ck5|j@cMYE+@43G;I0~3;;2XO;NO9H4x(5wm zB(r3T8eALbf4lW99T2!)hk0CyQC~bAmAStY#-=Jp4-)SE>?hcH^mqX$P{-FnjCv$$ zp!ul}EtJC-e*q1_Olhi8wh=4=r#vJpk~xXNkeiKQs{EBwXiUV!%d?TV2T>w?yGXYb zIhjQJiO7@l15E#hzYK;&e_CXS@VzvSlia+&z0DUqSg0AQzTJQ*IMqD_~ta$>*jHUrW&?c{rT*=`}(En@6=Nieuy=38A zOk2i}4IH?Qmqi}Qm^pLE5s|+zF@q&?#q*T2X=X0vVx8n4W>-f%Xuktv!N0r!{X?r@ z{9gy-yRWYivy?4}4ovN5=sd_k2Mz5j|GirOU)8+DLYURZyCbu|quI(G>!B>pe-%S9 z$eG%(DPbV1t#^kTi8{6oOejCBX3CuZj;bH04vs{Zy=g200x59!qqZl374NgCUY=KyUp{XBjtve8aoC-teevSO zHF!xF0zP+^cq+M#(*{r9fG$`PfhFzbquJ7*R z6B5KVH8o31Yf}2hQdgvn6E66#7CWKLt*R=HX;pGyAgsXkDqQr%?pf*!PIJidGyr?E z6(8W_3*xa}NwAm=lK^c9pg$PH#d-(XZ!7`9!SH~NCuB7ONca>*C0|xJckFmQg1Hi` zDi~r=yJ1#I$zZyxO(r7)!})JXn?2vNASH+-Hiw5*yi7zBON{Cix0P}wSdDwo zIBe#-0LgrEabYrDq6GxedN?7UekCbL;lvM>f<=R}jo#=g-v>`4V`FJ~dBB5V;p0n+ zh`{o??n5XT8Ka^FZa)FREH)$Ki*_m1n>QhVzK?d^yWOv~S=g;Pd^hae#JpVCz;K1EZK7# zC-6`&o&q|TF<7$GWv`2;`7uOFCe?6g@wpKFElr&fv~c&0+#lz&#g1q3V%+- zBO@bUv$DpvcwJQ*w!=ar8NBymf~a0*X@9EAkSUu?BE#BNk^vPx{lHR-O6u)qw(^G$ z*^-1{t2Focl-PQCwk$8nsqFx95sVEkU4Hu{sCC>1+yyVF-G1(p?&5GM^)oj0c$pqA zWYW^56lQDOTUAXbW0!9GmMn~Z$PEYyt*xz7t{&-3u@Xi}fII>i!UD6Aj7Xw);oTAVRUT)iiOdH2+h)b5u1g@f zeR!K}K9T=CoyX=A3Umxfhba^4)ugSC;k)>(P>)c@OPAwo#?re zk`mAxLw^630y#m_)RZbbXB5z{gQjfi#kd6%T6<=DRisf8of8UzLm(GR$;cRk+R}V? z*c3@FxV$uz5gXeM0zz6&uG_K(Jdn$N)qlpLP}=5BbBS<1<(<{Hw2y;XkmwE$4zJ(5fl3f4C>=Y_ z9Dkea-}E+?ZRn^OZ!TEYR9a5afz|uDaByfyf`g-az>qZ$va9X)p5IPdT7=Ne2xk53 z*RN2jxY6}s*Ot)zj2G(#ga~ZiJsL*Ft?V!|qsc<0Z?aT?Y6h=_3KDuG8Gj0RNu#=j zzW)C8yd-@`zZ0uFYoA&+*L}_V`+LBW0Yx&X1+0VV?fDK=eag%n0ZWdIin`H_Z_s7U z5&!Mm?*KTY-Gs2+$(rb-`DzPnp#Pn0^kRc#1gal+dlRsz`bi!>wKqq8PsF)nzsvm| zta`qXM)ZAL@5B&%{q9}DjDcUeB)QL5kZ;x<8=#H9f>lX5J^%DFSr|~)+26O;SUX}oUe zE&3xMU(qr%UlAyPR0Du2X3mykGGbtw7&Ij`e zKm%a!7vS7}XgF%UtKUl0A$s7NxoT2Tc?1rk;&u&K5dG7)Xp_5KQ3?t{QE zJ(pfRSf;R64KKY`xEqG&^Rg}wZ>pU5Wz3P|(g?cT+sY`K2R_3d8y4XCPR zeI1s+1q}95j56)I9C32EEsskn5}EY+!K!LietZT2Iv*MVi$5?k0r~_;j%yEBD{g{& z)u(L0(C6CrxEZgonEBsvMs%14un)#I9kr%bRImUQW^cOGxHI%QFygVn%#YFzV$4equxV4Rq&fl@GlEEBEIW{NhEF9+T9-}CZV!7J+f zT&Mw&d!y{yw(Y?+JR-tlJKYVq(V+RQW$FIj8;?;tSijt?|0``Xh^-R+mJ~*vS}5@h zN?K1}JoVDmJHda0GOpZzUxI*g-uK>1JJ=D30!pbU&cUj@I3#!h6Q>5{ypER z$B*01g;Yn2BKE!cOt2&kBiGU7g2Nz#Tgg%b$6SrJ9Qa%*#+xhGmig0yi5-ygfpa5( zl-Cs!lbF~8QcD-GcFoq>q~3dmn9IXt6?Jro0E0$$c6Ln}KJXCfmv4ihAUh)GbB`fp zGtHXV*}Z69=x^@^LGDJs2Jqpc^Mu@?i|5th5b#7=%#@KrENkZX!gt@F>FG4Ei>F*D zsj8}4@$^QMn;k8;Flbiz^Lt%Z*eujq4h$_^?9u@|Zji5#ISlY5AFSxdkKgYdL(GR^ zAXzy%u%+r=YHo#d?D@$_paUzjKX3K;W_H&rjO^yr1JG zjHJMO0ZQY}TopAayGAGL-PX&^$y)z@0?5u_j-$hj%|3o)aX&Ux zR#Ew>T?#5>^y5{2|Gx&X5%u5e^_fXPADGwvm49F1f!RS2+7_*KhTSZzJW{oNq%7-( zKtOt+0uCBbAgDp_1fufKaQZ;2&mEDE4scAZUCbD4k4ci7fW{LT*Fa3og5B(u4weGg z&Uzx4TR+WNQ?auCoJXmmJzc`F@N5!vd4`T|3VdR~#`FR>;MCRem|M={B#%o*JYBZz zK=u6!9Nwd%7_63)G(b~LPEI~-_onPhh?NvUp|quOB>gqAX=?vJG{z33W4}!Jk1;U>f}|K5@xJh44Q;u314de@Hy<>gr+!3~j`)=a)! z#yNIU2pDzKaaxBFdbt;ipE~7{Rvdj9Dq|DP5Gb^1*Kn{L;fdM-PGn7%gqUw=$|5=1M4;Q^Ll=m~T zYW4%INh&GIP=#PYph!gS;cGoX>RTDXk_M0}X017Vfo0Rw2h*-$3r{|s=go@gS^_8& zammTget`}{0b)A%ZB2hVt*g7c;VB6+dR=CYmZf=e2s6M{qE)zpCM?O`mI&$X5TNuIhi0yBi z$Mc`q5i6KD8Dtwd{*!74wVSEZB{ZFuNZZ@9ba!|Ez3>c0BkTYk+ob`}cS(UheS0L6 znug~0hLdO*x(R5`;gOKyV1EfKATM#q5$t2zI_G2EUlQI~QpGffvZ~?taSh-3b2`38>1=m-AM@Yju-| zN=YOL!TE7cWBE=mFxw>tvHOQe9t~Hz+VEe!)nYY*#bNx231QoxL9p>~5uzG4DG9jx zy1FFL)hMl7UZ4GG?1Bgr)cy+;JTC8RmRAyyhF6D6AU<%!KY$JD{dlu2CNA!g<|26f z3oep?HSjqxhdnTC9yV-~W%xaMm=2|g1BeL$$dDU~4!fDkGnWVY`;DfG)PR9yzQ(E- zq(^SI!?Y$4`}&qLZ0zh`sWaRIM+EL7eeN!^XZEa0W(#DKML^$&ipLPsZ=iej5wo7q z4JH}KAk<}Qq96(bhUXpbmZJV)hvmbKY+Li<#e^X8*$hiXI>wdjJ45B7Ojzx?C8yP2 zFurH0E64j)BaOZAmV4+Z$jHB}InL(HGC}o(GDZ+kH>tt%L5VYbo4lA%re16UeaZ7N z$^H472+)3j><0t2srnvvyd~-z8hXRYIkO~~lA1c;w&K$ZupA%_{s8E*=zTWyd{{=$ zqSky2wnlp>_Lb!C!9gf02U*fU9TCt7G*FHNpmut3aq-gwys6#MY`BAkIyVe>IDjh0 zTYbC$Di|#})po(uWUs;#!uR3+pv?Ve*TK}ne_WAHnRJ!*zEG*-n4+~0f zexy5(CB@s8-S9xbGXc$!4EiR(7<>fo&>B}HLNr8>eL?3*&CQ(*W%K}K34|V;0p(Ch zS2q%*VICeLfAvyrC;$W8QU_R?r5#`|0x;5Q>Bx4ekrnu0fnI+wY&Au$;&Y~~k)oxg zMZ#t859quvc5M%d0IYgimseW#t*m5*pyI~?kMN4MQZD$X5etF&N-ICGs-0giGXW0{ z2yKqk<}$se=_OdqAqL1I*6CR!jCeo{MaZEq({Qq%J~dxgcPR|!cV$I23%hf4hT?Y+ zRrCzst0gyCaGnG>D5L9^J&SuNvS#*{a902=)l=?!K~JTSAq!BjR<$`61TO-??w>_qScwKeo;fIwHJq2$A*fKy3Ow?FufC|_HP6%C( z_&s)lZjWzx6&ShP_kZ@fgAQVGNliqz$g!v(hXznh%MbcaDNhC#fVmmJn9zk2B2bqV zbYV+MXi&t#Ck<3}M!WV%C&OBG7WwcKHJ_gKb$;FsAzS^4uk$a!?ym#{G62q= zB!CCp=u$#s-$x?=)E7Za-GjC&x1s{mAGk=tDF?{*aC&Y|PT+K@&e_V-W8FL-;13&S z$|v*Xh=Ca_mDA3(Ku1+oOz77Luii?tdpy-I48i+)3BYfk)WaPur2(lNZ)-8;c6uTKUmF2VUY`@bc&&U(U9kK)~jOK;D}Ba8t&g& zx1NsH2@_2lMQy}468PviSGQUwjq|VKB{oi&L3{&(qOyk-1|S7D6J%)D0elGjru_iN zt!{54`45@C0{juQU4fE3z`+Gt;LhW<&ZWIf9+&XhSOkm{OFGDNWeAQA*0&cIE+1IW<@suv|0sP&(|V`-xFBMV4}3dTDo5 zc2-u_*mw#!CkFv6nq4iUe@_NtiUS`;`Y?II`>32k-xHl--71(YD$Y79asNl7tDa=1 zkTe0Ezf;>qi2mSqQ;oJ@Sv~ej>-bEOmVP5COF_($gVu~>nj4m2b7-X@=HHpJQofs{ zx1L6-HG~Ad&+FK7{0Sz|$jFFq`tB_AY0#>?r3ak6%QMBy$*}z%ZlIe786}|Wg^;~ACCxSymU*OKkLmP!IYA4pgZZbGz;n(5sjHT3G=z90GW* zg<6~D(|&pYed97R@sEBEqLzbu5L+=vQXw{57@Bap#Puw^S^!47e?+>tRm)EN*g`|R#DkIpu_1D(+W68Y;_<+QPU4~^4mHG zD{3=XZIPgUj019}xOM4YjE^igIIU?1Bb28+MwicDy5Rb{NKNPd{^HQY_t7&)yC%iym$$|0jcRORA3cQM{Ad0U+yjp4GraG326t4 zuv15kBjCIs3wd8Ek*A(p`Ui$h4NgSL9cLSLnEmz(P@rI-jd|i$@rwJYNA-0Zxd?0%j7>L!fJX5!MMK^k20p_os&|aH_(tSsrc` z2y<((l4O)X1Ow<Yy2VbH4VYIy`%F`4B9?AqEIV2Vx;n~od- z4!b&~U&_Z^r-S#e@@NpNwvJlHME-RX$ToYxakXM&y9@9Cv$|e-_z`+I7b^GwvJ)y< zDF{B`0DJSl&^r(=#*5VGqw#)$N}^e74J_@kpi{vjCs*+G6##n=DeHe?lmMmcp3qaM zl>3d<7!k@{f|rHL9KZ?;vdtpy9H^7uz@P!a|Iy5h&8Q1m-(w3GG~OaW%jor;t~~^W zrV}80sLt~_I=TQH5L|R!u(>~UYdb@h0?!7S6zf;IubxL?F~iH3FWpbN@#lbg<8`^; zZpfmjuCBguLi9f}S?I7)Epotn0}k(Ur+?YSuTQa+)UGxU7&HF}a7`pBZz5>Gp&T(N zB+`I+BKN(f1p3_xG6aCJk0vHC_WQG}pstEWlkqPma0=<`lZBy^!cx3?6$DjK0Wkzb z%ybK2|0eU=XMKTeN*N z?gDaow4wk;4Ctl{a|HHjju1>a97s{dgMs%_PcCYqvQPvCu=tyuIi`L`0LN&8yN%X1 zq6JNXWC?AEfLf3Nu(_fp(Dy&Sq@wD1NCwgbo5Q*o=p&H)wM)xtUeYo!beXfiAR^jT zBLZ9`pyI$Y4UAL%vy!DGEg>N>?WI>WHyHOu#{Fh136S-UZby^(;3a-Ad;vrlxU*J; zAq-fu42R7fxB>KxIRsz>Fd)dk)sPnD!N~#b(&=LM^V{J{<^(g)W)9@nI?bKzq93F&@j&3nw z8Zh(qAR9uZF3`CmWi>Z1lKux3i3(6qKsvBr>j?3*sVZZ4baDb*voj#-df5M;!Ual% z`#n7qQ`uD`$gohg1f1>(D{s9G*QzqjE`G~4V9kMzi8;E;H@O9J1(cmjpx1Z{Dk$K= znRTdnd5I&sMF5k@w|unJ#0esN3WUoJG;(HPx#E5L`Hyujv>`Id$@de2`itKr7CtgU zz+nZzp)Hkj+AT){780C|cWl$p*FO}Xho0y|4+{b@9v2r^F=q{rfG|bx=aQ$SuKve1 z>OW{b!*Bqr{==kqcLN29%lR)RQB-JQAq}9m*MGJ&PEVP$^F5qTK!q=$0fRKz14_pL z$a_mZ2S9>GBjfu9EdC|xU{-_RkkH-J!&1Z~B*x1P1c6qhgcAa0*N7vvxOA{oogN%N z`~diAf+z{_e;p9A7(xIiGMLUgvv*oP@~=GtPAd4FAn6~XL)5K2YWCR0Ar+bohci!Y zEq5A9Bq$p!_qQO#N#Az4N6()Yt z`PjpVXNqNtUobmovhA}g`l9tEvozPorlq1W^Tkr`%n=lLSQNw{kPwQdEc>_5Ds6P? z7UTdC*SU7Q<|N=4X<9`)P`TMy_A>SpARoL}+EC@{7N&gLlJ*+=KfdK5i%uEYwp;f0 ztK&!=qQgP?F|i|cd-Ahx$+lRNp=jmEsztwe%955Wx>%QK&za}P%$~*D*lQ2m}^t#`!OQ s9hbAcMGJsHuB|gN4ZhC|83eELE;u|KJ=~^jfX_mt#pT7yL<|G}7qH&e)Bpeg literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/runHelloWorld.png b/_src/images/getting-started/runHelloWorld.png new file mode 100644 index 0000000000000000000000000000000000000000..ab18c195ba64a35e75f43833286db09833948a2f GIT binary patch literal 45004 zcmeFZb!?o?k}qs#<`~BiGcz;B3^6k^Gcz+gW;^ECP7Ep=tE;Q3tE;Pi{b(W-EOrNxp{lq zdAYd>{q^QuIDz{8^2)eFpySe`5JNyBS>U~mUqZ#RLO{l*dV=C$qG4Ij&$0ZMIxO3b zTWtIM^iz{qF3r^{u6g;z)w&Pg(Me3TpPvryCuLqLvWX3*`Zz`MH&}~HiuR7So$kx^ z$THv8H?Rw-&mx=sZ#(@DPUUd>55Jyh#57^0p$ zA>|``_15d6tmwT#{aV$|S^oPf$k)x6L*TUl;R_g*LmdNN; z@32+$h$50_ZNhg#H6pQJ8)bF5rci0kN+b@ks#we>sk4+7+l;`+DwgKmSfE^iILpZ$(j%o zg~i`0=9H{#s_wZpEt@oGDu2&=;_=->cx#o&d!4k!b%{W`5qf*scj2&%v)g7>HgWuIJ#SP+#8-t!bFZMDDDt0 z3Sl}qiy)baIbA;7wWnd#$8;RE??ZB3+lImJ>LZh@WcJNq|2?Nc&%`F`bLxk=M16kX zG5VUDktyTBt)|!N+Br3cD4|W|9!>@esvZ4)WZ>W(*~-pu{u_hVLcN`gqRKA!;vyb! zrf)3_xU}QC4?}ys3Z#I=X`QOLwgZG;_q9RUsna(0lj#s~Zri%QJ#b`sYAUrohuP%x zmOCYvQ=Fgy=M;;P2Zw{5uf0`{oQ+d`2*lOalNr*wZ z!HmqkGWpiEymTPQPTK$5Vi`{@&sMs<5c~iGWekdSk~XtEU(B%%kvZP%`6hair+)cB zS0-Hjij6!Ow^8Y6uF?{<13eA(5I4{1MvnoBZtr0{4UN9CA`mtzy|?=?5tMC%irTEP zjA*b;O;d@{{)j?6VENFbrA@2dAVp;84rgHaV3zrtJjVCWu$CAyJ7uh57yMbvpx<3o z%WnK@GKQ_q8o!1Sy{yLHFOKR@3hgZ-V2JFl_rh&{ncR~#&^2}IqS$>{-8I56%&!?c zAFrE4t+?k$1whNJ6w-maA0|#NgLtyLEaFJE`*slKV89YMNrSYVhbpXXAqpeBGHaE~ zDQ1hJ;n#fwO8`&r>O~Y*C;EcFDf~hD_F}mjF5LK;i>GwE4VU1Hoj=?A(5$P4w}QVn z=wWD$VLy#oRq@&ge!zCU;I-1m_g<7!@)X++pS@81`b*Tr4TNzsT=s4;>Jhk_@1MF| zVWSJKLCc#4)Z2QsXz1+2k!pq^zhQZ@jMT4WLxP|Zt_2Q+%w7Q{0`R-SqQKH>W3Z@jRmFs%vBcC*p)ff zYS~z1>q6{5foaku3xeMHm`8Q{9lD7LBOI*v)@DJl2W&fw_~NHln-vsJ8d%obZ9BEK z=nU9POI;hYjBe#ASNQjZ?{V9~R0qzkg7@RhlA+%&#Dxxs%!UV4?pktC!s%Qyx zqW1B+7KPfYKLcrT&#kyDYS4&4+)%=hTO`*-WXuh15*-#9-NH99U1(v7#1#SJ6E*~w zi!3t!J)#~{D~sOT{n^O(AkeIA9(BF+2F3EGF3E&@$ae*6bao-?=rlwO$b1sxS;n%G zLSh(dF!Pg6Rb&k6I#ImoE0-ST@6GPa+u~+Ot1N=<5Q*)@uK|eDvPaQ8jThmFQQ8vA zMM``oW3}$flJ1SnU0HKuu-=6;PriXdt7BENiLr*!g0EmgOW=;Ttg zQaH<}aqHfNeI03CaFu7B^IrtS^yW4?>AW@y>I>?ydD>c{hk*Nb(@;s932MW%xKK$p z*968h`sR!0cT5doBS_;GYCwi|Re=cVj2yXxu;or|W+fk3Q^g%vd8|D zs#k34rVv9uno&$_Y!V{7t3Y|4ih~OU|0v=<<5yMuBl{E7I(Acgx2007{AgSVJ9VnIDLxnAg{IvnoIz1wV4=Ol$d&qUjyO3NClKDNV z-Q1bCi`rNXgd0cT>S`5rDk^Q=aLFHx0RCxKY>cC!$=|kpOo8WeavxNtwGfOd1J^Y> zjlVecf|K;KD5hbzh_TOaFLrG(FTz2tNgQ}lbz`17krr^Txey-_Gu$yEQP$beyH0Bo z3}#Zn=fbfA;wLmi$`aXt3~qZsxI)kj)g_uudSH<+CYgd~P@|k2 z@X@uzt{;O&C3dN9$hk}|;W2ObEtg1fwXQ@R^ZO_noe6)&aty-U*EszzM z71pz3E5JHADz~ci*?^R5%!5euW&t#g!@BD02eCpBv4wtzhrgAgR4OoPs+XB;js&3A ztU_M~Mu4emJ~tLIryf8aZp_>55p$ z6VrT0X!TcN6#MaLBB@ybJBCsHY~m&I+tS5AX;$dnTInTiA5A~Z+r0wp%Z&;aOOxN2 zsGf%&h{;PZrnV$@{5MJ=`+E;M%ZTY!i+9dW4&G8GeZ40NgQB_L)4tAqjB4JejYWQo?O4g?%pHMIc6 z6@<biz z+qJ$&LvD1}BcgJU6#=&PFwbJYgd}+}#C&kddXki;Z|-SLR}t^pe)_?Gm7q%-aT~!= z#G}WC%4xk19F0r_>@8{CLc6O38rCS>;k5%e%>%eOzQbu?^MYD~vJzuV4hRZZ7Fb)e z2xCli5NkZIZJhI3e&S$Rn0gmf8f=Izoj20Q>{&OMQbh>K6vA0TH$$jbEsoRRiU|Z^ z!7u+TbG%E!(_oUA7XRRmlwf?M9sNbZ(kt*2St`k%U@5AlSPg!sI(iBMfk)Q|81ZEC zQr&x<9E41r2a|CLw`l{UEvzzOB-~!GTd)Fb3GX+FLOTxfKx7xuei+bez_(M@W)OpM z?7iap;W#n8&2NN&2sl4h5j1g8$jhLRP1o1%Rs%`)QwjYrtd&7V{0!OO{KOcg66tz{ z$=%FoktSl2`XLOd_B=TFvf#nuqG(M}m?#H}Ohalvc&JKc!d5&?&Pd@it4VXIAXJF; zEE<{-chv;E1u#8znt3qCP%QnUe{!psr+0~nG8r;byJpl;n2XUEM#HVeCOIF9)3`J5 zdg}0jmpN<+c|dLfHtm%m^}f=mmj(!Hq}O3OOH$P3M3tR7Q1*GxVZ=5q}GgHk&VHovuLv(7K4tix0O853`<=Yp!|>_tOr7K8gc)cGpsW*!{>0*z5ZeKL1V~RI-3=^D z8)Ir80gD$g*T4Q5&LD@Q9?Pp})DzXoe5*#Ad_S*iLs!0iU_(6EFe{BhJu!F- zy9DRSzMnnK5=@;RO2LR|ZuTRWJWW5FUak~fI{4>0($Tk;@*7wG)a{K1u!bG5pc}~V z;7E(+JuKTW9;hGL%h2h4Dp#VNB2J||{PKw3v>C|lAn3qj9)E`Sr*}K`KjO${5XfXZ z-m}SOS(RN>oJ$FoCNxz#!sf{yhfy2gPO8NSK1^!Vuk5T%MTRm+eTRX+BQ`#c&_7xA39&$I zuvhl$AfLBMqU5ggUV9f96+boBT!5`sa3kS>v$E%~(1Mom2~%zHS9#_%`0!iQ+j1_- zO}HGahg5cJDf}O&32aXg5Y?$_fmodNFUF=^i3P>; zMLS2fCCy>N-w_Xbt3Z+{kR16DYXHaFI%jjQ@Y37w`EE})cx{b@t<6>H|7P7`c^c7!UA=9Z(q;gTWLO zx6zxp8EmR!W3dAy6#1T)i++GNlr<2O*3XFDe~Qud87b5CJV|(j`04S?$(Y=-d@?2t z&x>m>ST>!ApgJO`8>PIHcXV!pO6B%_-?T{RYa7L;`$ZpW@Cl&k38A;BKSAi-qWfY$ zQVfb776#HEl}fW^!4=FGdLiO5fQwSuf6OS@Go2LdUTRQ=wm^7S>)96KO7^OS>6H`W zA(P2C%j>k(u;tTeV(8>CIkVJ?yn=C+CUqrotKG|K=`bs$xG{02DQ-t~{zxdRR#QXYUpL-|`hlG(_tmPpy!7RiAkxED5}cg<4%IIzW0R z(!deCK{q-=$HC24o&+x^K<4x|n&0kgGw=yTQ(C8H01X6u_})2r5ZOOb9HN_iaDM2; z?d`yxU&KAW?+AR%zHRRWs3K}~22a(XZ3V}Uelf_aEJ|kgYOaei z03g^_A>6i|`w1B7fIAg@R6f;{L}wJaA<|eJI}Hw2aT<|;p{Hc*OEip48p}?xdP&&V zF|k9Y-NLo;ilUvoY^1vCeWm)XycD;3(0z&>W(nqOQfV475AYsu{3i5;EsDwK>C>&_ z{Y!%a?0QZg>->aY)Y4&yjviqbRqTf3+Xlbw>-sePALrKSaWId>UJ(ZUJ9aWLLz(3hQ$g;)nSf`w7Sx8lE{U zD%cS<>Ab%L>72P%bmPDh zZw2wGezF6hK9&P{;zBdMu_?DL=tHo^_aS%%crbC{0h2s3a>i+0UFieR3gH7Had>Vk zH7KbClVRf6mAV?3Jm&TAw{jFOHi^WF)qwx@<{eB5zM8^5T0^8V(2pSLTDLZ zw>jO3%g0}C0NZQh4wTgJu0l2$YGuyKl<|g?Pj%07kT#c&4uwHz1aV12=Q3ADG!tFs zUSP1?Mv{sT$BNNsl|PU0md*O_cPbU+S~iW#&~ZqRp2N}7j{01;n+-%Q-=np`hd?ezLdOu-9Ax)%?le-eN{t|;S2ZQK2j|9Z=zZp}q}dPjMpYg2K$k zDrMaD$?*_K85})sQ&Z;)Jm~?l^VGj&P=sp?YLKme8lx1AB@H8;f)`B}Z)w|S&`R9dTivl^# zL%?XS?&%s{I9ZmM)bVN4_a432 zZ1G;X6?(+?8@q7PPq0Du}YvmU;B(p!jJxrQUm~O#;nP;Ep$4HGHW|$~ zfCG{|@PHjmR8=+2*g{%SrydEpcvslg@*8$~K;S8Cro$83W1U!jMwjj0adN0tOo#*m zRco+~oB(M)K%d^$^1Z6&*AwUG!^7PjavM-FaW@5ozbP3pSyb?@KF1sG zt`Qm{WV1a7sXbI6^G9xB!=ti}^XNGIRO7zlav`}Udt-p3m!d=JX%(`CG@v<}k%bna zJY#;d=B_f+N%WM?0UM>Xt;T%h#@m#Qp77wn|P=voYJW&NB#_G>D4hsblN|#@6E z(Nshk`PAAI$k;c)J>-6HPdR+0$Id&r*HBTCUsX0+j zsxAZ<&8=OZ8r#I=d+iM6I55D2^WY4(F~U2{HuFPc$HGGw+PI1VP=3><&Q9{BVzp$0Ga7V~PJE64lZBD(z!E<;8V zDF+fvdv@*ziesR~qMpB=2fT%QvjE<j@0RAFzw&EjEmsJ3W*g2X2Sm{~m8R^8_EnJyN z_~8J&j=)noW)#$O#UIze>=iS1$b%6pk(4?=i+E&BIash>rDFZER2o* zHQwIE(fTiSjExvftW9iyq)xzDnf}w15>m1X{~Gbf1ZEaC_J5568v8#{I$N0jhq3;X zY=3(GQs>_V0S^Bc-~UAYPu>3_22#n&a*Ns-x%?4NN|cY}&-~oRc19M)+<$*%XJKPB zWH+GW;$Y;WV`X76q%$xy1tx}uMh1+`ENrH1#)kjKO3K#B*}&Gwz&$C^y+EL=?N ztgNhDj7(fioUH#rq-x^m1oXr|Jee5jng15y&$4g>l>r*o;E$gI8T>T@s0+7}0Ihi>*nV2~LR_|Zjo$O4V-3%N}gv@}N0<{4;&|lgBDE~4g)qj@7&D`XV zoq!HO$HYv>#Hhl=#LdLU&CEr|$jQyfNW$>{gNkg-rUr&AMs$pS6l3M!;Gi=!Wd?c@ z3k#>Iu`#=WvEkqT_8 z7uwN*$}fq+NQ?fw1lha{ih ztEuY3uQnTrF3$PR*FlBbMp-MY@F$&DWIk^jlDAMp>7ojw7$D@UnWi#PNJ+WJR(m}@ zdSdTrtRKAN`&f<}`pc8$n1ouO+o8zYEkhmnY{SqDQ(tjirAuLx`R+DvU*jDJCqd?X zVwx%Q*oOI~eyCp*q%k!cUJ_ndUaZ_6@1U{Q+NVLIrg4(<8j_#YUNh?Qtw&NHRXQFZ zEQI+v*??5MLM}1{<7|NMHAuEYls-iJGovGI9vGtI4Dvg4M@#*661uGtC6aRo=lB2& z$|58#+rSgQYgRw(rXN(*?e7jHXj6Wv>iYUa)X5G+ZS4j&6XeEKP^cV)rR2=S+~W8N z@C&nBSq*?UJjBB4y5lxkq62 z4P_`TAqs*3f(1g0)w!n!Y=O0x)Nld;fk*%I0R{P%g#&Dac9xPAgWf}cL&w7pk|==z zHhppyQ+F1zv-wl1f&5iLm>2`xES${&e<}#I03>V>5CDjjsE~^L@@cl4JLcE-4?Pwq zFV71C7%9qpkwY;-A)#Lj^_4znK6DjP=j9a@BUQ~6EmZ|oI-q6KUdU_#@j3Cjl5IAo zzJ9Cr#AK|H9WPE3Cmz?~P6s(o`=c2*@5xU4UxxTX4`Cp{0tD?-2Mgf;d;vg+0#INe zga!ZW!=*lo4ge(!N(Wpg41Iy-i$9sid%UOsY_LBJL|`EpagZH|k_?=Z0*<%Q0m_CXi5n?Gx1=7e8SyjMCfgmpW0eM==_jb z7vSSW|48tdOUj9Fvg!W4a}sHbQ~JrmMtr3KwvAKmwrCSO4#of$f*>ahV+Gt})19pL zZa~YJ-sW%L!p`h|siA%7PX*166_n$yLOlBy2ZT9r$4b zI(5hLita=8$mIILh0n`UoJ*$FdFf)^r)80S-< z9(@VH+Ak)9beaActX+FfE^Wn^s0+rzDgPzwg37VjVhclvH;7kno8Vvw1&yy^Yv->+ zdwrrI1>h+uE{A4?GQL8COjISjpO*(lrPGj#^psfJRnduT#!0J-mudqajB~yS!YDnX z+^*qq?nQugF(?WmK!Mw}-9Z}~8OCZ@)&wtEciXzTdP+t`Mm8RQYYEWn|6WeX+|JLw zynNQEZF_O`a?z4fm9g0`AkL>3iQ{Aq6pEO*{ zqy2hUU7cse&9UyxKv#KYcKF+Tuq=Zhr+Y|@f^-p@C@NxN{(NiM;ca|zA)&`m(L`fc z7~&wMu>Xg5;*;cp3#+U|>gVrH=A&6kf+}D4i2OdV-`{-?36Nzr_>Z(b_V!vo-ox6D25Ea+gBTCWEy-KBzl3Vk$ zM~m;s(@QUOnbzl9EH8a}iA1HM+^!4!+1whyM)bqbQ)zICZFC=+A9Qk>(zbE46)?iQ z!_WvrrvBEmZA(h}>k1ZO40j;sv~qXvT)>RPkn>KYtk(UgS#IFYRXJ{R6{%FBn=pSnJ&07|BrCz!nfMm2i^m#P9f2dR=Bh$V zZs5N`#}Zd(Rok_ht;ArG5y`}Z^f6OXZfdj-5P?-&M5$}-5rOp=WT$s_?5L&1qR~Q| z<0^jnszdXS!_smnNy;w|SV9M`*~^xP+P@_pBPL@b>0>EGNYc;4Cs`dMZ z=}IY1G3EmjNS|kF&6w%aqGU7Olr&ZQHUo}&2L?z+nDdGAwK+e-H)xqGoNND3WhpBg zvR-P=yuUYcc=E}-rhU|6h)Djocjxex)x33nQ;}1+L?RiK@jW?dAvVa;(#ulI#iT>-2me+=jO#k@{`cF>{Rf9;fwko5s7t9#bkp z@%6qTj?rGwFH4T1ynOrQMB2ar6Lv?j^*V7}_Q$VkHSogx_SaXJ6YC+07vER94X*$T!E2M-& z3Ing0`=X=6SF7il!e-R~Za?=m&2cAY;c_c1m+@^oD*iKUR9_&{>lL!!_DFRaNPHsx z$Or?Uh@l~vjg1XuWH+fQ&4zD_|AFs=I7Jj;=b37T%Mxo<+r8!fgkEn^nw-SfHS3k% zK@%P7!=JI^_96y|dJTVV+jIU@A6<2|LiF?Ao3LJNgx5%gfw|m!VBj4eOdz%A#3!sC z)7Kx`HhH~YT7W^kI(RxD{A{%ggYU|dNM^vCq27E8o#XZHqHW7T-_U=$G%>wydoY+l z?s+dGG{gG-)RhMDxRU<%LNPRqE2pJJQ(o?{V#D#vZ6ko*(EX;G{@}Nko$!K77CkmU zJ55uQ2k+a;hO(+|RJo;0MpmCu9KWQyI}9D2&0tNhEXTe9BaS`y1oNlrW+9%qYQWU$ zrgON4oc;Qv!4+?@Tu1ccqcNEjNs$?M4Q-MiW7t+91#rbQbPk=DmzpgQ#h#u7G`AcNlrZm9(s3=Nsr9^1v`?sW^eKK5dW2?_bp zL>#zjGq8yiKc*%p2c;R>gbfs_Y;4YM&yvP3{5}xUw3$;lHlDGYt8Oku9^!M>Gu8Co zSiJ5}B@#@Y??wP*tjXBAucSdx_Xk~J=Q|bE?FM`0^`+(F=K;b>%3k`6l)84C-DQQ1 zAMY(xl$5)b9jzidI^eKZOuW~F;JjClJ=Tlve6|gtv?IXiEgmzxU6iISml{a5{X ze#9Ml;XPp$;gJaYPY1aLfDV6-4bQN|#4l*uq#i(Pcw9$7H(ej|m|Hnr9@9)PdoL=y zzikct&~Cz#ojF|LARrHwOOo#h zoJF<#A}3`y_RWR&?)C)%%r*Ebtm#e(d>tchpxq!9R4m@sV0l)s|K_%Sq^WD)jp5?Y`9~5TEH3?k^|+ zv;bT|VId_oHGfOMiEEcb&b9_b$vEXgLCf0YI*BP)mxqW;i$>F_7r9J(`r;#5H3b@8 zF3@+bgY~nKe%oq~<(v`-=%Kw0{4^dy9`$%JqTM%&nA+gKq5f99<66=9HKuX}*|F!2 zt5;N_&_YuJL96@B)#>7GV$;>58HOTHxtiOIu9ex{6AeH^G@)NI6h>QNxWz>+6*&RTh6d^(66}z2CO$O_TjDe0# zG(w8JF|n7X)4M8v0Gi{t@o^vl41KZ^gaz?qnGFt4dn^uaI9>S$gcY7Iv2DqzbB64n z7IT%ut4`8ohKEX6q_%Gu+6~VsZn%FSaxiq<;$YQgG;H|hvRT!F4l?}cG=FBfXno^O zB1bC8%S(>Fb-q7anK(^b?>D?ch&a`Oo^ruqD?ko{M&9fU;C+8Q_Ih081$R8C;uSYV zG+S*{{QiBkDDNklfAcc8u9po`*!2jn55cG2JfVzTg5iUDfwwl&FtC>UT_)38$?0jn z%rl^a5qjNnES|Z(-#7UEvg@D_ZxLvS)@}3r6Hghv&2c{+mG$R0jhCW6Y2V4u(?J)eSATjK*cdkV>SaqB}Db%aMhy zC>Q_o1x{90f|92CNJUjw7nH8DQYM2t;o<$R{^5~hgZ?79*VfiTD3R>-&BnYu3K5Up zsp~te_tnyi^?GZ}8&?ypc4OjmXt6SK-f!2)$S>Rk(vpADg{szLX8I08(~^l%QM({~gU7b?AFv07*sZx1+bz_65c1cv-oROHg z%YSw%$0)Gb;zk!2FYXm)K|_3GDHJ~&p+vHO0CE{;jsmq-D8H^IM<@bSGO?G#BSod2 zTkf0of)%otu(2Ug_@=iPN%`_tgbW2c|I&^}Bfj-gV`N*4YmURdfeVJ-abw(c@3NyHN49{B{ zQaRSsdkQ|E;IMe2RKH$9YSUx0vDGINRptHujieUVdFbC~c=f9FVqtaT;v7v*sySd; zz2m@{WnLaSHR<6OFmrUR`LqVRu&_a2_~S>S*F{qdFt23seZ?Vc{2*NSx&UAIeMm|g z7s3DiXl2pEaxX0kT`gfpx9Tf+sOyVD19? z(>Xl39&gm-q`m9es`q%0>cLk*Ipf(u12PJVtIi<#>pKnscXDdj_V;a_QPUBPv=R$k zqVcy-Wd7%Gy^r?H%$_&f@bXR%YYnybSKR&4p913I7&un#@iKq!1EkPgVqD>ne_YC_ z)byrS60#v7BJzpxadUGglI1!_`3ogbQPC6Et09Addz+i{Vx7oINp&tPgk>*zF@8#^ z4gb-zU)iGJG`1!x29=P7GomcdH;Txi-4hz4wb*trnGunRba!_L3>mt9J9gG9zIjn@ z2ETAV#b-qJ*iz8bV>M{?7$0lPIXS`GHbiv=L0`^iHQ~G^BN5L^o~*%_%nT(ctG}BR zVFEe4zP>UNVh1X-Web77czkr!l!KPc2x)2IAqzZ%ef^r9);1g&+-I#nx%oa=BV%bP ze+`f1)z*}}YwqpiV_{+OrnsXrvJ{AcA8LHXb>zd8HO5lfJmuJsy#diCIJq`C!oB=|Z2a1ougz=2TVCw2D~V2D66O2$tp6+B+{UROds0^_ak1WtL$xC1#m|Wct2QE4 z6`G03KqiMb;`eX%_xHFsri^jzk`f)(RMej5{Bqnd8r;R777QjPVN5s}7<;23gXSua zr?qy!maJD@4#q@9Ap&-(3LiFP^R~$ z$H`OHi*=cSfh3`b1fxGP(18L?Pap5zYta|FX;L>qBh{GcZAq;ts;hM6i#*+)XAl37 zrtlicWpg6Ax^l?IxBzAvB$S-tVT7#&nQ=`!*dO}CyIZ`@AF_irqXFO^tZZyoo#1X$ zq@Ppg*(u~ohR+&w7Esrp6K1~_99V;=-QXj5Vpi^gc)sg0Wx~G8+jHZy&MxFWc#gL~ z*ElcX7Rz^pzg%=gO%>KEV1%Tnn>#uo1EkEDi3v07z`?znu7@>NeP70Q_x5I%m%j)L z^ZNR>17R!r=BgUUId1w^d$?LNfq}1TXMGzR$Q5(77`LS;G?Ak#b{zxo47_6})g8Tj z4;cBB%u-UY)=M?n6CIjg?yI!#&(|gve-&ylUXU)YtUQ^Y`^j0O-E`=6`GaNvF$)s} zJofbRV_YVR9OTWv|^_16s zx()CQYnwV;c3H1(!qg>Ju{}U5$E^>PyM$wB4o&3>+SSO>+>)? z@55=*s`CyTXBK^8657xh-{31`MLORLo36*6n6B@Whi&^Fig-{!a z>{w-Pui}iyU46&p0f+8BusYg&KB?-hEC*&#zs&6Dclu**;nw~5GbKDV8R%P_p$f%g zzPJ9!>g)vB-ZmT>;u{>u^&NOdY&Q2GrkOU*9OV`Fp>5YNAykEn6+wCr2HrqXLkTUanfL|g%n?BNj_ z_tyw)^*Z;M2ET&B?#sLSt2>S;ZXG>mXB_s55W9Ar;Hnc^?K-fMwwT99_18BaV1Cki zbKc>8Q|XuOEa57nLdl+)GFP#ntf8?mB(hvbl_{Iao|KFe)zLvzer$R)jmdkt>BP#) zPArAS#)dem_cM4hUJwi%95g$HX5o6YwmRF!chHAjDmuKQw9swiDr4WzCLi z>M<~OfdYh$4Sdn^;vw?8h6GyB1s@5!hW3}u3*r66hJ?2_D|;q#U*G3dp9}QfJ~0Jl z<(|lt6Nd_c>w0ckm%}1xzG{FX23g?|Mu&&*X}YbQSar3~$}hAw%7Gi6V<2joRr@X` z49wOzSJi1l(b2NGUBmDy`W7owP94hzBcqEgaS&=avRqgNHk~~T`zZF|@#PxKc9tCm zvgt8lVfz3(j!jITQs^D{OO)^CjaUa8S99FR2s#`O9&cu27wmE57K@I6oN7*ezQRm8 zyk%D_&p5A^hj!&TuaJM8v*%n}{E?l6utp%z46$U)y6IR!c|D{j;K;gvs|$8@Rcf=kJ`tdSb{NrsK0`j{5Z# z>|6MZKswLujhOJ7ThRvgl$dZ48|TieH&!+xR})$k?YY+uCrvOnXu`xOS>caN z@IVM2`;IRvVbzB$5GP;EWB3puht6s-ZJgzxj3y zAjXf6Q7AmW7!e#I;n3KMlQse?sINfj1C3C$ZBHcz`E(#7I<6^L)%J|W%<|%nmv^%1 z%xz(Au0MB-2!wL*lBBro2r$qI`o}o*M5LssF5YgWWyJS7j-kf0m?D7n(B-k!MUIlF ziYzG!Z~949hEyEk5CjzDwqr9T5YPmI4YV4+Q46b$raU;#W1 zDO@j>MljVjBozGbI*v`>w~8n}F&W}u%QS(djrdGEQN$AU1Cc%%85!2Eb8N{NX$HU3 zha~0u_8e;+_bds$A0fXx@vig_h$Ut$rNw0aR#cw3ti6-<)`rN)cw4Nq;F)8)+aAJ( z8Sl#~Jd$a8R7zCxB$XlzdT*4M&pPLMn>n(-Tnh6msjR#^xDh1l-1^Dl+3lhpjn<4L z@hwZ6)db{W)dwD(B6g=JEqc{sVW+g*m9Rzbcv;{BQ8N2NSuG(T_)#*)W8VP?OZvUv zY`FX03tax9Zd}8q8cN{3T5JPi!`l}ZB2G>xTsG@s*s%vw5=6V}FNAw9Av7&yE92PM zx|}%!gg)ULs~?;<*t8!@$Cxm_Ly|SU^D$Nl@sh_=nX)Iooku@&rw0ibjmcCiVr(*1 zKgg~g6~P>nFH!KI`dE}hAyx*5=yu+MUD+j7^L_w;bO{=8vnv?lw;>QPWC+$u4L#9zqw(wfR?6wI&1ed8kXWPzqW6am=&{ z06ROD&H|_XCd$YArSkm&1{mX0V1l;G9__mO4FP?JHTT=|Lzg+D{bnce{`gz;8IO}( z#$$p>#)z4$$?z_$sAw?oTv+N52z&UrqY6VxVRn`zvTfS)tZ_Rx7~kOUo=ni2bjhw; zAL6|~Z1aAaa|0gDP{2A`$4z_Ua!cfwW+m|Lz*^HWPyWYC>5K1XtT>HZq0$+Qz6e0r z9iMBu_hEy9t5OXE^OLBjr`_<#$kVOBO$)6g=W_9N4;!#FoF))(rA*V~4|)vdoXr3E zGyKE*9`l6bR5_a~m6@zTvsnkBJFbgv-675<&nM z7c4L_Y|5#qZccuFhSK$XqAQlq9Ng>z2Li24tL{5&z5V@{aS#0ZPmwX&%swQf5=azG zOoU>JrDbJ6cb9&=uK1h{ae7=)%wq70)7{ep%s5Ura!1ni#tw?{s>wfphLuWed{SF* z+{0ukt+w0T6KEGxR)**JIQ{~Jiv}hpkV{5}+S|CiSs$FPky3JIFiC+2_Qq#Wjl^{3 zGv;rZv5X%l@)6;YruHMVnTH4S!0>;-pz^Z*Hsde1)@)8q4VA`X#|kRl|uJki8O zj$fom*mXvSK5-;1i_5XG?$ZwZXyd6`scp*lUUy)b8ZlwA1U%EW41 zM?ult&VJJ>E;64xHn4!(dh;9avu3_t;9{8R(9^@B*On0yLXC)k1!9JkgOQ^=7rxsW z{&wwwUKediuYtnAxD70~<)#cs1K1FQ;qLhtw5 zU(O5a>Y{=5;if$|Fyi9_RU=ACnFAIP=>9F|jj_O5CZx3{obaFT0(5ti01>m8IYWct zWGUb!bFG~p67b&Y_I4d3Em;Y;EtQp7Tw9X#He3lBHr{D~HyffriSiAIWpZ7K%ge8J z?ezLAnIffx0G!gX51V^PBDdZ@bh!?|rdN;iDl22+$&b@N; z+S_6M>9lG+UhJxG7D?T%yQAzpI;wFn&YLb^zkOR)V2f$=cC?$7qjh#G#uIj*#;tEj0e>h*UKj#-3tT3BbD2#U#mLKarxhOwGbk^$2c|y zyMjEl*-unibq4lSH9Blroc3QM%8!qe?&TE}K*$SGTYAQiR8OcQM{OF`gUg$nj=%kX zw7pea98vcrN(2bO-5~@`aCZpq7TkinyF+ky_h1b)?(Xh^MuR(z26vds_n-OA%)N6T z?!!D5P1UJ7b+>nYtYD!vO%? zyQAgYYKy+N;z*>Uz|z~Evh(TIb^Fm*D21uf>P&fwTYeQ%31iJcyX~RlLYPaOXfTa z9;dYz&M)E2)=Q1CZD;K%;g~~p)=QS1nYV#WYvGB5H4YGt)8>8dfVXr2SkAfjL>-SV zq%khc_dej&bkc)L86H3x!QgGjHo%Z^0qIh?Mhi}&5*ZawP}%|7S6V9|Q29j8U!k0~ z^>~I0SzO#2(Zs__salbglS6)fyr!fXu9EQqgP9$AKfHbWq}gnbfD`#fETvj2%A41Y zo7dGiajA=xs-QR1&m;Ec#&s~7^yK-aP|D~7BI0%+s=$EpcRT@W8h~N*empVsybk-! z^ED`_*&gU)(__s6>9S)CK{=86_LFp-Q74K*h9)9vz}k4E_S$--emBVgw-^!*vY@GT zln(s1Kn9!%#9X!R=PY3GApm|v!3Fo`JEqXx`(H(|2?sn+pYN~%W;vbHkDH^+?845% zhFq{Kth@W0^D4RIcZmvsZ(|zHPPqhwM+xno0)N3E!UaZA2yMsXxSj}nb2Ow;itp(k z3N~uu1^EA;KfkTmCa1Gf88v8W)SG|tf5E{L8#Gtpnpqsb$!@_zidcByu339%^?bM; z+sOaY_W>EXdwnXR@AOx5GX{DG;3eC*_emtXqTK0l5Km5QR8;3!4HrMjQei3=%NnjM zDrHYz-`)au2qVVLp?tjL^b1m`rndHTY`1r6N?6ogG4+8>mzs+LuNVSFASDi+E>YCg zm2-B+s-*zvuyL@eRT`54k&w{K>^ujHK`)o<>B;~Ap;l`|0nofbgO`{y?u2F`1j?9?6tq>sti*oB1@+4X+X(kMnv%LvHG=d$I+aa-Lmeo^A&F4x!D ze?9|{;k64ud;xiDUVEho%t|%~*=T|U)};66`7d9}dWKxbFJdD;Zr*5DnH~J@!9#)r z2H@clFF@D4q38$<2&i5rR#9`kZkJcTZS#BmDM8wj%kA`|prtez47TL3T^Sb?yo=h~ z<2Vlj(j1w$EC${(=zP;~*gZfUpf6**j&oelDiyVl6K(9cQDODO1u(+~2(-Nlu-HQ{KGoQ)r zv^F?{Ze?d{n^#j4j_dadk0l1(`f;-6^-~H{JfG$xPFYdpf_}r2{F0#9Kxio#{F#9P zK;0f|O^()VrxGc`UEBI-wWtl5wG~x4Q9>_?hB$a}T?ck?ov!E9|1NZOjQOtw0=kF6 zP5bjDzZa-x4V@H_!vHh-=8bPL<8x4>?PA(Q)tP(Tn{(5 z{`{IbvRLKQT~Tngit6PHceX7-#<6S$R{($&`S0zSzWfbs0$#86T7sO7F0rPj$YQev z>Jg`Lov#Ro)%>acdZ!4{IPHFgIw2X6MW$z8HQ$Oj~(!u;BV`~(6b`Kg(epD=#M z@_>?Mv7MceB0Nt7&d9C#w+pfAoTOx!;c%P~7H+D0qO>60x+Fl;2g0FjY=)kKYHK6T z_870{b33e1H#f=Nzkgrty~|AA3kM(Se%DH5ur2{3&;Udm!Npf zK82R|bEo#_6P$>DZ*R9Jd2PvnJgL!j%28c)&fL0|)zDq=w0)aLdJJ4zT57cTJMVy) zQ5fPvJn$=y-H}UGbxuW%VZa;3~bBqJ%=z3X^!!%JFceQ(NP zvlduYg$k_ncW{B@7uZJtABx@=I{oKRGoTF0V{^g)EMcC*YdVCR`Ld$}9srB^LR)15 zMI}ss9O0{co!eGXQHe`Qkv2E~=`IW#Kxzah{XMm0;QkxJ#~6rSSVd?^4@Qr7wo zz|9yI9m;s@mNZiWK7tFnUa$!imxoq%z!D*$_yq>}9~_`j$rC9U8nQL8tGM*_=q97>k?oLx@_8NY1@ex3pnzt^X zq7q`8)eGcO1n{USXt=mNR~E_$AF8K+D@p*jz&Pa#Cn%`5=6OW?@gu+Ru4~zF?c{hm zBs?O@7zio7Z|;Td7RxIeL#7KPm>jmaRw_AGY^fcX(N{dj*!k>Vv%Oyi_$-eIq@<%Z z^CLlM1X~I=HthV$81B#_GbRH5oN<5)J#g&`r;`DcFqB_e(nb=gSzHd^2fXt+zpaa# z=M4sSbE4ksgJ}ZBHW1q(M3g&Ciz$x`9|&1UF)PLAjr*QUJ={p`Kl{C8+AQDZg9+4i zJrLB&(pyOVeCXPX0rl4an#RP`<`q3}Pe+dI zp57&%r|AM1a!fgTpOSHOM8rpc>G*p<-bMELa{%Bf>pZW;zkaonk_tCDOhOEcMlJ%L zJLrzawCnD@W*?itIS%@9LmVK@hF03!SrU>Yw^>zD|za{M;w z0XqpPmNU63p#$>0K%u-})nTe-3m#LjcN^=u_V?wH>C8qvIFacoDL89)mwK8veQ;P} zppMlZy_X9HR6%c21^#=Qe*m1reqZ~`1MgzF8bdaBb~-C4kLDu~fww>W(WZMg2z2WT z&L8&Xy4ALAyA~G~4)D0&!8& z^S#s!2z&?J0|Bls8?2o2Qk@&Ac9V@+|6hYFOZqB`9@eQ2c})*kRx|niz09hi#hUw? zqM~Gg>^|SiJX2JLbPKM%CjI;g1CmW2USIdYjI-w8s09j@n6ouEaj zzbpuVU_n+?6c30hekgfg&vhAcq^I+FyiH_G+pvMGzn{yVU5oSHK>JH^ zsza*|0EVD=c!Z{L8}ZaJWQH%F3>ve1S5q6@R%rhjJ3(Oz=f6Ss_xf5Sfnrpe@A2sE zyTIT6D?VOv6yd)%&>r7T=hCp=$#1vjFOTeL38kk+)I^td<49%aEpLLx~DnJ@*2^=LpF@BtO|GaFl2_7XhTs;Q;w z9I*QH%%O}zvpv{%^ zP({M?Ow`%g(J_)Yne$T}ZXQ`rPPEq}D*DEmjI%Qrkl~&>z8Y(q4*zoY_O=07pE}k@ z7!i0gMYSJd7Md>9ocHFhZMwE7d)N-m`IF0LU~v3W7qvkiS+fqq&559>jV@+~=ODnR zgy+)$?(*iCp916HZI33C{jhyV6kcfGn(v<`uC#HSKg(Kauh-N>7EcyubbMBCxb=uI z!)BDQb%)t_+%h5X7vIlbt)jZY~TR%!~0h~qlTqn0#b)G zgkoIfF^*o@NhC$x(K?h9ml};oD=Ka-)ncmvt)Y*XlKMioe_)YeT?PQ1KD`17aYtP4 z_O3^33>wNmxHJ4o{h6k3>UvL=j0C_x{~}`kUjc6eAO_VM<@vb(K-k~(8K69{t%@o( z$$!w`Ng~Y@W;~?Tmz9wJLXNXAq!IvWDDb}<5@TWi{cnW-C(!tRgOmTi5#+y!gP&Ue z0nd|2b0>o*Y6|?N1V}V+V*hnIpN0)b2okBBv9nGSBhGsOj_ETQuwHIQ@$zc>&)|1@ z5(_T1gR-9)m1QhMH;ihNUKvPxmhZz+}f&$XTyjhOHdJ|Ml-HG5sl zo>fsNqGn*S-r=IdA>@9nm6ARc({RTspq4clNPz7!R}iI`hJEY*i!fG1RrM?vL_Fp- zyD+C1=l1(C)sG3cft>NXj(yyT_Pjw;6DB(TSQ>(|5>l5Aude$)B;5Y35_1j3?Q!(9 z`CC5pvc%`7+w*(00sUWpe+$J?gv8*<*qd_+3H8j*t02DN<{U+7tt1<}kV<~N%gncE z-IvilC0Ju&lM_iORHkZlCN|dODQL9Fh@p@gc3fa#KiRPnyf))WnDwZJw#I;<2M;4h zyjl#N`&MVCo(ih3OG!>t&g$x^7i~@+$;wR%f`4v@viDp39=<$2AGjQ}##BPhT%t1o zs;`zVyY_XmFm`ITmEUt+L2ZB9>93;-p=@r=_G8sp z2am7$=+NpEE6uGA1|HFP{})!K^oi9;xmC`^%iQwmL`79>%@ieLSkA*QLr?eJrk7+4 zU()lR_=sG+Qmy`8qJE;{hzWS&(~;kA!9|N4cq_ShLLIvbz?pNVeY?(EjxCeTy??_L zJ&UhRC%_G>C_6bFp88A#BTK1)6jH`0$1>l(>8D--dXLAO>d#~AiL?#Yky)e zIpn!IT*V~KL~W~e%XLN@t`!wE=K8|#xwX9=IJTR=WzQXYapBOi0`va;U1Cc7WM_w$ zg{>vj8{%z!b+n$^(RMpCGxKK`giOHlGvkn8RC%Bo^2KFKSA-K*;MeVs-=~cpyulS<=Z#@FNL=w`T&gcN9#|kPHsL85(&?Tvg;D; zA|RtKt*9(&FDGhSjj7CC;;;WxZj5puVLSPT;E=Gx2&8AKH%`sxOkL{%QOiP+NZkh5 zY2&Mj?sdVRjW-;QHz&oFjU>7Y;Su4VnVI9CA8)3e3tJ$!-p}3#kYZF97Z)PFI0;X2 zf;@vfV)YN;Lr`9&|I7@_AFbuql~+J}H}hz`v5)&r+lsb@n|pR{-UW&%l@Jz&M9x6w z|L@V)Znn4nzygA~qxrDN|dpj>5u$(4{imPG8^VRff^AQLd!aSl1Q2y8Ff9gG70KMYPsR zWo>Pl(@vse*P$;1|3m|(b?K{ZH)w>oa+2mWZFRRw%5AR`LSbukII@u zubgAumOn8Uv20>6=nF0;7KXU9EFWMI#8qR1*WU&P;QRHkJ-rS15E*6q3?`MQk17^I zKvZylxqAm_{bjRw5@(}2+2$8!oOdKS6KmzgyWT{#=@U30NU5l%xGA+J#-}B9|1FQV zUTZF0Mj_#H|75U$BWCu*@PqZxe9SDNtujQ2t(02`;RtAPy8V=!H!* zx8xC)bFnFAN${eGXSZa-i41=d3C^yhXQGK4Q7-t3BFF#*0 zjkU86@eKI+1}K~uR7m^w?b{~|44g7-KR>^O1ZBxFNeSj*6;+k&_FC+cTr|F5NdJy;qs5Ps#D0u*_>7 zhM*d3=IJ;>k)EEO9k{b;B7}8x_)0q>s4jAY)TJ*AMYzW0;QVs^pr52?~Qv_1F zHps}=$htW;VoGVA(<+8W+rzwRp&hI8>%KmcXAs=ElV0zYI-42|0R1h_%ZsnST0_F; ziAvb|tfj5xmmnK4i<;V(q?9yav5NAv8Z4lFD{yI}>0 z^u?RtzyAD$LcHiUi1O2n?~wZT-z1vPb9s9|!{G6re^z7E8{Vv)k=GkN5d8T@q?QRU zDkwyZ#qf#(XXvazVcnvkH!Q`oxha+1aDz z2G`sm^do+E^1%m5k%CzJo*2 z|NGmZzNsNT)9G*0?a=yqED67-<0sD4#k==(H~>N(n3AHVMyGvxy<1Q~p3Y)Ju-s@{ zP+r*Y_2h1KP;w^dd91Ml&V*f`DDJ2rE|~6KMA*j5Nfxsh*{^SCsB?Jsq>^p@34C&( z&IE!3^Kc_WO~xGFP^LD$vhp@zXq!(5P_iVKb<|iDj7V0^{y@U#Ao{J@<@zpyE|HxD zv2Ato_Hu9A-koY{Q?qZFfIkD+7eLMk1~I!n;RT2Yk1RE%{wVG6OK{QFRO%UYIWo7j z6oRl@tI?+Fa3sD7gj2FFiL3sL_HcbR1vtgUS_{NhkWph=i~ArY5(!I?iA;)%I|+*s zb(DmvDp2pkPaD*VU`4Ojm=w{MTmmN4RKw$Phe>}2Ut{o0#imNx;P%xvHPd6=I}%_9 z5C0xAbRB-hNW@rdsPh^VBm)|UPJ~uuHhNOI=t{hWLn7HBhGbJWx(5V`*thDe8Gs8Q zYionGMS>e#J+%A;qq8ndc+pWrtQj79ehVXgJnND~h>2qf-qPo_O-;&bI?h>5*ryg{ zSC=7GqcRbtl{`RZf&}A$Fmg~pozP+P&WIZLGyqM%)d!OCB{?tcWd*Q;fWz;G1`=iI zx`ELH1m*CU=u4DgfoFIo{b~um7~kTCUA`)pc^3sDb^g;cB4moPIbrFk92FHJ)7#1p zu55<0k5Pjm~hhz5vh0QL;P%ZZPu>(YY?DH`ooBL)m9={_H)2@@iV ziUUlFu9#O__D0+%LqnqxLHjrn57=g1TW8%NK((N%IWcLY4V^B-?I9Cd?XThY18W!6 z_hY(7gog|8;$Ah+QQ9_T&Znr&SN@O@^Wc7FfzN6zZ@$w|pt0-|S82-Z5eaoSy#5Kc z9IDWo?l^I6i>)w)Vzge|l6_+ODFTl=^JgZa@(8&13lyU6g{jzIpA_zDnYzNVd>#*$ zyGR|*Yl0+#n2ql~T%hj8r>6P|(>&Z+saV+6C3YC$iUkK>$)3n5Dt^Mrgw3pCETSB! zZ(8oS{Z-hES2rRmYmM};f{mq2y<)RY;RUFPSXCggTW+!~&f5$d%78d$WNJIKt)$6P z#Q{U(im45+o}E(x558twyrD=^bAFB&EpFGvpxqu+CGZ;2c++Uxk!_>xs`&l5Mu2_7 z$wz{KFrE@WFyA@KkC1(iy}oHFZyVo^XGYe_N=AaF&8xS!52z49f1Dl;q)^h;1?a3I zvnmqZ<0b*0MVd< zoeKD03kQMBg({v$jp}@TCgC?MNf%X@;v;iAJ0Np<8~CmRVT(SqQ4!F}4Ko|zv6~_R zD%Wzowj5TeH9*!qX|oLIL;>IX%PQx6<+SmkbI!E6s2Ub9;~md-c1>=yzJiTalu{Ql z+Xsu1)*OVPC?ui@#%#LqQoWAC3?t?&26ao-8ZpFnmX_iI!K&WQ-o!qxvQ*?>_`QHP zbJ%c)nwpA^i7TU_QPLz=% zf}L1EZ4}d)nHd_b8&*`hT!Fv;4#yCh7_IC?##6K;?kj0!O@U1ir~VKENhXw)@ziw- z@dMJY%En4aOL(|cP)JD5?@7~ncM(oOgMolpWWW&H$k{Y)nb^5)xR$NGHv+ne0ip4g zyn@l$X-5fIdTLhX@aWLO(h^kOoK_!&WS7Oy@-<;F#M9EslGhPEM@UawJ9K6Oj2{XK z2bV5-d$(hz(T%;vc09(!Zg-wNy=K%BcfZxRT0@9?-}8e~DPI&kmO_Us)wtasLrl#* z#GQ&oT|>IR!kFr`wUfF-v`>`UPwz@JR%e$LFsYw)~h)XiWU0qQ^4D9V+{f{s}tgNhfAwpoz z95|RSQQZvZ^WqoCu--D^8?Q zI@P2{U<$~>apyM~iTiEaxjWy}#lD~(Th4{$;1D$v5@zPAJPnqqvHL$=tS3*~!RaX_ zBvs00^&{O_FVs=jReXt^12jTAYy{bhriqXSF-G?I`^FIQM1V_W|;2!pN;c4U@Oa#%F_H@Yg#DuhuUnF{_C1L1#=3)Y;N{u za%%4W8a$~`t{btmy(>`IF;umT5Z~#{O4BdXmb=xcdz%QAaUNPciGfX)QgGva{Na5= z(3XJ3!^@+X@*yq)434~2rJ|-jfFAy6j*0&OvdBOGW2H~5yTUf!J}hB|#nY=5H)-`=U{0pV zJ6WvG!twIsuNy-5|Dgq7mcuND_;d1Scdq@&@x71&fhrYl^S~uEKP~X+e7=`e`)&hr zg||qklwUI>*`yy^I4sraid&%L?Chb8L4~y?D@u~C!4srhYV5#j00LzL_k+>>g|bUf z$lLa(84}ku7izaPFUENL_p2!fJQt?!;X{U;g@nRN`W#G&i?7(h>FM|pk&&8h4)jB@ zL}sp3!;w>hQ!&}R9%t|Z-{^1#*ytzOvQ1Y*qWh!oRDFK%krX#I!H4z>MyhOs5A~eY2?ts@j-tYFSoD~6LO%2_vS4TF@7;neKcpaFta)* z=OTv$@ZiTAd@ZCCJ1YNbl4?m?0pSTHrbCrJyc-Ps~ zmYrIex6AzciO1o1C*g9w&dJH1M+fmML)ZEgbPz<@_U=bn_Z8B#c~bk6j;EI=ZbJkg z32y7^pro66?b}1>=>VH-trO-ulX&~I_)T;y*bunTa|QWo*Jmwx5<&lkBNIKhso=_V zeKZK$m#++kRZV_MCMS+40l( z<5_w>MjS~wju#nnUl2k4U2V!P5;#SNVkoDJ_7XYx1BJAp9h`totFEY|Ig-8ylF2zA zG;+|I%+h5ux!bB$h=LO3HP-B_bF+L#)t8!0v~Zyi zlb92qHlg)hYXn#V126n-dY3k8v+AUA2sLK65ZTG-a0)Gw{Y9?{`q%-V9^6;m!}2HT z)DEr0L|@Z)Z$?K)af{f$`5FkIgeJx~5s#>e(BTvp6l7@(;YX*1ay$Ib+SE>x?G(cc@NGAcJ++Y)qB z06WSmXJ&3`O@$L3pPenjgeNP1)|oQ(T{U@W>C?FeQWYmX_nZe%70mtO?wc(h5;`(| zMNj;&X z728!0)O1bmkr4?qdD8tBz2~U-_#We0>{PW{n@8d*57I8{6U?-ny@f9Ctei@xEGwI> zBD35d7sAzq9qd?QLaHh%VnVu>)XEs}QJ&N5yE(B#+gSj4WG4>SwCYP(*%GJ$QAw#P zG3o=+JG;36Q{Sv#d~kL~&d;BnwZiAw)`t7u=n~4hXyXcqP4ExS^q8i2(9(8goiGO| zi>&{&epxEEsaw)$GoYtE1YFPJw0g&6cP*WKE{~X}I90=#6>b&+*a>^!>8ynAfF#4~ zhur(`4pQiDt6rSIKFs2CFdQKsg*q!LYmbd!4tY4-%Ct8>4(zNWw(0E*=k*yEnkA&> z`ds@ounNIFJd{>yirfA`Nr5Ga&3p)f3xR`ALm1cBtTuqaeTTI3-HzA24Zg$Hb&x=eXV7{T=j+*NHBWPkKAtq3vb84=jH4>_TQFyC+GSmhlAumb(c4n z*C!$E_DH&i3QB8f%YdXBmoCl5rE-@|0`=60gQ*Y5c#`}(Nvbi{$*O+6PhIvgYOUTw z3=U|&J60YkZLcad;Y^LFx@kAjbzfscPMMomQd8=*r;ZU_yxfwxdsa>ZNqLA-l0HaI zw-YNEP@!#{=RUD9XHxSA-U{9f=TCXPw5--=N$J!#Ta2l#y&jMU36oj3#*Cfh*A)c% zc-=67HA3M+F;^KuJ;P$S*y5j+JUv@W%fWk#n+1qJ%4qD5haF(lDt^e>*br|@z7JiE zfj|q-XTQi3wJFByfycc(A25{d2nqiAyU$9MZKs`HLihf{b_$$T$3C!QwKVjM`!%S7 za5UzC(AU(++B(TB$1}qJrAI8+Cq(rC)2oeGCn!^xA%1aAgyf}QcDK}BGyZ;tVi>9-AqU; zwwwU$a=hMVx5lB|yzlRI?g^Q8MsDlt(Y;-Xwn#f(?~1)?l>b@=9v+)2ZmUC7g=jQ* zvKNq(*EiM!%@2AmuxYuRHzc=GXu+ev3{VlFV8#yF^XO`HpX$A4NODDhX_~VtMKyzj z!~NP;+1NQ4xDwskR*ze~a7h$^RuY)2pv$$}u2@O7Q5nYe?%`oP|8GAVjyPwkJ(1%j z-|H>_vf3;jkI&qV4*IXO$L&DN`p04T53pu$U=<=l0ed$TOWbCRXjI+hx7nW(c>{6h zn_T06OlX2~`^jKft<~6R;sE)7=-Tbye4nSq_=2o-LUq>tlc^s4FkH8;B=7Zwu_wZ> zm8;d!s#cu3uCmjc&gdwxdJDgfjt-5hyHZ!4gaPNab>Qzaa@q%6e2kH=&xZGml9e`e zZ?K^1o+pmB6L5=G)in@sh=I`Tq8@FI)>78 zg6=RNa=gQg*7tQML02529L_ocSaay%F{siOUp|!(5(R-kWc1u#6S^2U2-9{CHUl-( z3^Voz$fn&dumYc-gHoEGgDf(Lc}=Uu^8Uu%|6`VEyP8(f$KcshUWvT<-so|A{- z>Ot)^0lp#iBEk_1mTHii+jR#mqtQK4K1u;Ca)`_02~R%t@@Whqv=<2lg_(uVb0l47 ze+VgtL}2)?`4!{cF%D26j{(KU1;HphJQMMHhK-zukC7ZqOD0k0x+m~KN1$`6}Dn=G^K)(If zBD3k+H(0Pdyp!lilN42~Knn-zFANNYC50b!7Z5^)vn+UIXo%#KT)27}bM9c1Rk3%l zcMJ%q_*eOnu2301oSD-}OFXvhR2WTGsq@)VoQmpe5^*~R)lHa{mR1bzIvQobb?|op zw@E=wkAxciHxP)QuxXC~f#$&5r^H0y`d&~56EOp0_psgTvV_gw%gbZ4S62ZkeNT!& z-DLQ=gFF#05XK2BVYTwK?lsmllxVUDaKO=AU0sdKsp>uW=rMvUW@fx2=8l@S>|5>W zn148(d!~b=6x4YW7d9XAXtATkJ@#;4#nfyWFpZ2N=f7YfUCd&>hBNYJp3BHWI>Gac z7s*ZS{(bzyVNLl!xO>|2>YL-Ww*WZMF0xynR&=_t{K`)MiDg%&liZzR!G|VTq4>?q zO;<0RAo1sn=$$?6nKjpt${R#Xoc!qz+fED79mJvq)38kqU0|FrG~q1HML|(NJw}(Y zqk~TKi09>z00vHdYhz<2g>NSjAuV-}nx6ZslRMep-im&3n8Q-t+{L}6OVj!5>hO|* zrC|9LmH#4sjKR;B#s8ke!b0-r2Qu4c{l6!-$`uj$Op6O+^?n$3o>b6uP4(ZhHEG!h z6la3hF+A~c%xGjm8Z;9}1F6Y@V7-?=RAX%C3bIVx%r7BGf4hDdBZ+<>tL(m-#ZrEu z?HcP_t{^;4VBW-PIu(|RL_F*W*D!;DI_J=YZoHGYib#Htp19?KGgWQ*lKFHd?* zB<#qEuk>rg!=7LcLtDt4=0_A=o{D}GHxGOw%&pe!xG(M4aEJ_qpD3Y@YF~oTwg}$# zSANm>E)UFaCCC5Y3BDLqOzK}pe#N_Pr6UglCdck=W4-X``ZG1w$%79atE*U5%{W&I zeiwMkVRu3K`h{_mK?hc5O>3z)SzG3sTyIdfUhSrY@IczuMpq|8!Bu`x`@!q5Rs6b^ zB}@L1ax5<&{NBzp;uz~}!-$NRF?MUFb}YvjH#IpiJJUcKXVBnn^Fg+1>tWPI*vp9JFARjd=byPBlW2gt?m$>rIKv1e2=cu<*W;zZ=zo4+DVax^eL=cFz+R^6=RuX1SC z&zIFZS6J~b*D+)r{}fhr;dX7a*?dz5o~5tqVUuI%^n1B?Y@2msWBdwP(Bep?ZMxhw z9$D3>qJ^+&wiysIq{0IM(L`%SxmKO;bfdXOn?L(elVRPGeanjVisR9WuM@HM80W*7 zXX+UR&$NX3o%I&XZ({dRj(=VK;0dPrxeJrn(1`dV>FMFs|dZ?UZW0MkG%v+JizMs#p#^58e zLVS=|F}^8`3@Gcw^3O?F4^GKWIc%|#Us}D-XH879_KSnqJSOOxM&y5QzP8=!fyuBj zI1+6r-uPnM9j_UNkIcNhE^FLQu8Fwx{qh`Z!ANG}6G;{s+pM&4Iq?{a(g_Kl7&4bn za9W6vdwt}FKBgL9K>m`0vFgS+L*MB+2I3^sa$9vdn>ySVN~>zGx-j`zR)|Yb(oBOW z)dNCoBh~!W9|UNU85mL02iUeirN^vFsy?jA;(a!Gjeh!DsuH+sTk_2$WaOkMxHYZ>Z3=ChYf7e z>1j@c8%>NX?CzQw)IkAYk{<8n(p_g~=f0Zv_&vxB4?pJt^7qx99b-c`E({YM zK6x%8F(s_pTFA)oI1JrWqH(f%JTnhsojZ~kVKy_-1E;2j=YMrFJt}GF)8RsOOek_NAzm~rSR{2ki z?4)-%=?cS^-)-b>Twyb>-4R(d@Rs;pp*rj*C)ORBe*gHD2KeUEdW6kg+j2O3h>}Wn z#_cmcc9UQfD{Jc21@>J^#lWc)IYE}m-S2Jphmv@!NpIOQXX;$hZe>;Cr zT_|lo;nAS%jMM9{Y5JI{^z-VE_Lo1dg8YonNl{=p@k|tS5(|+z;@S3BMw*ptgn zJ19#;~mDB%okvfPH#w=%{8(QM{=(D1X)$HK{K{|7-8rPZlb7yE#5i zUQnA;e*q`m)J3T5!Zi2rQ3Ea+)z3d6^K@wMJV8xGY%|3RAw~g>(VCk{GR3D@K{6%Ylii^W|IMX$Lh0&Mp6p)^va^JhY5m_ z(Y9!>5{w$h?92l1H%qOL{!o~g5g7b*i}K~>k7BCfLt9u_d+~|eM)vwaNh+L~O;oL1 zNPV9mss0m{tO9$*pvI^_tpuMpnKCMsG?J!fXW2IGlfW4)7l;_od-BBqES7vn{ro=A zpw@|HsoH}b42Hq+fNjA_#@TS>#v{TT*mSP;I3gfI;fR@~wnGc-UE`qLiiSiu`L1_)HhhA|hmr3(?A0#@cdT4 z-{NVH)Bs;;e35R9~({(<5=LG z_Ko3SZ_>#Vn!mrT>BHps;|!dbn|Ib#tqI%f-?I0usMLc}r_Wfx{S}@cJMFAL2@zS~ zvpsLnj$dVcQ*z1D6a!4MgK2W2W_zo41@tKTmgg2sBCad$kdDRuHVlzD71z~<>?m2r8uP4+2#i)9 zFK&o43QX$q$O*4qtLTEcpFyh1T=O)1})YH*%ZB?$McTCa})mT3XGZ_1o13oq+f-aG0V zSwsL-JBg`q+C{xa9t#`V26DTPka|V-W%^gOUjd5dqwEpJ>)C^r28g@bj?mq70X4l6S| zi=8(N?wxESNpBQI#;}nb{K$Isk+9ZO6w~UAg!Gbl7WZ5U3Tgy6pIhhGBGYHchyx5O zPqazDA{Mru3%?P4@n7J3W##%6?osvmmMU#lLS3%=j4$czxle>FDeKaF7`@Pm!fR^3 zOmoZZDT!5i(+Nw%9!;Y3`^A~F%%di@zbUi7zyzD;zRsbM$8)^DbxOyxywaC)wrN^1 z$q9PdkXWo1(2?OjI1^Fu%>?E12q}fhI-}=0#C>l>kT7MwnU$r3^k=KTG0hr}(CSq- zLh5{4-Ql@@dN{(eZ6~ks&4`XVZ0HvjayI*zj(kh?H9~{POp7X}{9|vyNjrL%0xv(m z2tY#if#3iqEGvHpg_3CfRyER9X&W+R?#(;U8EDpE!u!m#;9^KXHLZapr&_~neZWB| z5?C-|BGSXOX@56ETS9Yni%hvdK@dIp?Ajn~35IW59sGlQec77K*N^;eEFgYU$y-yP zwGHk|6Jg(@Nh)Yi$XT9YAtmXIY(mCWxUoZzuwR z(2znjx-90}hiu&WYzHN%!v_ojchRSlE1XV~$xuyUoN(lp=sGS{eqPfS)&%f@0Z;hev_;J!S{t|ZAbiW6K z^V`~Kz%lrd1|d(la0&TBvfI7KwCZag4@sWMfmeDEMM{p-cPiZz7R2aL5oTFeu%ugv zow7Olm!4}CDdx7o9H2cV+>eQ#L*0}cw>#3NnF{3K5l}d`8Cn%B%w0Lbwtc5kMf!a) z9%m&?yfd+uw@i*3LyLSCJC!TKt|wY5%V(^P4=}3=uZZzAt~@y}90N`5p%K}n-{u4* z?F(ZYsbA86>tl9?JeIVc6=$@*jDMM(+W_J;pF6dfT0oL3G`UxXKQC%;a zsJnpF+2b&YV8r^3YMxBg8D87N+#Y&GuCJsAxEUyat>nDipN&xR-G%c}&?UU01Fbo$L9AUS!9jqfXdg9OVvv zP}myPmU^~(j%^{3A!nLZ=y}j~Fvda0KkBcg^G3eay|XnLGZQlom8mz4|7dpB`+IKL$9Idwt~|V+e--2lz+VOQ zs6+zE@j`lr|Kf>J!aBR%umbi^Ns57+dkF~z$xsVNIk?B8_J3#rUcSsgAYr2U{oCO< zX^`D-s#r*+mv)jeJKbxzN{S^~jcMt5T?}t(CQyHo9@j{FqQA{= z1wMtek$(ni)`@s7lgM?o@hcxdONfWzv-+1bM078yn?bCrhXFZyJ z$@gNA>LO!wzIm|O`wMlb9hz6?A@i1`|DG>nzu;}Z-pAzdI|;E`s3!iWL9OpksX zJ!gfPw{_NOrN5|&=X9%<(<`L{K91aiJfCd_l>|z*;bo)CO6Mg=R9%Bh*xvMJREu#Nu*zLejR?8fwg3U}a|y9^3s4G$|ITBBJJJjXuoy zC@wL?9L?3@(Q%=i5LHA+ol*pmocJsgO265 zUrdJEGY3a8d?s~t&3q!#soz@_WWO;I&zpJWdK26hT26gYVOi%aG6JMu-#Ov-~clxqY5ujKGeF{D6Fx`ZKRZJ}8#;qR_~E8?)Ry zIy}CY868@>=&cI3g7s^>b4fHWX`TYJSZ0?~v<%kdl{rpjj|KQ}xTgaK)Xh=^9=~h) zZ^hfCcFLC<)S8zgRcM*npSgIx@$qHSg??Km(em4*1lqVpG_8plduCMb`}Rjj2t=Du zX}K3jkVxDXD%ao3f8<;V!H*08GtWD|6;rhv#x6@;RmTc`Su@C=#%tjgVACzAD9X+` z?J>Tcr}c^jc-knS#V|<7O?^F}Z3)n>>z%;>Z%oYpWzAnq_j@++>K!$Pu2|0!8lyl{ zu52!DA5;1T{9=t2;UEV54<;;7MMJhETgp>;4YME!R(z$OP435%Thvy9_Y5oKUl7mh z9dXY5y7KU)o~;QpS`-hTB)3U`U(~3k1={AciZRV~Vv`*du<2ozz86pn=v|CP1+$+> zy!7}ar98+OiUZTTktU)mfc($YEU-VHxz@?Yyj5Pp3%6r6Fby=&^Gr?ig|<6!3lJ1I z=&vh1z4RZ~^})-3|DhBF*)1%q3w2+SBzbq<+_T0nF+40Q2EkB{P_NRJr^AuSK|fn| zN}Fl9jS1=_^4xWI^cGubP8rU7W~A1>tQvD@^WLSe($apqpWyfiNnS|!Y#zf#gzwRB zRvb1FQ*g*Y#~Op5N!jrta7cRp?oZAG13COFVsRB3ImTxkJh^c`>CWhoJ=vl7co}0$ zB=Q}JX;|AsKbM8A93=LefDzM4y?`|os6gMcD>M+yG4e~tgB#6H zq54i@f1Z5ga8p#0w(yUh%iHBQ&pMQ?f84hecgKDDEMbsEHX3t-FWq%(&Qv0B#a#Mi z6aRXz*qO6F+V1f6iB;joao4$uHR`lZm~JzB__UE)MgsTEwE~u^vK^%!^Sym|o(F01 zF)OXR3T;Q(;+EVSXT_q(uQ4UwL~C{AQ-$9P z8vUv*#t6+OZ+#_@aA>CbY*O3B<)C9Sw6g1U<}E8R1((n8UU?sk*awoHNRpn9Lnd_1 z@iceu<*w!8Q=`*I2=epSZ{=AqRI2O-EVwVxFZ5!(#u)M=qe+5=3rEAkOIF8~8`c^a z9xjP03kFh>@v}UnCA~*RE+9yTQTLBnXlvRHV7Jl#Qm6NB+V3{`F%{#sO0D$IQmmpF z{cH5qX~_1QXM|y@gwYeb4-|Ak$g5EhEgjIL>pWxdvCcBdNKX%pNcmwH$9k(%irH&} zX=5;Nbl4S@)PAkYo9&%G;o3LwE24;og8H`R8|Bb)^bBrp_1#xY>=)$}roEY8AIn(@M4iPOV_b-bVc&O_lg$C#>3@PNH9>E_mEb$!1`sD# ziW|SSC5w~0XcDL?02E5l&8q9;ix1zc2oh(N0lY6o|H{4Qr1!uEkdzSR56q`cheE&Oy?7zIT{{U0} zbKvTKLv#Nrkt^>xjZi6%u@*_x0DC1zTTR8od&xE+utuK}>ForKis|;OxPo<_C{Skl z(y;>gj=nxsyoN7;@VV{ZXY?7>-PSUID&1GkwuaFnkrp>%;x*or?o+x?4f0@i6h<6B zqXie(X>~xipw;=44~!+UKp%k1q%*wlMG}S7P>a+ke!e(_dwK54-X$xkphHti(uH$Z z9;3bX+kpT>(*M6`)qjCIE<%?D{PMiWe(oc6(o?idu%w2FspYd@>nzMT2P~G z;}T!lHK_}qb}(BD&Rl5T=G zR)7H)Lfzy%4c(_KtQVK~xS)68enE$=hdHcrT5wyDJp4dJBm>up zgYA6f$;?nMl6LMY60$O)eI=c*la2-WD0}D}2Xm92W5+Dt%hK7c^F7vsIqa2w=F1@w zacX6K!$5pJ3tWPJaSnS)-YEaqw&kp|XPx1B4fExDwnFM8{}qfm4jB;?(Rz7-#~l2z z+iA39Lc%NEJJka>M^1#Lo^%khUNG-oE$1zI$b1$QV(;GmakH+xY(?oVR@>W|b@ysk zXzv<}7Yz^ZIqm0`e-6_M->L*)?1W9u`?33-Jwa+Fc+w$enSu3GFQCC4w0{?CmHC0%y5;=>9;p45FS`+;+LJxWa>8YHFO zGc1*NwNY=o!=R{dXsSgLZgIaF{3G;U%i(hL<#dt|&@72CL7%SC;oq;u<-mQo`pqF{ zkDCcQ4M22nUheHQI&sq9ISgvW>%WWWVaUy1vBw|hX+q7{UNw47ztelda=rWoTV(H_ z88^b)az4Pi=+^kToG(%C1u46k@q`AL)>4K_`G$ufCn!o-l<6U(C;_R8B|Q>wGzeC) zdd9^tXK);F;+(Xb|A~qm;X1k9RCN2 zq@9GdCEmK_Nb)a5-0<8~@7P8&SUBR$2K^)cdOrwk+-d_3FYC=F`S(ZigqyWQC>>pEfa*HcCfzJ?V1Uo=WlJh;O67J!xAjt$&h^*@YU^<96? zAqhyI*@UvTrzP}tU-VsE?_vC}lUNIo1u?t$Wjbc5u@0ZtspWXwD#5MJ8d8KJ(DC9U zb6;c1A!hbnHZ4F^U1~gEW)fpo~lRP zsQ^d&)rnC>KRerZCpj%)z5GZR5udb;=|b5Tl_04oRVV#w5?4@xsWhv42}u;jpYJ@m z>ImGD$Wdi&${N66ri@McR3Uo=>vJ{Bd@OQPM6_FzzuV@2N|{}8XhMf{UL}ME))KCz zB5oJSI2K7eMzU3cr#2B(zi#U4(B|n19St}2umm|lJjD$!2P3dO&9Y8hwDC(&4Nm6R zs@=C_CKH0Imhp1^r(HztI_c!jjG4&8E>WR`jK!6^ffu3l&tf8bc|D+oMV}K^&F8em zXjgk$eNu<~4>&Gyt3he&ZRCJuczdGAKQ=2Uux^!}^A==j%U*!wdfkhZ2#8B z0SqgLH1A6B+kNrfk~?w7tavIH=>F2vA2Em>7Ye+EcQ`ErNc3h5trv+W`8<5)7sv6F zK}dZhAsIW0OhC5euSPjK41=)q{>0;q`VmzSOp%mP%KJ*%l^E|pddtOLSXlVy!ipET ztwuAutarV7)y82LF2RhO@QWXw7!938iqfPnq!ew4}X%2J<{xPSW^cL4#; z4{9c=bijh7LxZ5UmObkg@^)W4wQV`f({`Mh5?gQ#84({r1GBrrIiii5K>ow%z5C zMco`-)9)?ljp>eF^I(kT4mMPMthh3{X;jAMJj{RAfESSns9}--d1sBV0NHfYjn#CZ z9~=4f_^pL8t!ro3O)(W%MUyS8Yb95o2Ht*=7X-0Hu{oBZ=l{eUmfxzdXAFnmyn`+S zyll+zizTP)<*()uoh7<725u=&@@^$obV&ib|xVo7aQ2Mv*mB#P)gx`(| zL6vUFxg?k4mosizGN+kD@RKDX1cJL<(6trt*X)FwiXZF?H10J4OEl7F%RQ(&PP`U` zJ6F)9XJ%NPDztX$pFeIg)d3BQ(UgyBO$w`dN~fpCK2q$KY5htR2@su@p=viOz_}2w zm7|NM2E1ya$cu4-B`kg?y6cTA@DS%7s;N3@(+%fFO8ptn|pCR?80&tEyIFdrMy1D zpYsRqcP)K&G>(M7AFwhx(4IJIa7o-04+9<(z9f|r$ubN48y5S0oag#3@p85m9u8-@bn09RAjtx1tBuZxdCfJUo+I_JA( zW%8$grObKoFlwOPsP%|rF|}_Mg7*cyFNVb&dm$>iK)wW>ncUTyTcZ!KBR7zA#+hV% z(5P&C%uc(Y(TcbDr7xE)J=&x^{`oE3y3%V_rsZ!+xoed@kxKJ9Ria4->Hcy3?{AtY z9t8t!zA~bpCXbc%Jbkb^l8K960<}cc*SwU>kj^P~2->L;Np_q1#$&R;R$v#s`-z}o ziw#W^&AC&@cjMrNy=h3n{STdzf!BJAJ*6P~g~Q;Gr~=!yI{U`!&Z@6n=8vl8$L=#L zHeH!XC?r1z@w4<8h}$BXIF*PDX5}Xy!Y=>XH}7;lrVu7i_Jv^hfgd)*zFwIP)I|g~ zOQZ6Y^^HvnOb>rg6K?_4&QJff2-M{*@8~EMrKL1;muJ?Dv-YDv=SPf6k>R>;TzT&T z=b2aEIPW8D3{W&wYE?p{`-5E6c*OtB*xTpw20A&v9o*@%dIwCfBVbHd3}(Ion1@E~ zAG(Wv1FXE~bgBOhHShm*@bEDq{s07zps&MGp`+`7p`pJ_U^5Sa1dvG`qIfn|kdMxVNXr>{*>eZ;GeIj_4-MPTVkMSPJ+jNoI zJ9{kDXsT{^hnJVvy}U9hCn7lzZ-E+h3guawl!i8*`ym_ zX#ql`HOAFW;wR0U*KbKPk-d#9{vZCJGwokOFjYWG2_YbA(0-gO_=E(Yp(pvVeh=ym z21Er90KG{#+-y44w52M}yLB}mgTjty)m0uLzZs{hs2JYby=uEC{ml1&t{Ko&WWYT= zv*kwnM>ryMgQvZ>ABv0P&`qs9OIAG(WJ^DP^%?8y2P78EvVDn4Bp+1Fv9fo~-D`Hy|wP1>5`G} z7-CR}juIh49%?Mcr}~}B`Gf!vgagXPOl?WGwKj`P#;mE60}PPv7@#EguZ1ro(YPJO z*QjYuJS7bS3Jf0YaH?NW+Xp;*T^me`kj3-ava%;dKEq-ZfbXAI++9O`plNFL`k$~% z*8pIQGZ`8Jbm_ONr_YD>1Q`^0d7a$cs`q?mj8hTQOIlt%(#&3ZdU6xu4l^utK-r6Y z^+n1T$gyGqPjb6t{F-gc(OW-%@&F2)KWG`vQBC>Wq^wQ{;pgVsLd9@6S;+UAuSD@Z zO6J{26>hE%0dTSWquh3zkIr@kXBFEMh z`>heXMgwf8ItqZ8Op>LgrQRNH?#nPG_Nb^RV0hYlPU|H)Ef4?KTKS?N=rvax z{rmTC~^;o%a zvz544L@0OQIZ;c$rq@K_+0wJh?uW2(M`Kl2H3rD#++7_*oOs%FpCP8y*+#+8u;R6gOR${KR=ZgFmTE3Y z#R5|oYhXALT=0ot)+}es&levOEam)WX6WZ0X^LSAGvr-1z}A7ok_`=pvD2LZwU?ji zMPZrU!I3BbMtbgnsF>JI1%PamRqp_e!ST%J{jI*37`g|@P#Utg(DrlySsO50oZC;7rgGCfg@tA27JLn{|%M%PS+UC^?2?B)rKEk(-v+YBN7k#U?J` z_;gkZ z7PxFwS=A~+PU9;pFe%(FP-bse----Fo&%;V^5)}s``!NBKj=Y%YuS@Kx2vBAPjR-z z-RO~>3rW(t&#gr*yZ^|{N+zQ&NE4qRznq^VFFByek~t|t%^l}R{^PY;Fl`vY?MUeT zm&47g$4?cBtEFO-7$)Re=?1d>c3~~D=Pic>v#zY(+t%P-B+9!p*AQ(%U!-sQOqFFX z(9aKdw(E?2Kka>dB+tm`U7qYFm1_{Tj*hKf9TKIBeZ0RWlF9WG=N1EDTzc-z%FziK z4F3B-PF+}d;AiMPF(^lE>JOaVe197Ob^H&F$Nn1+`c+m%ph?GZUIo>M%mKA|{_NUs zM4rlMYIqzq%>bQsYLsu9{)3^AsvJ+jYUZ|Cf&YYez5mnS>F0RCupAGB=YI|!- zRwC#LB7L#}CxopG(S47UrZGU5mOYjN?22YiH;D7D&*D=CRM_)+K7K67e?o;=ES6+j zuLYrzju=-!3JJKFWO9XDeAI#;Z!1lRv&6+bK0V*OT+q(DZ*KfrgoWdN24`a~zhk~e znM)S6C5$#h6AilaCn5z`9Hl3UVP}L+j5tczZQAu(RWBdja*$|dK7d&i>YSD<`nL2? z1DN~Po&qJSbXVhUGl@b#0L9qY7~rvi3c4JT;3%~H6R-7RVr-lm&=r0)86|38C!ixC zac#(!C4b(F5zRQbSlisRcKCZw_53_NEA}G>hlxC9BU~NSH!{-jQzhA-ym{uYMtr2j z{e>SxGeX90tS*>@S*2A5NeJi2Dg8PoOnyH)I>j$ag|Jgtm|Q=g zlO`%{3Q!V!=vM}&meI+hUQ-jJ=-GwWURL3H0kJ+-5c%>v<%dt*51#@-y$!-Xk#pC9 zEtiX!Z+vGZ(BFTWNo+F#Y8FrcPsgl+QOENkw)|~QVQjXOxYN#l;$#!U6R|7{2MYdW?9#exfYJeZOUgD7V=>44$K)DovWXWw8tq8Fy|Z? zw0G#WNr%NL>^FUec!(#nr$@toSyk(Txd#wb;2%r$e32-f%c_w=I*a=arg056$wu*c z%fky!GPB#{*$>(*>X%N=s1%p}X6T!~Tl&=!LC%!L_?#JvG|AZo2R%0k%$^Up_D7X5K#@_ZY6|4VWc2@i`b;kmg zgjvbzo&~L?h|?_dLl7xY6=vsGfmv$~VXBr(U;s^(@{Qs%p?SY<`z(TWZ;oX5aD;mz za`2grlWqIxSa;5D3r7+RD+)>-SV_M<CB`*I8{*l3e$+Jm`awu6cMrhCo{3EZR?) zd*0gtOV90FO3UuPRa49h3Vk)%iO@TM3$XVh^R6WJ>6%tMr zV^&gWGfhmMbKUQMRuHCSfkw}Gcz6}qGAd!o?`2c&WU1a$Oc+4v?|!v@OV94lGW=g-(nR;ZZpLYra&_OH%YYO-Mq#^+QaO z7W`(bOZx@LGEK4?gr$C#zQ2*0mRezCII`d+x_(%d3oDPQH_x94ge3EXO^)q33|1FC z>W;JaLItErm`$_STeq@SI=^oVw4Y*D-O>Y9PPl8Y2zb>vq7K*fx9jqXgP-Q>Y<(en zrF?fehyru7q&n_+P-0^<$2hfH&#lzWNikoCCz+&Ra@112M6~FNfs-7exE~aHuEdM@ z_Yq-%4iD%KTmf_kcuW4_Ki|Hg3k)F&`hy5SFV|~XxI^j*fR~zzmNH85b;$n$lFWMO literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/runHelloWorldAgain.png b/_src/images/getting-started/runHelloWorldAgain.png new file mode 100644 index 0000000000000000000000000000000000000000..10ac0f3efef964ae1db7c05504f999794a942901 GIT binary patch literal 13607 zcmcJ$Ra9GD^e;+*LU4B|PLUL7(c-R6vEmNJ-5rX5Kye5V3Y20k5{g5x;>F$F-QCab z|K2g~xG(47jBy^4k-d|>_R5-b&7Z8bqf|f2<6u%^A|WB+C@RRPBO$#21D``dXu!LG z1j`+8BFsiwT2)b6n$FqP$i(LrV5S=523q3S=-vm-(g@5Oe5Co^zP{qZSp$q zU-bGi@{@aTj}nD2UCVU-Q?%2GLI>xi*Kw6erGz;|@i2GEHF-G4t5z3I1o&j&XNKZ1k$hB_89E2e zfKs8Hh$6KHU)EW8X%GAMn<2e|ZoTUbF6`~gR13HU4tdit zI_KmR4-pt;fZ5PzvY{hELiu?b?+Lxt&yIwpyE)$(c_+~2Tf8YM zskw5wL;Czv`xn*93O+fT`W0fh(NF09>NrE|IS?tx+O-r7qiP8V3!0g-ybKaH5-Adx z^v|X-a0bI!LDvll35)38>je_*8#!0N>g%A}_HD5-JLH0DkdUnj3TG;i#+p9h3>-1Zm{YP_}iq%=29{Wzm&LbhuY2l56#Ue{jiIXpRDd{9J3qfZA41dt5bTu=$ zmhZQYuLD}Im9XPQnABK_qlJ+me8Ez=sv!lcti(#ci7~?o!Qua>$FxZ6(yi(si7%?L zKW|X!Hm`D`RsJ)<2&MutpuET*Mu)-m)LbHCQn6}dwZIG?h*oEcAz~OI%pNql1YJ02 zlH(E}5)-x~|7I!l#XmTx^yD)03lbcpn$;fiSWx`G&Zq*!Qafl;(*#n|AZFcYVNt3S zI%c>XV>m5E6a$YsT3F*Zwz&GZQerA1FQj(SM0UrVZM8F5YoubM!L$zm@7 zX}j>J*@I{mUtiFV3umo`hW~HCq%ffWzXAK-9Misxutn}d-+~4F_`KUH47LB|;f+aR z$|m;F?B$aBO{ES-!q2h@683g=|AS7YH3Xr&Qhv&g)OQT&%53vHf$*-Y=Hr0 z%#tCD%#CyV6i2qq)ECJHif(4^u!%w+KITt93V>+dT<$?TU%qO!A~O!$kiB`@(rRMxk>k0(fC-$Uo#Db2+d>e)9omY{AZX$#J{{0JDemwGW zp~;kg)fB&_GjVT*Ui=ov?j2UsH|&j(|EQ`a`!L2XF6x?; zm&QVF>#!1YeQfo;1ZUpUd;7q`C~zBlchKOLDvSyLghC|n`4#Tr5u+9fb8|(nuodU| z+Gv#^R8wrq)j*HR*5_cU`NFG~5CdJe-~Qw%+$AvZ0PItxN{F#z8-0F~D++vxkBg?G zr+hv%s}}c-f;qFFG3<}0Ap*AlzR4>g7p`Sn{3AV_A&te#XEin%Tw0nctE?2ojs2?8 zFU;>6S6$n%SIIUjEk4`Q)ii4PuH7{3%kfjku&zKe7m){$Qw}6Kv*I#-(l~DhV}(&m z7I4SxaC)bvQ&XM_EwM}V?6QLW>8fjb=C9BA&6^s{2e0Qzo&(CA7r7OQgQK$)D9S|2<#M4=1weh~)U#E{mma|@32gkCRn{pE^3$)aukV97JglOx(GknNow;Y}koUIETD85z!f z^b@SM`cM3J=sF!{jEb78`d`q!e*D==0Q#>OO%3oIu|uXG?!i`SoyytG_L00&Z+zet z+P)=0)Qa2v-EFrc57-&x_hLEp;HUT3k}vbghv?uCpq?? zW$?9JzpL}9D4q{0gZO1%PcrUtT}-a=%LZe?<%Kt=%3R6)TY~jL0$#^dt5w&u8wUk% zjf4e0YK{yaKW(iq1UYl%CG#|$b*m+n*sSqs`akhppERK3Ry0A^#6|Cs+rGq?i{8
  • 6 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 literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/selectSolidityCompiler.png b/_src/images/getting-started/selectSolidityCompiler.png new file mode 100644 index 0000000000000000000000000000000000000000..3da325dd603cbe9d73751e45727364fa56f9d28d GIT binary patch literal 16631 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 literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/selectSolidityDeploy.png b/_src/images/getting-started/selectSolidityDeploy.png new file mode 100644 index 0000000000000000000000000000000000000000..5523bf9aba04cd7c0da5aa91580d4ce64721207d GIT binary patch literal 18568 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 literal 0 HcmV?d00001 diff --git a/_src/images/misc/5f75ccd99b524261854d093d_multiple-users-network.svg b/_src/images/misc/5f75ccd99b524261854d093d_multiple-users-network.svg new file mode 100644 index 00000000000..cbf6c316d99 --- /dev/null +++ b/_src/images/misc/5f75ccd99b524261854d093d_multiple-users-network.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg b/_src/images/misc/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg new file mode 100644 index 00000000000..2547e8d437c --- /dev/null +++ b/_src/images/misc/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Chains/ethereum.md b/docs/Chains/ethereum.md index c1bd7b7f7a8..35a62b674c9 100644 --- a/docs/Chains/ethereum.md +++ b/docs/Chains/ethereum.md @@ -6,8 +6,6 @@ date: Last Modified permalink: /ethereum/ --- - -

    \ No newline at end of file +
    @@ -27,7 +25,7 @@ permalink: /ethereum/ Retrieve the latest prices and data points of assets in your smart contracts.

    -
    +
    Learn More Right arrow @@ -45,7 +43,7 @@ permalink: /ethereum/

    Use Chainlink VRF to consume randomness in your smart contracts.

    -
    + diff --git a/docs/Developer Reference/getting-help.md b/docs/Developer Reference/getting-help.md index 8677f3f7d7f..8ffcd372453 100644 --- a/docs/Developer Reference/getting-help.md +++ b/docs/Developer Reference/getting-help.md @@ -5,13 +5,13 @@ date: Last Modified title: "Getting Support" permalink: "docs/getting-help/" --- -## Where do I go to get help and support? +## Where do I go to get help and support? If you run into issues and the available documentation, videos, and code repositories are not able to assist you, the best way to get help is to follow the support escalation process in this document. Sometimes you might have a question that is too theoretical or hasn't been solved, so you might not always get what you're looking for! ## 1. Double check the documentation -Check to see if you missed any code, documentation, blog, or video on the topic or issue you're looking for. There are typically a few different resources on a topic if one doesn't answer exactly what you're looking for. You can also use the documentation search bar to look up things as well. +Check to see if you missed any code, documentation, blog, or video on the topic or issue you're looking for. There are typically a few different resources on a topic if one doesn't answer exactly what you're looking for. You can also use the documentation search bar to look up things as well. ## 2. Do a web search for the specific error or situation you're in @@ -30,12 +30,12 @@ When writing issues, remember to: ## 4. Ask a question on [Stack Overflow](https://stackoverflow.com/questions/ask?tags=chainlink) or [Stack Exchange Ethereum](https://ethereum.stackexchange.com/) -This is where most people will end up and is one of the most helpful resources out there. Stack Overflow is living documentation, so do your best to make a [thoughtful and easy to triage question](https://stackoverflow.com/help/how-to-ask). This will make it much easier for people to help debug your issue and ensure it doesn't get removed from the site. Remember, we want to make this question **searchable** so others who run into the same issue can also get their question solved. You could use any forum-based site you like if you prefer another site over Stack Overflow. +This is where most people will end up and is one of the most helpful resources out there. Stack Overflow is living documentation, so do your best to make a [thoughtful and easy to triage question](https://stackoverflow.com/help/how-to-ask). This will make it much easier for people to help debug your issue and ensure it doesn't get removed from the site. Remember, we want to make this question **searchable** so others who run into the same issue can also get their question solved. You could use any forum-based site you like if you prefer another site over Stack Overflow. Here is an example of a poorly formatted question: > Title: Please help -> I'm following this guide, and my code is breaking, what's going on? +> I'm following this guide, and my code is breaking, what's going on? > https://docs.chain.link/ > Here is my code > pragma solidity 0.6.7; contract HelloWorld { string public message; constructor(string memory initialMessage) {message = initialMessage; } @@ -43,7 +43,7 @@ Here is an example of a poorly formatted question: Here is that same question with better formatting: > Title: Remix Solidity Compile Error - Source File Requires Different Compiler Version -> I'm [following this guide](https://docs.chain.link/docs/beginners-tutorial/), and I'm unable to compile my solidity code in [Remix](https://remix.ethereum.org/). +> I'm [following this guide](/docs/deploy-your-first-contract/), and I'm unable to compile my solidity code in [Remix](https://remix.ethereum.org/). > Here is the code: > ```javascript > pragma solidity 0.6.7; @@ -62,20 +62,20 @@ Here is that same question with better formatting: >``` > > And the error I'm getting is as follows: -> +> > ``` > ParserError: Source file requires different compiler version (current compiler is 0.8.7+commit.e28d00a7.Emscripten.clang) - note that nightly builds are considered to be strictly less than the released version > --> contracts/test.sol:1:1: > | > 1 | pragma solidity 0.6.7; > | ^^^^^^^^^^^^^^^^^^^^^^ -> +> > ``` It's best to create a [minimum reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) to help others understand your issue. This way, they can help you get an answer quickly. Remember, its a community-run platform! Don't get discouraged if your question gets downvoted or removed. This just means you need to format your question a little differently next time! -## 5. Ask the community +## 5. Ask the community And lastly, you can always ask the question in the [Discord](https://discord.gg/2YHSAey) and see if there is a community member who might be able to help you out. One of the best ways to ask the community is to drop a link to your Stack Overflow question, issue, or the forum where you're asking a Chainlink question. Remember, these are community members, and they are helping because they are wonderful and kind individuals! diff --git a/docs/Developer Reference/hackathon-resources.md b/docs/Developer Reference/hackathon-resources.md index bbba34f4f6e..ae0a566355c 100644 --- a/docs/Developer Reference/hackathon-resources.md +++ b/docs/Developer Reference/hackathon-resources.md @@ -38,7 +38,6 @@ Always refer back to the [getting help](/docs/getting-help) page for the latest Be sure to check the documentation in the links above for in depth-descriptions of everything. New? See the [Getting Started Guide](/getting-started/). -- [Beginners - The Basics](../beginners-tutorial/) - [Video Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) - [What is Ethereum?](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) - [Developer Blog (many tutorials)](https://blog.chain.link/tag/developers/) diff --git a/docs/Developer Reference/user-guides.md b/docs/Developer Reference/user-guides.md deleted file mode 100644 index b0642d55758..00000000000 --- a/docs/Developer Reference/user-guides.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: nodes.liquid -section: ethereum -date: Last Modified -title: "User Guides" -permalink: "docs/user-guides/" -excerpt: "Getting started with Ethereum, Metamask and Smart Contracts" ---- -Here are a few useful user guides for those just getting started with Ethereum, Web3, Metamask and Smart Contracts. - -- [Install, configure & fund MetaMask](../install-metamask/) -- [Acquire testnet LINK](../acquire-link/) -- [Deploy your first contract](../deploy-your-first-contract/) -- [Fund your contract](../fund-your-contract/) -- [Use your first contract!](../use-your-first-contract/) \ No newline at end of file diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index 6caaef361d7..3a657d3a856 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -6,137 +6,164 @@ date: Last Modified permalink: /getting-started/ --- -## Start your journey with Chainlink. - -Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. To get started with Chainlink: - -1. Learn how to [set up install and fund Metamask](/docs/install-metamask). -2. [Acquire testnet LINK](/docs/acquire-link/). -3. [Deploy](/docs/deploy-your-first-contract/), [fund](/docs/fund-your-contract/), and [use your first smart contract](/docs/use-your-first-contract/). - - - - -## Dive deeper into Chainlink product and services. - -Comprehensive tools and docs for all of Chainlink's products and services. - - -
    - - - -

    -

    -Need to run your own Chainlink node? Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. -## Find the resources you need. -Find all the right resources to get the most out of Chainlink. - - +Need to run your own Chainlink node? Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. diff --git a/docs/Introduction/getting-started/acquire-link.md b/docs/Introduction/getting-started/acquire-link.md index 8a6a7a2411c..015026c266e 100644 --- a/docs/Introduction/getting-started/acquire-link.md +++ b/docs/Introduction/getting-started/acquire-link.md @@ -6,35 +6,33 @@ title: "Acquire testnet LINK" permalink: "docs/acquire-link/" whatsnext: {"Deploy your first contract":"/docs/deploy-your-first-contract/"} --- -This page will show you how to obtain and add testnet LINK to MetaMask. If you already have testnet LINK, skip to [Deploy your first contract](../deploy-your-first-contract/). -# Testnet LINK Faucet +The Getting Started guides show you how to send ETH on the Kovan testnet, but some contracts might require you to use LINK token instead. This page shows you how to obtain testnet LINK and send it to your MetaMask wallet. -* Go to the Chainlink Kovan Faucet site: https://faucets.chain.link/kovan -> 👍 Note -> -> You can also get testnet LINK on other test networks, such as Rinkeby, from https://faucets.chain.link/rinkeby. +## Configure MetaMask to use LINK tokens -![Link Kovan Faucet](/files/faucet.png) +To see your LINK token balance in MetaMask, you must manually add the token. -* Open up MetaMask, click the Wallet account name at the top to copy the address to your clipboard. -* Paste that address into the Chainlink Kovan Faucet address input field, solve the captcha, and click the `Send request` button. -* You should see a modal show up with the text 'Transaction in progress'. -* Once the transaction is confirmed on-chain, the modal will show 'Request complete', along with the transaction hash of your request. +1. Open up MetaMask. +1. At the bottom of the MetaMask windows, click **Import tokens**. +1. Find the LINK token contract address for the network that you want to use. On Kovan our LINK token address is: `0xa36085F69e2889c224210F603D836748e7dC0088`. See the [LINK Token Contracts](/docs/link-token-contracts/) page to find addresses for different testnets. +1. Paste the token contract address into MetaMask in the Token Address input. The token symbol and decimals of precision will auto-populate. + ![Metamask Custom Tokens Screen](/images/getting-started/metamaskImportTokens.png) +1. Click **Next**. A new window will appears, showing the LINK token details. +1. Click **Import Tokens** to confirm adding the new token. +MetaMask should now display the new LINK token balance. -![Successful Faucet Request Message](/files/faucet-success.png) - -* In order to see your LINK token balance in MetaMask, you will need to add the token. -* In MetaMask click the hamburger button, and click on `Add Token` and then `Custom Token`. -* On Kovan our LINK token address is: `0xa36085F69e2889c224210F603D836748e7dC0088`. Copy that address. If you need the address for a different testnet, see the [LINK Token Contracts](/docs/link-token-contracts/) page. -* Paste the token contract address into MetaMask in the Token Address input. The token symbol and decimals of precision will auto-populate. Click Next. +## Get testnet LINK from a faucet -![Metamask Custom Tokens Screen](/files/7d69188-metamask.png) +1. Go to [https://faucets.chain.link/](https://faucets.chain.link/). +1. Select the network where you want to receive testnet LINK. + ![Link Kovan Faucet](/files/faucet.png) +1. Open up MetaMask. +1. Click the wallet account name at the top to copy your wallet address to your clipboard. +1. Paste that address into the Chainlink Faucet address input field, solve the captcha, and click the **Send request** button. -* A new window will appear, showing the LINK token details. Click Add Tokens. +After you send the request, a modal shows up to track the progress of the transaction. After the transaction is confirmed on-chain, the modal shows "Request complete" and the transaction hash of your request. -![Metamask Adding a Link Token Screen](/files/d30579b-metamask.png) - -* MetaMask should now display the new LINK balance. +![Successful Faucet Request Message](/files/faucet-success.png) diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md new file mode 100644 index 00000000000..6445a556ebe --- /dev/null +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -0,0 +1,176 @@ +--- +layout: nodes.liquid +section: gettingStarted +date: Last Modified +title: "Conceptual Overview" +permalink: "docs/conceptual-overview/" +excerpt: "Smart Contracts and Chainlink" +whatsnext: {"Deploy Your First Smart Contract":"/docs/deploy-your-first-contract/", "Consuming Data Feeds":"/docs/consuming-data-feeds/"} +metadata: + title: "Conceptual Overview" + description: "Learn the basic concepts about what smart contracts are and, how to write them, and how Chainlink oracles work with smart contracts." + image: + 0: "/files/1a63254-link.png" +--- + +Welcome to the Smart Contract Getting Started guide. This overview explains the basic concepts of smart contract development and oracle networks. + +**Skip ahead** +To get your hands on the code right away, you can skip this overview: +- If you are new to smart contracts, [Deploy Your First Smart Contract](/docs/deploy-your-first-contract/) in an interactive web development environment. +- If you are already familiar with smart contracts and want to learn how to create *hybrid* smart contracts that use Chainlink Data Feeds, skip to the [Consuming Data Feeds](/docs/consuming-data-feeds/) guide. + +

    + https://www.youtube.com/watch?v=rFXSEEQG9YE +

    + +## Table of Contents + ++ [What is a smart contract? What is a hybrid smart contract?](#what-is-a-smart-contract-what-is-a-hybrid-smart-contract) ++ [What language is a smart contract written in?](#what-language-is-a-smart-contract-written-in) ++ [What does a smart contract look like?](#what-does-a-smart-contract-look-like) ++ [What does "deploying" mean?](#what-does-deploying-mean) ++ [What are oracles? Why are they important?](#what-are-oracles) ++ [How do smart contracts use oracles?](#how-do-smart-contracts-use-oracles) ++ [What is Remix?](#what-is-remix) ++ [What is Metamask?](#what-is-metamask) + +## What is a smart contract? What is a hybrid smart contract? + +When deployed to a blockchain, a *smart contract* is a set of instructions that can be executed without intervention from third parties. The code of a smart contract determines how it responds to input, just like the code of any other computer program. + +A valuable feature of smart contracts is that they can store and manage on-chain assets (like [ETH or ERC20 tokens](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), just like you can with an Ethereum wallet. Because they have an on-chain address like a wallet, they can do everything any other address can. This opens the door for programming automated actions when receiving and transferring assets. + +Smart contracts can connect to real-world market prices of assets to produce powerful applications. Being able to securely connect smart contracts with off-chain data and services is what makes them *hybrid* smart contracts. This is done using oracles. + +## What language is a smart contract written in? + +The most popular language for writing smart contracts on Ethereum is [Solidity](https://docs.soliditylang.org/en/v0.8.7/). It was created by the Ethereum Foundation specifically for smart contract development and is constantly being updated. + +If you've ever written Javascript, Java, or other object-oriented scripting languages, Solidity should be easy to understand. Similar to object-oriented languages, Solidity is considered to be a *contract*-oriented language. + +## What does a smart contract look like? + +The structure of a smart contract is similar to that of a class in Javascript, with a few differences. For example, the following `HelloWorld` contract is a simple smart contract that stores a single variable and includes a function to update the value of that variable. + +```solidity +{% include samples/Tutorials/HelloWorld.sol %} +``` + + + +### Solidity versions + +The first thing that every Solidity file must have is the Solidity version definition. The `HelloWorld.sol` contract uses version `0.8.7`, which is defined in the contract as `pragma solidity 0.8.7;` + +You can see the latest versions of the Solidity compiler [here](https://github.com/ethereum/solc-bin/blob/gh-pages/bin/list.txt/?target=_blank). You might also notice smart contracts that are compatible with a range of versions. + +```solidity +pragma solidity >=0.7.0 <0.9.0; +``` +This means that the code is written for Solidity version 0.7.0, or a newer version of the language up to, but not including version 0.9.0. In short, `pragma` is used to instruct the compiler as how to treat the code. + +### Naming a Contract + +The `contract` keyword defines the name of the contract, which in this example is `HelloWorld`. This is similar to declaring a `class` in Javascript. The implementation of `HelloWorld` is inside this definition and denoted with curly braces. + +```solidity +contract HelloWorld { + +} +``` + +### Variables + +Like Javascript, contracts can have state variables and local variables. **State variables** are variables with values that are permanently stored in contract storage. The values of **local variables**, however, are present only until the function is executing. There are also different types of variables you can use within Solidity, such as `string`, `uint256`, etc. Check out the [Solidity documentation](https://docs.soliditylang.org/en/v0.8.7/) to learn more about the different kinds of variables and types. + +*Modifiers* are used to change the level of access to these variables. Here are some examples of state variables with different modifiers: + +```solidity +string public message; +uint256 internal internalVar; +uint8 private privateVar; +bool external isTrue; +``` + +### Constructors + +Another familiar concept to programmers is the **constructor**. It is called upon deploying the contract, so as to set the state of the contract once created. + +In `HelloWorld`, the constructor takes in a `string` as a parameter and sets the `message` state variable to that string. + +```solidity +constructor(string memory initialMessage) { + message = initialMessage; +} +``` + +### Functions + +**Functions** are used to access and modify the state of the contract, and call functions on external contracts. `HelloWorld` has a function called `updateMessage`, which updates the current message stored in the state. + +```solidity +constructor(string memory initialMessage) { + message = initialMessage; +} + +function updateMessage(string memory newMessage) public { + message = newMessage; +} +``` + +### Interfaces + +An **interface** is another concept that is familiar to programmers of other languages. Interfaces define functions without their implementation, which leaves inheriting contracts to define the actual implementation themselves. This makes it easier to know what functions to call in a contract. Here's an example of an interface: + +```solidity +{% include samples/Tutorials/Test.sol %} +``` + + +For this example, `override` is necessary in the `Test` contract function because it overrides the base function contained in the `numberComparison` interface. The contract uses `pure` instead of `view` because the `isSameNum` function in the `Test` contract does not return a storage variable. + +## What does "deploying" mean? + +**Deploying** a smart contract is the process of pushing the code to the blockchain, at which point it resides with an on-chain address. Once it's deployed, the code cannot be changed and is said to be *immutable*. + +As long as the address is known, its functions can be called through an interface, on [Etherscan](https://etherscan.io/), or through a library like [web3js](https://web3js.readthedocs.io/), [web3py](https://web3py.readthedocs.io/), [ethers](https://docs.ethers.io), and more. Contracts can also be written to interact with other contracts on the blockchain. + +## What are oracles? + +**Oracles** provide a bridge between the real-world and on-chain smart contracts, by being a source of data that smart contracts can rely on, and act upon. + +Oracles play an extremely important role in facilitating the full potential of smart contract utility. Without a reliable connection to real-world conditions, smart contracts are unable to effectively serve the real-world. + +## How do smart contracts use oracles? + +Oracles are most popularly used with [*Data Feeds*](../using-chainlink-reference-contracts/). DeFi platforms like [AAVE](https://aave.com/) and [Synthetix](https://www.synthetix.io/) use Chainlink data feed oracles to obtain accurate real-time asset prices in their smart contracts. + +Chainlink data feeds are sources of data [aggregated from many independent Chainlink node operators](../architecture-decentralized-model/). Each data feed has an on-chain address and functions that enable contracts to read from that address. For example, the [ETH / USD feed](https://feeds.chain.link/eth-usd/). + +![Chainlink Feeds List](/images/contract-devs/price-aggr.png) + +## What is Remix? + +

    + https://www.youtube.com/watch?v=JWJWT9cwFbo +

    + +[Remix](https://remix.ethereum.org/) is a web IDE (integrated development environment) for creating, running, and debugging smart contracts in the browser. It is developed and maintained by the Ethereum foundation. Remix allows Solidity developers to write smart contracts without a development machine since everything required is included in the web interface. It allows for a simplified method of interacting with deployed contracts, without the need for a command line interface. Remix also has support for samples. This means that Remix can load code from Github. + +To learn how to use Remix, see the [Deploying Your First Smart Contract +](/docs/deploy-your-first-contract/) guide. + + + +## What is Metamask? + +Contracts are deployed by addresses on the network, so to deploy your own you need an address. Not only that, but you need an address which you can easily use with Remix. Fortunately, [MetaMask](https://metamask.io) is just what is needed. **Metamask** allows anyone to create an address, store funds and interact with Ethereum compatible blockchains from a browser extension. diff --git a/docs/Introduction/getting-started/consuming-data-feeds.md b/docs/Introduction/getting-started/consuming-data-feeds.md new file mode 100644 index 00000000000..229da32d0fa --- /dev/null +++ b/docs/Introduction/getting-started/consuming-data-feeds.md @@ -0,0 +1,84 @@ +--- +layout: nodes.liquid +section: gettingStarted +date: Last Modified +title: "Consuming Data Feeds" +permalink: "docs/consuming-data-feeds/" +excerpt: "Smart Contracts and Chainlink" +whatsnext: {"Random Numbers Guide":"/docs/get-a-random-number/", "Connect contracts to Any API":"/docs/using-any-api/", "Chaink Keepers":"/docs/chainlink-keepers/introduction/"} +metadata: + title: "Consuming Data Feeds" + description: "Learn how to consume Chainlink Data Feeds in your smart contracts." + image: + 0: "/files/1a63254-link.png" +--- + +> 👍 New to smart contracts? +> +> This tutorial assumes that you know how to create and deploy basic smart contracts. If you are new to smart contract development, learn how to [Deploy Your First Smart Contract](/docs/deploy-your-first-contract/) before you start this guide. + +## Overview + +When you connect a smart contract to real-world services or off-chain data, you create what is called a *hybrid smart contract*. For example, you can use Chainlink Data Feeds to connect your smart contracts to asset pricing data like the [ETH / USD feed](https://feeds.chain.link/eth-usd). These data feeds use the data aggregated from many independent Chainlink node operators. Each price feed has an on-chain address and functions that enable contracts to read pricing data from that address. + +This guide shows you how to write, deploy, and run a smart contract that consumes data from a price data feed. + +## Table of Contents + ++ [Overview](#overview) ++ [Examine the sample contract](#examine-the-sample-contract) ++ [Compile, deploy, and run the contract](#compile-deploy-and-run-the-contract) + +## Examine the sample contract + +The following code describes a contract that obtains the latest ETH / USD price using the Kovan testnet. + +```solidity +{% include samples/PriceFeeds/PriceConsumerV3.sol %} +``` + +The contract has the following components: + ++ The `import` line imports an interface named `AggregatorV3Interface`. Interfaces define functions without their implementation, which leaves inheriting contracts to define the actual implementation themselves. In this case, `AggregatorV3Interface` defines that all v3 Aggregators have the function `latestRoundData`. You can [see the complete code](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol) for the `AggregatorV3Interface` on GitHub. + ++ The `constructor() {}` initializes an interface object named `priceFeed` that uses `AggregatorV3Interface` and connects specifically to a proxy aggregator contract that is already deployed at `0x9326BFA02ADD2366b30bacB125260Af641031331`. The interface allows your contract to run functions on that deployed aggregator contract. + ++ The `getLatestPrice()` function calls your `priceFeed` object and runs the `latestRoundData()` function. When you deploy the contract, it initializes the `priceFeed` object to point to the aggregator at `0x9326BFA02ADD2366b30bacB125260Af641031331`, which is the proxy address for the Kovan ETH / USD data feed. Your contract connects to that address and executes the function. The aggregator connects with several oracle nodes and aggregates the pricing data from those nodes. The response from the aggregator includes several variables, but `getLatestPrice()` returns only the `price` variable. + +## Compile, deploy, and run the contract + +> 🚧 If you have not already configured your MetaMask wallet and funded it with testnet ETH, follow the instructions in the Deploy Your First Smart Contract to set that up. You can get testnet ETH at https://faucets.chain.link/kovan/. + +Deploy the `PriceConsumerV3` smart contract on the Kovan testnet. + +1. [Open the example contract](https://remix.ethereum.org/#url=https://docs.chain.link/samples/PriceFeeds/PriceConsumerV3.sol) in Remix. Remix opens and shows the contents of the smart contract. + + + +1. Because the code is already written, you can start the compile step. On the left side of Remix, click the **Solidity Compiler** tab to view the compiler settings. + ![Screenshot showing the Compiler tab and its settings.](/images/getting-started/selectSolidityCompiler.png) + +1. Use the default compiler settings. Click the **Compile PriceConsumerV3.sol** button to compile the contract. Remix automatically detects the correct compiler version depending on the `pragma` that you specify in the contract. You can ignore warnings about unused local variables in this example. + ![Screenshot of the Compile button.](/images/getting-started/compilePriceConsumerV3.png) + +1. On the **Deploy** tab, select the **Injected Web3** environment. This contract specifically requires Web3 because it connects with another contract on the blockchain. Running in a JavaScript VM will not work. + ![Screenshot showing the Intected Web3 environment selected.](/images/getting-started/selectWeb3.png) + +1. Because the example contract has several imports, Remix might select another contract to deploy by default. In the **Contract** section, select the `PriceConsumerV3` contract to make sure that Remix deploys the correct contract. + ![Screenshot showing PriceConsumerV3 as the contract to deploy.](/images/getting-started/selectPriceConsumerV3.png) + +1. Click **Deploy** to deploy the contract to the Kovan testnet. MetaMask opens and asks you to confirm payment for deploying the contract. Make sure MetaMask is set to the Kovan network before you accept the transaction. Because these transactions are on the blockchain, they are not reversible. + ![Screenshot of the Deploy button for PriceConsumerV3.](/images/getting-started/deployPriceConsumerV3.png) + +1. In the MetaMask prompt, click **Confirm** to approve the transaction and spend your testnet ETH required to deploy the contract. + ![Screenshot showing Metamask asking you to confirm the transaction.](/images/getting-started/confirmTransaction.png) + +1. After a few seconds, the transaction completes and your contract appears under the **Deployed Contracts** list in Remix. Click the contract dropdown to view its variables and functions. + ![Remix Deployed Contracts Section](/images/getting-started/deployedContractPriceConsumerV3.png) + +1. Click **getLatestPrice** to show the latest price from the aggregator contract. The latest price appears just below the button. The returned price is an integer, so it is missing its decimal point. + ![A screenshot showing the deployed contract.](/images/getting-started/getLatestPrice.png) + +You can run your own oracle networks that provide data to smart contracts similar to the `AggregatorV3Interface`, but first you should learn how configure your contracts to pay oracles using LINK tokens. Follow the [Generate Random Numbers](../intermediates-tutorial/) to learn how. diff --git a/docs/Introduction/getting-started/deploy-your-first-contract.md b/docs/Introduction/getting-started/deploy-your-first-contract.md index 7b35bd9ac67..3aff2dca8d4 100644 --- a/docs/Introduction/getting-started/deploy-your-first-contract.md +++ b/docs/Introduction/getting-started/deploy-your-first-contract.md @@ -2,71 +2,119 @@ layout: nodes.liquid section: gettingStarted date: Last Modified -title: "Deploy your first contract" +title: "Deploy Your First Smart Contract" permalink: "docs/deploy-your-first-contract/" -whatsnext: {"Fund your contract":"/docs/fund-your-contract/"} +whatsnext: {"Consuming Data Feeds":"/docs/consuming-data-feeds/"} +metadata: + title: "Deploy Your First Smart Contract" + description: "Deploy and run your first smart contract in an interactive web development environment." + image: + 0: "/files/1a63254-link.png" --- -

    - https://www.youtube.com/watch?v=JWJWT9cwFbo -

    +You can write your first smart contract and run in your browser without any knowledge about Ethereum or blockchains. This guide shows you how easy it is to develop smart contracts using the [Solidity language](https://soliditylang.org/), a [MetaMask wallet](https://metamask.io) and the [Remix Development Environment](https://remix.ethereum.org/). You can use all of these tools in your browser for free with no signup required. -## Introducing Remix +> 📘 Already know Solidity and have MetaMask configured? +> +> If you are already familiar with how to deploy Smart Contracts and use MetaMask, you can skip to the []() guide to learn how to connect your smart contracts to Chainlink data feeds. -Remix is a web IDE (integrated development environment) for creating, running, and debugging smart contracts in the browser. It is developed and maintained by the Ethereum foundation. Remix allows Solidity developers to write smart contracts without a development machine since everything required is included in the web interface. It allows for a simplified method of interacting with deployed contracts, without the need for a command line interface. +**Table of Contents** ++ [Overview](#overview) ++ [Install and fund MetaMask](#install-and-fund-your-metamask-wallet) ++ [Write, compile, and deploy your first smart contract](#write-compile-and-deploy-your-first-smart-contract) ++ [Run functions in your contract](#run-functions-in-your-contract) -## Create and deploy your first contract +## Overview -* Navigate to Remix: https://remix.ethereum.org +In general, you create and deploy your smart contracts operate using the following process: -* Remix opens up with an empty interface, or possible with a default contract +1. **Write:** Write a contract to define how the contract functions, what data it can store, what other contracts it interacts with, and what external APIs it might call. -![Remix Welcome Screen](/files/8dbedba-Screen_Shot_2020-09-08_at_7.05.27_AM.png) +1. **Compile:** Pass your smart contract code through a compiler to translate the contract into byte that the blockchain can understand. For example, [Solidity](https://soliditylang.org) code must be compiled before it can run in the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/). -* If you open remix for the first time, you should chose the **Environments** to **Solidity** +1. **Deploy:** Send the compiled smart contract to the blockchain. From that point forward, the contract cannot be altered. However, you can still interact with the contract in several ways. -![Remix Choose Solidity Environment](/files/7c7f098-remix.jpg) +1. **Run functions:** When you run the functions that you defined for the contract, the network processes those functions and modifies the state of your contract. For some functions, the network charges a small fee to complete the work. Your contract can also have functions that transfer funds to other contracts or wallets. -* Click the **gist** label on the left side menu and click on ATestnetConsumer.sol +This guide walks you through each of these steps, but first you must install and fund your MetaMask wallet. -![Remix Open File Explorer](/files/50b7476-remix.png) +## Install and fund your MetaMask wallet -* Click the `Solidity Compiler` button in the left side bar, it will show compile tab page. +Deploying smart contracts on-chain requires a wallet and ETH. The ETH pays for the work required by the Ethereum network to add the contract to the blockchain and store the variables. The wallet holds the ETH that you need to pay for the transaction. Install MetaMask, configure it to use the [Kovan test network](https://kovan-testnet.github.io/website/), and fund your wallet with free testnet ETH. -![Remix Choose Solidity Compiler](/files/429ae12-remix.png) +1. [Install and configure the MetaMask extension](https://metamask.io/download) in your browser. -* Click `Compile ATestnetConsumer.sol` button in the upper left-hand of Remix. +1. After you install the extension, open your browser extension list and click MetaMask to open MetaMask. + ![Screenshot showing the browser extension list with MetaMask installed.](/images/getting-started/openMetaMask.png) -![Remix Click Compile](/files/b8774fe-Screen_Shot_2020-09-08_at_7.10.07_AM.png) +1. Follow the instructions in MetaMask to create a new MetaMask wallet. The new wallet includes a 12-word mnemonic phrase. This phrase is the key to your wallet. Copy that phrase down in a very secure location that only you can access. You can use this phrase to retrieve your wallet later or add it to another browser. -> 🚧 -> -> If you get errors after compiling, make sure your compiler is set to one of the **0.6.0** compilers. If you used the link to Remix within this guide above, this would have been set for you. +1. Set MetaMask to use the Kovan test network. + ![Screenshot showing the network selection menu in MetaMask. The Kovan Test Network is selected.](/images/getting-started/selectKovan.png) -* Now select the `Deploy & run transactions` tab in the left-hand of Remix. -* Change your Environment to `Injected Web3` (if it is not already set) then click on `Deploy`. +1. Go to the [Kovan Chainlink Faucet](https://faucets.chain.link/kovan/) and follow the steps to send 0.1 test ETH to your MetaMask wallet address. You can copy your wallet address by clicking your account name in MetaMask. After the faucet completes the transaction, you should have 0.1 ETH in your MetaMask wallet on the Kovan testnet. + ![Screenshot showing a wallet with an balance of 0.1 ETH.](/images/getting-started/fundedWallet.png) -![Remix Deploy a Contract](/files/d5708a0-remix.png) +Now that you configured your wallet and funded it with testnet ETH, you can write, compile, and deploy your contract. -* MetaMask will pop-up to confirm the transaction. Click on Confirm. +## Write, compile, and deploy your first smart contract -![Metamask Confirm a Transaction Screen](/files/d082799-metamask.png) +Your first contract is a simple `HelloWorld.sol` example. This example shows you how to set and retrieve variables in a smart contract on-chain. -> 🚧 Metamask doesn't pop up? -> -> If Metamask does not prompt you and instead displays the error below, you will need to disable "Privacy Mode" in Metamask. You can do this by clicking on your unique account icon at the top-right, then go to the Settings. Privacy Mode will be a switch near the bottom. The error: **Send transaction failed: invalid address. If you use an injected provider, please check it is properly unlocked.** +```solidity +{% include samples/Tutorials/HelloWorld.sol %} +``` + +1. [Open the example contract](https://remix.ethereum.org/#url=https://docs.chain.link/samples/Tutorials/HelloWorld.sol) in the Remix IDE. Remix opens and shows the contents of the smart contract. You can modify the code in this editor when you write your own contract. + + + +1. Because the code is already written, you can start the compile step. On the left side of Remix, click the **Solidity Compiler** tab to view the compiler settings. + ![Screenshot showing the Compiler tab and its settings.](/images/getting-started/selectSolidityCompiler.png) + +1. For this contract, use the default compiler settings. Click the **Compile HelloWorld.sol** button to compile the contract. This converts the contract from Solidity into bytecode that the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/) can understand. Remix automatically detects the correct compiler version depending on the `pragma` that you specify in the contract. + ![Screenshot of the Compile button.](/images/getting-started/compileHelloWorld.png) + +1. After Remix compiles the contract, deploy it. On the left side of Remix, click the **Deploy and Run** tab to view the deployment settings. + ![Screenshot of the Deploy tab and its settings.](/images/getting-started/selectSolidityDeploy.png) + +1. In the deployment settings, select the **Injected Web3** environment. This tells Remix that you want to deploy your contract to the blockchain that you configured in MetaMask. You could optionally use one of the Javascript VM options, but they run in a virtual environment with no connection to an actual blockchain or Chainlink oracles. + ![Screenshot showing the Intected Web3 environment selected.](/images/getting-started/selectWeb3.png) + +1. Next to the **Deploy** button, enter a message that you want to send with the smart contract when you deploy it. This contract has a constructor that sets an initial message when you deploy the contract. + ![Screenshot of the Deploy button with "Hello world!" as the defined message.](/images/getting-started/deployHelloWorld.png) + +1. Click the **Deploy** button to deploy the contract and its initial message to the blockchain network. MetaMask opens and asks you to confirm payment for deploying the contract. Make sure MetaMask is set to the Kovan network before you accept the transaction. Because these transactions are on the blockchain, they are not reversible. + +1. In the MetaMask prompt, click **Confirm** to approve the transaction and spend your testnet ETH required to deploy the contract. + ![Screenshot showing Metamask asking you to confirm the transaction.](/images/getting-started/confirmTransaction.png) + +1. After a few seconds, the transaction completes and your contract appears under the **Deployed Contracts** list in Remix. Click the contract dropdown to view its variables and functions. + ![Screenshot showing the deployed Hello World contract.](/images/getting-started/deployedContract.png) + +1. Click the `message` variable. Remix retrieves and prints the initial message that you set. + ![Screenshot showing the message function and the returned "Hello World" message.](/images/getting-started/runHelloWorld.png) + +The contract has an address just like your wallet address. If you save this address, you can return to your deployed contract at any time to retrieve variables or execute functions. To see details about your deployed contract, copy the contract address from the list in Remix and search for it in the [Etherscan Kovan Testnet Explorer](https://kovan.etherscan.io/). + +## Run functions in your contract -* A transaction link will be displayed at the bottom of Remix that displays deployment status. -It will take a few moments for the contract to be deployed. The Remix UI will update upon completion. +Because you deployed the contract to an actual blockchain, several nodes on the test network confirmed your payment for the smart contract. The contract, its variables, and its functions remain in the blockchain permanently. To change the `message` variable that is stored with your contract, run the `updateMessage` function. -![Remix Transaction Confirmation Message](/files/8ff4abe-remix7.jpg) +1. In your deployed contract, enter a new message next to the `updateMessage` function. + ![Screenshot showing the updateMessage function with a new value.](/images/getting-started/runUpdateMessage.png) -* On the left side panel there is a section that displays the title of the contract (example `ATestnetConsumer at 0x123...890 (blockchain)`). +1. Click the `updateMessage` button to set the new message in the contract data. MetaMask opens and asks you to confirm payment for updating the state of your contract. -![Remix Deployed Contracts](/files/64722ed-remix8.jpg) +1. In the new MetaMask prompt, click **Confirm** to approve the transaction. + ![Screenshot showing Metamask asking you to confirm the transaction.](/images/getting-started/confirmTransaction.png) -* You can click on it to interact with your contract. +1. Click the `message` variable again to see the updated value. It might take a few seconds before the transaction updates the variable. + ![Screenshot showing the updated value for the `message` value.](/images/getting-started/runHelloWorldAgain.png) -![Remix Contract Interaction Screen](/files/85c4ddb-remix.png) +Now you know how to deploy example contracts to a test network and run the functions in those contracts. You can write your own contracts and test them using this same process. -* You can't do anything to this contract except read its state until you send LINK to it. +Next, read the []() guide to learn how to connect your smart contracts to Chainlink Data Feeds and retrieve on-chain data that your smart contracts can act on. diff --git a/docs/Introduction/getting-started/fund-your-contract.md b/docs/Introduction/getting-started/fund-your-contract.md index 6c0c5f7b9e0..43de35080e1 100644 --- a/docs/Introduction/getting-started/fund-your-contract.md +++ b/docs/Introduction/getting-started/fund-your-contract.md @@ -2,25 +2,29 @@ layout: nodes.liquid section: gettingStarted date: Last Modified -title: "Fund your contract" +title: "Fund Your Contracts" permalink: "docs/fund-your-contract/" -whatsnext: {"Use your first contract!":"/docs/use-your-first-contract/"} --- -This guide explains how to fund your Solidity contract with LINK using the Remix IDE. -# Retrieveing the contract address +Some smart contracts require funding at their addresses so they can operate without you having to call functions manually and pay for the transactions through MetaMask. This guide explains how to fund Solidity contracts with LINK or ETH using the Remix IDE. -* Deploy your contract and wait until you see a new contract in the `Deployed Contracts` section. -* Copy the contract address to your clipboard using the copy icon located near the contract title on the left side panel. +## Retrieve the contract address + +1. In Remix, deploy your contract and wait until you see a new contract in the **Deployed Contracts** section. +1. On the left side panel, use the **Copy** button located near the contract title to copy the contract address to your clipboard. ![Remix Copy Deployed Contract Address](/files/25d2c8e-Screen_Shot_2020-09-08_at_7.15.50_AM.png) -# Sending LINK +## Send funds to your contract -* Open MetaMask; click the hamburger (☰) button at the top-left corner. -* Click on the LINK token, then press `Next`. -* Paste your contract's address in the recipient field and enter a value for the amount to send (e.g. 10 LINK). -* Click `Confirm` and wait until the transaction is processed. +1. Open MetaMask. +1. Select the network that you want to send funds on. For example, select the Kovan testnet. +1. Click the **Send** button to initiate a transaction. +1. Paste your contract address in the address field. +1. In the **Asset** drop down menu, select the type of asset that you need to send to your contract. For example, you can send LINK. If LINK is not listed, follow the guide to [Acquire testnet LINK](/docs/acquire-link/). +1. In the **Ammount** field, enter the amount of LINK that you want to send. +1. Click **Next** to review the transaction details and the Gas cost. +1. If the transaction details are correct, click **Confirm** and wait for the transaction to process. ![Metamask Send Link Screen](/files/867073d-metamask.png) diff --git a/docs/Introduction/getting-started/install-metamask.md b/docs/Introduction/getting-started/install-metamask.md deleted file mode 100644 index e5d999d1e1c..00000000000 --- a/docs/Introduction/getting-started/install-metamask.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: nodes.liquid -section: gettingStarted -date: Last Modified -title: "Install, configure & fund MetaMask" -permalink: "docs/install-metamask/" -whatsnext: {"Acquire testnet LINK":"/docs/acquire-link/"} ---- -This page will show you how to configure the MetaMask browser extension. If you already have MetaMask configured, skip to [Acquire testnet LINK](../acquire-link/). - -

    - https://www.youtube.com/watch?v=4ZgFijd02Jo -

    - -## What is MetaMask? - -MetaMask is a wallet that runs as a self-contained application inside your browser as an extension. It allows you to interact with Decentralized Applications or "dApps". MetaMask makes accessing the Ethereum & Testnet blockchains (Like Kovan) very easy and provides you with wallet addresses. - -![Metamask Welcome Screen](/files/bb28207-metamask.png) - -## Install & Configure - -Go to: metamask.io and install the browser extension in Chrome or Firefox. - -* After installing the MetaMask extension, open the extension by clicking on the MetaMask Fox icon. If prompted to use the New Look, do so. -* Create a new vault. -* You will be presented with a 12-word mnemonic phrase; copy that phrase down in a very secure location that only you can access. -* Change the network selection from `Main Ethereum Network` to the `Kovan Test Network`. - -## Fund your address with Ether - -In order to obtain Kovan ETH, follow the steps below: -* Go to the [Kovan Ether Faucet](https://faucets.chain.link/kovan). -* Enter your wallet address into the text box. -* Hit the button to get "Test ETH", wait a minute, and you'll see it in your wallet! diff --git a/docs/Introduction/tutorials/other-tutorials.md b/docs/Introduction/getting-started/other-tutorials.md similarity index 97% rename from docs/Introduction/tutorials/other-tutorials.md rename to docs/Introduction/getting-started/other-tutorials.md index 04f26f7c753..f6a2147fca0 100644 --- a/docs/Introduction/tutorials/other-tutorials.md +++ b/docs/Introduction/getting-started/other-tutorials.md @@ -6,7 +6,7 @@ title: "Learning Resources" permalink: "docs/other-tutorials/" --- -Welcome to the Resources page. This is a list of links and pages that you might need to help you throughout your learning journey. If you're new to Chainlink, start with [The Basics](../beginners-tutorial/) tutorial and work through the rest of the tutorial series to better understand the products and services Chainlink offers. This page contains more resources, inspiration, and outreach information to further your learning. +Welcome to the Resources page. This is a list of links and pages that you might need to help you throughout your learning journey. If you're new to Chainlink, start with the [Getting Started Guide](/getting-started/) tutorial and work through the rest of the tutorial series to better understand the products and services Chainlink offers. This page contains more resources, inspiration, and outreach information to further your learning. **Table of Contents** diff --git a/docs/Introduction/getting-started/use-your-first-contract.md b/docs/Introduction/getting-started/use-your-first-contract.md deleted file mode 100644 index 52125e322bd..00000000000 --- a/docs/Introduction/getting-started/use-your-first-contract.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: nodes.liquid -section: gettingStarted -date: Last Modified -title: "Use your first contract!" -permalink: "docs/use-your-first-contract/" -whatsnext: {"Introduction to Data Feeds":"/docs/using-chainlink-reference-contracts/", "Introduction to Chainlink VRF":"/docs/chainlink-vrf/", "Introduction to Using Any API":"/docs/request-and-receive-data/"} ---- -# Executing Functions - -* Navigate back to Remix. -* On the left side panel you will see a list of functions of your contract. - -![Remix Functions List](/files/ad5784b-remix.png) - -* In our example contract there are 3 functions that you can use to request external data from Chainlink. `requestEthereumChange`, `requestEthereumLastMarket` and `requestEthereumPrice` -* For this example we will use `requestEthereumPrice`. -* In the input field to the right of `requestEthereumPrice`, copy the text below to request the price of ETH in United States Dollars. The first parameter is the oracle contract address, and the second parameter is the Job ID. You will need to include the quotes. - -```text requestEthereumPrice -"0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e", "29fa9aa13bf1468788b7cc4a500a45b8 -``` -```text requestEthereumChange -"0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e","ad752d90098243f8a5c91059d3e5616c" -``` -```text requestEthereumLastMarket -"0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e","50fc4215f89443d185b061e5d7af9490" -``` - -* Click on the `requestEthereumPrice` button. - -![Remix Click requestEthereumPrice](/files/332bb9c-Screen_Shot_2020-09-08_at_9.21.52_AM.png) - -* MetaMask will pop-up to confirm the transaction, click Confirm. (If you get a gas estimation failed message here, make sure the contract is [funded with LINK](../fund-your-contract/)./) - -![Metamask Transaction Confirmation Message](/files/e00834f-metamask.png) - -* The transaction confirmation will take some time. When the response is confirmed, you can view the result in your contract. - -![Remix Click currentPrice](/files/d28ea86-Screen_Shot_2020-09-08_at_9.22.21_AM.png) - -* To verify that your request was fulfilled, click on the blue `currentPrice` button. If the value after `uint256` displays `0` then the request has not be fulfilled yet. Wait a little longer since the Chainlink node will wait for 3 block confirmations before fulfilling your request. Otherwise, it will show you the current price of ETH multiplied by 100. This weird looking output is by design, as the ETH protocol cannot display decimal values. In our example, the `currentPrice` returned `33495` which represents $334.95 USD. - -![Remix Price Result Message](/files/d24f0f2-remix.png) - -If you see a value for the `currentPrice` variable, then Chainlink has successfully responded to your contract with the current price of ETH. Now you're ready to write more complex smart contracts that execute based on real-world data. diff --git a/docs/Introduction/getting-started/your-first-contract.md b/docs/Introduction/getting-started/your-first-contract.md deleted file mode 100644 index f465d23f04c..00000000000 --- a/docs/Introduction/getting-started/your-first-contract.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -layout: nodes.liquid -section: smartContract -date: Last Modified -title: "Deploy Your First Contract" -permalink: "docs/your-first-contract/" -excerpt: "Smart Contracts and Chainlink" -whatsnext: {"Connect Contracts to Oracles":"/docs/connect-to-oracles/", "Obtain Random Numbers for a Contract":"/docs/get-a-random-number/", "Call Public APIs from a Contract":"/docs/using-any-api/"} -metadata: - title: "Deploy Your First Contract" - description: "Learn how to create and deploy smart contracts to the Ethereum blockchain." ---- - -This guide teaches you each step required to create, deploy, and use smart contracts written in the [Solidity](https://soliditylang.org) language. You can follow these examples without any knowledge about Ethereum or blockchains. - -Writing a smart contract is very similar to writing application code, but the code runs on the Ethereum blockchain network rather than running on a server or VM. In general, you operate smart contracts using the following process: - -1. **Write:** Write a contract to define how the contract functions, what data it can store, what other contracts it interacts with, and what external APIs it might call. - -1. **Compile:** Pass your smart contract code through a compiler to translate the contract into byte that the blockchain can understand. For example, [Solidity](https://soliditylang.org) code must be compiled before it can run in the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/). - -1. **Deploy:** Send the compiled smart contract to the blockchain. From that point forward, the contract cannot be altered. However, you can still interact with the contract in several ways. - -1. **Fund:** Send tokens or cryptocurrency to your contract address. Some contracts require cryptocurrency funds if they interact with other contracts or oracles. These funds pay for the work that the blockchain network does to facilitate those interactions. For example, contracts that use Chainlink oracle networks often need LINK tokens to pay for the work done by the oracle nodes. - -1. **Run functions:** When you run the functions that you defined for the contract, the network processes those functions and modifies the state of your contract. For some functions, the network charges a small fee to complete the work. Your contract can also have functions that transfer funds to other contracts or wallets. - -To help you learn how smart contracts work, you can create, deploy, and run smart contracts on a test network. All of the tools that you need are free and require no signup or registration. You can complete all of the necessary steps using your web browser. - -## Install and fund MetaMask - -Deploying smart contracts requires a wallet and test ETH. Install MetaMask, configure it to use the Kovan test network, and fund your wallet with test ETH. - -1. [Install and configure the MetaMask extension](https://metamask.io/download) in your browser. - -1. After the extension is installed, open your browser extension list and click MetaMask to open the MetaMask menu. - ![Screenshot showing the browser extension list with MetaMask installed.](/files/openMetaMask.png) - -1. Follow the instructions in MetaMask to create a new MetaMask wallet. - -1. Set MetaMask to use the Kovan Test Network. - ![Screenshot showing the network selection menu in MetaMask. The Kovan Test Network is selected.](/files/selectKovan.png) - -1. Go to the [Chainlink Faucet](https://linkfaucet.protofire.io/kovan) and send 0.1 test ETH to your MetaMask wallet address. You can copy your address by clicking the account name in MetaMask. - -Now you should have some ETH in your MetaMask wallet on the Kovan testnet. - -## Create and deploy your contract - -Deploy and run a smart contract on the Kovan testnet using the following process: - -1. [Open this example contract](https://remix.ethereum.org/#gist=762a9bc18c31109f61790c4e6c2da6e9) in the Remix IDE. This `helloWorld.sol` sample contract prepares Remix with code that you can deploy and run. We will walk through the code later. - -1. On the left panel, expand the sample folder and click `HelloWorld.sol` to open the contents of the contract. You can modify the code in this editor when you write your own contract. - ![Screenshot showing the HelloWorld.sol file highlighted.](/files/selectHelloWorld.png) - -1. Because we already wrote the code for you, you can start the compile step. On the left side of Remix, click the **Solidity Compiler** tab to view the compiler settings. - ![Screenshot showing the Compiler tab and its settings.](/files/selectSolidityCompiler.png) - -1. For this contract, you can use the default compiler settings. Click the **Compile HelloWorld.sol** button to compile the contract. This converts the contract from Solidity into bytecode that the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/) can understand. Remix automatically detects the correct compiler version depending on the `pragma` specified in the contract. - ![Screenshot of the Compile button.](/files/compileHelloWorld.png) - -1. After Remix compiles the contract, you can deploy it to the Ethereum blockchain. On the left side of Remix, click the **Deploy and Run** tab to view the deployment settings. - ![Screenshot of the Deploy tab and its settings.](/files/selectSolidityCompiler.png) - -1. In the deployment settings, select **Injected Web3** environment. This activates MetaMask and asks you to connect the wallet to Remix, which allows Remix to receive ETH from your MetaMask wallet. Accept the connection. - -1. Next to the **Deploy** button, enter a message that you want to send with the smart contract when you deploy it. This contract is written with a constructor that sets an initial message when you deploy the contract. - ![Screenshot of the Deploy button with "Hello world!" as the defined message.](/files/deployHelloWorld.png) - -1. Click the **Deploy** button to deploy the contract and its initial message to the blockchain network. MetaMask opens and asks you to confirm payment for deploying the contract. Ensure that MetaMask is set to the Kovan network before you accept the transaction. - -If your contract deployed correctly, you will see your contract listed under the **Deployed Contracts** section in Remix. The contract has an address just like a wallet address. You can return to the address any time to execute functions or retrieve variables. To see details about your deployed contract, you can copy the contract address from the list in Remix and search for it in the [Etherscan Kovan Testnet Explorer](https://kovan.etherscan.io/). - -## Run your contract functions - -After you deploy a smart contract you cannot alter the code or change the initial variables. However, you can run the functions that you defined and retrieve the values of state variables in the contract. - -1. Click the name of your deployed contract to view the details. This view shows all of the functions and variables that you can interact with. - ![Screenshot showing the list of deployed contracts with the functions and variables of your deployed contract.](/files/deployedContracts.png) - -1. Click `message` to view the current value of the message variable. This retrieves the message that you defined when you first deployed the contract. - -1. Enter a new message value next to the `updateMessage` function. - -1. Click `updateMessage` to run that function and send the new message to your contract. Because this function makes a change to the variable, it makes a change to the block chain and requires some ETH to pay for the work. MetaMask opens and asks you to confirm payment for this action. - -1. After the update is complete, click `message` again to retrieve the new message. It might take a few seconds to update, but eventually the response shows the value that you entered for the `updateMessage` function. - -Now you know how to run example contracts in Remix and execute functions in those contracts. You can write your own contracts and test them using this same process. - -## Learn how the contract works - -The smart contract that you deployed is simple, but it demonstrates the basic building blocks that you can use to create your own decentralized applications. - -```solidity -pragma solidity >=0.7.0 <0.9.0; -contract HelloWorld { - string public message; - constructor(string memory initialMessage) { - message = initialMessage; - } - function updateMessage(string memory newMessage) public { - message = newMessage; - } -} -``` -The `helloWorld.sol` contract has the following components: - -+ `pragma solidity >=0.7.0 <0.9.0;` defines the versions of the [Solidity compiler](https://docs.soliditylang.org/en/latest/installing-solidity.html) that this contract can use. For this example, any version of `0.7.x` or `0.8.x` is acceptable, but not version `0.9.0` or above. - -+ `contract HelloWorld {}` defines the contract. Think of this as being similar to declaring a class in JavaScript. The contract implementation is inside this definition. - -+ `string public message;` creates a state variable named `message`. To find out more about all the types of variables you can use within Solidity, see the [Solidity documentation](https://docs.soliditylang.org/en/latest/). - -+ `constructor(string memory initialMessage) {}` sets the state of the contract when you first deploy it. In `HelloWorld`, the constructor takes in a `string` parameter and sets it as the `message` state variable. - -+ `function updateMessage(string memory newMessage) public {}` is a function that modifies the contract state. The `updateMessage` function changes the current `message` variable to the value that you define when you call this function. - -If you want to learn more about what components are available for smart contracts, read the Solidity [Structure of a Contract](https://docs.soliditylang.org/en/latest/structure-of-a-contract.html) guide. When you are ready, you can [learn how to connect your contract to an oracle](../connect-to-oracles/). diff --git a/docs/Introduction/tutorials/beginners-tutorial.md b/docs/Introduction/tutorials/beginners-tutorial.md deleted file mode 100644 index 5cad22f71df..00000000000 --- a/docs/Introduction/tutorials/beginners-tutorial.md +++ /dev/null @@ -1,280 +0,0 @@ ---- -layout: nodes.liquid -section: gettingStarted -date: Last Modified -title: "The Basics: Using Hybrid Smart Contracts" -permalink: "docs/beginners-tutorial/" -excerpt: "Smart Contracts and Chainlink" -whatsnext: {"Get the Latest Price":"/docs/get-the-latest-price/", "Random Numbers Guide":"/docs/get-a-random-number/"} -metadata: - title: "The Basics Tutorial" - description: "Learn what smart contracts are, how to write them, and how to use Chainlink data feeds to deploy your very own Chainlink smart contract." - image: - 0: "/files/1a63254-link.png" ---- - -> 👍 New to smart contracts? -> -> If you're new to smart contract development this is a great place to start. We'll walk you through developing your first smart contract that interacts with Chainlink. If you're familiar with creating smart contracts and want to learn more about the applications of *hybrid* smart contracts start using Data Feeds start [here](#5-what-are-oracles-why-are-they-important). - -

    - https://www.youtube.com/watch?v=rFXSEEQG9YE -

    - - -# Overview - -In this tutorial, you will learn about hybrid smart contracts. You will then create a hybrid smart contract using Chainlink's Data Feeds and deploy this contract to an Ethereum testnet. - -**Table of Contents** - -+ [Overview](#overview) -+ [1. What is a smart contract? What is a hybrid smart contract?](#1-what-is-a-smart-contract-what-is-a-hybrid-smart-contract) -+ [2. What language is a smart contract written in?](#2-what-language-is-a-smart-contract-written-in) -+ [3. What does a smart contract look like?](#3-what-does-a-smart-contract-look-like) -+ [4. What does "deploying" mean?](#4-what-does-deploying-mean) -+ [5. What are oracles? Why are they important?](#5-what-are-oracles-why-are-they-important) -+ [6. How do smart contracts use oracles?](#6-how-do-smart-contracts-use-oracles) -+ [7. How do I deploy to testnet?](#7-how-do-i-deploy-to-testnet) -+ [8. Further Reading](#8-further-reading) - -# 1. What is a smart contract? What is a hybrid smart contract? - -When deployed to a blockchain, a **smart contract** is a set of instructions that can be executed without intervention from third parties. The code of a smart contract determines how it responds to input, just like the code of any other computer program. - -A valuable feature of smart contracts is that they can store and manage on-chain assets (like [ETH or ERC20 tokens](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), just like you can with an Ethereum wallet. Because they have an on-chain address like a wallet, they can do everything any other address can. This opens the door for programming automated actions when receiving and transferring assets. - -Smart contracts can connect to real-world market prices of assets to produce powerful applications. Being able to securely connect smart contracts with off-chain data and services is what makes them *hybrid* smart contracts. This is done with oracles, which we will discuss [later](#5-what-are-oracles-why-are-they-important) in this tutorial. - -# 2. What language is a smart contract written in? - -The most popular language for writing smart contracts on Ethereum is [Solidity](https://docs.soliditylang.org/en/v0.8.7/). It was created by the Ethereum Foundation specifically for smart contract development and is constantly being updated. - -If you've ever written Javascript, Java, or other object-oriented scripting languages, Solidity should be easy to understand. Similar to object-oriented languages, Solidity is considered to be a *contract*-oriented language. - -# 3. What does a smart contract look like? - -The structure of a smart contract is similar to that of a class in Javascript, with a few differences. Let's take a look at this `HelloWorld` example. - -```solidity -{% include samples/Tutorials/HelloWorld.sol %} -``` - - - -## Define the Version of Solidity - -The first thing that every Solidity file must have is the Solidity version definition. The version HelloWorld.sol is using is 0.8.7, defined by `pragma solidity 0.8.7;` - -You can see the latest versions of the Solidity compiler [here](https://github.com/ethereum/solc-bin/blob/gh-pages/bin/list.txt/?target=_blank). You might also notice Solidity files containing definitions with multiple versions of Solidity: - -```solidity -pragma solidity >=0.7.0 <0.9.0; -``` -This means that the code is written for Solidity version 0.7.0, or a newer version of the language up to, but not including version 0.9.0. In short, `pragma` is used to instruct the compiler as how to treat the code. - -## Start your Contract - -Next, the `HelloWorld` contract is defined by using the keyword `contract`. Think of this as being similar to declaring `class` in Javascript. The implementation of `HelloWorld` is inside this definition, denoted with curly braces. - -```solidity -contract HelloWorld { - -} -``` - -## Variables - -Again, like Javascript, contracts can have state variables and local variables. **State variables** are variables with values that are permanently stored in contract storage. The values of **local variables**, however, are present only until the function is executing. There are also different types of variables you can use within Solidity, such as `string`, `uint256`, etc. Check out the [Solidity documentation](https://docs.soliditylang.org/en/v0.8.7/) to learn more about the different kinds of variables and types. - -*Modifiers* are used to change the level of access to these variables. Here are some examples of state variables with different modifiers: - -```solidity -string public message; -uint256 internal internalVar; -uint8 private privateVar; -bool external isTrue; -``` - -## The Constructor - -Another familiar concept to programmers is the **constructor**. It is called upon deploying the contract, so as to set the state of the contract once created. - -In `HelloWorld`, the constructor takes in a `string` as a parameter and sets the `message` state variable to that string. - -```solidity -constructor(string memory initialMessage) { - message = initialMessage; -} -``` - -## Using Functions - -**Functions** are used to access and modify the state of the contract, and call functions on external contracts. `HelloWorld` has a function called `updateMessage`, which updates the current message stored in the state. - -```solidity -constructor(string memory initialMessage) { - message = initialMessage; -} - -function updateMessage(string memory newMessage) public { - message = newMessage; -} -``` - -# 4. What does "deploying" mean? - -**Deploying** a smart contract is the process of pushing the code to the blockchain, at which point it resides with an on-chain address. Once it's deployed, the code cannot be changed and is said to be *immutable*. - -As long as the address is known, its functions can be called through an interface, on [Etherscan](https://etherscan.io/), or through a library like [web3js](https://web3js.readthedocs.io/), [web3py](https://web3py.readthedocs.io/), [ethers](https://docs.ethers.io), and more. Contracts can also be written to interact with other contracts on the blockchain. - -# 5. What are oracles? Why are they important? - -**Oracles** provide a bridge between the real-world and on-chain smart contracts, by being a source of data that smart contracts can rely on, and act upon. - -Oracles play an extremely important role in facilitating the full potential of smart contract utility. Without a reliable connection to real-world conditions, smart contracts are unable to effectively serve the real-world. - -# 6. How do smart contracts use oracles? - -Oracles are most popularly used with [*Data Feeds*](../using-chainlink-reference-contracts/). DeFi platforms like [AAVE](https://aave.com/) and [Synthetix](https://www.synthetix.io/) use Chainlink data feed oracles to obtain accurate real-time asset prices in their smart contracts. - -Chainlink data feeds are sources of data [aggregated from many independent Chainlink node operators](../architecture-decentralized-model/). Each data feed has an on-chain address and functions that enable contracts to read from that address. For example, the [ETH / USD feed](https://feeds.chain.link/eth-usd/). - -![Chainlink Feeds List](/images/contract-devs/price-aggr.png) - -## Information about Interfaces -Before using data feeds, it's important to understand how interfaces work in Solidity. An **interface** is another concept that will be familiar to programmers of other languages. - -Interfaces define functions without their implementation, leaving inheriting contracts to define the actual implementation themselves. This makes it easier to know what functions to call in a contract. Here's an example of an interface: - -```solidity -{% include samples/Tutorials/Test.sol %} -``` - - -For this example, `override` is necessary in the `Test` contract function because it overrides the base function contained in the `numberComparison` interface. The contract uses `pure` instead of `view` because the `isSameNum` function in the `Test` contract does not return a storage variable. - -## Using Chainlink Data Feeds - -The following code is from the [Get the Latest Price](../get-the-latest-price/) page. It describes a contract which obtains the latest ETH / USD price using the Kovan testnet. - -```solidity -{% include samples/PriceFeeds/PriceConsumerV3.sol %} -``` - -Notice how the code imports an interface called `AggregatorV3Interface`. In this case, `AggregatorV3Interface` defines that all V3 Aggregators will have the function `latestRoundData`. You can see all of the functions that a V3 Aggregator exposes in the[`AggregatorV3Interface` file on Github](https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol/). - -Our contract is initialized with the hard-coded address of the Kovan data feed for ETH / USD prices. Then, `getLatestPrice` uses `latestRoundData` to obtain the most recent round of price data. We're interested in the price, so the function returns that. - -# 7. How do I deploy to testnet? - -There are a few things that are needed to deploy a contract to a testnet: - -- [x] Smart contract code -- [ ] A Solidity compiler -- [ ] An address to deploy from -- [ ] Some ETH (in our case, testnet ETH, which is free) - -You should have the code. What you need next is a compiler. - -## The Remix IDE - -[Remix](https://remix.ethereum.org/) is an online IDE which enables anyone to write, compile and deploy smart contracts from the browser. - -Fortunately for us, Remix also has support for samples. This means that Remix can load code from Github, and in this case, `PriceConsumerV3.sol` Click the button below to open a new tab, then once Remix has loaded, find the **docs.chain.link** > **samples** > **PriceFeeds** folder in the File Explorer on the left-hand side, and click on the file to open the code in the editor. - - - -![Remix Select PriceConsumerV3.sol](/files/beginner-tutorial-remix-snapshot.png) - -Get familiar with the layout of Remix and play around with the contract. This is what you'll use for the compiler. - -- [x] Smart contract code -- [x] A Solidity compiler -- [ ] An address to deploy from -- [ ] Some ETH - -Now you need an address to deploy from. - -## Metamask Wallet - -Contracts are deployed by addresses on the network, so to deploy your own you need an address. Not only that, but you need an address which you can easily use with Remix. Fortunately, Metamask is just what is needed. **Metamask** allows anyone to create an address, store funds and interact with Ethereum compatible blockchains from a browser extension. - -Head to the [Metamask website](https://metamask.io/) to download, install and create an account. - -Once that's done, navigate to the Kovan testnet inside Metamask extension, as seen in the image below. - -![Metamask Select Kovan Screen](/files/de9b81c-kovan.gif) - -You now have an address to deploy to the Kovan testnet from. - -- [x] Smart contract code -- [x] A Solidity compiler -- [x] An address to deploy from -- [ ] Some ETH - -You'll finally need to obtain ETH to deploy our smart contract to a testnet. - -## Obtaining testnet ETH - -Making transactions on Ethereum blockchains are not free, they cost ETH. Deploying a contract is no exception to this rule. Fortunately, testnet ETH doesn't actually cost anything, since the purpose of testnets is to test smart contracts publically before they are deployed to the mainnet. - -Connect your Metamask wallet and request ETH from one of the available faucets on [LINK Token Contracts page](../link-token-contracts/). - -- [x] Smart contract code -- [x] A Solidity compiler -- [x] An address to deploy from -- [X] Some ETH - -Great, you now have all the necessary components to compile and deploy your smart contract! - -## Compiling your Smart Contract - -You should have all the pieces needed to deploy our price consumer to Kovan. To start the process you will need to compile it first. Head back to the **Remix** tab. - -Under the logo in the top left-hand corner, there's a vertical menu consisting of icons. Hovering over each button shows a tooltip explaining what each item is. The first is **File explorer**, which shows us all the files loaded into Remix. The second is **Solidity compiler**. Click on this icon to open up a side menu where you can compile your contract. - -Remix should automatically detect the correct compiler version depending on the version specified in the contract and you should see a button that looks like this: - -![Remix Click Complile PriceConsumerV3.sol](/files/99af570-Screenshot_2020-11-27_at_10.45.44.png) - -Click it, and you will see some details below it by scrolling down. There might be a few yellow warnings, but don't worry about those for now. If the warnings are red, revisit your code and troubleshoot any bugs or errors which might be present. - -## Deploying - -Looking at the icon menu on the far-left again. Below the compiler icon should be **Deploy & run transactions**. Click on that. - -This screen might seem a little more intimidating, but do not fret. This is where you will hook up Metamask to Remix so that it knows which account to deploy from. - -Click **ENVIRONMENT**. the selected value should currently be **Javascript VM**. Instead, select **Injected Web3**. This should trigger a Metamask notification asking for permission to connect. Accept it, and your address should be automatically loaded into the **ACCOUNT** menu below **ENVIRONMENT**. - -Once that's done, check that the **CONTRACT** menu displays the name of your contract. In many cases, Remix defaults to deploying the first contract which appears alphabetically in the menu; to prevent errors, select the correct contract, then click **Deploy**. Another Metamask notification will pop up asking for permission, and detailing how much GAS it will cost in testnet ETH. Confirm the transaction and await confirmation! This might take a few seconds depending on the network, so be patient. - -## Get the Price - -Once your smart contract is deployed, an item will appear in the **Deployed Contracts** section underneath the **Deploy** button. This is the deployed contract with all its address. - -![Remix Deployed Contracts Section](/files/ca77c39-Screenshot_2020-11-27_at_10.56.56.png) - -Click on the caret to see a list of all the functions available to call. - -Click **getLatestPrice**, and voilà! The latest price appears just underneath the button. You have successfully deployed a smart contract, which uses Chainlink data feeds, to the Kovan Ethereum testnet! - -# 8. Further Reading - -To read more about data feeds, read our blog posts: - -- [Build a dApp on xDai Chain With Secure Data Feeds](https://blog.chain.link/build-a-dapp-on-xdai-chain-with-secure-data-feeds/) -- [Build a dApp on Binance Smart Chain With Secure Data Feeds](https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/) -- [The 3 Levels of Data Aggregation in Chainlink Price Feeds](https://blog.chain.link/levels-of-data-aggregation-in-chainlink-price-feeds/) - -To explore more applications of data feeds, check out our [other tutorials](../other-tutorials/#data-feeds). diff --git a/docs/Using Randomness/using-chainlink-vrf.md b/docs/Introduction/tutorials/intermediates-tutorial.md similarity index 94% rename from docs/Using Randomness/using-chainlink-vrf.md rename to docs/Introduction/tutorials/intermediates-tutorial.md index e5daf504242..f180ad8eb29 100644 --- a/docs/Using Randomness/using-chainlink-vrf.md +++ b/docs/Introduction/tutorials/intermediates-tutorial.md @@ -1,11 +1,11 @@ --- layout: nodes.liquid -section: ethereum +section: gettingStarted date: Last Modified -title: "Using Chainlink VRF" -permalink: "docs/get-a-random-number/" +title: "Random Numbers: Using Chainlink VRF" +permalink: "docs/intermediates-tutorial/" excerpt: "Using Chainlink VRF" -whatsnext: {"VRF Example Contracts":"/docs/vrf-example-contracts/", "API Reference":"/docs/chainlink-vrf-api-reference/", "Contract Addresses":"/docs/vrf-contracts/"} +whatsnext: {"Get a Random Number":"/docs/get-a-random-number/", "API Reference":"/docs/chainlink-vrf-api-reference/", "Contract Addresses":"/docs/vrf-contracts/"} metadata: title: "Random Numbers: Using Chainlink VRF" description: "Learn how to use randomness in your smart contracts using Chainlink VRF." @@ -47,7 +47,7 @@ Randomness is very difficult to generate on blockchains. This is because every n # 2. What is the Request and Receive cycle? -The [previous tutorial](../beginners-tutorial/) explained how to consume Chainlink Data Feeds, which consist of reference data posted on-chain by oracles. This data is stored in a contract and can be referenced by consumers until the oracle updates the data again. +The [previous guide](/docs/consuming-data-feeds/) explained how to consume Chainlink Data Feeds, which consist of reference data posted on-chain by oracles. This data is stored in a contract and can be referenced by consumers until the oracle updates the data again. Randomness, on the other hand, cannot be reference data. If the result of randomness is stored on-chain, any actor could retrieve the value and predict the outcome. Instead, randomness must be requested from an oracle, which generates a number and a cryptographic proof. Then, the oracle returns that result to the contract that requested it. This sequence is known as the **[Request and Receive cycle](../architecture-request-model/)**. @@ -304,7 +304,7 @@ You have now completed all necessary functions to generate randomness and assign # 5. How do I deploy to testnet? -You will now deploy your completed contract. This deployment is slightly different than the example in the [The Basics: Using Data Feeds](/docs/beginners-tutorial/#7-how-do-i-deploy-to-testnet) tutorial. In our case, you will have to pass in parameters to the constructor upon deployment. +You will now deploy your completed contract. This deployment is slightly different than the example in the [Deploy Your First Contract](/docs/deploy-your-first-contract/) guide. In our case, you will have to pass in parameters to the constructor upon deployment. Once compiled, you'll see a menu that looks like this in the deploy pane: @@ -319,7 +319,7 @@ Click the caret arrow on the right hand side of **Deploy** to expand the paramet These are the coordinator address, LINK address, key hash, and fee. For a full reference of the addresses, key hashes, and fees for each network, see [VRF Contracts](../vrf-contracts/). Click deploy and use your Metamask account to confirm the transaction. -**Note**: You should [have some Kovan ETH](/docs/beginners-tutorial/#obtaining-testnet-eth) in your Metamask account to pay for the GAS. +**Note**: You should [have some Kovan ETH](/docs/deploy-your-first-contract/#install-and-fund-your-metamask-wallet) in your Metamask account to pay for the GAS. At this point, your contract should be successfully deployed. However, it can't request anything yet since it doesn't own LINK. If you click `rollDice` with no LINK, the transaction will revert. diff --git a/docs/Node Operators/fulfilling-requests.md b/docs/Node Operators/fulfilling-requests.md index 793d16b9f3e..aed493a778b 100644 --- a/docs/Node Operators/fulfilling-requests.md +++ b/docs/Node Operators/fulfilling-requests.md @@ -15,7 +15,7 @@ With your own Oracle contract, you can use your own node to fulfill requests. Th Before you begin this guide, complete the following tasks to make sure you have all of the tools that you need: -- Complete the [Beginner Walkthrough](../beginners-tutorial) to obtain Testnet LINK and set up MetaMask. +- [Set up MetaMask](/docs/deploy-your-first-contract/#install-and-fund-your-metamask-wallet) and [obtain testnet LINK](/docs/acquire-link/). - Configure an Ethereum client with an active websocket connection. Either [Run an Ethereum Client](../run-an-ethereum-client/) yourself or use an [External Service](../run-an-ethereum-client/#external-services) that your Chainlink Node can access. - [Run a Chainlink Node](../running-a-chainlink-node/) and connect it to a [supported database](../connecting-to-a-remote-database/). - Fund the Ethereum address that your Chainlink node uses. You can find the address in the node Operator GUI under the **Keys** tab. The address of the node is the `Regular` type. You can obtain test ETH from several [faucets](../link-token-contracts/). diff --git a/docs/Using Any API/using-any-api.md b/docs/Using Any API/using-any-api.md index 11d7cc56642..ea948ba7e64 100644 --- a/docs/Using Any API/using-any-api.md +++ b/docs/Using Any API/using-any-api.md @@ -270,7 +270,7 @@ Your contract is complete and ready to be compiled and deployed. You can see a c What is Remix?
    -If you don't know how to deploy a contract to the Kovan testnet from Remix, follow [The Basics](/docs/beginners-tutorial) tutorial. To make a job request, you *must* have enough LINK to pay for it. Learn how to [acquire testnet LINK](../acquire-link/) and [fund your contract](../fund-your-contract/). Once these steps are completed, you should be able to get sports data. +If you don't know how to deploy a contract to the Kovan testnet from Remix, follow getting started guide for [Deploying Your First Smart Contract](/docs/deploy-your-first-contract/). To make a job request, you *must* have enough LINK to pay for it. Learn how to [acquire testnet LINK](/docs/acquire-link/) and [fund your contract](/docs/fund-your-contract/). Once these steps are completed, you should be able to get sports data. # 6. Further Reading diff --git a/docs/Using Randomness/vrf-example-contracts.md b/docs/Using Randomness/get-a-random-number.md similarity index 98% rename from docs/Using Randomness/vrf-example-contracts.md rename to docs/Using Randomness/get-a-random-number.md index c7787da3cac..ca1ad4a2a83 100644 --- a/docs/Using Randomness/vrf-example-contracts.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -3,7 +3,7 @@ layout: nodes.liquid section: ethereum date: Last Modified title: "Example Contracts" -permalink: "docs/vrf-example-contracts/" +permalink: "docs/get-a-random-number/" whatsnext: {"API Reference":"/docs/chainlink-vrf-api-reference/", "Contract Addresses":"/docs/vrf-contracts/"} metadata: description: "How to generate a random number inside a smart contract using Chainlink VRF." diff --git a/docs/home.html b/docs/home.html index 1a8060395be..e633b75769c 100644 --- a/docs/home.html +++ b/docs/home.html @@ -161,4 +161,4 @@

    Need to run your own Chainlink Node?

    -
  • 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%0Dqt&7oIQ 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�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Õ#TxeEgW3OL= QtEM1iBoxFeM2&*}7h!8n8~^|S literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/confirmTransaction.png b/_src/images/getting-started/confirmTransaction.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a3f7bcd5b3f41a59ca979c21a58f3acd224709 GIT binary patch literal 51786 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Ϛ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 Iis*g+U*+N5Hvj+t literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/connectRemix.png b/_src/images/getting-started/connectRemix.png new file mode 100644 index 0000000000000000000000000000000000000000..bcee6eb337475de84353b42d6051fd6c93e74108 GIT binary patch literal 44809 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 literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/deployPriceConsumerV3.png b/_src/images/getting-started/deployPriceConsumerV3.png new file mode 100644 index 0000000000000000000000000000000000000000..044d4873f68facaa4379c908b0e553de73e1d55c GIT binary patch literal 15641 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 T3lTUXiy$YZELr`@B=mm)k(B#N literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/deployedContract.png b/_src/images/getting-started/deployedContract.png new file mode 100644 index 0000000000000000000000000000000000000000..689f74a458565c0d052a89feef770354c4e8c965 GIT binary patch literal 33087 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 literal 0 HcmV?d00001 diff --git a/_src/images/getting-started/deployedContractPriceConsumerV3.png b/_src/images/getting-started/deployedContractPriceConsumerV3.png new file mode 100644 index 0000000000000000000000000000000000000000..e040f4cd3abf913928b51f543581902eb03ff1a5 GIT binary patch literal 15315 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

    diff --git a/firebase.json b/firebase.json index 2f1e1336090..daa8b05bae6 100644 --- a/firebase.json +++ b/firebase.json @@ -69,7 +69,17 @@ }, { "source": "/docs/contract-creators-overview/", - "destination": "/docs/user-guides/", + "destination": "/getting-started/", + "type": 301 + }, + { + "source": "/docs/user-guides/", + "destination": "/getting-started/", + "type": 301 + }, + { + "source": "/docs/user-guides", + "destination": "/getting-started/", "type": 301 }, { @@ -94,7 +104,7 @@ }, { "source": "/docs/example-walkthrough", - "destination": "/docs/intermediates-tutorial/", + "destination": "/docs/get-a-random-number/", "type": 301 }, { @@ -129,12 +139,52 @@ }, { "source": "/docs/intermediates-tutorial/", - "destination": "docs/get-a-random-number/", + "destination": "/docs/get-a-random-number/", "type": 301 }, { "source": "/docs/intermediates-tutorial", - "destination": "docs/get-a-random-number/", + "destination": "/docs/get-a-random-number/", + "type": 301 + }, + { + "source": "/docs/beginners-tutorial/", + "destination": "/docs/conceptual-overview/", + "type": 301 + }, + { + "source": "/docs/beginners-tutorial", + "destination": "/docs/conceptual-overview/", + "type": 301 + }, + { + "source": "docs/use-your-first-contract/", + "destination": "/docs/deploy-your-first-contract/", + "type": 301 + }, + { + "source": "/docs/use-your-first-contract", + "destination": "/docs/deploy-your-first-contract/", + "type": 301 + }, + { + "source": "/docs/install-metamask/", + "destination": "/docs/deploy-your-first-contract/#install-and-fund-your-metamask-wallet", + "type": 301 + }, + { + "source": "/docs/install-metamask", + "destination": "/docs/deploy-your-first-contract/#install-and-fund-your-metamask-wallet", + "type": 301 + }, + { + "source": "/docs/advanced-tutorial/", + "destination": "/docs/using-any-api/", + "type": 301 + }, + { + "source": "/docs/advanced-tutorial", + "destination": "/docs/using-any-api/", "type": 301 }, ] From 3755806d8d2d3021aa03a051406cc7e391f0a8eb Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Sun, 12 Dec 2021 20:32:57 -0800 Subject: [PATCH 13/26] Link and navigation fixes. --- _includes/main.liquid | 81 +------------------ _includes/nodes.liquid | 3 - docs/Additional Information/faq.md | 4 +- .../chainlink-alarm-clock.md | 2 +- .../dns-ownership-oracle.md | 2 +- .../finage-global-market-data-oracle.md | 2 +- docs/Data Provider Nodes/google-weather.md | 2 +- .../kraken-rates-oracle-node.md | 2 +- docs/Data Provider Nodes/lcx-testnet.md | 2 +- .../getting-started/conceptual-overview.md | 4 +- .../deploy-your-first-contract.md | 2 +- .../tutorials/intermediates-tutorial.md | 2 +- docs/Using Any API/existing-job-request.md | 4 +- docs/Using Any API/large-responses.md | 2 +- docs/Using Any API/make-a-http-get-request.md | 2 +- .../Using Any API/multi-variable-responses.md | 2 +- docs/Using Any API/using-any-api.md | 6 +- docs/Using Price Feeds/feed-registry.html | 2 +- .../get-the-latest-price.html | 2 +- .../historical-price-data.html | 2 +- docs/Using Randomness/get-a-random-number.md | 2 +- .../chainlink-keepers/compatible-contracts.md | 2 +- docs/home.html | 1 - 23 files changed, 26 insertions(+), 109 deletions(-) diff --git a/_includes/main.liquid b/_includes/main.liquid index cbfbde8f5db..93661cdc297 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -80,84 +80,7 @@ aria-label="home">Chainlink Developers - - - - - - - +
    @@ -173,8 +96,6 @@
    - -
    {{ content }}
    diff --git a/_includes/nodes.liquid b/_includes/nodes.liquid index 761eb19a23d..ccf5c9eb106 100644 --- a/_includes/nodes.liquid +++ b/_includes/nodes.liquid @@ -40,9 +40,6 @@ layout: ./main.liquid {% if title %}
    - {% if logo %} - - {% endif %}

    {{title}}

    diff --git a/docs/Additional Information/faq.md b/docs/Additional Information/faq.md index 87960544c74..9ac7eb395da 100644 --- a/docs/Additional Information/faq.md +++ b/docs/Additional Information/faq.md @@ -109,7 +109,7 @@ If you already have a project started and would like to integrate Chainlink, you Resources: * [Create a Chainlinked Project](../create-a-chainlinked-project/) -* [Example Walkthrough](/docs/get-a-random-number/) +* [Example Walkthrough](/docs/intermediates-tutorial/) * How to use Chainlink with Truffle ## Can Chainlink be used to connect to <*some blockchain/API*>? @@ -126,7 +126,7 @@ You can use the Chainlink Market< Resources: * [Create a Chainlinked Project](../create-a-chainlinked-project/) -* [Example Walkthrough](/docs/get-a-random-number/) +* [Example Walkthrough](/docs/intermediates-tutorial/) * Chainlink Market * [Chainlink Contract Reference](../chainlink-framework/#sendchainlinkrequestto) diff --git a/docs/Data Provider Nodes/chainlink-alarm-clock.md b/docs/Data Provider Nodes/chainlink-alarm-clock.md index af705e2934d..2ad415f0204 100644 --- a/docs/Data Provider Nodes/chainlink-alarm-clock.md +++ b/docs/Data Provider Nodes/chainlink-alarm-clock.md @@ -56,7 +56,7 @@ contract ChainlinkAlarmClock is ChainlinkClient { # Tasks diff --git a/docs/Data Provider Nodes/dns-ownership-oracle.md b/docs/Data Provider Nodes/dns-ownership-oracle.md index ac42895ea77..1b0f1f50a60 100644 --- a/docs/Data Provider Nodes/dns-ownership-oracle.md +++ b/docs/Data Provider Nodes/dns-ownership-oracle.md @@ -97,7 +97,7 @@ contract DnsOwnershipChainlink is ChainlinkClient { # Tasks diff --git a/docs/Data Provider Nodes/finage-global-market-data-oracle.md b/docs/Data Provider Nodes/finage-global-market-data-oracle.md index a4344e1e24e..75d3813c23a 100644 --- a/docs/Data Provider Nodes/finage-global-market-data-oracle.md +++ b/docs/Data Provider Nodes/finage-global-market-data-oracle.md @@ -92,7 +92,7 @@ contract FinageChainlink is ChainlinkClient { # Tasks diff --git a/docs/Data Provider Nodes/google-weather.md b/docs/Data Provider Nodes/google-weather.md index 3b3cf948e47..67f11744e71 100644 --- a/docs/Data Provider Nodes/google-weather.md +++ b/docs/Data Provider Nodes/google-weather.md @@ -63,7 +63,7 @@ Import `ChainlinkClient.sol` into your contract so you can inherit the `Chainlin diff --git a/docs/Data Provider Nodes/kraken-rates-oracle-node.md b/docs/Data Provider Nodes/kraken-rates-oracle-node.md index 7a0f99110a5..846b411fff0 100644 --- a/docs/Data Provider Nodes/kraken-rates-oracle-node.md +++ b/docs/Data Provider Nodes/kraken-rates-oracle-node.md @@ -96,7 +96,7 @@ contract KrakenChainlink is ChainlinkClient { # Tasks diff --git a/docs/Data Provider Nodes/lcx-testnet.md b/docs/Data Provider Nodes/lcx-testnet.md index 3478793dd58..6b50ded6ab9 100644 --- a/docs/Data Provider Nodes/lcx-testnet.md +++ b/docs/Data Provider Nodes/lcx-testnet.md @@ -88,7 +88,7 @@ contract LCXChainlink is ChainlinkClient { # Tasks diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md index 6445a556ebe..11280f50b52 100644 --- a/docs/Introduction/getting-started/conceptual-overview.md +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -59,7 +59,7 @@ The structure of a smart contract is similar to that of a class in Javascript, w ### Solidity versions @@ -131,7 +131,7 @@ An **interface** is another concept that is familiar to programmers of other lan ``` For this example, `override` is necessary in the `Test` contract function because it overrides the base function contained in the `numberComparison` interface. The contract uses `pure` instead of `view` because the `isSameNum` function in the `Test` contract does not return a storage variable. diff --git a/docs/Introduction/getting-started/deploy-your-first-contract.md b/docs/Introduction/getting-started/deploy-your-first-contract.md index 3aff2dca8d4..e659de0e7a5 100644 --- a/docs/Introduction/getting-started/deploy-your-first-contract.md +++ b/docs/Introduction/getting-started/deploy-your-first-contract.md @@ -69,7 +69,7 @@ Your first contract is a simple `HelloWorld.sol` example. This example shows you 1. Because the code is already written, you can start the compile step. On the left side of Remix, click the **Solidity Compiler** tab to view the compiler settings. diff --git a/docs/Introduction/tutorials/intermediates-tutorial.md b/docs/Introduction/tutorials/intermediates-tutorial.md index f180ad8eb29..cc6dbd9b250 100644 --- a/docs/Introduction/tutorials/intermediates-tutorial.md +++ b/docs/Introduction/tutorials/intermediates-tutorial.md @@ -297,7 +297,7 @@ contract VRFD20 is VRFConsumerBase, ConfirmedOwner(msg.sender) { You have now completed all necessary functions to generate randomness and assign the user a *Game of Thrones* house. We've added a few helper functions in there to make using the contract easier and more flexible. You can deploy and interact with the complete contract in Remix. diff --git a/docs/Using Any API/existing-job-request.md b/docs/Using Any API/existing-job-request.md index 6893ca1ac3c..103aa5c7bf2 100644 --- a/docs/Using Any API/existing-job-request.md +++ b/docs/Using Any API/existing-job-request.md @@ -17,7 +17,7 @@ Using an *existing* Oracle Job makes your smart contract code more succinct. Thi In [Make a GET Request](../make-a-http-get-request/), the example contract code declared which URL to use, where to find the data in the response, and how to convert it so that it can be represented on-chain. -This example uses an existing job that is pre-configured to make requests to get [AP Election data](https://developer.ap.org/ap-elections-api/). +This example uses an existing job that is pre-configured to make requests to get [AP Election data](https://developer.ap.org/ap-elections-api/). You can find the job spec for this example on [GitHub](https://github.com/smartcontractkit/documentation/tree/main/_includes/samples/APIRequests/ap-election-job.toml). @@ -28,7 +28,7 @@ You can find the job spec for this example on [GitHub](https://github.com/smartc ```solidity diff --git a/docs/Using Any API/large-responses.md b/docs/Using Any API/large-responses.md index 6ed8b8650ec..665d5ab0eb3 100644 --- a/docs/Using Any API/large-responses.md +++ b/docs/Using Any API/large-responses.md @@ -19,7 +19,7 @@ To consume an API with a large responses, your contract should inherit from [Cha ```solidity Kovan diff --git a/docs/Using Any API/make-a-http-get-request.md b/docs/Using Any API/make-a-http-get-request.md index 228d1540e8b..1744611ebe7 100644 --- a/docs/Using Any API/make-a-http-get-request.md +++ b/docs/Using Any API/make-a-http-get-request.md @@ -25,7 +25,7 @@ Currently, any return value must fit within 32 bytes, if the value is bigger tha ```solidity Kovan diff --git a/docs/Using Any API/multi-variable-responses.md b/docs/Using Any API/multi-variable-responses.md index 6054e64c284..313a91838cc 100644 --- a/docs/Using Any API/multi-variable-responses.md +++ b/docs/Using Any API/multi-variable-responses.md @@ -25,7 +25,7 @@ To consume an API with multiple responses, your contract should inherit from [Ch ```solidity Kovan diff --git a/docs/Using Any API/using-any-api.md b/docs/Using Any API/using-any-api.md index ea948ba7e64..428d6f3a739 100644 --- a/docs/Using Any API/using-any-api.md +++ b/docs/Using Any API/using-any-api.md @@ -37,7 +37,7 @@ In this tutorial, you will learn how to request data from a public API in a smar The request and receive cycle describes how a smart contract requests data from an oracle and receives the response in a separate transaction. If you need a refresher, check out the [Basic Request Model](../architecture-request-model/). -With API calls, the contract itself *defines* which function it wants to receive the response to. +For contracts that use [Chainlink VRF](/docs/chainlink-vrf/), you request randomness from a VRF oracle and then await the response. The fulfillment function is already given to us from the `VRFConsumerBase` contract, so oracles already know where to send the response to. However, with API calls, the contract itself *defines* which function it wants to receive the response to. Before creating any code, you should understand how Oracle jobs can get data on-chain. @@ -99,7 +99,7 @@ Let's see what this looks like in a contract: Here is a breakdown of each component of this contract: @@ -267,7 +267,7 @@ Your contract is complete and ready to be compiled and deployed. You can see a c If you don't know how to deploy a contract to the Kovan testnet from Remix, follow getting started guide for [Deploying Your First Smart Contract](/docs/deploy-your-first-contract/). To make a job request, you *must* have enough LINK to pay for it. Learn how to [acquire testnet LINK](/docs/acquire-link/) and [fund your contract](/docs/fund-your-contract/). Once these steps are completed, you should be able to get sports data. diff --git a/docs/Using Price Feeds/feed-registry.html b/docs/Using Price Feeds/feed-registry.html index fa43b9cb717..2b903ce8650 100644 --- a/docs/Using Price Feeds/feed-registry.html +++ b/docs/Using Price Feeds/feed-registry.html @@ -74,7 +74,7 @@ {% markdown %} diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index be2548f6778..a798413e743 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -41,7 +41,7 @@ The `latestRoundData` function returns five values representing information about the latest price data. See the [Data Feeds API Reference](../price-feeds-api-reference/) for more details. diff --git a/docs/Using Price Feeds/historical-price-data.html b/docs/Using Price Feeds/historical-price-data.html index 3d7261ace2c..7bb7bff3521 100644 --- a/docs/Using Price Feeds/historical-price-data.html +++ b/docs/Using Price Feeds/historical-price-data.html @@ -45,7 +45,7 @@ ## Javascript diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/get-a-random-number.md index ca1ad4a2a83..a86bcef0783 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -42,7 +42,7 @@ Note, the below values have to be configured correctly for VRF requests to work. > 🚧 Maximum Gas for Callback diff --git a/docs/chainlink-keepers/compatible-contracts.md b/docs/chainlink-keepers/compatible-contracts.md index f872446ad85..4c2527f0001 100644 --- a/docs/chainlink-keepers/compatible-contracts.md +++ b/docs/chainlink-keepers/compatible-contracts.md @@ -157,7 +157,7 @@ The example below represents a simple counter contract. Each time `performUpkeep > ❗️ **WARNING** diff --git a/docs/home.html b/docs/home.html index e633b75769c..a4e0697b0f9 100644 --- a/docs/home.html +++ b/docs/home.html @@ -161,4 +161,3 @@

    Need to run your own Chainlink Node?

    -
    From 55fc1014328a3682f851d7722ee20e419e9fcafd Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Mon, 13 Dec 2021 10:54:47 -0800 Subject: [PATCH 14/26] Add products to homepage with chain selection. --- _src/docs.css | 55 +++++++++++++++++++++ docs/home.html | 128 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 180 insertions(+), 3 deletions(-) diff --git a/_src/docs.css b/_src/docs.css index d95484a925a..ab995b6fedd 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -632,6 +632,61 @@ hr { transform: translate(5px, 0px); } +.cl-chaincard-product { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.cl-chaincard-product > div { + width: 220px; + min-width: 220px; + margin: 8px; + padding: 16px; + border-radius: 8px; + border: 1px solid #dee7fc; + text-align: center; + flex: 1; +} + +.cl-chaincard-product h3 { + text-align: center; + vertical-align: middle; + height: 45px; + margin-top: 16px; +} + +.cl-chaincard-product p { + display: block; + text-align: center; + vertical-align: middle; + height: 55px; + margin-top: 16px; +} + +.cl-chaincard-product > div > div > img { + height: 50px; + max-height: 50px; +} + +.cl-chaincard-product > div > div > a { + display: inline-flex; + width: 32px; + height: 32px; + margin: 4px; +} + +.cl-chaincard-product > div > div > a > img { + max-height: 32px; + max-width: 32px; + transition: all 0.2s; +} + +.cl-chaincard-product > div > div > a:hover > img { + cursor: pointer; + transform: scale(1.15); +} + /** Imported from old site **/ .cl-custom-page { text-align: center; diff --git a/docs/home.html b/docs/home.html index a4e0697b0f9..f87cb32557b 100644 --- a/docs/home.html +++ b/docs/home.html @@ -62,7 +62,7 @@

    Networks and Products

    -

    Ethereum Chains

    +

    Ethereum Chains

    +
    +
    +
    + +

    Data Feeds

    +
    +

    Get data and asset prices in your Smart Contracts.

    + +
    +
    +
    + +

    Verifiable Random Numbers (VRF)

    +
    +

    Use Chainlink VRF to consume randomness in your smart contracts.

    + +
    +
    +
    + +

    Call External APIs

    +
    +

    Request & Receive data from any API using the Chainlink contract library.

    + +
    +
    +
    + +

    Chainlink Keepers

    +
    +

    Automation for smart contract functions and maintenance.

    + +
    +
    From 50d35aa2663ba3c6c62db662290319b24061f6b7 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Tue, 14 Dec 2021 11:01:09 -0800 Subject: [PATCH 15/26] More CSS changes. --- _src/docs.css | 24 +++++++++++++++------- docs/Introduction/getting-started.md | 2 +- docs/home.html | 30 ++++++++++++++++++---------- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/_src/docs.css b/_src/docs.css index ab995b6fedd..9dde76ce3d0 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -550,6 +550,16 @@ hr { /** Custom Chain Cards **/ +.cl-chaincard-wrapper > h2 { + text-align: center; + max-width: 800px; +} + +.cl-chaincard-wrapper > p { + text-align: center; + max-width: 800px; +} + .cl-chaincard { display: flex; flex-wrap: wrap; @@ -561,9 +571,9 @@ hr { } .cl-chaincard > div { - width: 300px; - min-width: 270px; - max-width: 320px; + width: 350px; + max-width: 350px; + min-width: 220px; margin: 8px; border-radius: 8px; border: 1px solid #dee7fc; @@ -635,14 +645,14 @@ hr { .cl-chaincard-product { display: flex; flex-wrap: wrap; - justify-content: space-between; + justify-content: center; } .cl-chaincard-product > div { - width: 220px; - min-width: 220px; + max-width: 295px; + min-width: 295px; margin: 8px; - padding: 16px; + padding: 24px 14px 24px 14px; border-radius: 8px; border: 1px solid #dee7fc; text-align: center; diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index 3a657d3a856..d155feb47b9 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -166,4 +166,4 @@ permalink: /getting-started/
    -Need to run your own Chainlink node? Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. +Running your own Chainlink node? See the [Node Operator's Guide](/docs/chainlink-nodes) to learn about starting and maintaining Chainlink Nodes. diff --git a/docs/home.html b/docs/home.html index f87cb32557b..d05031c49ae 100644 --- a/docs/home.html +++ b/docs/home.html @@ -9,7 +9,7 @@
    -
    +
    @@ -23,10 +23,10 @@

    New to Chainlink and Smart Contracts?

    -
    -

    Networks and Products

    +
    +

    Supported Blockchains

    - Chainlink products are available on several networks. Select a network or a product to get started. + Chainlink gives smart contract developers the oracle infrastructure and tooling they need to build scalable and externally-connected dApps on several blockchains and layer-2 networks. Select a blockchain to get started.

    @@ -85,14 +85,14 @@

    Ethereum Chains

  • - - Chainlink Keepers + + Connect Any API
  • - - Connect Any API + + Chainlink Keepers
  • @@ -143,6 +143,14 @@

    Terra

    +
    +
    +
    +
    +

    Products

    +

    + Chainlink offers several products on blockchains and layer-2 networks. Select a product to get started. +

    @@ -269,13 +277,13 @@

    Chainlink Keepers

    -
    +
    -

    Need to run your own Chainlink Node?

    +

    Running your own Chainlink Node?

    - Read the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. + See the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes.

    Node Operator's Guide From 673dcf7b22e495a0b8f371ea979344032f933d74 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Tue, 14 Dec 2021 11:22:10 -0800 Subject: [PATCH 16/26] Navigation fixes. --- _data/navigation.js | 10 +++------- docs/Introduction/getting-started.md | 10 +++++----- docs/home.html | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/_data/navigation.js b/_data/navigation.js index 9144fb3031e..36caf0d4776 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -18,7 +18,7 @@ module.exports = { }, { title: 'Get Random Numbers', - url: '/docs/get-a-random-number/' + url: '/docs/intermediates-tutorial/', }, { title: 'Acquire testnet LINK', @@ -42,10 +42,6 @@ module.exports = { { section: 'Next Steps', contents: [ - { - title: 'Request Public API Data ↗', - url: '/docs/using-any-api/', - }, { title: 'Chainlink Architecture ↗', url: '/docs/architecture-overview/', @@ -63,7 +59,7 @@ module.exports = { url: '/docs/chainlink-keepers/introduction/', }, { - title: 'Using Any API ↗', + title: 'Connect to Public API Data ↗', url: '/docs/request-and-receive-data/', }, { @@ -186,7 +182,7 @@ module.exports = { url: '/docs/chainlink-vrf/', }, { - title: 'Example Contracts', + title: 'Get a Random Number', url: '/docs/get-a-random-number/', }, { diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index d155feb47b9..5ce5084736f 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -87,7 +87,7 @@ permalink: /getting-started/

    Learn how to get verifiable random numbers on-chain.

    -
    +
    Learn More Right arrow @@ -124,7 +124,7 @@ permalink: /getting-started/

    Architecture Overview

    - +
    Videos and Tutorials
    - +
    Chainlink Blog
    - +
    -Running your own Chainlink node? See the [Node Operator's Guide](/docs/chainlink-nodes) to learn about starting and maintaining Chainlink Nodes. +Running your own Chainlink node? See the [Node Operator's Guide](/chainlink-nodes/) to learn about starting and maintaining Chainlink Nodes. diff --git a/docs/home.html b/docs/home.html index d05031c49ae..52ed30a8ec4 100644 --- a/docs/home.html +++ b/docs/home.html @@ -285,7 +285,7 @@

    Running your own Chainlink Node?

    See the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes.

    -
    + Node Operator's Guide
    From 3792666fc2d61832ebfb55f1a7f1d8c06f022572 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Tue, 14 Dec 2021 18:52:03 -0800 Subject: [PATCH 17/26] Replace banners with SVG logos to fix mobile scaling --- docs/Chains/solana.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/Chains/solana.md b/docs/Chains/solana.md index 522e97ed5a3..4b11664c402 100644 --- a/docs/Chains/solana.md +++ b/docs/Chains/solana.md @@ -19,8 +19,7 @@ permalink: /solana/

    Use Data Feeds on Solana

    From 7f3ecafe3a0afba07b2ee33b4668ccf5853ff63e Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 15 Dec 2021 08:20:55 -0800 Subject: [PATCH 18/26] Minor fixes --- TEMPLATE.md | 4 +- _src/images/logos/optimism-uniswap.svg | 48 ------------------- _src/images/logos/optimism.svg | 6 +++ docs/Introduction/getting-started.md | 2 +- .../getting-started/conceptual-overview.md | 2 +- .../deploy-your-first-contract.md | 4 +- .../getting-started/fund-your-contract.md | 2 +- .../getting-started/other-tutorials.md | 30 ++++++------ .../tutorials/intermediates-tutorial.md | 2 +- docs/home.html | 8 ++-- 10 files changed, 34 insertions(+), 74 deletions(-) delete mode 100644 _src/images/logos/optimism-uniswap.svg create mode 100644 _src/images/logos/optimism.svg diff --git a/TEMPLATE.md b/TEMPLATE.md index 0897775dc20..07cc833c65a 100644 --- a/TEMPLATE.md +++ b/TEMPLATE.md @@ -10,7 +10,7 @@ metadata: image: 0: "insert image here" --- -*This doc is meant to be used as a template for creating a tutorial doc. Contributors should emulate the structure of this document when creating new pages. The content of this doc comes from the Getting Started Guides.* +*This doc is meant to be used as a template for creating a tutorial doc. Contributors should emulate the structure of this document when creating new pages. The content of this doc comes from the [Getting Started Guides](https://github.com/smartcontractkit/documentation/tree/main/docs/Introduction/getting-started/).* *Prerequisites should have its own block at the beginning of the tutorial. Tell the user what tools are required, what knowledge they should already have, and where to go if they need previous reading. Provide links to the other docs pages.* > 👍 Prerequisites @@ -96,7 +96,7 @@ You can see the latest versions of the Solidity compiler [here](https://github.c ```solidity pragma solidity >=0.7.0 <0.9.0; ``` -This means that the code is written for Solidity version 0.7.0, or a newer version of the language up to, but not including version 0.9.0. In short, `pragma` is used to instruct the compiler as how to treat the code. +This means that the code is written for Solidity version 0.7.0, or a newer version of the language up to, but not including version 0.9.0. The `pragma` selects the compiler, which defines how the code is treated. ... diff --git a/_src/images/logos/optimism-uniswap.svg b/_src/images/logos/optimism-uniswap.svg deleted file mode 100644 index fa31aeaa13d..00000000000 --- a/_src/images/logos/optimism-uniswap.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - diff --git a/_src/images/logos/optimism.svg b/_src/images/logos/optimism.svg new file mode 100644 index 00000000000..9a42c24b522 --- /dev/null +++ b/_src/images/logos/optimism.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index 5ce5084736f..70f4b7039a4 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -166,4 +166,4 @@ permalink: /getting-started/

    -Running your own Chainlink node? See the [Node Operator's Guide](/chainlink-nodes/) to learn about starting and maintaining Chainlink Nodes. +Need to run your own Chainlink node? See the [Node Operator's Guide](/chainlink-nodes/) to learn about starting and maintaining Chainlink Nodes. diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md index 11280f50b52..7bc398d66a0 100644 --- a/docs/Introduction/getting-started/conceptual-overview.md +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -71,7 +71,7 @@ You can see the latest versions of the Solidity compiler [here](https://github.c ```solidity pragma solidity >=0.7.0 <0.9.0; ``` -This means that the code is written for Solidity version 0.7.0, or a newer version of the language up to, but not including version 0.9.0. In short, `pragma` is used to instruct the compiler as how to treat the code. +This means that the code is written for Solidity version 0.7.0, or a newer version of the language up to, but not including version 0.9.0. The `pragma` selects the compiler, which defines how the code is treated. ### Naming a Contract diff --git a/docs/Introduction/getting-started/deploy-your-first-contract.md b/docs/Introduction/getting-started/deploy-your-first-contract.md index e659de0e7a5..02208029e75 100644 --- a/docs/Introduction/getting-started/deploy-your-first-contract.md +++ b/docs/Introduction/getting-started/deploy-your-first-contract.md @@ -16,7 +16,7 @@ You can write your first smart contract and run in your browser without any know > 📘 Already know Solidity and have MetaMask configured? > -> If you are already familiar with how to deploy Smart Contracts and use MetaMask, you can skip to the []() guide to learn how to connect your smart contracts to Chainlink data feeds. +> If you are already familiar with how to deploy Smart Contracts and use MetaMask, you can skip to the [Consuming Data Feeds](/docs/consuming-data-feeds/) guide to learn how to connect your smart contracts to Chainlink data feeds. **Table of Contents** + [Overview](#overview) @@ -117,4 +117,4 @@ Because you deployed the contract to an actual blockchain, several nodes on the Now you know how to deploy example contracts to a test network and run the functions in those contracts. You can write your own contracts and test them using this same process. -Next, read the []() guide to learn how to connect your smart contracts to Chainlink Data Feeds and retrieve on-chain data that your smart contracts can act on. +Next, read the [Consuming Data Feeds](/docs/consuming-data-feeds/) guide to learn how to connect your smart contracts to Chainlink Data Feeds and retrieve on-chain data that your smart contracts can act on. diff --git a/docs/Introduction/getting-started/fund-your-contract.md b/docs/Introduction/getting-started/fund-your-contract.md index 43de35080e1..f7f50fd2ca0 100644 --- a/docs/Introduction/getting-started/fund-your-contract.md +++ b/docs/Introduction/getting-started/fund-your-contract.md @@ -6,7 +6,7 @@ title: "Fund Your Contracts" permalink: "docs/fund-your-contract/" --- -Some smart contracts require funding at their addresses so they can operate without you having to call functions manually and pay for the transactions through MetaMask. This guide explains how to fund Solidity contracts with LINK or ETH using the Remix IDE. +Some smart contracts require funding at their addresses so they can operate without you having to call functions manually and pay for the transactions through MetaMask. This guide explains how to fund Solidity contracts with LINK or ETH. ## Retrieve the contract address diff --git a/docs/Introduction/getting-started/other-tutorials.md b/docs/Introduction/getting-started/other-tutorials.md index f6a2147fca0..68a11ab0d38 100644 --- a/docs/Introduction/getting-started/other-tutorials.md +++ b/docs/Introduction/getting-started/other-tutorials.md @@ -23,9 +23,11 @@ Welcome to the Resources page. This is a list of links and pages that you might + [Join the Community](#join-the-community) -# Smart Contract Learning Materials +## Smart Contract Learning Materials -## Video Tutorials +Videos, tutorials, examples, and bootcamps are a great way to get experience building smart contracts and using Chainlink products. The following learning materials are useful for expanding your knowledge. + +### Video Tutorials We're constantly uploading new videos to our [YouTube](https://www.youtube.com/c/chainlink) channel. Here are some direct links to playlists that may be helpful if you're starting your Chainlink learning journey or if you're looking for interesting ways to apply Chainlink to your project: @@ -39,10 +41,10 @@ We're constantly uploading new videos to our [YouTube](https://www.youtube.com/c - [Patrick Collins](https://www.youtube.com/watch?v=p36tXHX1JD8) - [Nader Dabit](https://www.youtube.com/watch?v=nS9xP1hxg3w) -## Application Projects +### Application Projects Below is a list of applications of Chainlink's products and services sorted by difficulty and type to help you navigate and search for projects that you might find interesting. See the [Chainlink Blog](https://blog.chain.link/) to stay up to date with new ways to use Chainlink. -### Data Feeds +#### Data Feeds | Name | Type | Difficulty | |:-------------------------------------------------------------------------------------------------------------------------------------------------- |:-------- |:---------- | | [How to Calculate Price Volatility for DeFi Variance Swaps](https://blog.chain.link/how-to-calculate-price-volatility-for-defi-variance-swaps/) | DeFi | Advanced | @@ -57,7 +59,7 @@ Below is a list of applications of Chainlink's products and services sorted by d | [Build and Deploy an Avalanche Smart Contract](https://blog.chain.link/how-to-build-and-deploy-an-avalanche-smart-contract/) | DeFi | Beginner | -### VRF +#### Randomness (VRF) | Name | Type | Difficulty | |:------------------------------------------------------------------------------------------------------- |:-------- |:---------- | | [How to Get a Random Number on Polygon](https://blog.chain.link/how-to-get-a-random-number-on-polygon/) | DeFi | Medium | @@ -65,7 +67,7 @@ Below is a list of applications of Chainlink's products and services sorted by d | [Build, Deploy, and Sell Your Own Dynamic NFT](https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/) | NFT | Advanced | | [How to Build a Blockchain Lottery](https://blog.chain.link/how-to-build-a-blockchain-lottery-2/) | Gambling | Advanced | -### API Requests +#### API Requests | Name | Type | Difficulty | | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |:-------------------- |:---------- | @@ -82,19 +84,19 @@ Below is a list of applications of Chainlink's products and services sorted by d | [How to Connect a Tesla Vehicle API to a Smart Contract Via a Chainlink External Adapter](https://blog.chain.link/create-tesla-smart-contract-rental/) | Transportation | Advanced | | [OAuth and API Authentication in Smart Contracts](https://blog.chain.link/oauth-and-api-authentication-in-smart-contracts-2/) | Security | Advanced | -## Game Resources +### Game Resources - [CryptoZombies](https://cryptozombies.io/) - [DamnVulnerableDefi](https://damnvulnerabledefi.xyz/challenges/8.html) - [Ethernaut](https://ethernaut.openzeppelin.com/) -## Coding Bootcamps +### Coding Bootcamps - [ChainShot](https://www.chainshot.com/courses) - [Consensys Bootcamp](https://consensys.net/academy/bootcamp/) - [Ivan On Tech](https://academy.moralis.io/courses/chainlink-101) -## Starter Kits +### Starter Kits Our Starter Kits help jumpstart your full-stack development process. You can get starter kits for Brownie (Python), Truffle (Javascript), and Hardhat (Javascript). See the [Engineering Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) playlist to learn more about each kit and how to use them. @@ -102,12 +104,12 @@ Our Starter Kits help jumpstart your full-stack development process. You can get - [Chainlink Truffle Starter Kit (Javascript)](https://github.com/smartcontractkit/truffle-starter-kit) - [Chainlink Hardhat Starter Kit (Javascript)](https://github.com/smartcontractkit/hardhat-starter-kit) -## External Tutorials +### External Tutorials - [Ethereum Developers](https://ethereum.org/en/developers/tutorials/) - [useWeb3](https://www.useweb3.xyz/) -## More Inspiration +### More Inspiration Looking for more ways to use Chainlink? Here are some resources that discuss Chainlink's use cases as well as the winning projects we've had in our previous hackathons. There is also a link to the Marketplace where you can find the latest data provider nodes and explore the network. @@ -115,17 +117,17 @@ Looking for more ways to use Chainlink? Here are some resources that discuss Cha - [Past Hackathon Winning Projects](/docs/example-projects) - [Chainlink Marketplace](https://market.link/) -# Outreach +## Outreach The Chainlink community is an inviting group of engineers that is always looking to help users expand their knowledge on Chainlink and solve related issues. Refer back to the [Getting Help](/docs/getting-help) page for the latest information about how to get support. -## Get Support +### Get Support - [Stack Overflow](https://stackoverflow.com/questions/tagged/chainlink) - [Stack Exchange Ethereum](https://ethereum.stackexchange.com/questions/tagged/chainlink) - [Hackathon Discord](https://discord.gg/h3AvTHj) - [Developer Discord](https://discord.gg/2YHSAey) -## Join the Community +### Join the Community - [Twitter](https://mobile.twitter.com/chainlink) - [Reddit](https://www.reddit.com/r/Chainlink/) - [Telegram](https://t.me/chainlinkofficial) diff --git a/docs/Introduction/tutorials/intermediates-tutorial.md b/docs/Introduction/tutorials/intermediates-tutorial.md index cc6dbd9b250..6b37fe70dd7 100644 --- a/docs/Introduction/tutorials/intermediates-tutorial.md +++ b/docs/Introduction/tutorials/intermediates-tutorial.md @@ -349,4 +349,4 @@ To read more about generating random numbers in Solidity, read our blog posts: - [How to Build Dynamic NFTs on Polygon](https://blog.chain.link/how-to-build-dynamic-nfts-on-polygon/) - [Chainlink VRF Now Live on Ethereum Mainnet](https://blog.chain.link/chainlink-vrf-now-live-on-ethereum-mainnet/) -To explore more applications of Chainlink VRF, check out our [other tutorials](/docs/other-tutorials/#vrf). +To explore more applications of Chainlink VRF, check out our [other tutorials](/docs/other-tutorials/#randomness-vrf). diff --git a/docs/home.html b/docs/home.html index 52ed30a8ec4..1daa4b3e13a 100644 --- a/docs/home.html +++ b/docs/home.html @@ -58,7 +58,7 @@

    Supported Blockchains

    - +
    @@ -184,7 +184,7 @@

    Data Feeds

    - + @@ -247,7 +247,7 @@

    Call External APIs

    - + @@ -281,7 +281,7 @@

    Chainlink Keepers

    -

    Running your own Chainlink Node?

    +

    Need to run your own Chainlink Node?

    See the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes.

    From 49965e9e6647013e00a0f28fc77f14d6632c42f2 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 15 Dec 2021 20:06:36 -0800 Subject: [PATCH 19/26] Reorganize Getting Started and fix CSS issues --- _data/navigation.js | 34 ++++----- _includes/home.liquid | 14 ---- _includes/main.liquid | 12 +-- _src/docs.css | 37 +++++++--- ...e6e24b376ed9ab5c1e_programming-browser.svg | 0 .../5f75b5fde8d4beb3824522bb_lock.svg | 0 ...75cc9f74f7124d70ad4f0a_file-code-check.svg | 0 ...b524261854d093d_multiple-users-network.svg | 0 .../5f75e7d3f8ef05758ce8c1f5_bulb.svg | 0 ...771e39793e0f78a75547bf_board-game-dice.svg | 0 ...5f85d14b6782933bd5a70060_decentralized.svg | 0 ...5f8825a8a76298e280868970_refresh-money.svg | 0 ...5f96ab4b4db522072b7ff30c_book-bookmark.svg | 0 .../61095848a2a30f150520167b_keepers.svg | 0 ...b67ab88bcfe_common-file-text-chainlink.svg | 0 .../615d625188a183697b76f712_earth-move.svg | 30 ++++++++ .../{misc => card-icons}/arrow-right.svg | 0 .../{misc => card-icons}/help_avatar.svg | 0 .../navigation-arrow-right.svg | 0 .../stackoverflow_avatar.svg | 0 .../{misc => card-icons}/youtube_avatar.svg | 0 docs/Chains/ethereum.md | 16 ++-- docs/Chains/solana.md | 2 +- .../create-a-chainlinked-project.md | 7 +- docs/Introduction/getting-started.md | 74 ++++++++++++------- .../getting-started/consuming-data-feeds.md | 2 +- .../tutorials/advanced-tutorial.md} | 10 +-- .../tutorials/intermediates-tutorial.md | 2 +- docs/Node Operators/chainlink-nodes.md | 10 +-- docs/home.html | 24 +++--- firebase.json | 20 ----- 31 files changed, 163 insertions(+), 131 deletions(-) rename _src/images/{misc => card-icons}/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg (100%) rename _src/images/{misc => card-icons}/5f75b5fde8d4beb3824522bb_lock.svg (100%) rename _src/images/{misc => card-icons}/5f75cc9f74f7124d70ad4f0a_file-code-check.svg (100%) rename _src/images/{misc => card-icons}/5f75ccd99b524261854d093d_multiple-users-network.svg (100%) rename _src/images/{misc => card-icons}/5f75e7d3f8ef05758ce8c1f5_bulb.svg (100%) rename _src/images/{misc => card-icons}/5f771e39793e0f78a75547bf_board-game-dice.svg (100%) rename _src/images/{misc => card-icons}/5f85d14b6782933bd5a70060_decentralized.svg (100%) rename _src/images/{misc => card-icons}/5f8825a8a76298e280868970_refresh-money.svg (100%) rename _src/images/{misc => card-icons}/5f96ab4b4db522072b7ff30c_book-bookmark.svg (100%) rename _src/images/{misc => card-icons}/61095848a2a30f150520167b_keepers.svg (100%) rename _src/images/{misc => card-icons}/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg (100%) create mode 100644 _src/images/card-icons/615d625188a183697b76f712_earth-move.svg rename _src/images/{misc => card-icons}/arrow-right.svg (100%) rename _src/images/{misc => card-icons}/help_avatar.svg (100%) rename _src/images/{misc => card-icons}/navigation-arrow-right.svg (100%) rename _src/images/{misc => card-icons}/stackoverflow_avatar.svg (100%) rename _src/images/{misc => card-icons}/youtube_avatar.svg (100%) rename docs/{Using Any API/using-any-api.md => Introduction/tutorials/advanced-tutorial.md} (95%) diff --git a/_data/navigation.js b/_data/navigation.js index 36caf0d4776..c10ed1115aa 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -21,12 +21,8 @@ module.exports = { url: '/docs/intermediates-tutorial/', }, { - title: 'Acquire testnet LINK', - url: '/docs/acquire-link/', - }, - { - title: 'Fund Your Contracts', - url: '/docs/fund-your-contract/', + title: 'API Calls', + url: '/docs/advanced-tutorial/', }, ], }, @@ -43,27 +39,27 @@ module.exports = { section: 'Next Steps', contents: [ { - title: 'Chainlink Architecture ↗', + title: 'Chainlink Architecture', url: '/docs/architecture-overview/', }, { - title: 'Data Feeds ↗', + title: 'Data Feeds', url: '/docs/using-chainlink-reference-contracts/', }, { - title: 'Chainlink VRF ↗', + title: 'Chainlink VRF', url: '/docs/chainlink-vrf/', }, { - title: 'Chainlink Keepers ↗', + title: 'Chainlink Keepers', url: '/docs/chainlink-keepers/introduction/', }, { - title: 'Connect to Public API Data ↗', + title: 'Connect to Public API Data', url: '/docs/request-and-receive-data/', }, { - title: 'Run a Chainlink Node ↗', + title: 'Run a Chainlink Node', url: '/chainlink-nodes/', }, ], @@ -210,10 +206,6 @@ module.exports = { title: 'Introduction to Using Any API', url: '/docs/request-and-receive-data/', }, - { - title: 'Using Any API', - url: '/docs/using-any-api/', - }, { title: 'Make a GET Request', url: '/docs/make-a-http-get-request/', @@ -281,7 +273,15 @@ module.exports = { url: '/docs/other-tutorials/', }, { - title: 'Framework Install Instructions', + title: 'Acquire testnet LINK', + url: '/docs/acquire-link/', + }, + { + title: 'Fund Your Contracts', + url: '/docs/fund-your-contract/', + }, + { + title: 'Install Frameworks', url: '/docs/create-a-chainlinked-project/', }, { diff --git a/_includes/home.liquid b/_includes/home.liquid index 91ca6faef4f..40c3eda05cb 100644 --- a/_includes/home.liquid +++ b/_includes/home.liquid @@ -3,20 +3,6 @@ layout: ./main.liquid ---
    - - {% if title %} - -
    - {% endif %} - {{content}} {% if whatsnext %}
    diff --git a/_includes/main.liquid b/_includes/main.liquid index 93661cdc297..c443130921c 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -104,12 +104,12 @@
    - Expert icon + Expert icon
    Need integration support?
    Talk to an expert - Right arrow
    @@ -118,12 +118,12 @@
    - YouTube icon + YouTube icon
    YouTube
    Watch developer tutorials - Right arrow
    @@ -132,13 +132,13 @@
    - Stack Overflow icon
    Stack Overflow
    Get technical support - Right arrow
    diff --git a/_src/docs.css b/_src/docs.css index 9dde76ce3d0..3f48377ea13 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -327,15 +327,17 @@ hr { text-align: center; } .cl-section { - padding: 0 0 48px; - justify-content: center; - align-content: space-between; + margin-bottom: 48px; } +.cl-section-cards { + display: inline-block; +} + .cl-section-header { padding: 0 0 48px; justify-content: left; } -.markdown-body .cl-section { +.markdown-body { padding: 0 0 48px; text-align: center; } @@ -815,9 +817,11 @@ hr { } .cl-productcard { + display: inline-flex; + align-content: center; + width: 150px; + height: 190px; padding: 16px; - padding-top: 32px; - width: 100%; border-radius: 8px; border: 0px solid #dee7fc; background-color: #ffffff; @@ -829,6 +833,12 @@ hr { cursor: pointer; } +.cl-productcard > div { + display: block; + margin-left: auto; + margin-right: auto; +} + .cl-productcard:hover h2 { color: #375bd2 !important; } @@ -1258,14 +1268,21 @@ input[type='reset'] { } .cl-featuredcard { flex-direction: column; - } - .cl-featuredcard > div > div { + justify-content: center; height: auto; + margin-bottom: 20px; } - .cl-featuredcard { + + .cl-featuredcard > div { + margin-left: auto; + margin-right: auto; + max-width: 400px; + } + + .cl-featuredcard > div > div { height: auto; - margin-bottom: 20px; } + .cl-section--one .cl-featuredcard { height: auto; } diff --git a/_src/images/misc/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg b/_src/images/card-icons/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg similarity index 100% rename from _src/images/misc/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg rename to _src/images/card-icons/5f75b5e6e24b376ed9ab5c1e_programming-browser.svg diff --git a/_src/images/misc/5f75b5fde8d4beb3824522bb_lock.svg b/_src/images/card-icons/5f75b5fde8d4beb3824522bb_lock.svg similarity index 100% rename from _src/images/misc/5f75b5fde8d4beb3824522bb_lock.svg rename to _src/images/card-icons/5f75b5fde8d4beb3824522bb_lock.svg diff --git a/_src/images/misc/5f75cc9f74f7124d70ad4f0a_file-code-check.svg b/_src/images/card-icons/5f75cc9f74f7124d70ad4f0a_file-code-check.svg similarity index 100% rename from _src/images/misc/5f75cc9f74f7124d70ad4f0a_file-code-check.svg rename to _src/images/card-icons/5f75cc9f74f7124d70ad4f0a_file-code-check.svg diff --git a/_src/images/misc/5f75ccd99b524261854d093d_multiple-users-network.svg b/_src/images/card-icons/5f75ccd99b524261854d093d_multiple-users-network.svg similarity index 100% rename from _src/images/misc/5f75ccd99b524261854d093d_multiple-users-network.svg rename to _src/images/card-icons/5f75ccd99b524261854d093d_multiple-users-network.svg diff --git a/_src/images/misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg b/_src/images/card-icons/5f75e7d3f8ef05758ce8c1f5_bulb.svg similarity index 100% rename from _src/images/misc/5f75e7d3f8ef05758ce8c1f5_bulb.svg rename to _src/images/card-icons/5f75e7d3f8ef05758ce8c1f5_bulb.svg diff --git a/_src/images/misc/5f771e39793e0f78a75547bf_board-game-dice.svg b/_src/images/card-icons/5f771e39793e0f78a75547bf_board-game-dice.svg similarity index 100% rename from _src/images/misc/5f771e39793e0f78a75547bf_board-game-dice.svg rename to _src/images/card-icons/5f771e39793e0f78a75547bf_board-game-dice.svg diff --git a/_src/images/misc/5f85d14b6782933bd5a70060_decentralized.svg b/_src/images/card-icons/5f85d14b6782933bd5a70060_decentralized.svg similarity index 100% rename from _src/images/misc/5f85d14b6782933bd5a70060_decentralized.svg rename to _src/images/card-icons/5f85d14b6782933bd5a70060_decentralized.svg diff --git a/_src/images/misc/5f8825a8a76298e280868970_refresh-money.svg b/_src/images/card-icons/5f8825a8a76298e280868970_refresh-money.svg similarity index 100% rename from _src/images/misc/5f8825a8a76298e280868970_refresh-money.svg rename to _src/images/card-icons/5f8825a8a76298e280868970_refresh-money.svg diff --git a/_src/images/misc/5f96ab4b4db522072b7ff30c_book-bookmark.svg b/_src/images/card-icons/5f96ab4b4db522072b7ff30c_book-bookmark.svg similarity index 100% rename from _src/images/misc/5f96ab4b4db522072b7ff30c_book-bookmark.svg rename to _src/images/card-icons/5f96ab4b4db522072b7ff30c_book-bookmark.svg diff --git a/_src/images/misc/61095848a2a30f150520167b_keepers.svg b/_src/images/card-icons/61095848a2a30f150520167b_keepers.svg similarity index 100% rename from _src/images/misc/61095848a2a30f150520167b_keepers.svg rename to _src/images/card-icons/61095848a2a30f150520167b_keepers.svg diff --git a/_src/images/misc/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg b/_src/images/card-icons/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg similarity index 100% rename from _src/images/misc/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg rename to _src/images/card-icons/61163fe987f45b67ab88bcfe_common-file-text-chainlink.svg diff --git a/_src/images/card-icons/615d625188a183697b76f712_earth-move.svg b/_src/images/card-icons/615d625188a183697b76f712_earth-move.svg new file mode 100644 index 00000000000..cab7b33b2d4 --- /dev/null +++ b/_src/images/card-icons/615d625188a183697b76f712_earth-move.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_src/images/misc/arrow-right.svg b/_src/images/card-icons/arrow-right.svg similarity index 100% rename from _src/images/misc/arrow-right.svg rename to _src/images/card-icons/arrow-right.svg diff --git a/_src/images/misc/help_avatar.svg b/_src/images/card-icons/help_avatar.svg similarity index 100% rename from _src/images/misc/help_avatar.svg rename to _src/images/card-icons/help_avatar.svg diff --git a/_src/images/misc/navigation-arrow-right.svg b/_src/images/card-icons/navigation-arrow-right.svg similarity index 100% rename from _src/images/misc/navigation-arrow-right.svg rename to _src/images/card-icons/navigation-arrow-right.svg diff --git a/_src/images/misc/stackoverflow_avatar.svg b/_src/images/card-icons/stackoverflow_avatar.svg similarity index 100% rename from _src/images/misc/stackoverflow_avatar.svg rename to _src/images/card-icons/stackoverflow_avatar.svg diff --git a/_src/images/misc/youtube_avatar.svg b/_src/images/card-icons/youtube_avatar.svg similarity index 100% rename from _src/images/misc/youtube_avatar.svg rename to _src/images/card-icons/youtube_avatar.svg diff --git a/docs/Chains/ethereum.md b/docs/Chains/ethereum.md index 35a62b674c9..7ed0bfa53d2 100644 --- a/docs/Chains/ethereum.md +++ b/docs/Chains/ethereum.md @@ -28,7 +28,7 @@ permalink: /ethereum/
    Learn More - Right arrow + Right arrow
    @@ -46,7 +46,7 @@ permalink: /ethereum/
    Learn More - Right arrow + Right arrow
    @@ -66,7 +66,7 @@ permalink: /ethereum/
    Learn More - Right arrow + Right arrow
    @@ -75,7 +75,7 @@ permalink: /ethereum/
    - +

    New to Chainlink and Smart Contracts?

    @@ -103,15 +103,15 @@ permalink: /ethereum/

    -
    +

    Explore Chainlink Developer Tools

    - diff --git a/docs/Chains/solana.md b/docs/Chains/solana.md index 4b11664c402..5bea51fd871 100644 --- a/docs/Chains/solana.md +++ b/docs/Chains/solana.md @@ -31,7 +31,7 @@ permalink: /solana/
    - +

    New to Chainlink and Smart Contracts?

    diff --git a/docs/Developer Reference/create-a-chainlinked-project.md b/docs/Developer Reference/create-a-chainlinked-project.md index 5a151cc3f76..53600b17995 100644 --- a/docs/Developer Reference/create-a-chainlinked-project.md +++ b/docs/Developer Reference/create-a-chainlinked-project.md @@ -2,14 +2,9 @@ layout: nodes.liquid section: ethereum date: Last Modified -title: "Framework Install Instructions" +title: "Install Frameworks" permalink: "docs/create-a-chainlinked-project/" whatsnext: {"Introduction to Data Feeds":"/docs/using-chainlink-reference-contracts/", "Introduction to Chainlink VRF":"/docs/chainlink-vrf/", "Introduction to Using Any API":"/docs/request-and-receive-data/"} -metadata: - title: "Getting Started with Chainlink for Smart Contract Developers" - description: "Everything you need to know on how to create a new Chainlink project or update an existing one using the Chainlink Library for Solidity" - image: - 0: "/files/OpenGraph_V3.png" --- ![Starter Kits Logos](/files/c6e99c5-Untitled_design_23.png) diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md index 70f4b7039a4..379e104f2e8 100644 --- a/docs/Introduction/getting-started.md +++ b/docs/Introduction/getting-started.md @@ -1,16 +1,15 @@ --- layout: nodes.liquid section: gettingStarted -title: "Getting Started with Chainlink" +title: "Start your journey with Chainlink" date: Last Modified permalink: /getting-started/ ---

    -
    -

    Start your journey with Chainlink

    -

    +

    +

    Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology.

    @@ -19,7 +18,7 @@ permalink: /getting-started/
    @@ -30,7 +29,7 @@ permalink: /getting-started/
    Learn More - Right arrow + Right arrow
    @@ -39,7 +38,7 @@ permalink: /getting-started/
    @@ -50,7 +49,7 @@ permalink: /getting-started/
    Learn More - Right arrow + Right arrow
    @@ -59,7 +58,7 @@ permalink: /getting-started/
    @@ -70,40 +69,62 @@ permalink: /getting-started/
    Learn More - Right arrow + Right arrow
    +
    +
    -

    Generate Randomness

    +

    Generate Randomness (VRF)

    Learn how to get verifiable random numbers on-chain.

    Learn More - Right arrow + Right arrow +
    +
    +
    +
    +
    +
    +
    + +
    +

    API Calls: Using Any API

    +

    + Request data from a public API in a smart contract. +

    + +
    + Learn More + Right arrow
    -
    +
    - +

    Already familiar with smart contract basics?

    - Dive deeper into Chainlink product and services on Ethereum chains. + Dive deeper into Chainlink products and services on Ethereum chains.

    Chainlink on Ethereum Chains @@ -111,14 +132,14 @@ permalink: /getting-started/
    -
    +

    Explore Additional Resources

    Find all the right resources to get the most out of Chainlink.

    -
    +
    - -Need to run your own Chainlink node? See the [Node Operator's Guide](/chainlink-nodes/) to learn about starting and maintaining Chainlink Nodes. diff --git a/docs/Introduction/getting-started/consuming-data-feeds.md b/docs/Introduction/getting-started/consuming-data-feeds.md index 229da32d0fa..e2fb96f2d11 100644 --- a/docs/Introduction/getting-started/consuming-data-feeds.md +++ b/docs/Introduction/getting-started/consuming-data-feeds.md @@ -5,7 +5,7 @@ date: Last Modified title: "Consuming Data Feeds" permalink: "docs/consuming-data-feeds/" excerpt: "Smart Contracts and Chainlink" -whatsnext: {"Random Numbers Guide":"/docs/get-a-random-number/", "Connect contracts to Any API":"/docs/using-any-api/", "Chaink Keepers":"/docs/chainlink-keepers/introduction/"} +whatsnext: {"Random Numbers Guide":"/docs/get-a-random-number/", "Connect contracts to Any API":"/docs/intermediates-tutorial/", "Chaink Keepers":"/docs/chainlink-keepers/introduction/"} metadata: title: "Consuming Data Feeds" description: "Learn how to consume Chainlink Data Feeds in your smart contracts." diff --git a/docs/Using Any API/using-any-api.md b/docs/Introduction/tutorials/advanced-tutorial.md similarity index 95% rename from docs/Using Any API/using-any-api.md rename to docs/Introduction/tutorials/advanced-tutorial.md index 428d6f3a739..ac5a3dc16a0 100644 --- a/docs/Using Any API/using-any-api.md +++ b/docs/Introduction/tutorials/advanced-tutorial.md @@ -1,9 +1,9 @@ --- layout: nodes.liquid -section: ethereum +section: gettingStarted date: Last Modified -title: "Using Any API" -permalink: "docs/using-any-api/" +title: "API Calls: Using Any API" +permalink: "docs/advanced-tutorial/" excerpt: "Calling APIs from Smart Contracts" whatsnext: {"Make a GET Request":"/docs/make-a-http-get-request/", "Make an Existing Job Request":"/docs/existing-job-request/"} metadata: @@ -13,7 +13,7 @@ metadata: > 👍 Requirements > -> This guide requires basic knowledge about smart contracts. If you are new to smart contract development, read the [Getting Started Guide](/getting-started/) before you start this guide. +> This guide requires basic knowledge about smart contracts. If you are new to smart contract development, read the [Consuming Data Feeds](/docs/consuming-data-feeds/) and [Random Numbers](/docs/intermediates-tutorial/) guides before you begin.

    https://www.youtube.com/watch?v=ay4rXZhAefs @@ -21,7 +21,7 @@ metadata: # Overview -In this tutorial, you will learn how to request data from a public API in a smart contract. This includes understanding what Core adapters and External adapters are and how Oracle Jobs use them. You will also learn how to find the Oracle Jobs and Adapters for your contract and how to request data from an Oracle Job. +In this guide, you will learn how to request data from a public API in a smart contract. This includes understanding what Core adapters and External adapters are and how Oracle Jobs use them. You will also learn how to find the Oracle Jobs and Adapters for your contract and how to request data from an Oracle Job. **Table of Contents** diff --git a/docs/Introduction/tutorials/intermediates-tutorial.md b/docs/Introduction/tutorials/intermediates-tutorial.md index 6b37fe70dd7..6d1404ef13b 100644 --- a/docs/Introduction/tutorials/intermediates-tutorial.md +++ b/docs/Introduction/tutorials/intermediates-tutorial.md @@ -15,7 +15,7 @@ metadata: > 👍 Requirements > -> This guide assumes that you have basic knowledge about writing and deploying smart contracts. If you are new to smart contract development, read the [Getting Started Guide](/getting-started/) before you start this guide. +> This guide assumes that you have basic knowledge about writing and deploying smart contracts. If you are new to smart contract development, read the [Consuming Data Feeds](/docs/consuming-data-feeds/) guide before you begin.

    https://www.youtube.com/watch?v=JqZWariqh5s diff --git a/docs/Node Operators/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md index 3c957eb3b95..b419ae34fd9 100644 --- a/docs/Node Operators/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -27,7 +27,7 @@ permalink: /chainlink-nodes/

    @@ -45,7 +45,7 @@ permalink: /chainlink-nodes/
    Learn More - Right arrow + Right arrow
    @@ -64,7 +64,7 @@ permalink: /chainlink-nodes/
    Learn More - Right arrow + Right arrow
    @@ -87,9 +87,9 @@ permalink: /chainlink-nodes/
    -
    +

    Explore Chainlink Node Tools

    -
    +
    - +

    Verifiable Random Numbers (VRF)

    Use Chainlink VRF to consume randomness in your smart contracts.

    @@ -279,7 +279,7 @@

    Chainlink Keepers

    - +

    Need to run your own Chainlink Node?

    diff --git a/firebase.json b/firebase.json index daa8b05bae6..0f759a742f0 100644 --- a/firebase.json +++ b/firebase.json @@ -137,16 +137,6 @@ "destination": "/docs/chainlink-keepers/compatible-contracts/", "type": 301 }, - { - "source": "/docs/intermediates-tutorial/", - "destination": "/docs/get-a-random-number/", - "type": 301 - }, - { - "source": "/docs/intermediates-tutorial", - "destination": "/docs/get-a-random-number/", - "type": 301 - }, { "source": "/docs/beginners-tutorial/", "destination": "/docs/conceptual-overview/", @@ -177,16 +167,6 @@ "destination": "/docs/deploy-your-first-contract/#install-and-fund-your-metamask-wallet", "type": 301 }, - { - "source": "/docs/advanced-tutorial/", - "destination": "/docs/using-any-api/", - "type": 301 - }, - { - "source": "/docs/advanced-tutorial", - "destination": "/docs/using-any-api/", - "type": 301 - }, ] } } From bc8eb18f1a40389b86c7ff7fa5c42c65ac9652bc Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Wed, 15 Dec 2021 21:16:20 -0800 Subject: [PATCH 20/26] Standardize remix "deploy" terminology --- docs/Additional Information/workshop.md | 4 ++-- docs/Data Provider Nodes/chainlink-alarm-clock.md | 2 +- docs/Data Provider Nodes/dns-ownership-oracle.md | 2 +- .../finage-global-market-data-oracle.md | 2 +- docs/Data Provider Nodes/google-weather.md | 2 +- docs/Data Provider Nodes/kraken-rates-oracle-node.md | 2 +- docs/Data Provider Nodes/lcx-testnet.md | 2 +- docs/Introduction/getting-started/conceptual-overview.md | 4 ++-- .../Introduction/getting-started/consuming-data-feeds.md | 2 +- .../getting-started/deploy-your-first-contract.md | 2 +- docs/Introduction/tutorials/advanced-tutorial.md | 6 +++--- docs/Introduction/tutorials/intermediates-tutorial.md | 2 +- docs/Using Any API/existing-job-request.md | 2 +- docs/Using Any API/large-responses.md | 2 +- docs/Using Any API/make-a-http-get-request.md | 2 +- docs/Using Any API/multi-variable-responses.md | 9 ++++----- docs/Using Price Feeds/feed-registry.html | 2 +- docs/Using Price Feeds/get-the-latest-price.html | 2 +- docs/Using Price Feeds/historical-price-data.html | 2 +- docs/Using Randomness/get-a-random-number.md | 2 +- docs/chainlink-keepers/compatible-contracts.md | 2 +- 21 files changed, 28 insertions(+), 29 deletions(-) diff --git a/docs/Additional Information/workshop.md b/docs/Additional Information/workshop.md index 7f5b60aab92..d195f443fe8 100644 --- a/docs/Additional Information/workshop.md +++ b/docs/Additional Information/workshop.md @@ -79,7 +79,7 @@ Ropsten LINK faucet: https: 0x20fE562d797A42Dcb3399062AE9546cd06f63280 ``` -### Slide: Deploying with Remix +### Slide: Deploying contracts using Remix Remix: https://remix.ethereum.org/#optimize=false&version=soljson-v0.4.24+commit.e67f0147.js @@ -93,4 +93,4 @@ Job IDs: /docs/addresses ```text requestEthereumPrice "493610cff14346f786f88ed791ab7704", "USD" -``` \ No newline at end of file +``` diff --git a/docs/Data Provider Nodes/chainlink-alarm-clock.md b/docs/Data Provider Nodes/chainlink-alarm-clock.md index 2ad415f0204..9d7291a785c 100644 --- a/docs/Data Provider Nodes/chainlink-alarm-clock.md +++ b/docs/Data Provider Nodes/chainlink-alarm-clock.md @@ -55,7 +55,7 @@ contract ChainlinkAlarmClock is ChainlinkClient { ```

    diff --git a/docs/Data Provider Nodes/dns-ownership-oracle.md b/docs/Data Provider Nodes/dns-ownership-oracle.md index 1b0f1f50a60..1c77d683e2c 100644 --- a/docs/Data Provider Nodes/dns-ownership-oracle.md +++ b/docs/Data Provider Nodes/dns-ownership-oracle.md @@ -96,7 +96,7 @@ contract DnsOwnershipChainlink is ChainlinkClient { ``` diff --git a/docs/Data Provider Nodes/finage-global-market-data-oracle.md b/docs/Data Provider Nodes/finage-global-market-data-oracle.md index 75d3813c23a..4af2e8d2e51 100644 --- a/docs/Data Provider Nodes/finage-global-market-data-oracle.md +++ b/docs/Data Provider Nodes/finage-global-market-data-oracle.md @@ -91,7 +91,7 @@ contract FinageChainlink is ChainlinkClient { ``` diff --git a/docs/Data Provider Nodes/google-weather.md b/docs/Data Provider Nodes/google-weather.md index 67f11744e71..c21cf7a290d 100644 --- a/docs/Data Provider Nodes/google-weather.md +++ b/docs/Data Provider Nodes/google-weather.md @@ -62,7 +62,7 @@ Import `ChainlinkClient.sol` into your contract so you can inherit the `Chainlin ``` diff --git a/docs/Data Provider Nodes/kraken-rates-oracle-node.md b/docs/Data Provider Nodes/kraken-rates-oracle-node.md index 846b411fff0..97ff6973223 100644 --- a/docs/Data Provider Nodes/kraken-rates-oracle-node.md +++ b/docs/Data Provider Nodes/kraken-rates-oracle-node.md @@ -95,7 +95,7 @@ contract KrakenChainlink is ChainlinkClient { ``` diff --git a/docs/Data Provider Nodes/lcx-testnet.md b/docs/Data Provider Nodes/lcx-testnet.md index 6b50ded6ab9..da175c4c9be 100644 --- a/docs/Data Provider Nodes/lcx-testnet.md +++ b/docs/Data Provider Nodes/lcx-testnet.md @@ -87,7 +87,7 @@ contract LCXChainlink is ChainlinkClient { ``` diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md index 7bc398d66a0..bb11614638e 100644 --- a/docs/Introduction/getting-started/conceptual-overview.md +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -58,7 +58,7 @@ The structure of a smart contract is similar to that of a class in Javascript, w ``` @@ -130,7 +130,7 @@ An **interface** is another concept that is familiar to programmers of other lan {% include samples/Tutorials/Test.sol %} ``` diff --git a/docs/Introduction/getting-started/consuming-data-feeds.md b/docs/Introduction/getting-started/consuming-data-feeds.md index e2fb96f2d11..c0429600b39 100644 --- a/docs/Introduction/getting-started/consuming-data-feeds.md +++ b/docs/Introduction/getting-started/consuming-data-feeds.md @@ -54,7 +54,7 @@ Deploy the `PriceConsumerV3` smart contract on the Kovan testnet. 1. [Open the example contract](https://remix.ethereum.org/#url=https://docs.chain.link/samples/PriceFeeds/PriceConsumerV3.sol) in Remix. Remix opens and shows the contents of the smart contract. 1. Because the code is already written, you can start the compile step. On the left side of Remix, click the **Solidity Compiler** tab to view the compiler settings. diff --git a/docs/Introduction/getting-started/deploy-your-first-contract.md b/docs/Introduction/getting-started/deploy-your-first-contract.md index 02208029e75..5cbb22fa1ba 100644 --- a/docs/Introduction/getting-started/deploy-your-first-contract.md +++ b/docs/Introduction/getting-started/deploy-your-first-contract.md @@ -68,7 +68,7 @@ Your first contract is a simple `HelloWorld.sol` example. This example shows you 1. [Open the example contract](https://remix.ethereum.org/#url=https://docs.chain.link/samples/Tutorials/HelloWorld.sol) in the Remix IDE. Remix opens and shows the contents of the smart contract. You can modify the code in this editor when you write your own contract. diff --git a/docs/Introduction/tutorials/advanced-tutorial.md b/docs/Introduction/tutorials/advanced-tutorial.md index ac5a3dc16a0..a1f65a5a7b2 100644 --- a/docs/Introduction/tutorials/advanced-tutorial.md +++ b/docs/Introduction/tutorials/advanced-tutorial.md @@ -98,7 +98,7 @@ Let's see what this looks like in a contract: ``` @@ -266,11 +266,11 @@ contract sportContract is ChainlinkClient { Your contract is complete and ready to be compiled and deployed. You can see a complete version of the contract in Remix: -If you don't know how to deploy a contract to the Kovan testnet from Remix, follow getting started guide for [Deploying Your First Smart Contract](/docs/deploy-your-first-contract/). To make a job request, you *must* have enough LINK to pay for it. Learn how to [acquire testnet LINK](/docs/acquire-link/) and [fund your contract](/docs/fund-your-contract/). Once these steps are completed, you should be able to get sports data. +If you don't know how to deploy a contract to the Kovan testnet using Remix, follow getting started guide for [Deploying Your First Smart Contract](/docs/deploy-your-first-contract/). To make a job request, you *must* have enough LINK to pay for it. Learn how to [acquire testnet LINK](/docs/acquire-link/) and [fund your contract](/docs/fund-your-contract/). Once these steps are completed, you should be able to get sports data. # 6. Further Reading diff --git a/docs/Introduction/tutorials/intermediates-tutorial.md b/docs/Introduction/tutorials/intermediates-tutorial.md index 6d1404ef13b..b703687ec0d 100644 --- a/docs/Introduction/tutorials/intermediates-tutorial.md +++ b/docs/Introduction/tutorials/intermediates-tutorial.md @@ -296,7 +296,7 @@ contract VRFD20 is VRFConsumerBase, ConfirmedOwner(msg.sender) { ``` diff --git a/docs/Using Any API/existing-job-request.md b/docs/Using Any API/existing-job-request.md index 103aa5c7bf2..0b6777e110e 100644 --- a/docs/Using Any API/existing-job-request.md +++ b/docs/Using Any API/existing-job-request.md @@ -27,7 +27,7 @@ You can find the job spec for this example on [GitHub](https://github.com/smartc > Making a job request will fail unless your deployed contract has enough LINK to pay for it. **Learn how to [Acquire testnet LINK](../acquire-link/) and [Fund your contract](../fund-your-contract/)**. diff --git a/docs/Using Any API/large-responses.md b/docs/Using Any API/large-responses.md index 665d5ab0eb3..978ba183e60 100644 --- a/docs/Using Any API/large-responses.md +++ b/docs/Using Any API/large-responses.md @@ -18,7 +18,7 @@ To consume an API with a large responses, your contract should inherit from [Cha > diff --git a/docs/Using Any API/make-a-http-get-request.md b/docs/Using Any API/make-a-http-get-request.md index 1744611ebe7..ebc392f1ecf 100644 --- a/docs/Using Any API/make-a-http-get-request.md +++ b/docs/Using Any API/make-a-http-get-request.md @@ -24,7 +24,7 @@ Currently, any return value must fit within 32 bytes, if the value is bigger tha > Making a GET request will fail unless your deployed contract has enough LINK to pay for it. **Learn how to [Acquire testnet LINK](../acquire-link/) and [Fund your contract](../fund-your-contract/)**. diff --git a/docs/Using Any API/multi-variable-responses.md b/docs/Using Any API/multi-variable-responses.md index 313a91838cc..c6603b80c20 100644 --- a/docs/Using Any API/multi-variable-responses.md +++ b/docs/Using Any API/multi-variable-responses.md @@ -23,14 +23,13 @@ To consume an API with multiple responses, your contract should inherit from [Ch > Making a GET request will fail unless your deployed contract has enough LINK to pay for it. **Learn how to [Acquire testnet LINK](../acquire-link/) and [Fund your contract](../fund-your-contract/)**. > - - ```solidity Kovan {% include samples/APIRequests/MultiWordConsumer.sol %} ``` + > 📘 Note > diff --git a/docs/Using Price Feeds/feed-registry.html b/docs/Using Price Feeds/feed-registry.html index 2b903ce8650..a8b0d62ebdf 100644 --- a/docs/Using Price Feeds/feed-registry.html +++ b/docs/Using Price Feeds/feed-registry.html @@ -73,7 +73,7 @@ {% endmarkdown %} diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index a798413e743..fd91b174162 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -40,7 +40,7 @@ ``` diff --git a/docs/Using Price Feeds/historical-price-data.html b/docs/Using Price Feeds/historical-price-data.html index 7bb7bff3521..c70147050ac 100644 --- a/docs/Using Price Feeds/historical-price-data.html +++ b/docs/Using Price Feeds/historical-price-data.html @@ -44,7 +44,7 @@ ``` diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/get-a-random-number.md index a86bcef0783..30d3a431217 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -41,7 +41,7 @@ Note, the below values have to be configured correctly for VRF requests to work. ``` diff --git a/docs/chainlink-keepers/compatible-contracts.md b/docs/chainlink-keepers/compatible-contracts.md index 4c2527f0001..a1668c91a21 100644 --- a/docs/chainlink-keepers/compatible-contracts.md +++ b/docs/chainlink-keepers/compatible-contracts.md @@ -156,7 +156,7 @@ The example below represents a simple counter contract. Each time `performUpkeep ``` From a63f2b45b160141f97016fb8d8e5982919ab8693 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Thu, 16 Dec 2021 10:11:14 -0800 Subject: [PATCH 21/26] Reorganize the Getting Started nav so overview is the landing and rename Ethereum Chains to EVM Chains --- _data/navigation.js | 2 +- _includes/main.liquid | 4 +- docs/Chains/ethereum.md | 48 ++++- docs/Chains/solana.md | 2 +- .../create-a-chainlinked-project.md | 2 +- .../hackathon-resources.md | 2 +- .../link-token-contracts.md | 2 +- docs/Introduction/getting-started.md | 193 ------------------ .../getting-started/conceptual-overview.md | 22 +- .../getting-started/consuming-data-feeds.md | 2 +- .../getting-started/other-tutorials.md | 2 +- .../get-the-latest-price.html | 4 +- docs/Using Price Feeds/reference-contracts.md | 2 +- docs/Using Randomness/get-a-random-number.md | 2 +- docs/home.html | 4 +- firebase.json | 10 +- 16 files changed, 84 insertions(+), 219 deletions(-) delete mode 100644 docs/Introduction/getting-started.md diff --git a/_data/navigation.js b/_data/navigation.js index c10ed1115aa..fd4d74a3557 100644 --- a/_data/navigation.js +++ b/_data/navigation.js @@ -5,7 +5,7 @@ module.exports = { section: 'Getting Started', contents: [ { - title: 'Conceptual Overview', + title: 'Overview', url: '/docs/conceptual-overview/', }, { diff --git a/_includes/main.liquid b/_includes/main.liquid index c443130921c..c56c16afba1 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -83,8 +83,8 @@
    - - + + diff --git a/docs/Chains/ethereum.md b/docs/Chains/ethereum.md index 7ed0bfa53d2..3a133e1eb32 100644 --- a/docs/Chains/ethereum.md +++ b/docs/Chains/ethereum.md @@ -1,7 +1,7 @@ --- layout: nodes.liquid section: ethereum -title: "Chainlink on Ethereum Chains" +title: "Chainlink on EVM Chains" date: Last Modified permalink: /ethereum/ --- @@ -81,7 +81,7 @@ permalink: /ethereum/

    Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum.

    - + Getting Started Guide
    @@ -102,6 +102,50 @@ permalink: /ethereum/
    +
    +
    +

    Explore Additional Resources

    +

    Find all the right resources to get the most out of Chainlink.

    + +
    +

    Explore Chainlink Developer Tools

    diff --git a/docs/Chains/solana.md b/docs/Chains/solana.md index 5bea51fd871..815c3a168f6 100644 --- a/docs/Chains/solana.md +++ b/docs/Chains/solana.md @@ -37,7 +37,7 @@ permalink: /solana/

    Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum.

    - + Getting Started Guide
    diff --git a/docs/Developer Reference/create-a-chainlinked-project.md b/docs/Developer Reference/create-a-chainlinked-project.md index 53600b17995..2062fcd37d3 100644 --- a/docs/Developer Reference/create-a-chainlinked-project.md +++ b/docs/Developer Reference/create-a-chainlinked-project.md @@ -12,7 +12,7 @@ This page explains how to install and use the [Chainlink Library](../chainlink-f > 📘 Important > -> If you're new to smart contract development and want a step-by-step guide, try out our [Getting Started Guide](/getting-started/) +> If you're new to smart contract development and want a step-by-step guide, try out our [Getting Started](/docs/conceptual-overview/) guide. # Install into Existing Projects diff --git a/docs/Developer Reference/hackathon-resources.md b/docs/Developer Reference/hackathon-resources.md index ae0a566355c..01bb8c986f7 100644 --- a/docs/Developer Reference/hackathon-resources.md +++ b/docs/Developer Reference/hackathon-resources.md @@ -37,7 +37,7 @@ Always refer back to the [getting help](/docs/getting-help) page for the latest Be sure to check the documentation in the links above for in depth-descriptions of everything. -New? See the [Getting Started Guide](/getting-started/). +New? See the [Getting Started Guide](/docs/conceptual-overview/). - [Video Tutorials](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) - [What is Ethereum?](https://www.youtube.com/playlist?list=PLVP9aGDn-X0QwJVbQvuKr-zrh2_DV5M6J) - [Developer Blog (many tutorials)](https://blog.chain.link/tag/developers/) diff --git a/docs/Developer Reference/link-token-contracts.md b/docs/Developer Reference/link-token-contracts.md index dddf7fc5e56..9baff0c6abe 100644 --- a/docs/Developer Reference/link-token-contracts.md +++ b/docs/Developer Reference/link-token-contracts.md @@ -84,7 +84,7 @@ The LINK token is an ERC677 token that inherits functionality from the ERC20 tok -------------------- -# Other Ethereum Chains +# Other EVM Chains LINK is native to Ethereum, so to use LINK on other chains, it must be bridged. This guide explains how to bridge and swap tokens to other chains. diff --git a/docs/Introduction/getting-started.md b/docs/Introduction/getting-started.md deleted file mode 100644 index 379e104f2e8..00000000000 --- a/docs/Introduction/getting-started.md +++ /dev/null @@ -1,193 +0,0 @@ ---- -layout: nodes.liquid -section: gettingStarted -title: "Start your journey with Chainlink" -date: Last Modified -permalink: /getting-started/ ---- - -
    -
    -
    -

    - Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology. -

    -
    -
    -
    -
    -
    - -
    -

    Read the Overview

    -

    - Learn the basic concepts and components of smart contracts. -

    - -
    - Learn More - Right arrow -
    -
    -
    -
    -
    -
    -
    - -
    -

    Deploy a smart contract

    -

    - Learn the basics by deploying your first smart contract. -

    - -
    - Learn More - Right arrow -
    -
    -
    -
    -
    -
    -
    - -
    -

    Get Asset Prices

    -

    - Learn how to consume Chainlink Data Feeds in your smart contracts. -

    - -
    - Learn More - Right arrow -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -

    Generate Randomness (VRF)

    -

    - Learn how to get verifiable random numbers on-chain. -

    - -
    - Learn More - Right arrow -
    -
    -
    -
    -
    -
    -
    - -
    -

    API Calls: Using Any API

    -

    - Request data from a public API in a smart contract. -

    - -
    - Learn More - Right arrow -
    -
    -
    -
    -
    -
    -
    -
    - -
    -

    Already familiar with smart contract basics?

    -

    - Dive deeper into Chainlink products and services on Ethereum chains. -

    - - Chainlink on Ethereum Chains - -
    -
    -
    -
    -

    Explore Additional Resources

    -

    Find all the right resources to get the most out of Chainlink.

    - -
    -
    -
    -

    - Need to run your own Chainlink node? See the Node Operator's Guide to learn about starting and maintaining Chainlink Nodes. -

    -
    -
    -
    diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md index bb11614638e..798dc2230e5 100644 --- a/docs/Introduction/getting-started/conceptual-overview.md +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -2,7 +2,7 @@ layout: nodes.liquid section: gettingStarted date: Last Modified -title: "Conceptual Overview" +title: "Chainlink Overview" permalink: "docs/conceptual-overview/" excerpt: "Smart Contracts and Chainlink" whatsnext: {"Deploy Your First Smart Contract":"/docs/deploy-your-first-contract/", "Consuming Data Feeds":"/docs/consuming-data-feeds/"} @@ -17,8 +17,8 @@ Welcome to the Smart Contract Getting Started guide. This overview explains the **Skip ahead** To get your hands on the code right away, you can skip this overview: -- If you are new to smart contracts, [Deploy Your First Smart Contract](/docs/deploy-your-first-contract/) in an interactive web development environment. -- If you are already familiar with smart contracts and want to learn how to create *hybrid* smart contracts that use Chainlink Data Feeds, skip to the [Consuming Data Feeds](/docs/consuming-data-feeds/) guide. +- [Deploy Your First Smart Contract](/docs/deploy-your-first-contract/): If you are new to smart contracts, deploy your first smart contract in an interactive web development environment. +- [Learn how to use Data Feeds](/docs/consuming-data-feeds/): If you are already familiar with smart contracts and want to learn how to create *hybrid* smart contracts, use Chainlink Data Feeds to get asset price data on-chain.

    https://www.youtube.com/watch?v=rFXSEEQG9YE @@ -45,10 +45,18 @@ Smart contracts can connect to real-world market prices of assets to produce pow ## What language is a smart contract written in? -The most popular language for writing smart contracts on Ethereum is [Solidity](https://docs.soliditylang.org/en/v0.8.7/). It was created by the Ethereum Foundation specifically for smart contract development and is constantly being updated. +The most popular language for writing smart contracts on Ethereum and EVM Chains is [Solidity](https://docs.soliditylang.org/en/v0.8.7/). It was created by the Ethereum Foundation specifically for smart contract development and is constantly being updated. Other languages exist for writing smart contracts on EVM Chains, but Solidity is the language used for Chainlink smart contracts on EVM Chains. If you've ever written Javascript, Java, or other object-oriented scripting languages, Solidity should be easy to understand. Similar to object-oriented languages, Solidity is considered to be a *contract*-oriented language. +Some networks not EVM-compatible, and use languages other than Solidity for smart contracts. + +- [Solana](/solana/) + - [Writing Solana contracts in Rust](https://docs.solana.com/developing/on-chain-programs/developing-rust) + - [Writing Solana contracts in C](https://docs.solana.com/developing/on-chain-programs/developing-c) +- [Terra](/terra/) + - [Writing Terra smart contracts in Rust](https://docs.solana.com/developing/on-chain-programs/developing-rust) + ## What does a smart contract look like? The structure of a smart contract is similar to that of a class in Javascript, with a few differences. For example, the following `HelloWorld` contract is a simple smart contract that stores a single variable and includes a function to update the value of that variable. @@ -156,6 +164,12 @@ Chainlink data feeds are sources of data [aggregated from many independent Chain ![Chainlink Feeds List](/images/contract-devs/price-aggr.png) +Smart contracts also use oracles to get other capabilities on-chain: + +- [Generate Verifiable Random Numbers (VRF)](/docs/chainlink-vrf/): Use Chainlink VRF to consume randomness in your smart contracts. +- [Call External APIs (Any API)](/docs/request-and-receive-data/): Request & Receive data from any API using the Chainlink contract library. +- [Automate Smart Contract Functions (Keepers)](/docs/chainlink-keepers/introduction/): Automating smart contract functions and regular contract maintenance. + ## What is Remix?

    diff --git a/docs/Introduction/getting-started/consuming-data-feeds.md b/docs/Introduction/getting-started/consuming-data-feeds.md index c0429600b39..5adfad6026b 100644 --- a/docs/Introduction/getting-started/consuming-data-feeds.md +++ b/docs/Introduction/getting-started/consuming-data-feeds.md @@ -5,7 +5,7 @@ date: Last Modified title: "Consuming Data Feeds" permalink: "docs/consuming-data-feeds/" excerpt: "Smart Contracts and Chainlink" -whatsnext: {"Random Numbers Guide":"/docs/get-a-random-number/", "Connect contracts to Any API":"/docs/intermediates-tutorial/", "Chaink Keepers":"/docs/chainlink-keepers/introduction/"} +whatsnext: {"Random Numbers: Using Chainlink VRF":"/docs/intermediates-tutorial/", "Connect contracts to Any API":"/docs/advanced-tutorial/", "Chaink Keepers":"/docs/chainlink-keepers/introduction/"} metadata: title: "Consuming Data Feeds" description: "Learn how to consume Chainlink Data Feeds in your smart contracts." diff --git a/docs/Introduction/getting-started/other-tutorials.md b/docs/Introduction/getting-started/other-tutorials.md index 68a11ab0d38..c64922b871b 100644 --- a/docs/Introduction/getting-started/other-tutorials.md +++ b/docs/Introduction/getting-started/other-tutorials.md @@ -6,7 +6,7 @@ title: "Learning Resources" permalink: "docs/other-tutorials/" --- -Welcome to the Resources page. This is a list of links and pages that you might need to help you throughout your learning journey. If you're new to Chainlink, start with the [Getting Started Guide](/getting-started/) tutorial and work through the rest of the tutorial series to better understand the products and services Chainlink offers. This page contains more resources, inspiration, and outreach information to further your learning. +Welcome to the Resources page. This is a list of links and pages that you might need to help you throughout your learning journey. If you're new to Chainlink, start with the [Getting Started](/docs/conceptual-overview/) guide to better understand the products and services Chainlink offers. This page contains more resources, inspiration, and outreach information to further your learning. **Table of Contents** diff --git a/docs/Using Price Feeds/get-the-latest-price.html b/docs/Using Price Feeds/get-the-latest-price.html index fd91b174162..01089d412b1 100644 --- a/docs/Using Price Feeds/get-the-latest-price.html +++ b/docs/Using Price Feeds/get-the-latest-price.html @@ -16,11 +16,11 @@ Chainlink Data Feeds are the quickest way to connect your smart contracts to the real-world market prices of assets. For example, one use for data feeds is to enable smart contracts to retrieve the latest pricing data of an asset in a single call. -This guide applies specifically to using data feeds on Ethereum Chains. To get the full list of Chainlink Data Feeds running on the Ethereum Chains, see the [Reference Contracts](/docs/reference-contracts/) page. +This guide applies specifically to using data feeds on EVM Chains. To get the full list of Chainlink Data Feeds running on the EVM Chains, see the [Reference Contracts](/docs/reference-contracts/) page. {% include data-quality.md %} -You can use smart contracts to get asset prices on Ethereum chains. These examples show you how to get the price of Ethereum (ETH) on the Ethereum network, but you can modify the examples to work on other Ethereum chains as well. The list of data feeds for each network are available on the [Data Feed Contracts](../reference-contracts/) page. For development, use testnet data feeds such as the [ETH/USD Feed](https://kovan.etherscan.io/address/0x9326BFA02ADD2366b30bacB125260Af641031331) on the Kovan testnet. +You can use smart contracts to get asset prices on EVM Chains. These examples show you how to get the price of Ethereum (ETH) on the Ethereum network, but you can modify the examples to work on other EVM Chains as well. The list of data feeds for each network are available on the [Data Feed Contracts](../reference-contracts/) page. For development, use testnet data feeds such as the [ETH/USD Feed](https://kovan.etherscan.io/address/0x9326BFA02ADD2366b30bacB125260Af641031331) on the Kovan testnet. > 📘 New Feed Registry > You can use the [Feed Registry](../feed-registry/) to reference data feed assets by name or currency identifier instead of by pair/proxy address. diff --git a/docs/Using Price Feeds/reference-contracts.md b/docs/Using Price Feeds/reference-contracts.md index 3889bb1f439..0f336f15c44 100644 --- a/docs/Using Price Feeds/reference-contracts.md +++ b/docs/Using Price Feeds/reference-contracts.md @@ -17,7 +17,7 @@ Chainlink Data Feed contracts are updated on a regular basis by multiple Chainli > > See the [LINK Token Contracts](../link-token-contracts/) page for the details of LINK on each blockchain. -- Ethereum Chains +- EVM Chains - [Ethereum Data Feeds](../ethereum-addresses/) - [Binance Smart Chain Data Feeds](../binance-smart-chain-addresses/) - [Polygon (Matic) Data Feeds](../matic-addresses/) diff --git a/docs/Using Randomness/get-a-random-number.md b/docs/Using Randomness/get-a-random-number.md index 30d3a431217..50561c560db 100644 --- a/docs/Using Randomness/get-a-random-number.md +++ b/docs/Using Randomness/get-a-random-number.md @@ -2,7 +2,7 @@ layout: nodes.liquid section: ethereum date: Last Modified -title: "Example Contracts" +title: "Get a Random Number" permalink: "docs/get-a-random-number/" whatsnext: {"API Reference":"/docs/chainlink-vrf-api-reference/", "Contract Addresses":"/docs/vrf-contracts/"} metadata: diff --git a/docs/home.html b/docs/home.html index 6ce729d8c24..d5dfb3d28a0 100644 --- a/docs/home.html +++ b/docs/home.html @@ -17,7 +17,7 @@

    New to Chainlink and Smart Contracts?

    Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum.

    - + Getting Started Guide
    @@ -62,7 +62,7 @@

    Supported Blockchains

    -

    Ethereum Chains

    +

    EVM Chains

    -
    +
    - +
    -

    New to Chainlink Nodes?

    +

    New to Chainlink and Smart Contracts?

    - Learn the best practices for node operators to enhance the security and reliability of your infrastructure. + Learn the basics in the Getting Started Guide. Build your first smart contract on Ethereum.

    - - Security and Operation Best Practices + + Getting Started Guide
    From 3f31c727457d540533d75cf5dae2d94c2910eab2 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Thu, 16 Dec 2021 12:11:14 -0800 Subject: [PATCH 23/26] Correct CSS for large cards on landing pages --- docs/Chains/ethereum.md | 6 +++--- docs/Chains/solana.md | 11 ++++------- docs/Node Operators/chainlink-nodes.md | 7 ++++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/docs/Chains/ethereum.md b/docs/Chains/ethereum.md index 3a133e1eb32..bbb9fd602a8 100644 --- a/docs/Chains/ethereum.md +++ b/docs/Chains/ethereum.md @@ -9,7 +9,7 @@ permalink: /ethereum/
    -

    +

    Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services while maintaining the security and reliability guarantees inherent to blockchain technology.

    @@ -73,7 +73,7 @@ permalink: /ethereum/
    -
    +
    @@ -87,7 +87,7 @@ permalink: /ethereum/
    -
    +
    -

    +

    Chainlink turns your smart contracts into hybrid smart contracts, giving them access to real-world data and services.

    -

    - The following products are available for {{title}}: -

    -
    +
    -

    Use Data Feeds on Solana

    +

    Use Data Feeds on Solana

    Solana is a high-throughput blockchain. You can use Chainlink Data Feeds on the Solana network to connect your smart contracts to the real-world market prices of assets.

    @@ -29,7 +26,7 @@ permalink: /solana/
    -
    +
    diff --git a/docs/Node Operators/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md index 20d56761e04..6c7e014868a 100644 --- a/docs/Node Operators/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -2,16 +2,17 @@ layout: nodes.liquid section: nodeOperator date: Last Modified -title: "Chainlink Node Docs" +title: "Chainlink Nodes" permalink: /chainlink-nodes/ ---
    -

    +

    Operating a Chainlink node allows you to be part of the Chainlink Network, helping developers build hybrid smart contracts, giving them access to real-world data and services. -

    +

    +

    Learn more about Chainlink nodes with our step‑by‑step tutorials and documentation:

    From 4076f527928d81aeda4167d06b937c71da0fb349 Mon Sep 17 00:00:00 2001 From: Dwight Lyle Date: Fri, 17 Dec 2021 01:06:49 -0800 Subject: [PATCH 24/26] Home-page-specific CSS and add (Ethereum) clarifier to EVM Chains where necessary --- _includes/home.liquid | 24 --- _includes/main.liquid | 1 - _src/docs.css | 160 +--------------- docs/Chains/ethereum.md | 6 +- docs/Chains/solana.md | 4 +- .../getting-started/conceptual-overview.md | 6 +- docs/Node Operators/chainlink-nodes.md | 2 +- docs/Using Price Feeds/reference-contracts.md | 2 +- docs/home.html | 176 +++++++++++++++++- 9 files changed, 185 insertions(+), 196 deletions(-) delete mode 100644 _includes/home.liquid diff --git a/_includes/home.liquid b/_includes/home.liquid deleted file mode 100644 index 40c3eda05cb..00000000000 --- a/_includes/home.liquid +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: ./main.liquid ---- -
    -
    - {{content}} - {% if whatsnext %} -
    -
    -

    What's Next

    - - - {% for page in whatsnext %} - - - - {% endfor %} -
    - › {{page[0]}} -
    -
    - {% endif %} -
    -
    diff --git a/_includes/main.liquid b/_includes/main.liquid index c56c16afba1..5cfb24a8286 100644 --- a/_includes/main.liquid +++ b/_includes/main.liquid @@ -1,6 +1,5 @@ - {% unless title %} diff --git a/_src/docs.css b/_src/docs.css index 3f48377ea13..bcdb2c3ce2b 100644 --- a/_src/docs.css +++ b/_src/docs.css @@ -25,7 +25,6 @@ ul li code { #page { max-width: 1440px; margin: 0px auto; - color: #666; padding-bottom: 40px; } @@ -142,16 +141,6 @@ a.anchor img { margin: 0 0 0 8px; } -/** Home page */ - -.home-content { - display: flex; -} -.home-content > div { - margin: 0px auto; - padding: 0 16px 16px 16px; -} - /** Side navigation */ .nav-content { display: flex; @@ -550,155 +539,18 @@ hr { font-display: swap; } -/** Custom Chain Cards **/ +/** Card text styling **/ -.cl-chaincard-wrapper > h2 { +.cl-card-text > h2 { text-align: center; max-width: 800px; } -.cl-chaincard-wrapper > p { +.cl-card-text > p { text-align: center; max-width: 800px; } -.cl-chaincard { - display: flex; - flex-wrap: wrap; - justify-content: center; -} - -.cl-chaincard h3 { - margin-top: 12px; -} - -.cl-chaincard > div { - width: 350px; - max-width: 350px; - min-width: 220px; - margin: 8px; - border-radius: 8px; - border: 1px solid #dee7fc; - text-align: center; - flex: 1; -} - -.cl-chaincard-logo { - display: block; - max-width: 280px; - margin-left: auto; - margin-right: auto; - padding-top: 16px; -} - -.cl-chaincard-logo img { - height: 32px; - max-height: 32px; - transition: all 0.1s, opacity 0.4s ease-in-out; -} - -.cl-chaincard-logo:hover img { - cursor: pointer; - transform: scale(1.1); - } - -.cl-chaincard-logo:hover > h3 { - cursor: pointer; - color: #6d7380; -} - -.cl-chaincard-links { - list-style-type: none; - padding: 8px; - margin: 0px; - text-align: left; -} - -.cl-chaincard-links > li { - margin-bottom: 12px; -} - -.cl-chaincard-links > li > a { - display: flex; - flex-direction: row; - justify-content: space-between; - padding-left: 24px; - padding-right: 24px; - cursor: pointer; - color: #6d7380; - transition: all 0.2s; -} - -.cl-chaincard-links > li:hover > a { - color: #375bd2; -} - -.cl-chaincard-links > li > a > img { - margin-left: auto; - margin-right: 0px; - width: 12px; - transition: all 0.2s; -} - -.cl-chaincard-links > li:hover > a > img { - transform: translate(5px, 0px); -} - -.cl-chaincard-product { - display: flex; - flex-wrap: wrap; - justify-content: center; -} - -.cl-chaincard-product > div { - max-width: 295px; - min-width: 295px; - margin: 8px; - padding: 24px 14px 24px 14px; - border-radius: 8px; - border: 1px solid #dee7fc; - text-align: center; - flex: 1; -} - -.cl-chaincard-product h3 { - text-align: center; - vertical-align: middle; - height: 45px; - margin-top: 16px; -} - -.cl-chaincard-product p { - display: block; - text-align: center; - vertical-align: middle; - height: 55px; - margin-top: 16px; -} - -.cl-chaincard-product > div > div > img { - height: 50px; - max-height: 50px; -} - -.cl-chaincard-product > div > div > a { - display: inline-flex; - width: 32px; - height: 32px; - margin: 4px; -} - -.cl-chaincard-product > div > div > a > img { - max-height: 32px; - max-width: 32px; - transition: all 0.2s; -} - -.cl-chaincard-product > div > div > a:hover > img { - cursor: pointer; - transform: scale(1.15); -} - /** Imported from old site **/ .cl-custom-page { text-align: center; @@ -715,12 +567,12 @@ hr { margin: 0px 0px; } .cl-featuredcard > div { + display: flex; + flex-direction: column; padding: 24px; border-radius: 8px; margin: 8px; border: 1px solid #dee7fc; - display: flex; - flex-direction: column; align-items: center; text-align: left; flex: 1; @@ -1228,7 +1080,6 @@ input[type='reset'] { padding: 8px; } #nav-container .tab { - padding: 8px 8px 4px 0; display: inline; } #nav-container .tab a { @@ -1267,6 +1118,7 @@ input[type='reset'] { margin-top: 8px; } .cl-featuredcard { + display: inline; flex-direction: column; justify-content: center; height: auto; diff --git a/docs/Chains/ethereum.md b/docs/Chains/ethereum.md index bbb9fd602a8..e441458d2c1 100644 --- a/docs/Chains/ethereum.md +++ b/docs/Chains/ethereum.md @@ -1,7 +1,7 @@ --- layout: nodes.liquid section: ethereum -title: "Chainlink on EVM Chains" +title: "Chainlink on EVM (Ethereum) Chains" date: Last Modified permalink: /ethereum/ --- @@ -73,7 +73,7 @@ permalink: /ethereum/
    -
    +
    @@ -87,7 +87,7 @@ permalink: /ethereum/
    -
    +
    -
    +
    @@ -26,7 +26,7 @@ permalink: /solana/
    -
    +
    diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md index 798dc2230e5..af1fa9c959e 100644 --- a/docs/Introduction/getting-started/conceptual-overview.md +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -45,11 +45,11 @@ Smart contracts can connect to real-world market prices of assets to produce pow ## What language is a smart contract written in? -The most popular language for writing smart contracts on Ethereum and EVM Chains is [Solidity](https://docs.soliditylang.org/en/v0.8.7/). It was created by the Ethereum Foundation specifically for smart contract development and is constantly being updated. Other languages exist for writing smart contracts on EVM Chains, but Solidity is the language used for Chainlink smart contracts on EVM Chains. +The most popular language for writing smart contracts on Ethereum and EVM Chains is [Solidity](https://docs.soliditylang.org/en/v0.8.7/). It was created by the Ethereum Foundation specifically for smart contract development and is constantly being updated. Other languages exist for writing smart contracts on Ethereum and EVM Chains, but Solidity is the language used for Chainlink smart contracts. If you've ever written Javascript, Java, or other object-oriented scripting languages, Solidity should be easy to understand. Similar to object-oriented languages, Solidity is considered to be a *contract*-oriented language. -Some networks not EVM-compatible, and use languages other than Solidity for smart contracts. +Some networks are not EVM-compatible and use languages other than Solidity for smart contracts: - [Solana](/solana/) - [Writing Solana contracts in Rust](https://docs.solana.com/developing/on-chain-programs/developing-rust) @@ -182,7 +182,7 @@ To learn how to use Remix, see the [Deploying Your First Smart Contract ](/docs/deploy-your-first-contract/) guide. ## What is Metamask? diff --git a/docs/Node Operators/chainlink-nodes.md b/docs/Node Operators/chainlink-nodes.md index 6c7e014868a..6b243a0db29 100644 --- a/docs/Node Operators/chainlink-nodes.md +++ b/docs/Node Operators/chainlink-nodes.md @@ -72,7 +72,7 @@ permalink: /chainlink-nodes/
    -
    +
    diff --git a/docs/Using Price Feeds/reference-contracts.md b/docs/Using Price Feeds/reference-contracts.md index 0f336f15c44..1d6b36f441d 100644 --- a/docs/Using Price Feeds/reference-contracts.md +++ b/docs/Using Price Feeds/reference-contracts.md @@ -17,7 +17,7 @@ Chainlink Data Feed contracts are updated on a regular basis by multiple Chainli > > See the [LINK Token Contracts](../link-token-contracts/) page for the details of LINK on each blockchain. -- EVM Chains +- EVM (Ethereum) Chains - [Ethereum Data Feeds](../ethereum-addresses/) - [Binance Smart Chain Data Feeds](../binance-smart-chain-addresses/) - [Polygon (Matic) Data Feeds](../matic-addresses/) diff --git a/docs/home.html b/docs/home.html index d5dfb3d28a0..6bf5a915bc7 100644 --- a/docs/home.html +++ b/docs/home.html @@ -1,15 +1,22 @@ --- -layout: home.liquid +layout: main.liquid title: 'Chainlink Documentation' date: Last Modified permalink: / -landing: true ---
    -
    +
    +

    Welcome to the Chainlink Documentation

    +

    + Chainlink expands the capabilities of smart contracts by enabling access to real-world data and off-chain computation while maintaining the security and reliability guarantees inherent to blockchain technology. +

    +
    +
    +
    +
    @@ -23,7 +30,7 @@

    New to Chainlink and Smart Contracts?

    -
    +

    Supported Blockchains

    Chainlink gives smart contract developers the oracle infrastructure and tooling they need to build scalable and externally-connected dApps on several blockchains and layer-2 networks. Select a blockchain to get started. @@ -62,7 +69,7 @@

    Supported Blockchains

    -

    EVM Chains

    +

    EVM (Ethereum) Chains

    -
    +

    Products

    Chainlink offers several products on blockchains and layer-2 networks. Select a product to get started. @@ -277,7 +284,7 @@

    Chainlink Keepers

    -
    +
    @@ -291,3 +298,158 @@

    Need to run your own Chainlink Node?

    + + From d699c5b2f3af59914fab35903c10b541ad049c23 Mon Sep 17 00:00:00 2001 From: dwightjl Date: Mon, 20 Dec 2021 12:38:16 -0800 Subject: [PATCH 25/26] Correct section tags for acquire-link and fund-your-contract --- .../getting-started => Developer Reference}/acquire-link.md | 2 +- .../fund-your-contract.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/{Introduction/getting-started => Developer Reference}/acquire-link.md (98%) rename docs/{Introduction/getting-started => Developer Reference}/fund-your-contract.md (98%) diff --git a/docs/Introduction/getting-started/acquire-link.md b/docs/Developer Reference/acquire-link.md similarity index 98% rename from docs/Introduction/getting-started/acquire-link.md rename to docs/Developer Reference/acquire-link.md index 015026c266e..e6b871ac4bf 100644 --- a/docs/Introduction/getting-started/acquire-link.md +++ b/docs/Developer Reference/acquire-link.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: gettingStarted +section: ethereum date: Last Modified title: "Acquire testnet LINK" permalink: "docs/acquire-link/" diff --git a/docs/Introduction/getting-started/fund-your-contract.md b/docs/Developer Reference/fund-your-contract.md similarity index 98% rename from docs/Introduction/getting-started/fund-your-contract.md rename to docs/Developer Reference/fund-your-contract.md index f7f50fd2ca0..50ba8106387 100644 --- a/docs/Introduction/getting-started/fund-your-contract.md +++ b/docs/Developer Reference/fund-your-contract.md @@ -1,6 +1,6 @@ --- layout: nodes.liquid -section: gettingStarted +section: ethereum date: Last Modified title: "Fund Your Contracts" permalink: "docs/fund-your-contract/" From b2363b3ed8c2e20b317d2609d5d579d55cd7ab80 Mon Sep 17 00:00:00 2001 From: dwightjl Date: Mon, 20 Dec 2021 15:45:03 -0800 Subject: [PATCH 26/26] Typo and grammar fixes --- .../getting-started/conceptual-overview.md | 16 ++++++++-------- .../getting-started/consuming-data-feeds.md | 6 +++--- .../deploy-your-first-contract.md | 14 +++++++------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/Introduction/getting-started/conceptual-overview.md b/docs/Introduction/getting-started/conceptual-overview.md index af1fa9c959e..6061e77815b 100644 --- a/docs/Introduction/getting-started/conceptual-overview.md +++ b/docs/Introduction/getting-started/conceptual-overview.md @@ -37,11 +37,11 @@ To get your hands on the code right away, you can skip this overview: ## What is a smart contract? What is a hybrid smart contract? -When deployed to a blockchain, a *smart contract* is a set of instructions that can be executed without intervention from third parties. The code of a smart contract determines how it responds to input, just like the code of any other computer program. +When deployed to a blockchain, a *smart contract* is a set of instructions that can be executed without intervention from third parties. The smart contract code defines how it responds to input, just like the code of any other computer program. -A valuable feature of smart contracts is that they can store and manage on-chain assets (like [ETH or ERC20 tokens](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), just like you can with an Ethereum wallet. Because they have an on-chain address like a wallet, they can do everything any other address can. This opens the door for programming automated actions when receiving and transferring assets. +A valuable feature of smart contracts is that they can store and manage on-chain assets (like [ETH or ERC20 tokens](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), just like you can with an Ethereum wallet. Because they have an on-chain address like a wallet, they can do everything any other address can. This enables you to program automated actions when receiving and transferring assets. -Smart contracts can connect to real-world market prices of assets to produce powerful applications. Being able to securely connect smart contracts with off-chain data and services is what makes them *hybrid* smart contracts. This is done using oracles. +Smart contracts can connect to real-world market prices of assets to produce powerful applications. Securely connecting smart contracts with off-chain data and services is what makes them *hybrid* smart contracts. This is done using oracles. ## What language is a smart contract written in? @@ -106,7 +106,7 @@ bool external isTrue; ### Constructors -Another familiar concept to programmers is the **constructor**. It is called upon deploying the contract, so as to set the state of the contract once created. +Another familiar concept to programmers is the **constructor**. When you deploy a contract, the constructor sets the state of the contract when it is first created. In `HelloWorld`, the constructor takes in a `string` as a parameter and sets the `message` state variable to that string. @@ -118,7 +118,7 @@ constructor(string memory initialMessage) { ### Functions -**Functions** are used to access and modify the state of the contract, and call functions on external contracts. `HelloWorld` has a function called `updateMessage`, which updates the current message stored in the state. +**Functions** can access and modify the state of the contract or call other functions on external contracts. `HelloWorld` has a function named `updateMessage`, which updates the current message stored in the state. ```solidity constructor(string memory initialMessage) { @@ -152,9 +152,9 @@ As long as the address is known, its functions can be called through an interfac ## What are oracles? -**Oracles** provide a bridge between the real-world and on-chain smart contracts, by being a source of data that smart contracts can rely on, and act upon. +**Oracles** provide a bridge between the real-world and on-chain smart contracts by being a source of data that smart contracts can rely on, and act upon. -Oracles play an extremely important role in facilitating the full potential of smart contract utility. Without a reliable connection to real-world conditions, smart contracts are unable to effectively serve the real-world. +Oracles play a critical role in facilitating the full potential of smart contract utility. Without a reliable connection to real-world conditions, smart contracts cannot effectively serve the real-world. ## How do smart contracts use oracles? @@ -187,4 +187,4 @@ To learn how to use Remix, see the [Deploying Your First Smart Contract ## What is Metamask? -Contracts are deployed by addresses on the network, so to deploy your own you need an address. Not only that, but you need an address which you can easily use with Remix. Fortunately, [MetaMask](https://metamask.io) is just what is needed. **Metamask** allows anyone to create an address, store funds and interact with Ethereum compatible blockchains from a browser extension. +Contracts are deployed by other addresses on the network. To deploy a smart contract, you need an address. Not only that, but you need an address which you can easily use with Remix. Fortunately, [MetaMask](https://metamask.io) is just what is needed. **Metamask** allows anyone to create an address, store funds, and interact with Ethereum compatible blockchains from a browser extension. diff --git a/docs/Introduction/getting-started/consuming-data-feeds.md b/docs/Introduction/getting-started/consuming-data-feeds.md index 5adfad6026b..54661fceb58 100644 --- a/docs/Introduction/getting-started/consuming-data-feeds.md +++ b/docs/Introduction/getting-started/consuming-data-feeds.md @@ -19,7 +19,7 @@ metadata: ## Overview -When you connect a smart contract to real-world services or off-chain data, you create what is called a *hybrid smart contract*. For example, you can use Chainlink Data Feeds to connect your smart contracts to asset pricing data like the [ETH / USD feed](https://feeds.chain.link/eth-usd). These data feeds use the data aggregated from many independent Chainlink node operators. Each price feed has an on-chain address and functions that enable contracts to read pricing data from that address. +When you connect a smart contract to real-world services or off-chain data, you create a *hybrid smart contract*. For example, you can use Chainlink Data Feeds to connect your smart contracts to asset pricing data like the [ETH / USD feed](https://feeds.chain.link/eth-usd). These data feeds use the data aggregated from many independent Chainlink node operators. Each price feed has an on-chain address and functions that enable contracts to read pricing data from that address. This guide shows you how to write, deploy, and run a smart contract that consumes data from a price data feed. @@ -64,7 +64,7 @@ Deploy the `PriceConsumerV3` smart contract on the Kovan testnet. ![Screenshot of the Compile button.](/images/getting-started/compilePriceConsumerV3.png) 1. On the **Deploy** tab, select the **Injected Web3** environment. This contract specifically requires Web3 because it connects with another contract on the blockchain. Running in a JavaScript VM will not work. - ![Screenshot showing the Intected Web3 environment selected.](/images/getting-started/selectWeb3.png) + ![Screenshot showing the Injected Web3 environment selected.](/images/getting-started/selectWeb3.png) 1. Because the example contract has several imports, Remix might select another contract to deploy by default. In the **Contract** section, select the `PriceConsumerV3` contract to make sure that Remix deploys the correct contract. ![Screenshot showing PriceConsumerV3 as the contract to deploy.](/images/getting-started/selectPriceConsumerV3.png) @@ -81,4 +81,4 @@ Deploy the `PriceConsumerV3` smart contract on the Kovan testnet. 1. Click **getLatestPrice** to show the latest price from the aggregator contract. The latest price appears just below the button. The returned price is an integer, so it is missing its decimal point. ![A screenshot showing the deployed contract.](/images/getting-started/getLatestPrice.png) -You can run your own oracle networks that provide data to smart contracts similar to the `AggregatorV3Interface`, but first you should learn how configure your contracts to pay oracles using LINK tokens. Follow the [Generate Random Numbers](../intermediates-tutorial/) to learn how. +You can run your own oracle networks that provide data to smart contracts similar to the `AggregatorV3Interface`, but first, you should learn how to configure your contracts to pay oracles using LINK tokens. Follow the [Generate Random Numbers](../intermediates-tutorial/) to learn how. diff --git a/docs/Introduction/getting-started/deploy-your-first-contract.md b/docs/Introduction/getting-started/deploy-your-first-contract.md index 5cbb22fa1ba..e5028539c7f 100644 --- a/docs/Introduction/getting-started/deploy-your-first-contract.md +++ b/docs/Introduction/getting-started/deploy-your-first-contract.md @@ -12,7 +12,7 @@ metadata: 0: "/files/1a63254-link.png" --- -You can write your first smart contract and run in your browser without any knowledge about Ethereum or blockchains. This guide shows you how easy it is to develop smart contracts using the [Solidity language](https://soliditylang.org/), a [MetaMask wallet](https://metamask.io) and the [Remix Development Environment](https://remix.ethereum.org/). You can use all of these tools in your browser for free with no signup required. +You can write your first smart contract and run it in your browser without any knowledge about Ethereum or blockchains. This guide shows you how easy it is to develop smart contracts using the [Solidity language](https://soliditylang.org/), a [MetaMask wallet](https://metamask.io) and the [Remix Development Environment](https://remix.ethereum.org/). You can use all of these tools in your browser for free with no signup required. > 📘 Already know Solidity and have MetaMask configured? > @@ -30,13 +30,13 @@ In general, you create and deploy your smart contracts operate using the followi 1. **Write:** Write a contract to define how the contract functions, what data it can store, what other contracts it interacts with, and what external APIs it might call. -1. **Compile:** Pass your smart contract code through a compiler to translate the contract into byte that the blockchain can understand. For example, [Solidity](https://soliditylang.org) code must be compiled before it can run in the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/). +1. **Compile:** Pass your smart contract code through a compiler to translate the contract into byte code that the blockchain can understand. For example, [Solidity](https://soliditylang.org) code must be compiled before it can run in the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/). 1. **Deploy:** Send the compiled smart contract to the blockchain. From that point forward, the contract cannot be altered. However, you can still interact with the contract in several ways. 1. **Run functions:** When you run the functions that you defined for the contract, the network processes those functions and modifies the state of your contract. For some functions, the network charges a small fee to complete the work. Your contract can also have functions that transfer funds to other contracts or wallets. -This guide walks you through each of these steps, but first you must install and fund your MetaMask wallet. +This guide walks you through each step, but you must install and fund your MetaMask wallet first. ## Install and fund your MetaMask wallet @@ -53,7 +53,7 @@ Deploying smart contracts on-chain requires a wallet and ETH. The ETH pays for t ![Screenshot showing the network selection menu in MetaMask. The Kovan Test Network is selected.](/images/getting-started/selectKovan.png) 1. Go to the [Kovan Chainlink Faucet](https://faucets.chain.link/kovan/) and follow the steps to send 0.1 test ETH to your MetaMask wallet address. You can copy your wallet address by clicking your account name in MetaMask. After the faucet completes the transaction, you should have 0.1 ETH in your MetaMask wallet on the Kovan testnet. - ![Screenshot showing a wallet with an balance of 0.1 ETH.](/images/getting-started/fundedWallet.png) + ![Screenshot showing a wallet with a balance of 0.1 ETH.](/images/getting-started/fundedWallet.png) Now that you configured your wallet and funded it with testnet ETH, you can write, compile, and deploy your contract. @@ -82,12 +82,12 @@ Your first contract is a simple `HelloWorld.sol` example. This example shows you ![Screenshot of the Deploy tab and its settings.](/images/getting-started/selectSolidityDeploy.png) 1. In the deployment settings, select the **Injected Web3** environment. This tells Remix that you want to deploy your contract to the blockchain that you configured in MetaMask. You could optionally use one of the Javascript VM options, but they run in a virtual environment with no connection to an actual blockchain or Chainlink oracles. - ![Screenshot showing the Intected Web3 environment selected.](/images/getting-started/selectWeb3.png) + ![Screenshot showing the Injected Web3 environment selected.](/images/getting-started/selectWeb3.png) 1. Next to the **Deploy** button, enter a message that you want to send with the smart contract when you deploy it. This contract has a constructor that sets an initial message when you deploy the contract. ![Screenshot of the Deploy button with "Hello world!" as the defined message.](/images/getting-started/deployHelloWorld.png) -1. Click the **Deploy** button to deploy the contract and its initial message to the blockchain network. MetaMask opens and asks you to confirm payment for deploying the contract. Make sure MetaMask is set to the Kovan network before you accept the transaction. Because these transactions are on the blockchain, they are not reversible. +1. Click the **Deploy** button to deploy the contract and its initial message to the blockchain network. MetaMask opens and asks you to confirm payment to deploy the contract. Make sure MetaMask is set to the Kovan network before you accept the transaction. Because these transactions are on the blockchain, they are not reversible. 1. In the MetaMask prompt, click **Confirm** to approve the transaction and spend your testnet ETH required to deploy the contract. ![Screenshot showing Metamask asking you to confirm the transaction.](/images/getting-started/confirmTransaction.png) @@ -107,7 +107,7 @@ Because you deployed the contract to an actual blockchain, several nodes on the 1. In your deployed contract, enter a new message next to the `updateMessage` function. ![Screenshot showing the updateMessage function with a new value.](/images/getting-started/runUpdateMessage.png) -1. Click the `updateMessage` button to set the new message in the contract data. MetaMask opens and asks you to confirm payment for updating the state of your contract. +1. Click the `updateMessage` button to set the new message in the contract data. MetaMask opens and asks you to confirm payment to update the state of your contract. 1. In the new MetaMask prompt, click **Confirm** to approve the transaction. ![Screenshot showing Metamask asking you to confirm the transaction.](/images/getting-started/confirmTransaction.png)