-
Notifications
You must be signed in to change notification settings - Fork 8
/
types.proto
3634 lines (3333 loc) · 130 KB
/
types.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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
syntax = "proto3";
package concordium.v2;
// This specifies the package we want to use for our generated Go code.
// Has no effect on code generated on other languages.
option go_package = "./pb";
// This specifies the package we want to use for our generated Java classes.
// Has no effect on code generated on other languages.
option java_package = "com.concordium.grpc.v2";
// This specifies that separate .java files will be generated for each of the Java classes/enums/etc. generated for the top-level messages, services, and enumerations,
// and the wrapper Java class generated for this .proto file won't contain any nested classes/enums/etc.
// If not generating Java code, this option has no effect.
option java_multiple_files = true;
// This specifies the package we want to use for our generated C# classes.
// Has no effect on code generated on other languages.
option csharp_namespace = "Concordium.Grpc.V2";
// A message that contains no information.
message Empty {
}
// Hash of a block. This is always 32 bytes long.
message BlockHash {
bytes value = 1;
}
// A SHA256 hash. This is always 32 bytes long.
message Sha256Hash {
bytes value = 1;
}
// Hash of a transaction. This is always 32 bytes long.
message TransactionHash {
bytes value = 1;
}
// Hash of the state after some block. This is always 32 bytes long.
message StateHash {
bytes value = 1;
}
// The absolute height of a block. This is the number of ancestors of a block
// since the genesis block. In particular, the chain genesis block has absolute
// height 0.
message AbsoluteBlockHeight {
uint64 value = 1;
}
// The height of a block relative to the last genesis. This differs from the
// absolute block height in that it counts height from the last protocol update.
message BlockHeight {
uint64 value = 1;
}
// The ID of a baker, which is the index of its account.
message BakerId {
uint64 value = 1;
}
// Index of the account in the account table. These are assigned sequentially
// in the order of creation of accounts. The first account has index 0.
message AccountIndex {
uint64 value = 1;
}
// A smart contract module reference. This is always 32 bytes long.
message ModuleRef {
bytes value = 1;
}
// Source bytes of a versioned smart contract module.
message VersionedModuleSource {
// Source bytes of a smart contract v0 module.
message ModuleSourceV0 {
bytes value = 1;
}
// Source bytes of a smart contract v1 module.
message ModuleSourceV1 {
bytes value = 1;
}
oneof module {
ModuleSourceV0 v0 = 1;
ModuleSourceV1 v1 = 2;
}
}
// Unix timestamp in milliseconds.
message Timestamp {
uint64 value = 1;
}
// An individual release of a locked balance.
message Release {
// Effective time of the release in milliseconds since unix epoch.
Timestamp timestamp = 1;
// Amount to be released.
Amount amount = 2;
// List of transaction hashes that contribute a balance to this release.
repeated TransactionHash transactions = 3;
}
// A new individual release. Part of a single transfer with schedule transaction.
message NewRelease {
// Effective time of the release in milliseconds since unix epoch.
Timestamp timestamp = 1;
// Amount to be released.
Amount amount = 2;
}
// State of the account's release schedule. This is the balance of the account
// that is owned by the account, but cannot be used until the release point.
message ReleaseSchedule {
// Total amount locked in the release schedule.
Amount total = 1;
// A list of releases, ordered by increasing timestamp.
repeated Release schedules = 2;
}
// An encrypted amount, in two chunks in "little endian limbs". That is, the
// first chunk represents the low 32 bits of an amount, and the second chunk
// represents the high 32 bits. The chunks are serialized in order and
// represented as a byte array.
// Always 192 bytes.
message EncryptedAmount {
bytes value = 1;
}
message EncryptedBalance {
// Encrypted amount that is a result of this account's actions.
// In particular this list includes the aggregate of
//
// - remaining amounts that result when transferring to public balance
// - remaining amounts when transferring to another account
// - encrypted amounts that are transferred from public balance
//
// When a transfer is made all of these must always be used.
EncryptedAmount self_amount = 1;
// Starting index for incoming encrypted amounts. If an aggregated amount
// is present then this index is associated with such an amount and the
// list of incoming encrypted amounts starts at the index `start_index
// + 1`.
uint64 start_index = 2;
// If present, the amount that has resulted from aggregating other amounts
// If this field is present so is `num_aggregated`.
optional EncryptedAmount aggregated_amount = 3;
// The number of aggregated amounts (must be at least 2 if present). This
// field is present if and only if `aggregated_amount` is present.
optional uint32 num_aggregated = 4;
// Amounts starting at `start_index` (or at `start_index + 1` if there is
// an aggregated amount present). They are assumed to be numbered
// sequentially. The length of this list is bounded by the maximum number
// of incoming amounts on the accounts, which is currently 32. After
// that aggregation kicks in.
repeated EncryptedAmount incoming_amounts = 5;
}
// Entity to which the account delegates a portion of its stake.
message DelegationTarget {
oneof target {
// Delegate passively, i.e., to no specific baker.
Empty passive = 1;
// Delegate to a specific baker.
BakerId baker = 2;
}
}
// Baker's public key used to check whether they won the lottery or not.
message BakerElectionVerifyKey {
bytes value = 1;
}
// Baker's public key used to check that they are indeed the ones who
// produced the block.
message BakerSignatureVerifyKey {
bytes value = 1;
}
// Baker's public key used to check signatures on finalization records.
// This is only used if the baker has sufficient stake to participate in
// finalization.
message BakerAggregationVerifyKey {
bytes value = 1;
}
// Information about a baker.
message BakerInfo {
// Identity of the baker. This is actually the account index of
// the account controlling the baker.
BakerId baker_id = 1;
// Baker's public key used to check whether they won the lottery or not.
BakerElectionVerifyKey election_key = 2;
// Baker's public key used to check that they are indeed the ones who
// produced the block.
BakerSignatureVerifyKey signature_key = 3;
// Baker's public key used to check signatures on finalization records.
// This is only used if the baker has sufficient stake to participate in
// finalization.
BakerAggregationVerifyKey aggregation_key = 4;
}
// Pending change to the stake either of a baker or delegator.
message StakePendingChange {
message Reduce {
Amount new_stake = 1;
// Unix timestamp in milliseconds when the change takes effect.
Timestamp effective_time = 2;
}
oneof change {
Reduce reduce = 1;
// Remove the stake. The value is a Unix timestamp of the effective time in
// milliseconds.
Timestamp remove = 2;
}
}
// Information about how open the pool is to new delegators.
enum OpenStatus {
OPEN_STATUS_OPEN_FOR_ALL = 0;
OPEN_STATUS_CLOSED_FOR_NEW = 1;
OPEN_STATUS_CLOSED_FOR_ALL = 2;
}
// A fraction of an amount with a precision of `1/100_000`.
message AmountFraction {
// Must not exceed 100000.
uint32 parts_per_hundred_thousand = 1;
}
// Distribution of the rewards for the particular pool.
message CommissionRates {
// Fraction of finalization rewards charged by the pool owner.
AmountFraction finalization = 1;
// Fraction of baking rewards charged by the pool owner.
AmountFraction baking = 2;
// Fraction of transaction rewards charged by the pool owner.
AmountFraction transaction = 3;
}
// Additional information about a baking pool.
// This information is added with the introduction of delegation.
message BakerPoolInfo {
// Whether the pool allows delegators.
OpenStatus open_status = 1;
// The URL that links to the metadata about the pool.
string url = 2;
// The commission rates charged by the pool owner.
CommissionRates commission_rates = 3;
}
// Information about the account stake, if the account is either a baker or a
// delegator.
message AccountStakingInfo {
message Baker {
// Amount staked at present.
Amount staked_amount = 1;
// A flag indicating whether rewards paid to the baker are automatically
// restaked or not.
bool restake_earnings = 2;
// Information about the baker that is staking.
BakerInfo baker_info = 3;
// If present, any pending change to the delegated stake.
optional StakePendingChange pending_change = 4;
// Present if the account is currently a baker, i.e., it is in the baking
// committee of the current epoch.
optional BakerPoolInfo pool_info = 5;
}
message Delegator {
// The amount that the account delegates.
Amount staked_amount = 1;
// Whether the earnings are automatically added to the staked amount.
bool restake_earnings = 2;
// The entity to which the account delegates.
DelegationTarget target = 3;
// If present, any pending change to the delegated stake.
optional StakePendingChange pending_change = 4;
}
oneof staking_info {
// The account is a baker.
Baker baker = 1;
// The account is a delegator.
Delegator delegator = 2;
}
}
// A sequence number that determines the ordering of transactions from the
// account. The minimum sequence number is 1.
message SequenceNumber {
// The sequence number.
uint64 value = 1;
}
// A sequence number that determines the ordering of update transactions.
// Equivalent to `SequenceNumber` for account transactions.
// Update sequence numbers are per update type and the minimum value is 1.
message UpdateSequenceNumber {
// The sequence number.
uint64 value = 1;
}
// An amount of microCCD.
message Amount {
uint64 value = 1;
}
// Index of a credential on an account.
message CredentialIndex {
uint32 value = 1;
}
// The number of signatures required to sign.
message SignatureThreshold {
uint32 value = 1;
}
// The number of credentials required to sign an account transaction.
message AccountThreshold {
uint32 value = 1;
}
// An account encryption key. Always 96 bytes.
message EncryptionKey {
bytes value = 1;
}
// An address of an account. Always 32 bytes.
message AccountAddress {
bytes value = 1;
}
// An address of either a contract or an account.
message Address {
oneof type {
AccountAddress account = 1;
ContractAddress contract = 2;
}
}
// A public key used to verify transaction signatures from an account.
message AccountVerifyKey {
oneof key {
bytes ed25519_key = 1;
}
}
// Public keys of a single credential.
message CredentialPublicKeys {
map<uint32, AccountVerifyKey> keys = 1;
SignatureThreshold threshold = 2;
}
// A registration ID of a credential, derived from the secret PRF key and a
// nonce. This is always 48 bytes long.
message CredentialRegistrationId {
bytes value = 1;
}
// An index of the identity provider that identifies them uniquely in the
// context of a specific chain.
message IdentityProviderIdentity {
uint32 value = 1;
}
// Representation of the pair of a year and month.
message YearMonth {
uint32 year = 1;
uint32 month = 2;
}
// Policy on a credential.
message Policy {
// The year and month when the identity object from which the credential is
// derived was created.
YearMonth created_at = 1;
// The last year and month when the credential is still valid. After this
// expires an account can no longer be created from the credential.
YearMonth valid_to = 2;
// Mapping from attribute tags to attribute values. Attribute tags are always
// representable in a single `u8`, attribute values are never more than 31
// bytes in length.
map<uint32, bytes> attributes = 3;
}
// Values contained in an initial credential.
message InitialCredentialValues {
// Public keys of the credential.
CredentialPublicKeys keys = 1;
// Its registration ID.
CredentialRegistrationId cred_id = 2;
// The identity provider who signed the identity object from which this
// credential is derived.
IdentityProviderIdentity ip_id = 3;
// Policy of this credential.
Policy policy = 4;
}
// Data relating to a single anonymity revoker sent by the account holder to
// the chain.
message ChainArData {
// Share of the encryption of IdCredPub.
bytes enc_id_cred_pub_share = 1;
}
// The number of anonymity revokers needed to revoke anonymity of a credential
// holder.
message ArThreshold {
uint32 value = 1;
}
// A single commitment in the G1 group of the BLS curve. This is always 48 bytes
// in length.
message Commitment {
bytes value = 1;
}
// Commitments that are part of a normal credential.
message CredentialCommitments {
// Commitment to the PRF key.
Commitment prf = 1;
// Commitment to the counter used to generate the credential registration id.
Commitment cred_counter = 2;
// Commitment to the `max_accounts` value, which determines the maximum number
// of credentials that may be created from the identity object.
Commitment max_accounts = 3;
// Commitments to the attributes which have not been revealed in the policy.
map<uint32, Commitment> attributes = 4;
// List of commitments to the coefficients of the sharing polynomial. This
// polynomial is used in a shared encryption of `id_cred_pub` among the
// anonymity revokers.
repeated Commitment id_cred_sec_sharing_coeff = 5;
}
// Values contained in a normal (non-initial) credential.
message NormalCredentialValues {
// Public keys of the credential.
CredentialPublicKeys keys = 1;
// Its registration ID.
CredentialRegistrationId cred_id = 2;
// The identity provider who signed the identity object from which this
// credential is derived.
IdentityProviderIdentity ip_id = 3;
// Policy of this credential.
Policy policy = 4;
// The number of anonymity revokers that must work together to revoke the
// anonymity of the credential holder.
ArThreshold ar_threshold = 5;
// Mapping from anonymity revoker identities to revocation data for the given anonymity revoker.
map<uint32, ChainArData> ar_data = 6;
// Commitments to attributes which have not been revealed.
CredentialCommitments commitments = 7;
}
// Credential that is part of an account.
message AccountCredential {
oneof credential_values {
InitialCredentialValues initial = 1;
NormalCredentialValues normal = 2;
}
}
message Cooldown {
// The status of a cooldown. When stake is removed from a baker or delegator
// (from protocol version 7) it first enters the pre-pre-cooldown state.
// The next time the stake snaphot is taken (at the epoch transition before
// a payday) it enters the pre-cooldown state. At the subsequent payday, it
// enters the cooldown state. At the payday after the end of the cooldown
// period, the stake is finally released.
enum CooldownStatus {
// The amount is in cooldown and will expire at the specified time, becoming available
// at the subsequent pay day.
COOLDOWN = 0;
// The amount will enter cooldown at the next pay day. The specified end time is
// projected to be the end of the cooldown period, but the actual end time will be
// determined at the payday, and may be different if the global cooldown period
// changes.
PRE_COOLDOWN = 1;
// The amount will enter pre-cooldown at the next snapshot epoch (i.e. the epoch
// transition before a pay day transition). As with pre-cooldown, the specified
// end time is projected, but the actual end time will be determined later.
PRE_PRE_COOLDOWN = 2;
}
// The time in milliseconds since the Unix epoch when the cooldown period
// ends.
Timestamp end_time = 1;
// The amount that is in cooldown and set to be released at the end of the
// cooldown period.
Amount amount = 2;
// The status of the cooldown.
CooldownStatus status = 3;
}
// Information about the account at a particular point in time.
message AccountInfo {
// Next sequence number to be used for transactions signed from this account.
SequenceNumber sequence_number = 1;
// Current (unencrypted) balance of the account.
Amount amount = 2;
// Release schedule for any locked up amount. This could be an empty
// release schedule.
ReleaseSchedule schedule = 3;
// Map of all currently active credentials on the account.
// This includes public keys that can sign for the given credentials, as
// well as any revealed attributes. This map always contains a credential
// with index 0.
map<uint32, AccountCredential> creds = 4;
// Lower bound on how many credentials must sign any given transaction from
// this account.
AccountThreshold threshold = 5;
// The encrypted balance of the account.
EncryptedBalance encrypted_balance = 6;
// The public key for sending encrypted balances to the account.
EncryptionKey encryption_key = 7;
// Internal index of the account. Accounts on the chain get sequential
// indices. These should generally not be used outside of the chain,
// the account address is meant to be used to refer to accounts,
// however the account index serves the role of the baker id, if the
// account is a baker. Hence it is exposed here as well.
AccountIndex index = 8;
// Present if the account is a baker or delegator. In that case
// it is the information about the baker or delegator.
optional AccountStakingInfo stake = 9;
// Canonical address of the account. This is derived from the first credential
// that created the account.
AccountAddress address = 10;
// The stake on the account that is in cooldown.
// There can be multiple amounts in cooldown that expire at different times.
// This was introduced in protocol version 7, and so is not present in
// earlier protocol versions.
repeated Cooldown cooldowns = 11;
// The available (unencrypted) balance of the account (i.e. that can be transferred
// or used to pay for transactions). This is the balance minus the locked amount.
// The locked amount is the maximum of the amount in the release schedule and
// the total amount that is actively staked or in cooldown (inactive stake).
// This was introduced in node version 7.0.
Amount available_balance = 12;
// A flag indicating whether the account is currently suspended or not. The
// flag has a meaning from protocol version 8 onwards. In protocol version 8
// it signals whether an account has been suspended and is not participating
// in the consensus algorithm. For protocol version < 8 the flag will always
// be set to false.
bool is_suspended = 13;
}
// Input to queries which take a block as a parameter.
message BlockHashInput {
// Request using a relative block height.
message RelativeHeight {
// Genesis index to start from.
GenesisIndex genesis_index = 1;
// Height starting from the genesis block at the genesis index.
BlockHeight height = 2;
// Whether to return results only from the specified genesis index (`true`),
// or allow results from more recent genesis indices as well (`false`).
bool restrict = 3;
}
oneof block_hash_input {
// Query for the best block.
Empty best = 1;
// Query for the last finalized block.
Empty last_final = 2;
// Query for the block specified by the hash. This hash should always be 32 bytes.
BlockHash given = 3;
// Query for a block at absolute height, if a unique block can be identified at that height.
AbsoluteBlockHeight absolute_height = 4;
// Query for a block at height relative to a genesis index.
RelativeHeight relative_height = 5;
}
}
// Input to queries which take an epoch as a parameter.
message EpochRequest {
// Request an epoch by number at a given genesis index.
message RelativeEpoch {
// The genesis index to query at. The query is restricted to this genesis index, and
// will not return results for other indices even if the epoch number is out of bounds.
GenesisIndex genesis_index = 1;
// The epoch number to query at.
Epoch epoch = 2;
}
oneof epoch_request_input {
// Query by genesis index and epoch number.
RelativeEpoch relative_epoch = 1;
// Query for the epoch of a specified block.
BlockHashInput block_hash = 2;
}
}
// Input to queries which take an account as a parameter.
message AccountIdentifierInput {
oneof account_identifier_input {
// Identify the account by the address of the account.
AccountAddress address = 1;
// Identify the account by the credential that belongs or has belonged to it.
CredentialRegistrationId cred_id = 2;
// Identify the account via its index.
AccountIndex account_index = 3;
}
}
// Request for account information.
message AccountInfoRequest {
// Block in which to query the account information.
BlockHashInput block_hash = 1;
// Specification of the account.
AccountIdentifierInput account_identifier = 2;
}
// Information about a finalized block that is part of the streaming response.
message FinalizedBlockInfo {
// Hash of the block.
BlockHash hash = 1;
// Absolute height of the block, height 0 is the genesis block.
AbsoluteBlockHeight height = 2;
}
// Request the ancestors for the given block.
message AncestorsRequest {
// The block to get ancestors of.
BlockHashInput block_hash = 1;
// The maximum number of ancestors returned.
uint64 amount = 2;
}
// Request for getting the source of a smart contract module.
message ModuleSourceRequest {
// The block to be used for the query.
BlockHashInput block_hash = 1;
// The reference of the module.
ModuleRef module_ref = 2;
}
// Address of a smart contract instance.
message ContractAddress {
// The index of the smart contract.
uint64 index = 1;
// The subindex of the smart contract instance.
// Currently not used, so it is always 0.
uint64 subindex = 2;
}
// Request for getting information about a smart contract instance.
message InstanceInfoRequest {
// The block to be used for the query.
BlockHashInput block_hash = 1;
// The address of the smart contract instance.
ContractAddress address = 2;
}
// Information about a smart contract instance.
message InstanceInfo {
// Version 0 smart contract instance information.
message V0 {
// The state of the instance.
ContractStateV0 model = 1;
// The account address which deployed the instance.
AccountAddress owner = 2;
// The amount of CCD tokens in the balance of the instance.
Amount amount = 3;
// A list of endpoints exposed by the instance.
repeated ReceiveName methods = 4;
// The name of the smart contract of the instance.
InitName name = 5;
// The module reference for the smart contract module of the instance.
ModuleRef source_module = 6;
}
// Version 1 smart contract instance information.
message V1 {
// The account address which deployed the instance.
AccountAddress owner = 2;
// The amount of CCD tokens in the balance of the instance.
Amount amount = 3;
// A list of endpoints exposed by the instance.
repeated ReceiveName methods = 4;
// The name of the smart contract of the instance.
InitName name = 5;
// The module reference for the smart contract module of the instance.
ModuleRef source_module = 6;
}
// The information depends on the smart contract version used by the instance.
oneof version {
V0 v0 = 1;
V1 v1 = 2;
}
}
// A smart contract instance key-value pair.
message InstanceStateKVPair {
bytes key = 1;
bytes value = 2;
}
// Request for a specific key of a smart contract instance state.
message InstanceStateLookupRequest {
// The block to be used for the query.
BlockHashInput block_hash = 1;
// The address of the smart contract instance.
ContractAddress address = 2;
// Key to look up. If the instance is a V0 instance then this will not be used.
bytes key = 3;
}
// Value at the requested key of a smart contract instance state. For V0
// contracts this will always be the entire state of the contract.
message InstanceStateValueAtKey {
bytes value = 1;
}
// The receive name of a smart contract function. Expected format:
// `<contract_name>.<func_name>`. It must only consist of atmost 100 ASCII
// alphanumeric or punctuation characters, and must contain a '.'.
message ReceiveName {
string value = 1;
}
// The init name of a smart contract function. Expected format:
// `init_<contract_name>`. It must only consist of atmost 100 ASCII alphanumeric
// or punctuation characters, must not contain a '.' and must start with
// 'init_'.
message InitName {
string value = 1;
}
// Parameter to a smart contract initialization or invocation.
message Parameter {
bytes value = 1;
}
// A smart contract v0 state.
message ContractStateV0 {
bytes value = 1;
}
// Status of a block item known to the node.
message BlockItemStatus {
message Committed {
repeated BlockItemSummaryInBlock outcomes = 1;
}
message Finalized {
BlockItemSummaryInBlock outcome = 1;
}
oneof status {
// Block item is received, but not yet in any blocks.
Empty received = 1;
// Block item is committed to one or more blocks. The outcomes are listed
// for each block. Note that in the vast majority of cases the outcome of a
// transaction should not be dependent on the block it is in, but this
// can in principle happen.
Committed committed = 2;
// Block item is finalized in the given block, with the given summary.
Finalized finalized = 3;
}
}
// A block item summary together with a block hash. Used in BlockItemStatus.
message BlockItemSummaryInBlock {
// The block hash.
BlockHash block_hash = 1;
// The block item summary.
BlockItemSummary outcome = 2;
}
// Energy is used to count exact execution cost.
// This cost is then converted to CCD amounts.
message Energy {
uint64 value = 1;
}
// A number representing a slot for baking a block.
message Slot {
uint64 value = 1;
}
// The response for getNextAccountSequenceNumber.
message NextAccountSequenceNumber {
// The best guess for the available account sequence number.
SequenceNumber sequence_number = 1;
// Whether the guess relies on any non-finalized transactions. If true all of the relevant transactions are finalized.
bool all_final = 2;
}
// A duration of milliseconds.
message Duration {
uint64 value = 1;
}
// A reason for why a transaction was rejected. Rejected means included in a
// block, but the desired action was not achieved. The only effect of a
// rejected transaction is payment.
message RejectReason {
message InvalidInitMethod {
ModuleRef module_ref = 1;
InitName init_name = 2;
}
message InvalidReceiveMethod {
ModuleRef module_ref = 1;
ReceiveName receive_name = 2;
}
message AmountTooLarge {
Address address = 1;
Amount amount = 2;
}
message RejectedInit {
int32 reject_reason = 1;
}
message RejectedReceive {
int32 reject_reason = 1;
ContractAddress contract_address = 2;
ReceiveName receive_name = 3;
Parameter parameter = 4;
}
message DuplicateCredIds {
repeated CredentialRegistrationId ids = 1;
}
message NonExistentCredIds {
repeated CredentialRegistrationId ids = 1;
}
oneof reason {
// Raised while validating a Wasm module that is not well formed.
Empty module_not_wf = 1;
// The smart contract module hash already exists.
ModuleRef module_hash_already_exists = 2;
// Account does not exist.
AccountAddress invalid_account_reference = 3;
// Reference to a non-existing contract init method.
InvalidInitMethod invalid_init_method = 4;
// Reference to a non-existing contract receive method.
InvalidReceiveMethod invalid_receive_method = 5;
// Reference to a non-existing smart contract module.
ModuleRef invalid_module_reference = 6;
// Contract instance does not exist.
ContractAddress invalid_contract_address = 7;
// Runtime exception occurred when running either the init or receive
// method.
Empty runtime_failure = 8;
// When one wishes to transfer an amount from A to B but there
// are not enough funds on account/contract A to make this
// possible. The data are the from address and the amount to transfer.
AmountTooLarge amount_too_large = 9;
// Serialization of the body failed.
Empty serialization_failure = 10;
// We ran of out energy to process this transaction.
Empty out_of_energy = 11;
// Rejected due to contract logic in init function of a contract.
RejectedInit rejected_init = 12;
// Rejected due to contract logic in receive function of a contract.
RejectedReceive rejected_receive = 13;
// Proof that the baker owns relevant private keys is not valid.
Empty invalid_proof = 14;
// Tried to add baker for an account that already has a baker.
BakerId already_a_baker = 15;
// Tried to remove a baker for an account that has no baker.
AccountAddress not_a_baker = 16;
// The amount on the account was insufficient to cover the proposed stake.
Empty insufficient_balance_for_baker_stake = 17;
// The amount provided is under the threshold required for becoming a baker.
Empty stake_under_minimum_threshold_for_baking = 18;
// The change could not be made because the baker is in cooldown for
// another change.
Empty baker_in_cooldown = 19;
// A baker with the given aggregation key already exists.
BakerAggregationVerifyKey duplicate_aggregation_key = 20;
// Encountered credential ID that does not exist.
Empty non_existent_credential_id = 21;
// Attempted to add an account key to a key index already in use.
Empty key_index_already_in_use = 22;
// When the account threshold is updated, it must not exceed the amount of
// existing keys.
Empty invalid_account_threshold = 23;
// When the credential key threshold is updated, it must not exceed the
// amount of existing keys.
Empty invalid_credential_key_sign_threshold = 24;
// Proof for an encrypted amount transfer did not validate.
Empty invalid_encrypted_amount_transfer_proof = 25;
// Proof for a secret to public transfer did not validate.
Empty invalid_transfer_to_public_proof = 26;
// Account tried to transfer an encrypted amount to itself, that's not
// allowed.
AccountAddress encrypted_amount_self_transfer = 27;
// The provided index is below the start index or above `startIndex +
// length incomingAmounts`.
Empty invalid_index_on_encrypted_transfer = 28;
// The transfer with schedule is going to send 0 tokens.
Empty zero_scheduledAmount = 29;
// The transfer with schedule has a non strictly increasing schedule.
Empty non_increasing_schedule = 30;
// The first scheduled release in a transfer with schedule has already
// expired.
Empty first_scheduled_release_expired = 31;
// Account tried to transfer with schedule to itself, that's not allowed.
AccountAddress scheduled_self_transfer = 32;
// At least one of the credentials was either malformed or its proof was
// incorrect.
Empty invalid_credentials = 33;
// Some of the credential IDs already exist or are duplicated in the
// transaction.
DuplicateCredIds duplicate_cred_ids = 34;
// A credential id that was to be removed is not part of the account.
NonExistentCredIds non_existent_cred_ids = 35;
// Attemp to remove the first credential.
Empty remove_first_credential = 36;
// The credential holder of the keys to be updated did not sign the
// transaction.
Empty credential_holder_did_not_sign = 37;
// Account is not allowed to have multiple credentials because it contains
// a non-zero encrypted transfer.
Empty not_allowed_multiple_credentials = 38;
// The account is not allowed to receive encrypted transfers because it has
// multiple credentials.
Empty not_allowed_to_receive_encrypted = 39;
// The account is not allowed to send encrypted transfers (or transfer
// from/to public to/from encrypted).
Empty not_allowed_to_handle_encrypted = 40;
// A configure baker transaction is missing one or more arguments in order
// to add a baker.
Empty missing_baker_add_parameters = 41;
// Finalization reward commission is not in the valid range for a baker.
Empty finalization_reward_commission_not_in_range = 42;
// Baking reward commission is not in the valid range for a baker.
Empty baking_reward_commission_not_in_range = 43;
// Transaction fee commission is not in the valid range for a baker.
Empty transaction_fee_commission_not_in_range = 44;
// Tried to add baker for an account that already has a delegator.
Empty already_a_delegator = 45;
// The amount on the account was insufficient to cover the proposed stake.
Empty insufficient_balance_for_delegation_stake = 46;
// A configure delegation transaction is missing one or more arguments in
// order to add a delegator.
Empty missing_delegation_add_parameters = 47;
// Delegation stake when adding a delegator was 0.
Empty insufficient_delegation_stake = 48;
// Account is not a delegation account.
Empty delegator_in_cooldown = 49;
// Account is not a delegation account.
AccountAddress not_a_delegator = 50;
// Delegation target is not a baker
BakerId delegation_target_not_a_baker = 51;
// The amount would result in pool capital higher than the maximum
// threshold.
Empty stake_over_maximum_threshold_for_pool = 52;
// The amount would result in pool with a too high fraction of delegated
// capital.
Empty pool_would_become_over_delegated = 53;
// The pool is not open to delegators.
Empty pool_closed = 54;
}
}
// Version of smart contract.
enum ContractVersion {
V0 = 0;
V1 = 1;
}
// Data generated as part of initializing a single contract instance.
message ContractInitializedEvent {
// Contract version.
ContractVersion contract_version = 1;
// Module with the source code of the contract.
ModuleRef origin_ref = 2;
// The newly assigned address of the contract.
ContractAddress address = 3;
// The amount the instance was initialized with.
Amount amount = 4;
// The name of the contract.
InitName init_name = 5;
// Any contract events that might have been genereated by the contract initialization.
repeated ContractEvent events = 6;
}
// An event generated by a smart contract.
message ContractEvent {
bytes value = 1;
}
// Data generated as part of updating a single contract instance.
// In general a single Update transaction will
// generate one or more of these events, together with possibly some transfers.