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.
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
all: live chain-aware tracing #27629
all: live chain-aware tracing #27629
Changes from 15 commits
642a374
e25065b
f67ac09
84d6432
ee791b2
0d25fbc
8db1078
788851b
057bbda
a7de17e
3787816
3975c7c
619ac29
54171ee
3cabef4
f1bd415
d799c68
add825e
0aeec7f
b692a68
2a59d24
4370527
5466fa3
2faf3db
b2b32e6
09ee197
f9f377d
b7ff573
00a19d3
216a4b0
659043a
9c999c3
0be6e22
abd8807
f7ca31e
651c438
74c1f30
ff3c15f
6ee4fb8
1914bc6
429dcc9
e65f14a
e4399a6
14d603b
023ade6
ee58cc7
dc1175e
da8b362
0d268b7
cc6b68e
6b8d216
b80aa1e
1d13645
856c079
9c00b12
379b8d3
56600e9
8a1f67c
5bc3f62
cd8c4c5
8610f8f
00ee953
72410c3
c341c79
5190cfc
9e5c96f
f862531
c5e407b
9360cab
0967291
ddd1b0a
0484068
5e82cbe
0d254e4
a52c80d
89d79d6
54f4bc7
64e35e9
8b3180d
2d14bb5
68bd6c6
f241a76
580f025
aa0db68
f21efbc
c331930
626fee4
d07264a
4c1d675
9a6b9a2
ae522d6
56862cf
68342ef
3078dfe
6c44a59
188cd41
f3c0a89
95b5029
2cc0954
57cd0c3
056f229
27f662d
706c869
03206be
08cb623
cf6a315
4cd7cb3
674a38e
0db7a19
35291e6
3ba6b92
5f0a543
490efc5
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
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 also document that these all are invoked post-execution, and the values reported via these methods are the finalized values (as opposed to runtime values which might revert)
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.
Good tip
Is that the case? I thought values in statedb could still revert.
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, my bad
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.
SO, how does a "tracer" (generically, I know there differen types), track
A
is not yet finalized. The same tx is also executed on a sibling blockB
, and the transfer is different there. The same tx is also executed on sibling blockC
, and there the transfer never happens.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.
I'm unsure about some of your terminology. I'll assume
subscope
means a newCALL/STATIC/DELEGATE/etc.
execution context andops
means opcode executed.Then
CaptureExit
will have theerr
to determine the call failed, reverted/failed can be checked usingerror.Is(err, evm.ExecutionReverted)
.In those cases, when the transaction terminates, in
CaptureTxEnd
, we re-create the call tree structure of the trx and if a parent node is reverted/failed, we flag all the calls in its substree with a special value to tell that this call did not make it to the chain.I think in those it depends on the use case(s) of how the tracer is going to be used. Some tracers could wait until the block is actually finalized (there is implementation challenges for this but it's feasible. In our case, we deal with fork in a later step. So we receive all blocks from the tracer, then we deal with forks after the tracer by keeping the parent/child relationship in a "tree".