erigon-pulse/interfaces/web3/trace.proto
Alex Sharov fd0e2d5c4d
kv.Snapshots() grpc method (#549)
* Remove interfaces for replacement

* Squashed 'interfaces/' content from commit 041a3b20

git-subtree-dir: interfaces
git-subtree-split: 041a3b204cceee5348d54bfa683dec6c7cf30d14

* save

* save
2022-07-26 09:28:10 +07:00

313 lines
5.8 KiB
Protocol Buffer

syntax = "proto3";
import "google/protobuf/empty.proto";
import "web3/common.proto";
import "types/types.proto";
package web3;
// Call params
message LegacyCall {
optional types.H160 from = 1;
optional types.H160 to = 2;
optional uint64 gas_limit = 3;
optional uint64 gas_price = 4;
optional types.H256 value = 5;
optional bytes input = 6;
}
message AccessList { repeated AccessListItem access_list = 1; }
message EIP2930Call {
optional types.H160 from = 1;
optional types.H160 to = 2;
optional uint64 gas_limit = 3;
optional uint64 gas_price = 4;
optional types.H256 value = 5;
optional bytes input = 6;
optional AccessList access_list = 7;
}
message EIP1559Call {
optional types.H160 from = 1;
optional types.H160 to = 2;
optional uint64 gas_limit = 3;
optional uint64 max_priority_fee_per_gas = 4;
optional uint64 max_fee_per_gas = 5;
optional types.H256 value = 6;
optional bytes input = 7;
optional AccessList access_list = 8;
}
message Call {
oneof call {
LegacyCall legacy = 1;
EIP2930Call eip2930 = 2;
EIP1559Call eip1559 = 3;
}
}
message TraceKinds {
bool trace = 1;
bool vm_trace = 2;
bool state_diff = 3;
}
message CallRequest {
Call call = 1;
TraceKinds kinds = 2;
}
message CallRequests {
repeated CallRequest calls = 1;
BlockId block_id = 2;
}
message TraceBlockRequest {
BlockId id = 1;
TraceKinds kinds = 2;
}
message TraceTransactionRequest {
types.H256 hash = 1;
TraceKinds kinds = 2;
}
message AddressSet { repeated types.H160 addresses = 1; }
enum FilterMode {
Union = 0;
Intersection = 1;
}
message FilterRequest {
optional BlockId from_block = 1;
optional BlockId to_block = 2;
optional AddressSet from_addresses = 3;
optional AddressSet to_addresses = 4;
optional FilterMode mode = 5;
}
// Trace
enum CallType {
CallTypeCall = 0;
CallTypeCallCode = 1;
CallTypeDelegateCall = 2;
CallTypeStaticCall = 3;
}
message CallAction {
types.H160 from = 1;
types.H160 to = 2;
types.H256 value = 3;
uint64 gas = 4;
bytes input = 5;
optional CallType call_type = 6;
}
message CreateAction {
types.H160 from = 1;
types.H256 value = 2;
uint64 gas = 3;
bytes init = 4;
}
message SelfdestructAction {
types.H160 address = 1;
types.H160 refund_address = 2;
types.H256 balance = 3;
}
message RewardAction {
types.H160 author = 1;
types.H256 value = 2;
enum RewardType {
Block = 0;
Uncle = 1;
}
RewardType reward_type = 3;
}
message Action {
oneof action {
CallAction call = 1;
CreateAction create = 2;
SelfdestructAction selfdestruct = 3;
RewardAction reward = 4;
}
}
message Trace {
Action action = 1;
optional TraceResult result = 2;
uint64 subtraces = 3;
repeated uint64 trace_address = 4;
}
message CallOutput {
uint64 gas_used = 1;
bytes output = 2;
}
message CreateOutput {
uint64 gas_used = 1;
bytes code = 2;
types.H160 address = 3;
}
message TraceOutput {
oneof output {
CallOutput call = 1;
CreateOutput create = 2;
}
}
message TraceResult {
oneof result {
TraceOutput output = 1;
string error = 2;
}
}
message Traces { repeated Trace traces = 1; }
message TraceWithLocation {
Trace trace = 1;
optional uint64 transaction_position = 2;
optional types.H256 transaction_hash = 3;
uint64 block_number = 4;
types.H256 block_hash = 5;
}
message TracesWithLocation { repeated TraceWithLocation traces = 1; }
message OptionalTracesWithLocation { optional TracesWithLocation traces = 1; }
// VM trace
message MemoryDelta {
uint64 off = 1;
bytes data = 2;
}
message StorageDelta {
types.H256 key = 1;
types.H256 val = 2;
}
message VmExecutedOperation {
uint64 used = 1;
optional types.H256 push = 2;
optional MemoryDelta mem = 3;
optional StorageDelta store = 4;
}
message VmInstruction {
uint32 pc = 1;
uint64 cost = 2;
optional VmExecutedOperation ex = 3;
optional VmTrace sub = 4;
}
message VmTrace {
bytes code = 1;
repeated VmInstruction ops = 2;
}
// State diff
message AlteredH256 {
types.H256 from = 1;
types.H256 to = 2;
}
message DeltaH256 {
oneof delta {
google.protobuf.Empty unchanged = 1;
types.H256 added = 2;
types.H256 removed = 3;
AlteredH256 altered = 4;
}
}
message AlteredU64 {
uint64 from = 1;
uint64 to = 2;
}
message DeltaU64 {
oneof delta {
google.protobuf.Empty unchanged = 1;
uint64 added = 2;
uint64 removed = 3;
AlteredU64 altered = 4;
}
}
message AlteredBytes {
bytes from = 1;
bytes to = 2;
}
message DeltaBytes {
oneof delta {
google.protobuf.Empty unchanged = 1;
bytes added = 2;
bytes removed = 3;
AlteredBytes altered = 4;
}
}
message StorageDiffEntry {
types.H256 location = 1;
DeltaH256 delta = 2;
}
message AccountDiff {
DeltaH256 balance = 1;
DeltaU64 nonce = 2;
DeltaBytes code = 3;
repeated StorageDiffEntry storage = 4;
}
message AccountDiffEntry {
types.H160 key = 1;
AccountDiff value = 2;
}
message StateDiff { repeated AccountDiffEntry diff = 1; }
message FullTrace {
bytes output = 1;
optional Traces traces = 2;
optional VmTrace vm_trace = 3;
optional StateDiff state_diff = 4;
}
message FullTraceWithTransactionHash {
FullTrace full_trace = 1;
types.H256 transaction_hash = 2;
}
message FullTraces { repeated FullTrace traces = 1; }
message FullTracesWithTransactionHashes {
repeated FullTraceWithTransactionHash traces = 1;
}
message OptionalFullTracesWithTransactionHashes {
optional FullTracesWithTransactionHashes traces = 1;
}
service TraceApi {
rpc Call(CallRequests) returns (FullTraces);
rpc Block(BlockId) returns (OptionalTracesWithLocation);
rpc BlockTransactions(TraceBlockRequest)
returns (OptionalFullTracesWithTransactionHashes);
rpc Transaction(TraceTransactionRequest) returns (FullTrace);
rpc Filter(FilterRequest) returns (stream TraceWithLocation);
}