-
Notifications
You must be signed in to change notification settings - Fork 58
/
ethbackend.proto
215 lines (155 loc) · 5.3 KB
/
ethbackend.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
syntax = "proto3";
import "google/protobuf/empty.proto";
import "types/types.proto";
import "remote/bor.proto";
package remote;
option go_package = "./remote;remoteproto";
service ETHBACKEND {
rpc Etherbase(EtherbaseRequest) returns (EtherbaseReply);
rpc NetVersion(NetVersionRequest) returns (NetVersionReply);
rpc NetPeerCount(NetPeerCountRequest) returns (NetPeerCountReply);
// Version returns the service version number
rpc Version(google.protobuf.Empty) returns (types.VersionReply);
// Syncing returns a data object detailing the status of the sync process
rpc Syncing(google.protobuf.Empty) returns (SyncingReply);
// ProtocolVersion returns the Ethereum protocol version number (e.g. 66 for ETH66).
rpc ProtocolVersion(ProtocolVersionRequest) returns (ProtocolVersionReply);
// ClientVersion returns the Ethereum client version string using node name convention (e.g. TurboGeth/v2021.03.2-alpha/Linux).
rpc ClientVersion(ClientVersionRequest) returns (ClientVersionReply);
rpc Subscribe(SubscribeRequest) returns (stream SubscribeReply);
// Only one subscription is needed to serve all the users, LogsFilterRequest allows to dynamically modifying the subscription
rpc SubscribeLogs(stream LogsFilterRequest) returns (stream SubscribeLogsReply);
// High-level method - can read block from db, snapshots or apply any other logic
// it doesn't provide consistency
// Request fields are optional - it's ok to request block only by hash or only by number
rpc Block(BlockRequest) returns (BlockReply);
// High-level method - can read block body (only storage metadata) from db, snapshots or apply any other logic
rpc CanonicalBodyForStorage(CanonicalBodyForStorageRequest) returns (CanonicalBodyForStorageReply);
// High-level method - can find block hash by block number
rpc CanonicalHash(CanonicalHashRequest) returns (CanonicalHashReply);
// High-level method - can find block number by block hash
rpc HeaderNumber(HeaderNumberRequest) returns (HeaderNumberReply);
// High-level method - can find block number by txn hash
// it doesn't provide consistency
rpc TxnLookup(TxnLookupRequest) returns (TxnLookupReply);
// NodeInfo collects and returns NodeInfo from all running sentry instances.
rpc NodeInfo(NodesInfoRequest) returns (NodesInfoReply);
// Peers collects and returns peers information from all running sentry instances.
rpc Peers(google.protobuf.Empty) returns (PeersReply);
rpc AddPeer(AddPeerRequest) returns (AddPeerReply);
// PendingBlock returns latest built block.
rpc PendingBlock(google.protobuf.Empty) returns (PendingBlockReply);
rpc BorTxnLookup(BorTxnLookupRequest) returns (BorTxnLookupReply);
rpc BorEvents(BorEventsRequest) returns (BorEventsReply);
}
enum Event {
HEADER = 0;
PENDING_LOGS = 1;
PENDING_BLOCK = 2;
// NEW_SNAPSHOT - one or many new snapshots (of snapshot sync) were created,
// client need to close old file descriptors and open new (on new segments),
// then server can remove old files
NEW_SNAPSHOT = 3;
}
message EtherbaseRequest {}
message EtherbaseReply {types.H160 address = 1;}
message NetVersionRequest {}
message NetVersionReply {uint64 id = 1;}
message SyncingReply {
uint64 last_new_block_seen = 1;
uint64 frozen_blocks = 2;
uint64 current_block = 3;
bool syncing = 4;
message StageProgress {
string stage_name = 1;
uint64 block_number = 2;
}
repeated StageProgress stages = 5;
}
message NetPeerCountRequest {}
message NetPeerCountReply {uint64 count = 1;}
message ProtocolVersionRequest {}
message ProtocolVersionReply {uint64 id = 1;}
message ClientVersionRequest {}
message ClientVersionReply {string node_name = 1;}
message CanonicalHashRequest {
uint64 block_number = 1;
}
message CanonicalHashReply {
types.H256 hash = 1;
}
message HeaderNumberRequest {
types.H256 hash = 1;
}
message HeaderNumberReply {
optional uint64 number = 1;
}
message CanonicalBodyForStorageRequest {
uint64 blockNumber = 1;
}
message CanonicalBodyForStorageReply {
bytes body = 1;
}
message SubscribeRequest {
Event type = 1;
}
message SubscribeReply {
Event type = 1;
bytes data = 2; // serialized data
}
message LogsFilterRequest {
bool all_addresses = 1;
repeated types.H160 addresses = 2;
bool all_topics = 3;
repeated types.H256 topics = 4;
}
message SubscribeLogsReply {
types.H160 address = 1;
types.H256 block_hash = 2;
uint64 block_number = 3;
bytes data = 4;
uint64 log_index = 5;
repeated types.H256 topics = 6;
types.H256 transaction_hash = 7;
uint64 transaction_index = 8;
bool removed = 9;
}
message BlockRequest {
uint64 block_height = 2;
types.H256 block_hash = 3;
}
message BlockReply {
bytes block_rlp = 1;
bytes senders = 2;
}
message TxnLookupRequest {
types.H256 txn_hash = 1;
}
message TxnLookupReply {
uint64 block_number = 1;
}
message NodesInfoRequest {
uint32 limit = 1;
}
message AddPeerRequest {
string url = 1;
}
message NodesInfoReply {
repeated types.NodeInfoReply nodes_info = 1;
}
message PeersReply {
repeated types.PeerInfo peers = 1;
}
message AddPeerReply {
bool success = 1;
}
message PendingBlockReply {
bytes block_rlp = 1;
}
message EngineGetPayloadBodiesByHashV1Request {
repeated types.H256 hashes = 1;
}
message EngineGetPayloadBodiesByRangeV1Request {
uint64 start = 1;
uint64 count = 2;
}