-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Make transaction tracker oracle methods harder to misuse. #4465
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
Closed
Closed
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
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.
shouldn't this be a negation?
Previously, the
next_replayed_oracle_responsewould return: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.
In the
Nonecase, i.e. in non-replay mode, we queried the actual oracle.That's still the same: In non-replay mode we query the oracle (the
elseclause), but in replay mode we set this toNonebecause we will obtain the actual value from the replaying responses below.This PR just merges both calls so you can't forget one, i.e. we don't obtain the
Somevalue in replay mode yet.Uh oh!
There was an error while loading. Please reload this page.
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 is more confusing than before IMO.
Previously, when
next_replayed_oracle_responsereturnedSome(Http(response))we'd simply add that toadd_oracle_response.Now the
add_oracle_responsehas new logic included that interpretsNoneas "we should use a next entry from the oracle responses.Maybe it'd be bit clearer if you didn't try to have single
let responsehere and special case in theif { ... }andelse { ... }clauses? MaybeThere 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.
Yes, maybe it's not much of an improvement after all. Let's do the removal part first: #4467
It's not in all call sites as simple as putting the response in the callback, so I think what you're suggesting would basically be the approach from before.
The case I'm worried about is that in one of the many places where we use oracles we forget to add the response in one of the two cases (or both).
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.
Maybe if we mark the
callbackasmust_useand then make the code so that the only thing you can do with it is push viaself.transaction_tracker?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.
Right, so
replayeither returns an oracle response and adds it to the outcomes, or it returns amust_usevalue that can only be used by later adding the response from the actual oracle to the outcomes.Maybe I'll try that approach tomorrow.