* feat: api: improve the correctness of Eth's trace_block (#11609) * Improve the correctness of Eth's trace_block - Improve encoding/decoding of parameters and return values: - Encode "native" parameters and return values with Solidity ABI. - Correctly decode parameters to "create" calls. - Use the correct (ish) output for "create" calls. - Handle all forms of "create". - Make robust with respect to reverts: - Use the actor ID/address from the trace instead of looking it up in the state-tree (may not exist in the state-tree due to a revert). - Gracefully handle failed actor/contract creation. - Improve performance: - We avoid looking anything up in the state-tree when translating the trace, which should significantly improve performance. - Improve code readability: - Remove all "backtracking" logic. - Use an "environment" struct to store temporary state instead of attaching it to the trace. - Fix random bugs: - Fix an allocation bug in the "address" logic (need to set the capacity before modifying the slice). - Improved error checking/handling. - Use correct types for `trace_block` action/results (create, call, etc.). - And use the correct types for Result/Action structs instead of reusing the same "Call" action every time. - Improve error messages. * Make gen Make gen --------- Co-authored-by: Steven Allen <steven@stebalien.com>
This commit is contained in:
+18
-1
@@ -875,9 +875,26 @@ type FullNode interface {
|
||||
Web3ClientVersion(ctx context.Context) (string, error) //perm:read
|
||||
|
||||
// TraceAPI related methods
|
||||
|
||||
// Returns an OpenEthereum-compatible trace of the given block (implementing `trace_block`),
|
||||
// translating Filecoin semantics into Ethereum semantics and tracing both EVM and FVM calls.
|
||||
//
|
||||
// Returns traces created at given block
|
||||
// Features:
|
||||
//
|
||||
// - FVM actor create events, calls, etc. show up as if they were EVM smart contract events.
|
||||
// - Native FVM call inputs are ABI-encoded (Solidity ABI) as if they were calls to a
|
||||
// `handle_filecoin_method(uint64 method, uint64 codec, bytes params)` function
|
||||
// (where `codec` is the IPLD codec of `params`).
|
||||
// - Native FVM call outputs (return values) are ABI-encoded as `(uint32 exit_code, uint64
|
||||
// codec, bytes output)` where `codec` is the IPLD codec of `output`.
|
||||
//
|
||||
// Limitations (for now):
|
||||
//
|
||||
// 1. Block rewards are not included in the trace.
|
||||
// 2. SELFDESTRUCT operations are not included in the trace.
|
||||
// 3. EVM smart contract "create" events always specify `0xfe` as the "code" for newly created EVM smart contracts.
|
||||
EthTraceBlock(ctx context.Context, blkNum string) ([]*ethtypes.EthTraceBlock, error) //perm:read
|
||||
|
||||
// Replays all transactions in a block returning the requested traces for each transaction
|
||||
EthTraceReplayBlockTransactions(ctx context.Context, blkNum string, traceTypes []string) ([]*ethtypes.EthTraceReplayBlockTransaction, error) //perm:read
|
||||
|
||||
|
||||
Reference in New Issue
Block a user