1pub use self::tokens::{
2 BuiltinConstructor, Constructor, ConstructorKind, Field, OutputType, Scheme, Type,
3};
4
5pub mod grammar;
6mod parser;
7mod tokens;
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12 use crate::tokens::Scheme;
13
14 #[test]
15 fn correct_constructor_parser() {
16 assert_eq!(
17 Constructor::parse("boolTrue = Bool")
18 .unwrap()
19 .compute_tl_id(),
20 0x997275b5
21 );
22
23 assert_eq!(
24 Constructor::parse("pub.ed25519 key:int256 = PublicKey;")
25 .unwrap()
26 .compute_tl_id(),
27 0x4813b4c6
28 );
29
30 const PACKET_CONTENTS: &str = r###"
31 adnl.packetContents
32 rand1:bytes
33 flags:#
34 from:flags.0?PublicKey
35 from_short:flags.1?adnl.id.short
36 message:flags.2?adnl.Message
37 messages:flags.3?(vector adnl.Message)
38 address:flags.4?adnl.addressList
39 priority_address:flags.5?adnl.addressList
40 seqno:flags.6?long
41 confirm_seqno:flags.7?long
42 recv_addr_list_version:flags.8?int
43 recv_priority_addr_list_version:flags.9?int
44 reinit_date:flags.10?int
45 dst_reinit_date:flags.10?int
46 signature:flags.11?bytes
47 rand2:bytes
48 = adnl.PacketContents
49 "###;
50
51 assert_eq!(
52 Constructor::parse(PACKET_CONTENTS).unwrap().compute_tl_id(),
53 0xd142cd89
54 );
55 }
56
57 #[test]
58 fn correct_scheme_parser() {
59 const DATA: &str = r###"
60int ? = Int;
61long ? = Long;
62double ? = Double;
63string ? = String;
64object ? = Object;
65function ? = Function;
66bytes data:string = Bytes;
67true = True;
68boolTrue = Bool;
69boolFalse = Bool;
70
71
72vector {t:Type} # [ t ] = Vector t;
73
74int128 4*[ int ] = Int128;
75int256 8*[ int ] = Int256;
76
77testObject value:int o:object f:function = TestObject;
78testString value:string = TestObject;
79testInt value:int = TestObject;
80testVectorBytes value:(vector bytes) = TestObject;
81
82tcp.authentificate nonce:bytes = tcp.Message;
83tcp.authentificationNonce nonce:bytes = tcp.Message;
84tcp.authentificationComplete key:PublicKey signature:bytes = tcp.Message;
85
86fec.raptorQ data_size:int symbol_size:int symbols_count:int = fec.Type;
87fec.roundRobin data_size:int symbol_size:int symbols_count:int = fec.Type;
88fec.online data_size:int symbol_size:int symbols_count:int = fec.Type;
89
90---functions---
91
92getTestObject = TestObject;
93
94---types---
95
96pk.unenc data:bytes = PrivateKey;
97pk.ed25519 key:int256 = PrivateKey;
98pk.aes key:int256 = PrivateKey;
99pk.overlay name:bytes = PrivateKey;
100
101pub.unenc data:bytes = PublicKey;
102pub.ed25519 key:int256 = PublicKey;
103pub.aes key:int256 = PublicKey;
104pub.overlay name:bytes = PublicKey;
105
106
107---functions---
108
109---types---
110
111adnl.id.short id:int256 = adnl.id.Short;
112
113adnl.proxyToFastHash ip:int port:int date:int data_hash:int256 shared_secret:int256 = adnl.ProxyTo;
114adnl.proxyToFast ip:int port:int date:int signature:int256 = adnl.ProxyToSign;
115
116adnl.proxy.none id:int256 = adnl.Proxy;
117adnl.proxy.fast id:int256 shared_secret:bytes = adnl.Proxy;
118
119
120adnl.address.udp ip:int port:int = adnl.Address;
121adnl.address.udp6 ip:int128 port:int = adnl.Address;
122//adnl.address.tcp ip:int port:int = adnl.Address;
123//adnl.address.tcp6 ip:int128 port:int = adnl.Address;
124
125adnl.address.tunnel to:int256 pubkey:PublicKey = adnl.Address;
126
127adnl.addressList addrs:(vector adnl.Address) version:int reinit_date:int priority:int expire_at:int = adnl.AddressList;
128
129adnl.node id:PublicKey addr_list:adnl.addressList = adnl.Node;
130adnl.nodes nodes:(vector adnl.node) = adnl.Nodes;
131
132---functions---
133
134---types---
135
136adnl.packetContents
137 rand1:bytes
138 flags:#
139 from:flags.0?PublicKey
140 from_short:flags.1?adnl.id.short
141 message:flags.2?adnl.Message
142 messages:flags.3?(vector adnl.Message)
143 address:flags.4?adnl.addressList
144 priority_address:flags.5?adnl.addressList
145 seqno:flags.6?long
146 confirm_seqno:flags.7?long
147 recv_addr_list_version:flags.8?int
148 recv_priority_addr_list_version:flags.9?int
149 reinit_date:flags.10?int
150 dst_reinit_date:flags.10?int
151 signature:flags.11?bytes
152 rand2:bytes
153 = adnl.PacketContents;
154
155adnl.tunnelPacketContents
156 rand1:bytes
157 flags:#
158 from_ip:flags.0?int
159 from_port:flags.0?int
160 message:flags.1?bytes
161 statistics:flags.2?bytes
162 payment:flags.3?bytes
163 rand2:bytes
164 = adnl.TunnelPacketContents;
165
166
167// flag 16 - packet is outbound
168// flag 17 - control packet
169adnl.proxyPacketHeader
170 proxy_id:int256
171 flags:#
172 ip:flags.0?int
173 port:flags.0?int
174 adnl_start_time:flags.1?int
175 seqno:flags.2?long
176 date:flags.3?int
177 signature:int256 = adnl.ProxyPacketHeader;
178
179adnl.proxyControlPacketPing id:int256 = adnl.ProxyControlPacket;
180adnl.proxyControlPacketPong id:int256 = adnl.ProxyControlPacket;
181adnl.proxyControlPacketRegister ip:int port:int = adnl.ProxyControlPacket;
182
183
184adnl.message.createChannel key:int256 date:int = adnl.Message;
185adnl.message.confirmChannel key:int256 peer_key:int256 date:int = adnl.Message;
186
187adnl.message.custom data:bytes = adnl.Message;
188
189adnl.message.nop = adnl.Message;
190adnl.message.reinit date:int = adnl.Message;
191
192adnl.message.query query_id:int256 query:bytes = adnl.Message;
193adnl.message.answer query_id:int256 answer:bytes = adnl.Message;
194
195adnl.message.part hash:int256 total_size:int offset:int data:bytes = adnl.Message;
196
197---functions---
198---types---
199
200adnl.db.node.key local_id:int256 peer_id:int256 = adnl.db.Key;
201adnl.db.node.value date:int id:PublicKey addr_list:adnl.addressList priority_addr_list:adnl.addressList = adnl.db.node.Value;
202
203---functions---
204
205
206---types---
207
208rldp2.messagePart transfer_id:int256 fec_type:fec.Type part:int total_size:long seqno:int data:bytes = rldp2.MessagePart;
209rldp2.confirm transfer_id:int256 part:int max_seqno:int received_mask:int received_count:int = rldp2.MessagePart;
210rldp2.complete transfer_id:int256 part:int = rldp2.MessagePart;
211
212rldp.messagePart transfer_id:int256 fec_type:fec.Type part:int total_size:long seqno:int data:bytes = rldp.MessagePart;
213rldp.confirm transfer_id:int256 part:int seqno:int = rldp.MessagePart;
214rldp.complete transfer_id:int256 part:int = rldp.MessagePart;
215
216rldp.message id:int256 data:bytes = rldp.Message;
217rldp.query query_id:int256 max_answer_size:long timeout:int data:bytes = rldp.Message;
218rldp.answer query_id:int256 data:bytes = rldp.Message;
219
220
221---functions---
222---types---
223dht.node id:PublicKey addr_list:adnl.addressList version:int signature:bytes = dht.Node;
224dht.nodes nodes:(vector dht.node) = dht.Nodes;
225
226dht.key id:int256 name:bytes idx:int = dht.Key;
227
228dht.updateRule.signature = dht.UpdateRule;
229dht.updateRule.anybody = dht.UpdateRule;
230dht.updateRule.overlayNodes = dht.UpdateRule;
231
232dht.keyDescription key:dht.key id:PublicKey update_rule:dht.UpdateRule signature:bytes = dht.KeyDescription;
233
234dht.value key:dht.keyDescription value:bytes ttl:int signature:bytes = dht.Value;
235
236dht.pong random_id:long = dht.Pong;
237
238dht.valueNotFound nodes:dht.nodes = dht.ValueResult;
239dht.valueFound value:dht.Value = dht.ValueResult;
240
241dht.stored = dht.Stored;
242dht.message node:dht.node = dht.Message;
243
244dht.db.bucket nodes:dht.nodes = dht.db.Bucket;
245dht.db.key.bucket id:int = dht.db.Key;
246
247---functions---
248
249dht.ping random_id:long = dht.Pong;
250dht.store value:dht.value = dht.Stored;
251dht.findNode key:int256 k:int = dht.Nodes;
252dht.findValue key:int256 k:int = dht.ValueResult;
253dht.getSignedAddressList = dht.Node;
254
255dht.query node:dht.node = True;
256
257---types---
258
259overlay.node.toSign id:adnl.id.short overlay:int256 version:int = overlay.node.ToSign;
260overlay.node id:PublicKey overlay:int256 version:int signature:bytes = overlay.Node;
261overlay.nodes nodes:(vector overlay.node) = overlay.Nodes;
262
263overlay.message overlay:int256 = overlay.Message;
264//overlay.randomPeers peers:(vector adnl.node) = overlay.RandomPeers;
265overlay.broadcastList hashes:(vector int256) = overlay.BroadcastList;
266
267overlay.fec.received hash:int256 = overlay.Broadcast;
268overlay.fec.completed hash:int256 = overlay.Broadcast;
269
270overlay.broadcast.id src:int256 data_hash:int256 flags:int = overlay.broadcast.Id;
271overlay.broadcastFec.id src:int256 type:int256 data_hash:int256 size:int flags:int = overlay.broadcastFec.Id;
272overlay.broadcastFec.partId broadcast_hash:int256 data_hash:int256 seqno:int = overlay.broadcastFec.PartId;
273
274overlay.broadcast.toSign hash:int256 date:int = overlay.broadcast.ToSign;
275
276overlay.certificate issued_by:PublicKey expire_at:int max_size:int signature:bytes = overlay.Certificate;
277overlay.emptyCertificate = overlay.Certificate;
278
279overlay.certificateId overlay_id:int256 node:int256 expire_at:int max_size:int = overlay.CertificateId;
280
281overlay.unicast data:bytes = overlay.Broadcast;
282overlay.broadcast src:PublicKey certificate:overlay.Certificate flags:int data:bytes date:int signature:bytes = overlay.Broadcast;
283overlay.broadcastFec src:PublicKey certificate:overlay.Certificate data_hash:int256 data_size:int flags:int
284 data:bytes seqno:int fec:fec.Type date:int signature:bytes = overlay.Broadcast;
285overlay.broadcastFecShort src:PublicKey certificate:overlay.Certificate broadcast_hash:int256 part_data_hash:int256 seqno:int signature:bytes = overlay.Broadcast;
286overlay.broadcastNotFound = overlay.Broadcast;
287
288---functions---
289
290overlay.getRandomPeers peers:overlay.nodes = overlay.Nodes;
291
292overlay.query overlay:int256 = True;
293overlay.getBroadcast hash:int256 = overlay.Broadcast;
294overlay.getBroadcastList list:overlay.broadcastList = overlay.BroadcastList;
295
296---types---
297
298overlay.db.nodes nodes:overlay.nodes = overlay.db.Nodes;
299overlay.db.key.nodes local_id:int256 overlay:int256 = overlay.db.Key;
300
301---functions---
302
303---types---
304
305catchain.block.id incarnation:int256 src:int256 height:int data_hash:int256 = catchain.block.Id;
306catchain.block.dep src:int height:int data_hash:int256 signature:bytes = catchain.block.Dep;
307catchain.block.data prev:catchain.block.dep deps:(vector catchain.block.dep) = catchain.block.Data;
308catchain.block incarnation:int256 src:int height:int data:catchain.block.data signature:bytes = catchain.Block;
309catchain.blocks blocks:(vector catchain.block) = catchain.Blocks;
310catchain.blockUpdate block:catchain.block = catchain.Update;
311
312catchain.block.data.badBlock block:catchain.block = catchain.block.inner.Data;
313catchain.block.data.fork left:catchain.block.Dep right:catchain.block.Dep = catchain.block.inner.Data;
314catchain.block.data.nop = catchain.block.inner.Data;
315catchain.block.data.vector msgs:(vector bytes) = catchain.block.inner.Data;
316//catchain.block.data.custom = catchain.block.inner.Data;
317
318catchain.firstblock unique_hash:int256 nodes:(vector int256) = catchain.FirstBlock;
319
320catchain.difference sent_upto:(vector int) = catchain.Difference;
321catchain.differenceFork left:catchain.block.dep right:catchain.block.dep = catchain.Difference;
322
323catchain.blockNotFound = catchain.BlockResult;
324catchain.blockResult block:catchain.block = catchain.BlockResult;
325
326catchain.sent cnt:int = catchain.Sent;
327
328---functions---
329
330catchain.getBlock block:int256 = catchain.BlockResult;
331catchain.getBlocks blocks:(vector int256) = catchain.Sent;
332catchain.getDifference rt:(vector int) = catchain.Difference;
333catchain.getBlockHistory block:int256 height:long stop_if:(vector int256) = catchain.Sent;
334//catchain.getForkDifference src:int fork:catchain.fork = catchain.ForkDifference;
335
336---types---
337
338validatorSession.round.id session:int256 height:long prev_block:int256 seqno:int = validatorSession.round.Id;
339
340validatorSession.candidate.id round:int256 block_hash:int256 = validatorSession.tempBlock.Id;
341
342validatorSession.message.startSession = validatorSession.Message;
343validatorSession.message.finishSession = validatorSession.Message;
344
345validatorSession.message.submittedBlock round:int root_hash:int256 file_hash:int256
346 collated_data_file_hash:int256 = validatorSession.round.Message;
347validatorSession.message.approvedBlock round:int candidate:int256 signature:bytes = validatorSession.round.Message;
348validatorSession.message.rejectedBlock round:int candidate:int256 reason:bytes = validatorSession.round.Message;
349validatorSession.message.commit round:int candidate:int256 signature:bytes = validatorSession.round.Message;
350
351validatorSession.message.vote round:int attempt:int candidate:int256 = validatorSession.round.Message;
352validatorSession.message.voteFor round:int attempt:int candidate:int256 = validatorSession.round.Message;
353validatorSession.message.precommit round:int attempt:int candidate:int256 = validatorSession.round.Message;
354validatorSession.message.empty round:int attempt:int = validatorSession.round.Message;
355
356validatorSession.pong hash:long = validatorSession.Pong;
357
358validatorSession.candidateId src:int256 root_hash:int256 file_hash:int256 collated_data_file_hash:int256 = validatorSession.CandidateId;
359
360validatorSession.blockUpdate ts:long actions:(vector validatorSession.round.Message) state:int = validatorSession.BlockUpdate;
361validatorSession.candidate src:int256 round:int root_hash:int256 data:bytes collated_data:bytes = validatorSession.Candidate;
362
363validatorSession.config catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
364 max_round_attempts:int max_block_size:int max_collated_data_size:int = validatorSession.Config;
365validatorSession.configNew catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int
366 max_round_attempts:int max_block_size:int max_collated_data_size:int new_catchain_ids:Bool = validatorSession.Config;
367
368---functions---
369
370validatorSession.ping hash:long = validatorSession.Pong;
371validatorSession.downloadCandidate round:int id:validatorSession.candidateId = validatorSession.Candidate;
372
373---types---
374
375hashable.bool value:Bool = Hashable;
376hashable.int32 value:int = Hashable;
377hashable.int64 value:long = Hashable;
378hashable.int256 value:int256 = Hashable;
379hashable.bytes value:bytes = Hashable;
380hashable.pair left:int right:int = Hashable;
381hashable.vector value:(vector int) = Hashable;
382hashable.validatorSessionOldRound seqno:int block:int signatures:int approve_signatures:int = Hashable;
383hashable.validatorSessionRoundAttempt seqno:int votes:int precommitted:int vote_for_inited:int vote_for:int = Hashable;
384hashable.validatorSessionRound locked_round:int locked_block:int seqno:int precommitted:Bool
385 first_attempt:int approved_blocks:int signatures:int attempts:int = Hashable;
386hashable.blockSignature signature:int = Hashable;
387hashable.sentBlock src:int root_hash:int file_hash:int collated_data_file_hash:int = Hashable;
388hashable.sentBlockEmpty = Hashable;
389hashable.vote block:int node:int = Hashable;
390hashable.blockCandidate block:int approved:int = Hashable;
391hashable.blockVoteCandidate block:int approved:int = Hashable;
392hashable.blockCandidateAttempt block:int votes:int = Hashable;
393
394hashable.cntVector data:int = Hashable;
395hashable.cntSortedVector data:int = Hashable;
396
397hashable.validatorSession ts:int old_rounds:int cur_round:int = Hashable;
398
399---functions---
400---types---
401
402
403tonNode.sessionId workchain:int shard:long cc_seqno:int opts_hash:int256 = tonNode.SessionId;
404
405
406tonNode.blockSignature who:int256 signature:bytes = tonNode.BlockSignature;
407
408tonNode.blockId workchain:int shard:long seqno:int = tonNode.BlockId;
409tonNode.blockIdExt workchain:int shard:long seqno:int root_hash:int256 file_hash:int256 = tonNode.BlockIdExt;
410tonNode.zeroStateIdExt workchain:int root_hash:int256 file_hash:int256 = tonNode.ZeroStateIdExt;
411
412tonNode.blockDescriptionEmpty = tonNode.BlockDescription;
413tonNode.blockDescription id:tonNode.blockIdExt = tonNode.BlockDescription;
414tonNode.blocksDescription ids:(vector tonNode.blockIdExt) incomplete:Bool = tonNode.BlocksDescription;
415tonNode.preparedProofEmpty = tonNode.PreparedProof;
416tonNode.preparedProof = tonNode.PreparedProof;
417tonNode.preparedProofLink = tonNode.PreparedProof;
418tonNode.preparedState = tonNode.PreparedState;
419tonNode.notFoundState = tonNode.PreparedState;
420tonNode.prepared = tonNode.Prepared;
421tonNode.notFound = tonNode.Prepared;
422tonNode.data data:bytes = tonNode.Data;
423//tonNode.preparedKeyBlockProofEmpty = tonNode.PreparedKeyBlockProof;
424//tonNode.preparedKeyBlockProof block_id:tonNode.blockIdExt = tonNode.PreparedKeyBlockProof;
425
426tonNode.ihrMessage data:bytes = tonNode.IhrMessage;
427tonNode.externalMessage data:bytes = tonNode.ExternalMessage;
428
429tonNode.newShardBlock block:tonNode.blockIdExt cc_seqno:int data:bytes = tonNode.NewShardBlock;
430
431tonNode.blockBroadcast id:tonNode.blockIdExt catchain_seqno:int validator_set_hash:int
432 signatures:(vector tonNode.blockSignature)
433 proof:bytes data:bytes = tonNode.Broadcast;
434tonNode.ihrMessageBroadcast message:tonNode.ihrMessage = tonNode.Broadcast;
435tonNode.externalMessageBroadcast message:tonNode.externalMessage = tonNode.Broadcast;
436tonNode.newShardBlockBroadcast block:tonNode.newShardBlock = tonNode.Broadcast;
437
438tonNode.shardPublicOverlayId workchain:int shard:long zero_state_file_hash:int256 = tonNode.ShardPublicOverlayId;
439
440tonNode.keyBlocks blocks:(vector tonNode.blockIdExt) incomplete:Bool error:Bool = tonNode.KeyBlocks;
441
442ton.blockId root_cell_hash:int256 file_hash:int256 = ton.BlockId;
443ton.blockIdApprove root_cell_hash:int256 file_hash:int256 = ton.BlockId;
444
445tonNode.dataList data:(vector bytes) = tonNode.DataList;
446
447tonNode.dataFull id:tonNode.blockIdExt proof:bytes block:bytes is_link:Bool = tonNode.DataFull;
448tonNode.dataFullEmpty = tonNode.DataFull;
449
450tonNode.capabilities version:int capabilities:long = tonNode.Capabilities;
451
452tonNode.success = tonNode.Success;
453
454tonNode.archiveNotFound = tonNode.ArchiveInfo;
455tonNode.archiveInfo id:long = tonNode.ArchiveInfo;
456
457---functions---
458
459tonNode.getNextBlockDescription prev_block:tonNode.blockIdExt = tonNode.BlockDescription;
460tonNode.getNextBlocksDescription prev_block:tonNode.blockIdExt limit:int = tonNode.BlocksDescription;
461tonNode.getPrevBlocksDescription next_block:tonNode.blockIdExt limit:int cutoff_seqno:int = tonNode.BlocksDescription;
462tonNode.prepareBlockProof block:tonNode.blockIdExt allow_partial:Bool = tonNode.PreparedProof;
463tonNode.prepareKeyBlockProof block:tonNode.blockIdExt allow_partial:Bool = tonNode.PreparedProof;
464tonNode.prepareBlockProofs blocks:(vector tonNode.blockIdExt) allow_partial:Bool = tonNode.PreparedProof;
465tonNode.prepareKeyBlockProofs blocks:(vector tonNode.blockIdExt) allow_partial:Bool = tonNode.PreparedProof;
466tonNode.prepareBlock block:tonNode.blockIdExt = tonNode.Prepared;
467tonNode.prepareBlocks blocks:(vector tonNode.blockIdExt) = tonNode.Prepared;
468tonNode.preparePersistentState block:tonNode.blockIdExt masterchain_block:tonNode.blockIdExt = tonNode.PreparedState;
469tonNode.prepareZeroState block:tonNode.blockIdExt = tonNode.PreparedState;
470tonNode.getNextKeyBlockIds block:tonNode.blockIdExt max_size:int = tonNode.KeyBlocks;
471tonNode.downloadNextBlockFull prev_block:tonNode.blockIdExt = tonNode.DataFull;
472tonNode.downloadBlockFull block:tonNode.blockIdExt = tonNode.DataFull;
473tonNode.downloadBlock block:tonNode.blockIdExt = tonNode.Data;
474tonNode.downloadBlocks blocks:(vector tonNode.blockIdExt) = tonNode.DataList;
475tonNode.downloadPersistentState block:tonNode.blockIdExt masterchain_block:tonNode.blockIdExt = tonNode.Data;
476tonNode.downloadPersistentStateSlice block:tonNode.blockIdExt masterchain_block:tonNode.blockIdExt offset:long max_size:long = tonNode.Data;
477tonNode.downloadZeroState block:tonNode.blockIdExt = tonNode.Data;
478tonNode.downloadBlockProof block:tonNode.blockIdExt = tonNode.Data;
479tonNode.downloadKeyBlockProof block:tonNode.blockIdExt = tonNode.Data;
480tonNode.downloadBlockProofs blocks:(vector tonNode.blockIdExt) = tonNode.DataList;
481tonNode.downloadKeyBlockProofs blocks:(vector tonNode.blockIdExt) = tonNode.DataList;
482tonNode.downloadBlockProofLink block:tonNode.blockIdExt = tonNode.Data;
483tonNode.downloadKeyBlockProofLink block:tonNode.blockIdExt = tonNode.Data;
484tonNode.downloadBlockProofLinks blocks:(vector tonNode.blockIdExt) = tonNode.DataList;
485tonNode.downloadKeyBlockProofLinks blocks:(vector tonNode.blockIdExt) = tonNode.DataList;
486tonNode.getArchiveInfo masterchain_seqno:int = tonNode.ArchiveInfo;
487tonNode.getArchiveSlice archive_id:long offset:long max_size:int = tonNode.Data;
488
489tonNode.getCapabilities = tonNode.Capabilities;
490
491tonNode.slave.sendExtMessage message:tonNode.externalMessage = tonNode.Success;
492
493tonNode.query = Object;
494
495---types---
496
497// bit 0 - started
498// bit 1 - ready to switch
499// bit 2 - switched from
500// bit 3 - archived
501// bit 4 - disabled
502
503db.root.dbDescription version:int first_masterchain_block_id:tonNode.blockIdExt flags:int = db.root.DbDescription;
504
505db.root.key.cellDb version:int = db.root.Key;
506db.root.key.blockDb version:int = db.root.Key;
507
508db.root.config celldb_version:int blockdb_version:int = db.root.Config;
509db.root.key.config = db.root.Key;
510
511db.celldb.value block_id:tonNode.blockIdExt prev:int256 next:int256 root_hash:int256 = db.celldb.Value;
512db.celldb.key.value hash:int256 = db.celldb.key.Value;
513
514db.block.info#4ac6e727 id:tonNode.blockIdExt flags:# prev_left:flags.1?tonNode.blockIdExt
515 prev_right:flags.2?tonNode.blockIdExt
516 next_left:flags.3?tonNode.blockIdExt
517 next_right:flags.4?tonNode.blockIdExt
518 lt:flags.13?long
519 ts:flags.14?int
520 state:flags.17?int256
521 masterchain_ref_seqno:flags.23?int = db.block.Info;
522db.block.packedInfo id:tonNode.blockIdExt unixtime:int offset:long = db.block.Info;
523db.block.archivedInfo id:tonNode.blockIdExt flags:# next:flags.0?tonNode.blockIdExt = db.block.Info;
524
525db.blockdb.value next:tonNode.blockIdExt data:bytes = db.blockdb.Value;
526db.blockdb.lru id:tonNode.blockIdExt prev:int256 next:int256 = db.blockdb.Lru;
527db.blockdb.key.lru id:tonNode.blockIdExt = db.blockdb.Key;
528db.blockdb.key.value id:tonNode.blockIdExt = db.blockdb.Key;
529
530db.candidate source:PublicKey id:tonNode.blockIdExt data:bytes collated_data:bytes = db.Candidate;
531db.candidate.id source:PublicKey id:tonNode.blockIdExt collated_data_file_hash:int256 = db.candidate.Id;
532
533db.filedb.key.empty = db.filedb.Key;
534db.filedb.key.blockFile block_id:tonNode.blockIdExt = db.filedb.Key;
535db.filedb.key.zeroStateFile block_id:tonNode.blockIdExt = db.filedb.Key;
536db.filedb.key.persistentStateFile block_id:tonNode.blockIdExt masterchain_block_id:tonNode.blockIdExt = db.filedb.Key;
537db.filedb.key.proof block_id:tonNode.blockIdExt = db.filedb.Key;
538db.filedb.key.proofLink block_id:tonNode.blockIdExt = db.filedb.Key;
539db.filedb.key.signatures block_id:tonNode.blockIdExt = db.filedb.Key;
540db.filedb.key.candidate id:db.candidate.id = db.filedb.Key;
541db.filedb.key.blockInfo block_id:tonNode.blockIdExt = db.filedb.Key;
542
543db.filedb.value key:db.filedb.Key prev:int256 next:int256 file_hash:int256 = db.filedb.Value;
544
545db.state.destroyedSessions sessions:(vector int256) = db.state.DestroyedSessions;
546db.state.initBlockId block:tonNode.blockIdExt = db.state.InitBlockId;
547db.state.gcBlockId block:tonNode.blockIdExt = db.state.GcBlockId;
548db.state.shardClient block:tonNode.blockIdExt = db.state.ShardClient;
549db.state.asyncSerializer block:tonNode.blockIdExt last:tonNode.blockIdExt last_ts:int = db.state.AsyncSerializer;
550db.state.hardforks blocks:(vector tonNode.blockIdExt) = db.state.Hardforks;
551db.state.dbVersion version:int = db.state.DbVersion;
552
553db.state.key.destroyedSessions = db.state.Key;
554db.state.key.initBlockId = db.state.Key;
555db.state.key.gcBlockId = db.state.Key;
556db.state.key.shardClient = db.state.Key;
557db.state.key.asyncSerializer = db.state.Key;
558db.state.key.hardforks = db.state.Key;
559db.state.key.dbVersion = db.state.Key;
560
561db.lt.el.key workchain:int shard:long idx:int = db.lt.Key;
562db.lt.desc.key workchain:int shard:long = db.lt.Key;
563db.lt.shard.key idx:int = db.lt.Key;
564db.lt.status.key = db.lt.Key;
565db.lt.el.value id:tonNode.blockIdExt lt:long ts:int = db.lt.el.Value;
566db.lt.desc.value first_idx:int last_idx:int last_seqno:int last_lt:long last_ts:int = db.lt.desc.Value;
567db.lt.shard.value workchain:int shard:long = db.lt.shard.Value;
568db.lt.status.value total_shards:int = db.lt.status.Value;
569
570db.files.index.key = db.files.Key;
571db.files.package.key package_id:int key:Bool temp:Bool = db.files.Key;
572
573db.files.index.value packages:(vector int) key_packages:(vector int) temp_packages:(vector int) = db.files.index.Value;
574db.files.package.firstBlock workchain:int shard:long seqno:int unixtime:int lt:long = db.files.package.FirstBlock;
575db.files.package.value package_id:int key:Bool temp:Bool firstblocks:(vector db.files.package.firstBlock) deleted:Bool
576 = db.files.package.Value;
577
578---functions---
579
580---types---
581
582validator.groupMember public_key_hash:int256 adnl:int256 weight:long = engine.validator.GroupMember;
583validator.group workchain:int shard:long catchain_seqno:int config_hash:int256 members:(vector validator.groupMember) = validator.Group;
584validator.groupEx workchain:int shard:long vertical_seqno:int catchain_seqno:int config_hash:int256 members:(vector validator.groupMember) = validator.Group;
585validator.groupNew workchain:int shard:long vertical_seqno:int last_key_block_seqno:int catchain_seqno:int config_hash:int256 members:(vector validator.groupMember) = validator.Group;
586
587---functions---
588
589
590---types---
591
592
593id.config.local id:PrivateKey = id.config.Local;
594dht.config.local id:adnl.id.short = dht.config.Local;
595dht.config.random.local cnt:int = dht.config.Local;
596liteserver.config.local id:PrivateKey port:int = liteserver.config.Local;
597liteserver.config.random.local port:int = liteserver.config.Local;
598validator.config.local id:adnl.id.short = validator.config.Local;
599validator.config.random.local addr_list:adnl.addressList = validator.config.Local;
600control.config.local priv:PrivateKey pub:int256 port:int = control.config.Local;
601config.local local_ids:(vector id.config.local) dht:(vector dht.config.Local) validators:(vector validator.config.Local) liteservers:(vector liteserver.config.Local) control:(vector control.config.local) = config.Local;
602
603dht.config.global static_nodes:dht.nodes k:int a:int = dht.config.Global;
604adnl.config.global static_nodes:adnl.nodes = adnl.config.Global;
605catchain.config.global tag:int256 nodes:(vector PublicKey) = catchain.config.Global;
606dummyworkchain0.config.global zero_state_hash:int256 = dummyworkchain0.config.Global;
607validator.config.global zero_state:tonNode.blockIdExt init_block:tonNode.blockIdExt hardforks:(vector tonNode.blockIdExt) = validator.config.Global;
608config.global adnl:adnl.config.global dht:dht.config.global validator:validator.config.global = config.Global;
609
610liteserver.desc id:PublicKey ip:int port:int = liteserver.Desc;
611liteclient.config.global liteservers:(vector liteserver.desc) validator:validator.config.global = liteclient.config.Global;
612
613engine.adnl id:int256 category:int = engine.Adnl;
614engine.addr ip:int port:int categories:(vector int) priority_categories:(vector int) = engine.Addr;
615engine.addrProxy in_ip:int in_port:int out_ip:int out_port:int
616 proxy_type:adnl.Proxy categories:(vector int) priority_categories:(vector int) = engine.Addr;
617engine.dht id:int256 = engine.Dht;
618engine.validatorTempKey key:int256 expire_at:int = engine.ValidatorTempKey;
619engine.validatorAdnlAddress id:int256 expire_at:int = engine.ValidatorAdnlAddress;
620engine.validator id:int256 temp_keys:(vector engine.validatorTempKey) adnl_addrs:(vector engine.validatorAdnlAddress) election_date:int expire_at:int = engine.Validator;
621engine.liteServer id:int256 port:int = engine.LiteServer;
622engine.controlProcess id:int256 permissions:int = engine.ControlProcess;
623engine.controlInterface id:int256 port:int allowed:(vector engine.controlProcess) = engine.ControlInterface;
624engine.gc ids:(vector int256) = engine.Gc;
625
626engine.dht.config dht:(vector engine.dht) gc:engine.gc = engine.dht.Config;
627engine.validator.fullNodeMaster port:int adnl:int256 = engine.validator.FullNodeMaster;
628engine.validator.fullNodeSlave ip:int port:int adnl:PublicKey = engine.validator.FullNodeSlave;
629engine.validator.config out_port:int addrs:(vector engine.Addr) adnl:(vector engine.adnl)
630 dht:(vector engine.dht)
631 validators:(vector engine.validator) fullnode:int256 fullnodeslaves:(vector engine.validator.fullNodeSlave)
632 fullnodemasters:(vector engine.validator.fullNodeMaster)
633 liteservers:(vector engine.liteServer) control:(vector engine.controlInterface)
634 gc:engine.gc = engine.validator.Config;
635
636---functions---
637---types---
638
639engine.adnlProxy.port in_port:int out_port:int dst_ip:int dst_port:int proxy_type:adnl.Proxy = engine.adnlProxy.Port;
640
641engine.adnlProxy.config ports:(vector engine.adnlProxy.port) = engine.adnlProxy.Config;
642
643---functions---
644
645---types---
646
647engine.validator.keyHash key_hash:int256 = engine.validator.KeyHash;
648engine.validator.signature signature:bytes = engine.validator.Signature;
649
650engine.validator.oneStat key:string value:string = engine.validator.OneStat;
651engine.validator.stats stats:(vector engine.validator.oneStat) = engine.validator.Stats;
652
653engine.validator.controlQueryError code:int message:string = engine.validator.ControlQueryError;
654
655engine.validator.time time:int = engine.validator.Time;
656engine.validator.success = engine.validator.Success;
657
658engine.validator.jsonConfig data:string = engine.validator.JsonConfig;
659
660engine.validator.electionBid election_date:int perm_key:int256 adnl_addr:int256 to_send_payload:bytes = engine.validator.ElectionBid;
661engine.validator.proposalVote perm_key:int256 to_send:bytes = engine.validator.ProposalVote;
662
663engine.validator.dhtServerStatus id:int256 status:int = engine.validator.DhtServerStatus;
664engine.validator.dhtServersStatus servers:(vector engine.validator.dhtServerStatus) = engine.validator.DhtServersStatus;
665
666engine.validator.validatorKeysSet election_date:int perm_key:int256 temp_keys:(vector int256) adnl_addrs:(vector int256) = engine.validator.ValidatorKeysSet;
667engine.validator.validatorKeys validators:(vector engine.validator.ValidatorKeysSet) = engine.validator.ValidatorKeys;
668
669---functions---
670
671engine.validator.getTime = engine.validator.Time;
672engine.validator.importPrivateKey key:PrivateKey = engine.validator.KeyHash;
673engine.validator.exportPrivateKey key_hash:int256 = PrivateKey;
674engine.validator.exportPublicKey key_hash:int256 = PublicKey;
675engine.validator.generateKeyPair = engine.validator.KeyHash;
676engine.validator.addAdnlId key_hash:int256 category:int = engine.validator.Success;
677engine.validator.addDhtId key_hash:int256 = engine.validator.Success;
678engine.validator.addValidatorPermanentKey key_hash:int256 election_date:int ttl:int = engine.validator.Success;
679engine.validator.addValidatorTempKey permanent_key_hash:int256 key_hash:int256 ttl:int = engine.validator.Success;
680engine.validator.addValidatorAdnlAddress permanent_key_hash:int256 key_hash:int256 ttl:int = engine.validator.Success;
681engine.validator.changeFullNodeAdnlAddress adnl_id:int256 = engine.validator.Success;
682engine.validator.addLiteserver key_hash:int256 port:int = engine.validator.Success;
683engine.validator.addControlInterface key_hash:int256 port:int = engine.validator.Success;
684engine.validator.addControlProcess key_hash:int256 port:int peer_key:int256 permissions:int = engine.validator.Success;
685
686engine.validator.getValidatorKeys = engine.validator.ValidatorKeys;
687engine.validator.delDhtId key_hash:int256 = engine.validator.Success;
688engine.validator.delAdnlId key_hash:int256 = engine.validator.Success;
689engine.validator.delValidatorPermanentKey key_hash:int256 = engine.validator.Success;
690engine.validator.delValidatorTempKey permanent_key_hash:int256 key_hash:int256 = engine.validator.Success;
691engine.validator.delValidatorAdnlAddress permanent_key_hash:int256 key_hash:int256 = engine.validator.Success;
692
693engine.validator.addListeningPort ip:int port:int categories:(vector int) priority_categories:(vector int) = engine.validator.Success;
694engine.validator.addProxy in_ip:int in_port:int out_ip:int out_port:int proxy:adnl.Proxy categories:(vector int) priority_categories:(vector int) = engine.validator.Success;
695engine.validator.delListeningPort ip:int port:int categories:(vector int) priority_categories:(vector int) = engine.validator.Success;
696engine.validator.delProxy out_ip:int out_port:int categories:(vector int) priority_categories:(vector int) = engine.validator.Success;
697
698engine.validator.sign key_hash:int256 data:bytes = engine.validator.Signature;
699
700engine.validator.getStats = engine.validator.Stats;
701engine.validator.getConfig = engine.validator.JsonConfig;
702
703engine.validator.setVerbosity verbosity:int = engine.validator.Success;
704
705engine.validator.createElectionBid election_date:int election_addr:string wallet:string = engine.validator.ElectionBid;
706engine.validator.createProposalVote vote:bytes = engine.validator.ProposalVote;
707engine.validator.createComplaintVote election_id:int vote:bytes = engine.validator.ProposalVote;
708
709engine.validator.checkDhtServers id:int256 = engine.validator.DhtServersStatus;
710
711engine.validator.controlQuery data:bytes = Object;
712
713engine.validator.downloadBlock block:tonNode.blockIdExt = engine.validator.Success;
714
715---types---
716
717storage.pong = storage.Pong;
718storage.ok = Ok;
719
720storage.state will_upload:Bool want_download:Bool = storage.State;
721storage.piece proof:bytes data:bytes = storage.Piece;
722
723storage.updateInit have_pieces:bytes state:storage.State = storage.Update;
724storage.updateHavePieces piece_id:(vector int) = storage.Update;
725storage.updateState state:storage.State = storage.Update;
726
727---functions---
728
729storage.ping session_id:long = storage.Pong;
730storage.addUpdate session_id:long seqno:int update:storage.Update = Ok;
731
732storage.getPiece piece_id:int = storage.Piece;
733
734storage.queryPrefix id:int256 = Object;
735
736---types---
737
738http.header name:string value:string = http.Header;
739http.payloadPart data:bytes trailer:(vector http.header) last:Bool = http.PayloadPart;
740http.response http_version:string status_code:int reason:string headers:(vector http.header) = http.Response;
741
742---functions---
743
744http.request id:int256 method:string url:string http_version:string headers:(vector http.header) = http.Response;
745http.getNextPayloadPart id:int256 seqno:int max_chunk_size:int = http.PayloadPart;
746
747---types---
748
749
750http.server.dnsEntry domain:string addr:adnl.id.short = http.server.DnsEntry;
751http.server.host domains:(vector string) ip:int port:int adnl_id:adnl.id.short = http.server.Host;
752
753http.server.config dhs:(vector http.server.dnsEntry) local_hosts:(vector http.server.host) = http.server.Config;
754
755---functions---
756 "###;
757
758 let test = Scheme::parse(DATA).unwrap();
759 test.validate().unwrap();
760 test.compute_all_ids();
761 }
762}