Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add evm implementation of chain reader and codec #11550

Closed
wants to merge 157 commits into from
Closed
Show file tree
Hide file tree
Changes from 154 commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
deddf17
Implement skeleton interfaces, structs, & methods for ChainReader EVM…
reductionista Nov 22, 2023
0217ec9
Fix lint
ilija42 Nov 22, 2023
7170799
Fix go imports lint
ilija42 Nov 22, 2023
4b371c7
Fix go.mod require got split into two
ilija42 Nov 22, 2023
8782b45
Run make gomodtidy
ilija42 Nov 22, 2023
3ac341c
Add tickets to chainreader TODOs
ilija42 Nov 22, 2023
879e286
Log when we're falling back to internal MedianContract
reductionista Nov 22, 2023
109e0d9
Pass contractID, relayConfig instead of relayOpts
reductionista Nov 23, 2023
106ba7f
Revert get solana sha workflow to ref develop
ilija42 Nov 23, 2023
688e862
Update err handling for when chain reader config is missing
ilija42 Nov 23, 2023
80e27ca
Update solana repo hash
ilija42 Nov 23, 2023
36d465d
Improve chain reader config validation tests
ilija42 Nov 23, 2023
833dbe7
Run go mod tidy
ilija42 Nov 23, 2023
330696e
Update solana repo go mod reference and tidy
ilija42 Nov 23, 2023
0529d9c
fix logs dir for Solana tests
Tofel Nov 24, 2023
30f8273
fix solana logs path once more
Tofel Nov 24, 2023
fffe74e
print absolue log folder location
Tofel Nov 24, 2023
b6a7f18
get abs folder in a correct way
Tofel Nov 24, 2023
de206db
do it some other way
Tofel Nov 24, 2023
5e78c45
update solana logs dir in github workflow
Tofel Nov 24, 2023
742ef71
Add chain Reader enabled log to NewMedianServices
ilija42 Nov 24, 2023
61f5c9f
Update chainlink-solana ref and tidy
ilija42 Nov 24, 2023
9f831e6
Merge pull request #11378 from smartcontractkit/BCF-2612-ChainReader-…
ilija42 Nov 24, 2023
4e70656
Add logs and handle disabled chain reader when median loop is enabled
ilija42 Nov 26, 2023
2597944
Update go mod solana repo refs
ilija42 Nov 26, 2023
1a739b6
Improve error messages in evm chain reader and add test cases
ilija42 Nov 26, 2023
a32ea42
Merge remote-tracking branch 'origin/develop' into BCF-2612-ChainRead…
ilija42 Nov 27, 2023
23b5b41
Update minor comment
ilija42 Nov 27, 2023
cc46b0a
Run tidy
ilija42 Nov 27, 2023
d3153b1
Remove unneeded chain reader codec methods
ilija42 Nov 27, 2023
372f0e3
Remove chain reader return values as they are out of scope for this PR
ilija42 Nov 27, 2023
a97bf2e
Add types for the evm
nolag Nov 15, 2023
796693d
Merge pull request #11301 from smartcontractkit/rtinianov_evm_types
nolag Nov 27, 2023
17fe123
Create a codec entry with from args, allowing us to do type checking …
nolag Nov 15, 2023
6bc616c
Merge pull request #11302 from smartcontractkit/rtinianov_parse_types
nolag Nov 28, 2023
1690e14
Craetes a function to get the max size for abi.Argumetns, given any o…
nolag Nov 15, 2023
dab9762
Merge pull request #11259 from smartcontractkit/rtinianov_sizes
nolag Nov 28, 2023
103a8c5
Add codec and make chain reader use it. Run the interface tests for …
nolag Nov 15, 2023
3773479
Merge pull request #11303 from smartcontractkit/rtinianov_encode_decode
nolag Dec 1, 2023
e24cb10
Add modifiers to evm chain reader and codec
nolag Dec 1, 2023
7e0303c
Merge branch 'develop' into rtinianov_withMergedCommon
nolag Dec 7, 2023
eab312c
Add modifiers to evm chain reader and codec
nolag Dec 1, 2023
c0f7ff6
small fixes after merging
nolag Dec 7, 2023
7423f5d
Small cleanups and comments
nolag Dec 7, 2023
9b7d1a9
Merge pull request #11503 from smartcontractkit/rtinianov_mods
nolag Dec 7, 2023
400ac4f
Merge branch 'BCF-2612-ChainReader-Next' into rtinianov_withMergedCommon
nolag Dec 7, 2023
c990a7a
fix after merge
nolag Dec 7, 2023
e79ff3b
Merge pull request #11507 from smartcontractkit/rtinianov_withMergedC…
nolag Dec 7, 2023
2590e1b
add events
nolag Dec 7, 2023
8ac9d95
Don't pass ctx around in tests
nolag Dec 8, 2023
26c0521
Merge pull request #11528 from smartcontractkit/rtinianov_cleanTests
nolag Dec 8, 2023
19e3325
Merge pull request #11524 from smartcontractkit/rtinianov_events
nolag Dec 8, 2023
f2beeb4
Support multiple contract names and mapping them to multiple contracts.
nolag Dec 11, 2023
9f61865
Merge pull request #11532 from smartcontractkit/rtinianov_multicontra…
nolag Dec 12, 2023
ba7112f
Upadte chain reader interface
nolag Dec 12, 2023
bafd0d4
Merge pull request #11547 from smartcontractkit/rtinianov_changeChain…
nolag Dec 12, 2023
a417fe9
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Dec 13, 2023
33f697b
update go mod
nolag Dec 13, 2023
0e1eb49
Fix address type and start the chain reader
nolag Dec 13, 2023
fc2482d
Merge pull request #11562 from smartcontractkit/rtinianov_small_fixes
nolag Dec 13, 2023
c287971
Update go mod references
ilija42 Dec 13, 2023
761031f
add epoch converting
nolag Dec 20, 2023
22e6652
Merge pull request #11634 from smartcontractkit/rtinianov_epoch
nolag Dec 20, 2023
a2e92cd
Simplify chain reader's bindings.
nolag Dec 14, 2023
836ea49
Merge pull request #11641 from smartcontractkit/rtinianov_cleaner_reader
nolag Dec 21, 2023
8ea316a
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Dec 22, 2023
e226705
Add smoke test and feature test for chain reader.
nolag Dec 22, 2023
0e7e10a
lint again
nolag Dec 22, 2023
817f81d
Update solana to point to newer other ones in its own integration tes…
nolag Dec 22, 2023
fa1325e
linter
nolag Dec 22, 2023
406b8b4
.
nolag Dec 22, 2023
81a255c
newer solana again
nolag Dec 22, 2023
d825448
newer solana again...
nolag Dec 22, 2023
4f4bdbf
Merge pull request #11659 from smartcontractkit/rtinianov_smoke_clean
nolag Dec 22, 2023
83d7a88
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Dec 22, 2023
1b520bc
Fix bug with unnamed return params and invalid params containing the …
nolag Dec 23, 2023
0e90ef4
Add generated files to sonar exclude
nolag Dec 23, 2023
c4a0282
Update sonar again
nolag Dec 23, 2023
f7629a3
Methods per sonar suggestions
nolag Dec 23, 2023
0d8d3b7
Reanme function and type per PR feedback
nolag Dec 23, 2023
51f06a6
Generate abi, bin & wrapper for chainreader test with gethwrappers
reductionista Dec 23, 2023
ff0bc8e
Update generated-wrapper-dependency-versions-do-not-edit.txt
reductionista Dec 23, 2023
cdb5565
prettier -w ChainReaderTestContract.sol
reductionista Dec 23, 2023
cd919be
Branch was auto-updated.
github-actions[bot] Jan 2, 2024
087b8eb
Update to use the ErrSliceWrongLen
nolag Jan 2, 2024
c55f8e3
Branch was auto-updated.
github-actions[bot] Jan 2, 2024
1e3db65
Move test contract from contracts/tests to contrats/shared/test
reductionista Jan 2, 2024
4ecffaa
Branch was auto-updated.
github-actions[bot] Jan 3, 2024
1163401
Branch was auto-updated.
github-actions[bot] Jan 3, 2024
08ee9ac
Branch was auto-updated.
github-actions[bot] Jan 3, 2024
8871a58
Branch was auto-updated.
github-actions[bot] Jan 3, 2024
0d0f424
Branch was auto-updated.
github-actions[bot] Jan 3, 2024
7ad1d8e
Fix SQ coverage exclusions
ilija42 Jan 4, 2024
253d06c
Branch was auto-updated.
github-actions[bot] Jan 4, 2024
4709a82
Branch was auto-updated.
github-actions[bot] Jan 4, 2024
a21f3c5
Branch was auto-updated.
github-actions[bot] Jan 4, 2024
2180739
Use modifier for time
nolag Jan 4, 2024
b0722c3
Update go.mod
jmank88 Jan 5, 2024
d9af9c6
Merge pull request #11687 from smartcontractkit/rtinianov_loopWithTime
nolag Jan 5, 2024
ab616d1
.github/workflows: dedupe log artifact name with tag_suffix
jmank88 Jan 8, 2024
2ca1159
[TT-792] Add Resources for New OCR2 Tests (#11702)
kalverra Jan 8, 2024
6b86362
Update common
nolag Jan 8, 2024
30d2c26
Fix broken test
nolag Jan 8, 2024
dd99acc
Add encoder defs for events
reductionista Jan 9, 2024
73f6ab6
Revert "Add encoder defs for events"
nolag Jan 9, 2024
50bb0a6
revert the change to codec entry for event and simplify how it's done
nolag Jan 9, 2024
fde3943
Add Marshal method for custom codec types.
nolag Jan 9, 2024
984f5ef
Updated common, still seeing not found, not sure why...
nolag Jan 9, 2024
394dd3a
Update feeds
nolag Jan 10, 2024
57d871f
Update feeds and common to remove accidental debugging log line
nolag Jan 10, 2024
b89c20c
Update feeds to remove accidental log line and to add more logging to…
nolag Jan 10, 2024
8134026
Fixup go mod
nolag Jan 10, 2024
c945411
Merge pull request #11721 from smartcontractkit/rtinianov_alsoTestServer
nolag Jan 12, 2024
c4004ac
Update feeds
nolag Jan 12, 2024
31a7bee
Remove json tag that had no business being where it was in codec entry
nolag Jan 13, 2024
d5a0dc6
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 13, 2024
ab2672d
Fix small lint error, likely detected from better linter in merge fro…
nolag Jan 14, 2024
954c248
Add fuzz test for codec
nolag Jan 13, 2024
6fdba4f
Merge pull request #11776 from smartcontractkit/rtinianov_fuzz_codec
nolag Jan 15, 2024
2d4f05d
Support indexed events
nolag Jan 11, 2024
5ed314c
PR feedback, fix typo, clear up comment, revert making a function public
nolag Jan 15, 2024
cb473e0
Refactored function for getting event input.
nolag Jan 15, 2024
8ee5f12
--fix and add comments
nolag Jan 15, 2024
bce2e3b
use maps instaed fo ToCamelCase to allow consistnacy, also safer if c…
nolag Jan 16, 2024
5403f5e
Merge pull request #11775 from smartcontractkit/rtinianov_eventFields
nolag Jan 16, 2024
e1f837f
Scope native and checked type conversion to a single struct and add t…
nolag Jan 15, 2024
d5c1100
Chain Reader config improvements (#11679)
jmank88 Jan 16, 2024
0543f0c
Merge pull request #11792 from smartcontractkit/rtinianov_private_cod…
nolag Jan 16, 2024
0ee6c0a
Template must in types gen and small json rename for mods in chain re…
nolag Jan 17, 2024
e0dea96
Update test contract for lint, fix toml test files after renaming the…
nolag Jan 17, 2024
2ee2a95
Update common for a rename and fix tests that I broke a couple commit…
nolag Jan 17, 2024
5ad3eca
Move test contract
nolag Jan 17, 2024
308f8d7
Commit with fixed contract for codec test and add small check to if s…
nolag Jan 17, 2024
7ac5618
small fix to encoder, and fix config in feature test
nolag Jan 17, 2024
66a8abe
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 18, 2024
40189d0
Merge develop and update common to have a merged develop
nolag Jan 18, 2024
2981f92
Remove debug line since smoke test is passing now and I need to be re…
nolag Jan 18, 2024
3d28756
Fix bad merge conflict
nolag Jan 18, 2024
bc0bcbc
small PR fixes
nolag Jan 18, 2024
469296b
Couple more error fixes
nolag Jan 19, 2024
4797358
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 19, 2024
139bf16
update common
nolag Jan 19, 2024
7acd8a5
update feeds to point to main
nolag Jan 19, 2024
d0becd7
Fix typo
nolag Jan 19, 2024
97a484b
Update Solana repo refs
ilija42 Jan 19, 2024
06bb9a5
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 19, 2024
119386a
Pretty chain reader test solitidty file
nolag Jan 19, 2024
6deae11
Update solana
nolag Jan 19, 2024
5f8b77c
Update solana in integation tests
nolag Jan 19, 2024
8ffca9a
Needed to update more than just integation tests for solana.
nolag Jan 19, 2024
6392275
Update Solana ref to fix relayConfig
reductionista Jan 20, 2024
caf1d1e
Update Solana ref again
reductionista Jan 20, 2024
56e517b
Merge branch 'develop' into BCF-2612-ChainReader-Next
reductionista Jan 20, 2024
40bb712
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 20, 2024
d4c0b69
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 22, 2024
12489ff
Update solana and starknet to point to the develop branches.
nolag Jan 22, 2024
9fa0181
Merge branch 'develop' into BCF-2612-ChainReader-Next
nolag Jan 22, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
strategy:
fail-fast: false
matrix:
cmd: ["go_core_tests", "go_core_race_tests"]
cmd: ["go_core_tests", "go_core_race_tests", "go_core_fuzz"]
name: Core Tests (${{ matrix.cmd }})
runs-on: ubuntu20.04-64cores-256GB
env:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -340,12 +340,12 @@ jobs:
file: ocr
pyroscope_env: ci-smoke-ocr-evm-simulated
- name: ocr2
nodes: 4
ilija42 marked this conversation as resolved.
Show resolved Hide resolved
nodes: 6
os: ubuntu-latest
file: ocr2
pyroscope_env: ci-smoke-ocr2-evm-simulated
- name: ocr2
nodes: 4
nodes: 6
os: ubuntu-latest
pyroscope_env: ci-smoke-ocr2-plugins-evm-simulated
tag_suffix: "-plugins"
Expand Down Expand Up @@ -472,7 +472,7 @@ jobs:
cl_repo: ${{ env.CHAINLINK_IMAGE }}
cl_image_tag: ${{ github.sha }}${{ matrix.product.tag_suffix }}
aws_registries: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
artifacts_name: ${{ matrix.product.name }}-test-logs
artifacts_name: ${{ matrix.product.name }}${{ matrix.product.tag_suffix }}-test-logs
artifacts_location: ./integration-tests/smoke/logs/
publish_check_name: ${{ matrix.product.name }}
token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,6 @@ tools/flakeytests/coverage.txt

.test_summary/
.run.id

# Fuzz tests can create these files
**/testdata/fuzz/*
3 changes: 2 additions & 1 deletion common/txmgr/confirmer.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ import (
"github.com/prometheus/client_golang/prometheus/promauto"
"go.uber.org/multierr"

commonhex "github.com/smartcontractkit/chainlink-common/pkg/utils/hex"

"github.com/smartcontractkit/chainlink-common/pkg/chains/label"
"github.com/smartcontractkit/chainlink-common/pkg/logger"
"github.com/smartcontractkit/chainlink-common/pkg/services"
commonhex "github.com/smartcontractkit/chainlink-common/pkg/utils/hex"
"github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox"

"github.com/smartcontractkit/chainlink/v2/common/client"
Expand Down
1 change: 1 addition & 0 deletions contracts/scripts/native_solc_compile_all_shared
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ compileContract shared/token/ERC677/BurnMintERC677.sol
compileContract shared/token/ERC677/LinkToken.sol
compileContract shared/mocks/WERC20Mock.sol
compileContract vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/ERC20.sol
compileContract shared/test/helpers/ChainReaderTestContract.sol
117 changes: 117 additions & 0 deletions contracts/src/v0.8/shared/test/helpers/ChainReaderTestContract.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;

struct TestStruct {
int32 Field;
string DifferentField;
uint8 OracleId;
uint8[32] OracleIds;
address Account;
address[] Accounts;
int192 BigField;
MidLevelTestStruct NestedStruct;
}

struct MidLevelTestStruct {
bytes2 FixedBytes;
InnerTestStruct Inner;
}

struct InnerTestStruct {
int64 IntVal;
string S;
}

contract LatestValueHolder {
event Triggered(
int32 indexed field,
string differentField,
uint8 oracleId,
uint8[32] oracleIds,
address Account,
address[] Accounts,
int192 bigField,
MidLevelTestStruct nestedStruct
);

event TriggeredEventWithDynamicTopic(string indexed fieldHash, string field);

// First topic is event hash
event TriggeredWithFourTopics(int32 indexed field1, int32 indexed field2, int32 indexed field3);

TestStruct[] private s_seen;
uint64[] private s_arr;

constructor() {
// See chain_reader_interface_tests.go in chainlink-relay
s_arr.push(3);
s_arr.push(4);
}

function addTestStruct(
int32 field,
string calldata differentField,
uint8 oracleId,
uint8[32] calldata oracleIds,
address account,
address[] calldata accounts,
int192 bigField,
MidLevelTestStruct calldata nestedStruct
) public {
s_seen.push(TestStruct(field, differentField, oracleId, oracleIds, account, accounts, bigField, nestedStruct));
}

function returnSeen(
int32 field,
string calldata differentField,
uint8 oracleId,
uint8[32] calldata oracleIds,
address account,
address[] calldata accounts,
int192 bigField,
MidLevelTestStruct calldata nestedStruct
) public pure returns (TestStruct memory) {
return TestStruct(field, differentField, oracleId, oracleIds, account, accounts, bigField, nestedStruct);
}

function getElementAtIndex(uint256 i) public view returns (TestStruct memory) {
// See chain_reader_interface_tests.go in chainlink-relay
return s_seen[i - 1];
}

function getPrimitiveValue() public pure returns (uint64) {
// See chain_reader_interface_tests.go in chainlink-relay
return 3;
}

function getDifferentPrimitiveValue() public pure returns (uint64) {
// See chain_reader_interface_tests.go in chainlink-relay
return 1990;
}

function getSliceValue() public view returns (uint64[] memory) {
return s_arr;
}

function triggerEvent(
int32 field,
string calldata differentField,
uint8 oracleId,
uint8[32] calldata oracleIds,
address account,
address[] calldata accounts,
int192 bigField,
MidLevelTestStruct calldata nestedStruct
) public {
emit Triggered(field, differentField, oracleId, oracleIds, account, accounts, bigField, nestedStruct);
}

function triggerEventWithDynamicTopic(string calldata field) public {
emit TriggeredEventWithDynamicTopic(field, field);
}

// first topic is the event signature
function triggerWithFourTopics(int32 field1, int32 field2, int32 field3) public {
emit TriggeredWithFourTopics(field1, field2, field3);
}
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ batch_blockhash_store: ../../contracts/solc/v0.8.6/BatchBlockhashStore/BatchBloc
batch_vrf_coordinator_v2: ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2/BatchVRFCoordinatorV2.abi ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2/BatchVRFCoordinatorV2.bin d0a54963260d8c1f1bbd984b758285e6027cfb5a7e42701bcb562ab123219332
batch_vrf_coordinator_v2plus: ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2Plus/BatchVRFCoordinatorV2Plus.abi ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2Plus/BatchVRFCoordinatorV2Plus.bin 7bb76ae241cf1b37b41920830b836cb99f1ad33efd7435ca2398ff6cd2fe5d48
blockhash_store: ../../contracts/solc/v0.8.6/BlockhashStore/BlockhashStore.abi ../../contracts/solc/v0.8.6/BlockhashStore/BlockhashStore.bin 12b0662f1636a341c8863bdec7a20f2ddd97c3a4fd1a7ae353fe316609face4e
chain_reader_example: ../../contracts/solc/v0.8.19/ChainReaderTestContract/LatestValueHolder.abi ../../contracts/solc/v0.8.19/ChainReaderTestContract/LatestValueHolder.bin de88c7e68de36b96aa2bec844bdc96fcd7c9017b38e25062b3b9f9cec42c814f
chain_specific_util_helper: ../../contracts/solc/v0.8.6/ChainSpecificUtilHelper/ChainSpecificUtilHelper.abi ../../contracts/solc/v0.8.6/ChainSpecificUtilHelper/ChainSpecificUtilHelper.bin 5f10664e31abc768f4a37901cae7a3bef90146180f97303e5a1bde5a08d84595
consumer_wrapper: ../../contracts/solc/v0.7/Consumer/Consumer.abi ../../contracts/solc/v0.7/Consumer/Consumer.bin 894d1cbd920dccbd36d92918c1037c6ded34f66f417ccb18ec3f33c64ef83ec5
cron_upkeep_factory_wrapper: ../../contracts/solc/v0.8.6/CronUpkeepFactory/CronUpkeepFactory.abi - dacb0f8cdf54ae9d2781c5e720fc314b32ed5e58eddccff512c75d6067292cd7
Expand Down
4 changes: 3 additions & 1 deletion core/gethwrappers/go_generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,9 @@ package gethwrappers
//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/MockAggregatorProxy/MockAggregatorProxy.abi ../../contracts/solc/v0.8.6/MockAggregatorProxy/MockAggregatorProxy.bin MockAggregatorProxy mock_aggregator_proxy

// Log tester
//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.abi ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.bin LogEmitter log_emitter

// ChainReader test contract
//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.19/ChainReaderTestContract/LatestValueHolder.abi ../../contracts/solc/v0.8.19/ChainReaderTestContract/LatestValueHolder.bin LatestValueHolder chain_reader_example

// Chainlink Functions
//go:generate go generate ./functions
Expand Down
Loading
Loading