forked from cerc-io/plugeth
eth/tracers: add withLog to callTracer (#25991)
In some cases, it is desirable to capture what is triggered by each trace, when using the `callTracer`. For example: call `USDT.transfer` will trigger a `Transfer(from, to, value)` event.
This PR adds the option to capture logs to the call tracer, by specifying `{"withLog": true}` in the tracerconfig.
Any logs belonging to failed/reverted call-scopes are removed from the output, to prevent interpretation mistakes.
Signed-off-by: Delweng <delweng@gmail.com>
Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
This commit is contained in:
@@ -46,6 +46,13 @@ type callContext struct {
|
||||
Miner common.Address `json:"miner"`
|
||||
}
|
||||
|
||||
// callLog is the result of LOG opCode
|
||||
type callLog struct {
|
||||
Address common.Address `json:"address"`
|
||||
Topics []common.Hash `json:"topics"`
|
||||
Data hexutil.Bytes `json:"data"`
|
||||
}
|
||||
|
||||
// callTrace is the result of a callTracer run.
|
||||
type callTrace struct {
|
||||
From common.Address `json:"from"`
|
||||
@@ -57,6 +64,7 @@ type callTrace struct {
|
||||
Error string `json:"error,omitempty"`
|
||||
Revertal string `json:"revertReason,omitempty"`
|
||||
Calls []callTrace `json:"calls,omitempty"`
|
||||
Logs []callLog `json:"logs,omitempty"`
|
||||
Value *hexutil.Big `json:"value,omitempty"`
|
||||
// Gencodec adds overridden fields at the end
|
||||
Type string `json:"type"`
|
||||
@@ -81,6 +89,10 @@ func TestCallTracerNative(t *testing.T) {
|
||||
testCallTracer("callTracer", "call_tracer", t)
|
||||
}
|
||||
|
||||
func TestCallTracerNativeWithLog(t *testing.T) {
|
||||
testCallTracer("callTracer", "call_tracer_withLog", t)
|
||||
}
|
||||
|
||||
func testCallTracer(tracerName string, dirPath string, t *testing.T) {
|
||||
isLegacy := strings.HasSuffix(dirPath, "_legacy")
|
||||
files, err := os.ReadDir(filepath.Join("testdata", dirPath))
|
||||
|
||||
File diff suppressed because one or more lines are too long
+400
File diff suppressed because one or more lines are too long
+2295
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "8430028481555",
|
||||
"extraData": "0xd783010302844765746887676f312e352e31856c696e7578",
|
||||
"gasLimit": "3141592",
|
||||
"hash": "0xde66937783697293f2e529d2034887c531535d78afa8c9051511ae12ba48fbea",
|
||||
"miner": "0x2a65aca4d5fc5b5c859090a6c34d164135398226",
|
||||
"mixHash": "0xba28a43bfbca4a2effbb76bb70d03482a8a0c92e2883ff36cbac3d7c6dbb7df5",
|
||||
"nonce": "0xa3827ec0a82fe823",
|
||||
"number": "765824",
|
||||
"stateRoot": "0x8d96cb027a29f8ca0ccd6d31f9ea0656136ec8030ecda70bb9231849ed6f41a2",
|
||||
"timestamp": "1451389443",
|
||||
"totalDifficulty": "4838314986494741271",
|
||||
"alloc": {
|
||||
"0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb": {
|
||||
"balance": "0x14203bee2ea6fbe8c",
|
||||
"nonce": "34"
|
||||
},
|
||||
"0xe2fe6b13287f28e193333fdfe7fedf2f6df6124a": {
|
||||
"balance": "0x2717a9c870a286f4350"
|
||||
},
|
||||
"0xf4eced2f682ce333f96f2d8966c613ded8fc95dd": {
|
||||
"balance": "0x0",
|
||||
"code": "0x606060405260e060020a600035046306fdde038114610047578063313ce567146100a457806370a08231146100b057806395d89b41146100c8578063a9059cbb14610123575b005b61015260008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156101f55780601f106101ca576101008083540402835291602001916101f5565b6101c060025460ff1681565b6101c060043560036020526000908152604090205481565b610152600180546020601f6002600019610100858716150201909316929092049182018190040260809081016040526060828152929190828280156101f55780601f106101ca576101008083540402835291602001916101f5565b610045600435602435600160a060020a033316600090815260036020526040902054819010156101fd57610002565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156101b25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6060908152602090f35b820191906000526020600020905b8154815290600101906020018083116101d857829003601f168201915b505050505081565b600160a060020a03821660009081526040902054808201101561021f57610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056",
|
||||
"storage": {
|
||||
"0x1dae8253445d3a5edbe8200da9fc39bc4f11db9362181dc1b640d08c3c2fb4d6": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"0x8ba52aac7f255d80a49abcf003d6af4752aba5a9531cae94fde7ac8d72191d67": "0x000000000000000000000000000000000000000000000000000000000178e460"
|
||||
}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 1,
|
||||
"homesteadBlock": 1150000,
|
||||
"daoForkBlock": 1920000,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 2463000,
|
||||
"eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0",
|
||||
"eip155Block": 2675000,
|
||||
"eip158Block": 2675000,
|
||||
"byzantiumBlock": 4370000,
|
||||
"constantinopleBlock": 7280000,
|
||||
"petersburgBlock": 7280000,
|
||||
"istanbulBlock": 9069000,
|
||||
"muirGlacierBlock": 9200000,
|
||||
"berlinBlock": 12244000,
|
||||
"londonBlock": 12965000,
|
||||
"arrowGlacierBlock": 13773000,
|
||||
"grayGlacierBlock": 15050000,
|
||||
"terminalTotalDifficultyPassed": true,
|
||||
"ethash": {}
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "765825",
|
||||
"difficulty": "8425912256743",
|
||||
"timestamp": "1451389488",
|
||||
"gasLimit": "3141592",
|
||||
"miner": "0xe2fe6b13287f28e193333fdfe7fedf2f6df6124a"
|
||||
},
|
||||
"input": "0xf8aa22850ba43b740083024d4594f4eced2f682ce333f96f2d8966c613ded8fc95dd80b844a9059cbb000000000000000000000000dbf03b407c01e7cd3cbea99509d93f8dddc8c6fb00000000000000000000000000000000000000000000000000000000009896801ca067da548a2e0f381a957b9b51f086073375d6bfc7312cbc9540b3647ccab7db11a042c6e5b34bc7ba821e9c25b166fa13d82ad4b0d044d16174d5587d4f04ecfcd1",
|
||||
"tracerConfig": {
|
||||
"withLog": true
|
||||
},
|
||||
"result": {
|
||||
"from": "0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb",
|
||||
"gas": "0x1f36d",
|
||||
"gasUsed": "0xc6a5",
|
||||
"to": "0xf4eced2f682ce333f96f2d8966c613ded8fc95dd",
|
||||
"input": "0xa9059cbb000000000000000000000000dbf03b407c01e7cd3cbea99509d93f8dddc8c6fb0000000000000000000000000000000000000000000000000000000000989680",
|
||||
"logs": [
|
||||
{
|
||||
"address": "0xf4eced2f682ce333f96f2d8966c613ded8fc95dd",
|
||||
"topics": [
|
||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
|
||||
"0x000000000000000000000000d1220a0cf47c7b9be7a2e6ba89f429762e7b9adb",
|
||||
"0x000000000000000000000000dbf03b407c01e7cd3cbea99509d93f8dddc8c6fb"
|
||||
],
|
||||
"data": "0x0000000000000000000000000000000000000000000000000000000000989680"
|
||||
}
|
||||
],
|
||||
"value": "0x0",
|
||||
"type": "CALL"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+107
File diff suppressed because one or more lines are too long
+89
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user