-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
Chain Reader config improvements #11679
Conversation
jmank88
commented
Jan 3, 2024
•
edited
Loading
edited
- core/services/job: remove JSONConfig.Bytes hack
- Shorten median chain reader smoke test abi
- Improve ReadType UX by changing the enum to string
I see that you haven't updated any README files. Would it make sense to do so? |
I see that you haven't updated any CHANGELOG files. Would it make sense to do so? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't work, it just ends up sending bytes representation of json in a string to get unmarshalled into RelayConfig.
for eg. codec looks like this
"codec\":\"[123 34 99 104 97 105 110 67 111 100 101 99 67 111 110 102 105 103 34 32 58 123 34 77 101 100 105 97 110 82 101 112 111 114 116 34 58 123 34 84 121 112 101 65 98 105 34 58 32 34 91 123 92 34 78 97 109 101 92 34 58 32 92 34 84 105 109 101 115 116 97 109 112 92 34 44 92 34 84 121 112 101 92 34 58 32 92 34 117 105 110 116 51 50 92 34 125 44 123 92 34 78 97 109 101 92 34 58 32 92 34 79 98 115 101 114 118 101 114 115 92 34 44 92 34 84 121 112 101 92 34 58 32 92 34 98 121 116 101 115 51 50 92 34 125 44 123 92 34 78 97 109 101 92 34 58 32 92 34 79 98 115 101 114 118 97 116 105 111 110 115 92 34 44 92 34 84 121 112 101 92 34 58 32 92 34 105 110 116 49 57 50 91 93 92 34 125 44 123 92 34 78 97 109 101 92 34 58 32 92 34 74 117 101 108 115 80 101 114 70 101 101 67 111 105 110 92 34 44 92 34 84 121 112 101 92 34 58 32 92 34 105 110 116 49 57 50 92 34 125 93 34 125 125 125]\"
fails here to be exact
Debugging IMHO following the existing style leads to a much better user experience by producing more readable code and we can completely avoid escpaing JSON: [relayConfig]
chainID = 1337
fromBlock = 42
[relayConfig.chainReader.chainContractReaders.median]
contractABI = '''
[
{
"inputs": [
{
"internalType": "contractLinkTokenInterface",
"name": "link",
"type": "address"
}
]
}
]
'''
[relayConfig.chainReader.chainContractReaders.median.chainReaderDefinitions.LatestTransmissionDetails]
chainSpecificName = "latestTransmissionDetails"
readType = 0
[[relayConfig.chainReader.chainContractReaders.median.chainReaderDefinitions.LatestTransmissionDetails.output_modifications]]
type = "rename"
fields = {
LatestAnswer_ = "LatestAnswer",
LatestTimestamp_ = "LatestTimestamp"
}
[relayConfig.chainReader.chainContractReaders.median.chainReaderDefinitions.LatestRoundRequested]
chainSpecificName = "RoundRequested"
"params": {
"requester": ""
},
"readType": 1
[relayConfig.codec.chainCodecConfig.MedianReport]
TypeAbi = '''
[
{
"Name": "Timestamp",
"Type": "uint32"
},
{
"Name": "Observers",
"Type": "bytes32"
},
{
"Name": "Observations",
"Type": "int192[]"
},
{
"Name": "JuelsPerFeeCoin",
"Type": "int192"
}
]
''' |
still a bit of an eyesore, but looks way better than that string escaping hell, lgtm |
This was a bit hacky. Working on a cleaner version. |
96b9e12
to
7d81ca4
Compare
2ca90fe
to
5ccf80b
Compare
1f57c9d
to
c808f98
Compare
c808f98
to
e377ef0
Compare
e377ef0
to
cda84e9
Compare
cda84e9
to
25bd7bb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please just verify that it's going through by putting invalid config in the field names or something to see it fail. Last time, it turned out to be ignoring the config. I wish there was an easy way to verify it's using the chain reader and codec...
For ChainReader, could we fix that by adding an INFO log message to the OCR2 delegate that spawns the median plugin, or maybe the median plugin itself? At least one of those places, maybe both, should be able to check whether ChainReader got initialized or is nil. Although if its only available in the plugin itself, not sure where those logs will go to |
Does the chain reader report itself as a named service? If so, you could check the |
25bd7bb
to
d0c3215
Compare
d0c3215
to
e496785
Compare
* Implement skeleton interfaces, structs, & methods for ChainReader EVM POC - Read ChainReader config in from RelayConfig - Add some initialization and validation relay skeletons - Use medianProviderWrapper instead of passing medianContract separately This avoids us having to modify the signature of NewMedianFactory, which would require further modifications to all non-evm repos and chainlink-relay - Add chain_reader_test.go with some basic relay tests Co-authored-by: Jordan Krage <[email protected]> - Add chain reader config validation - Add chain reader config validation tests - Add config for chain reader median contract to cr validation testcases - Add unimplemented Encode(), Decode(), GetMaxEncodingSize(), GetMaxDecodingSize() - Add ChainReader() method to mock provider for plugin test - Rename relaymercury.ChainReader to MercuryChainReader, resolve name collisions - Add tests for errors during ChainReader construction - Propagate InvalidConfig & any other errors back to client We should ignore Unsupported until node ops have been given ample time to migrate to the new job spec (including a section for ChainReader config) so that we can remove the old product-specific MedianContract component from MedianProvider. All other errors we can immediately start passing back to the client, letting the core node decide how to handle them (eg. displaying an "invalid job spec" message to the UI if the RelayConfig was invalid or the ContractID missing) * Fix lint * Fix go imports lint * Fix go.mod require got split into two Co-authored-by: Jordan Krage <[email protected]> * Run make gomodtidy * Add tickets to chainreader TODOs * Log when we're falling back to internal MedianContract We had this before, at some point it accidentally got dropped * Pass contractID, relayConfig instead of relayOpts Also: move test for invalid contract ID to evm_test.go, & add mismatched ChainID test while we're here since it's pretty similar * Revert get solana sha workflow to ref develop Co-authored-by: Jordan Krage <[email protected]> * Update err handling for when chain reader config is missing * Update solana repo hash * Improve chain reader config validation tests * Run go mod tidy * Update solana repo go mod reference and tidy * fix logs dir for Solana tests * fix solana logs path once more * print absolue log folder location * get abs folder in a correct way * do it some other way * update solana logs dir in github workflow * Add chain Reader enabled log to NewMedianServices * Update chainlink-solana ref and tidy * Add logs and handle disabled chain reader when median loop is enabled * Update go mod solana repo refs * Improve error messages in evm chain reader and add test cases * Update minor comment * Run tidy * Remove unneeded chain reader codec methods * Remove chain reader return values as they are out of scope for this PR * Add types for the evm * Create a codec entry with from args, allowing us to do type checking and to have structs to use with abi.Arguments's Pack function * Craetes a function to get the max size for abi.Argumetns, given any outermost slices have N elements * Add codec and make chain reader use it. Run the interface tests for both chain reader and codec. * Add modifiers to evm chain reader and codec * Add modifiers to evm chain reader and codec * small fixes after merging * Small cleanups and comments * fix after merge * add events * Don't pass ctx around in tests * Support multiple contract names and mapping them to multiple contracts. * Upadte chain reader interface * update go mod * Fix address type and start the chain reader * Update go mod references * add epoch converting * Simplify chain reader's bindings. * Add smoke test and feature test for chain reader. * lint again * Update solana to point to newer other ones in its own integration tests... * linter * . * newer solana again * newer solana again... * Fix bug with unnamed return params and invalid params containing the same name multiple times * Add generated files to sonar exclude * Update sonar again * Methods per sonar suggestions * Reanme function and type per PR feedback * Generate abi, bin & wrapper for chainreader test with gethwrappers * Update generated-wrapper-dependency-versions-do-not-edit.txt Also: remove extra unused files * prettier -w ChainReaderTestContract.sol * Update to use the ErrSliceWrongLen * Move test contract from contracts/tests to contrats/shared/test * Fix SQ coverage exclusions * Use modifier for time * Update go.mod * .github/workflows: dedupe log artifact name with tag_suffix * [TT-792] Add Resources for New OCR2 Tests (#11702) * Add Resources for New OCR2 Tests * More power to the engines * Log everything * Chill on the power now * Fix missing container env * Update common * Fix broken test * Add encoder defs for events * Revert "Add encoder defs for events" This reverts commit dd99acc. * revert the change to codec entry for event and simplify how it's done * Add Marshal method for custom codec types. * Updated common, still seeing not found, not sure why... * Update feeds * Update feeds and common to remove accidental debugging log line * Update feeds to remove accidental log line and to add more logging to warning messages * Fixup go mod * Update feeds * Remove json tag that had no business being where it was in codec entry * Fix small lint error, likely detected from better linter in merge from dev * Add fuzz test for codec * Support indexed events * PR feedback, fix typo, clear up comment, revert making a function public * Refactored function for getting event input. * --fix and add comments * use maps instaed fo ToCamelCase to allow consistnacy, also safer if customers have foo and foo_ both as varibles. * Scope native and checked type conversion to a single struct and add tests to verify that NewAt is safe and fuzz tests for sanity around it too * Chain Reader config improvements (#11679) * core/services/job: remove JSONConfig.Bytes hack * Shorten chain reader cfg abi in median test, change readType string * minimize abi; pretty formatting; use text marshaller * integrations-tests/client: use TOML for relayconfig * minimize chain reader median contract abi in features ocr2 test * pretty ABI JSON * add ModifiersConfig wrapper to include type field * fix TestOCR2TaskJobSpec_String --------- Co-authored-by: ilija <[email protected]> * Template must in types gen and small json rename for mods in chain reader def fields * Update test contract for lint, fix toml test files after renaming the mod in prior commit * Update common for a rename and fix tests that I broke a couple commits ago * Move test contract * Commit with fixed contract for codec test and add small check to if statement for arg len * small fix to encoder, and fix config in feature test * Remove debug line since smoke test is passing now and I need to be ready to merge * Fix bad merge conflict * small PR fixes * Couple more error fixes * update common * update feeds to point to main * Fix typo * Update Solana repo refs * Pretty chain reader test solitidty file * Update solana * Update solana in integation tests * Needed to update more than just integation tests for solana. * Update Solana ref to fix relayConfig * Update Solana ref again * Update solana and starknet to point to the develop branches. * update relayer for starknet --------- Co-authored-by: Domino Valdano <[email protected]> Co-authored-by: ilija <[email protected]> Co-authored-by: ilija42 <[email protected]> Co-authored-by: Jordan Krage <[email protected]> Co-authored-by: Bartek Tofel <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Adam Hamrick <[email protected]>