libra_client 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile.lock +8 -6
  4. data/lib/libra/version.rb +1 -1
  5. data/libra_client.gemspec +1 -0
  6. data/proto-lib/admission_control_pb.rb +10 -7
  7. data/proto-lib/consensus_pb.rb +105 -0
  8. data/proto-lib/events_pb.rb +1 -1
  9. data/proto-lib/execution_pb.rb +51 -0
  10. data/proto-lib/execution_services_pb.rb +37 -0
  11. data/proto-lib/language_storage_pb.rb +17 -0
  12. data/proto-lib/mempool_pb.rb +18 -0
  13. data/proto-lib/mempool_status_pb.rb +7 -2
  14. data/proto-lib/network_pb.rb +59 -0
  15. data/proto-lib/node_debug_interface_pb.rb +39 -0
  16. data/proto-lib/node_debug_interface_services_pb.rb +32 -0
  17. data/proto-lib/proof_pb.rb +6 -0
  18. data/proto-lib/secret_service_pb.rb +54 -0
  19. data/proto-lib/secret_service_services_pb.rb +34 -0
  20. data/proto-lib/state_synchronizer_pb.rb +33 -0
  21. data/proto-lib/storage_pb.rb +61 -0
  22. data/proto-lib/storage_services_pb.rb +47 -0
  23. data/proto-lib/transaction_pb.rb +11 -0
  24. data/proto-lib/validator_public_keys_pb.rb +19 -0
  25. data/proto-lib/validator_set_pb.rb +17 -0
  26. data/proto-lib/vm_errors_pb.rb +84 -70
  27. data/protos/admission_control.proto +11 -4
  28. data/protos/consensus.proto +147 -0
  29. data/protos/events.proto +1 -1
  30. data/protos/execution.proto +92 -0
  31. data/protos/language_storage.proto +12 -0
  32. data/protos/mempool.proto +18 -0
  33. data/protos/mempool_status.proto +6 -1
  34. data/protos/network.proto +81 -0
  35. data/protos/node_debug_interface.proto +40 -0
  36. data/protos/proof.proto +15 -0
  37. data/protos/secret_service.proto +64 -0
  38. data/protos/state_synchronizer.proto +29 -0
  39. data/protos/storage.proto +115 -0
  40. data/protos/transaction.proto +16 -1
  41. data/protos/validator_public_keys.proto +18 -0
  42. data/protos/validator_set.proto +13 -0
  43. data/protos/vm_errors.proto +87 -71
  44. metadata +42 -2
@@ -6,11 +6,9 @@ syntax = "proto3";
6
6
  package admission_control;
7
7
 
8
8
  import "get_with_proof.proto";
9
+ import "mempool_status.proto";
9
10
  import "transaction.proto";
10
- import "proof.proto";
11
- import "ledger_info.proto";
12
11
  import "vm_errors.proto";
13
- import "mempool_status.proto";
14
12
 
15
13
  // -----------------------------------------------------------------------------
16
14
  // ---------------- Submit transaction
@@ -21,11 +19,20 @@ message SubmitTransactionRequest {
21
19
  types.SignedTransaction signed_txn = 1;
22
20
  }
23
21
 
22
+ // AC response status containing code and optionally an error message.
23
+ message AdmissionControlStatus {
24
+ AdmissionControlStatusCode code = 1;
25
+ string message = 2;
26
+ }
27
+
24
28
  // Additional statuses that are possible from admission control in addition
25
29
  // to VM statuses.
26
- enum AdmissionControlStatus {
30
+ enum AdmissionControlStatusCode {
31
+ // Validator accepted the transaction.
27
32
  Accepted = 0;
33
+ // The sender is blacklisted.
28
34
  Blacklisted = 1;
35
+ // The transaction is rejected, e.g. due to incorrect signature.
29
36
  Rejected = 2;
30
37
  }
31
38
 
@@ -0,0 +1,147 @@
1
+ // Copyright (c) The Libra Core Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ syntax = "proto3";
5
+
6
+ package network;
7
+
8
+ import "ledger_info.proto";
9
+ import "transaction.proto";
10
+
11
+ message ConsensusMsg {
12
+ oneof message {
13
+ Proposal proposal = 1;
14
+ Vote vote = 2;
15
+ RequestBlock request_block = 3;
16
+ RespondBlock respond_block = 4;
17
+ TimeoutMsg timeout_msg = 5;
18
+ SyncInfo sync_info = 6;
19
+ }
20
+ }
21
+
22
+ message Proposal {
23
+ // The proposed block
24
+ Block proposed_block = 1;
25
+ // Information about the highest QC, LedgerInfo, TimeoutCertificate, etc.
26
+ SyncInfo sync_info = 2;
27
+ }
28
+
29
+ message PacemakerTimeout {
30
+ // Round that has timed out (e.g. we propose to switch to round + 1)
31
+ uint64 round = 1;
32
+ // Author of timeout
33
+ bytes author = 2;
34
+ // Signature that this timeout was authored by owner
35
+ bytes signature = 3;
36
+ // Optional vote for the given round
37
+ Vote vote = 4;
38
+ }
39
+
40
+ message TimeoutMsg {
41
+ // Information about the highest QC, LedgerInfo, TimeoutCertificate, etc.
42
+ SyncInfo sync_info = 1;
43
+ // Timeout
44
+ PacemakerTimeout pacemaker_timeout = 2;
45
+ // Signature that this timeout was authored by owner
46
+ bytes signature = 3;
47
+ }
48
+
49
+ message SyncInfo {
50
+ // Highest quorum certificate
51
+ QuorumCert highest_quorum_cert = 1;
52
+ // Highest ledger info
53
+ QuorumCert highest_ledger_info = 2;
54
+ // Optional highest timeout certificate if available
55
+ PacemakerTimeoutCertificate highest_timeout_cert = 3;
56
+ }
57
+
58
+ message PacemakerTimeoutCertificate {
59
+ // Round for which this certificate was created
60
+ uint64 round = 1;
61
+ // List of certified timeouts
62
+ repeated PacemakerTimeout timeouts = 2;
63
+ }
64
+
65
+ message Block {
66
+ // This block's id as a hash value
67
+ bytes id = 1;
68
+ // Parent block id of this block as a hash value (all zeros to indicate the
69
+ // genesis block)
70
+ bytes parent_id = 2;
71
+ // Payload of the block (e.g. one or more transaction(s)
72
+ bytes payload = 3;
73
+ // The round of the block (internal monotonically increasing counter).
74
+ uint64 round = 4;
75
+ // The height of the block (position in the chain).
76
+ uint64 height = 5;
77
+ // The approximate physical microseconds since the epoch when the block was proposed
78
+ uint64 timestamp_usecs = 6;
79
+ // Contains the quorum certified ancestor and whether the quorum certified
80
+ // ancestor was voted on successfully
81
+ QuorumCert quorum_cert = 7;
82
+ // Author of the block that can be validated by the author's public key and
83
+ // the signature
84
+ bytes author = 8;
85
+ // Signature that the hash of this block has been authored by the owner of the
86
+ // private key
87
+ bytes signature = 9;
88
+ }
89
+
90
+ message QuorumCert {
91
+ // The vote information certified by the quorum.
92
+ VoteData vote_data = 1;
93
+ // LedgerInfo with at least 2f+1 signatures. The LedgerInfo's consensus data
94
+ // hash is a digest that covers vote data hash.
95
+ types.LedgerInfoWithSignatures signed_ledger_info = 2;
96
+ }
97
+
98
+ message VoteData {
99
+ // The id of the block being vote for.
100
+ bytes block_id = 1;
101
+ // The round of the block being voted for
102
+ uint64 round = 2;
103
+ // The id and the version of the state after executing the block.
104
+ bytes executed_state_id = 3;
105
+ uint64 version = 4;
106
+ // The id of the parent block
107
+ bytes parent_block_id = 5;
108
+ // The round of the parent block
109
+ uint64 parent_block_round = 6;
110
+ // The id of the grandparent block
111
+ bytes grandparent_block_id = 7;
112
+ // The round of the grandparent block
113
+ uint64 grandparent_block_round = 8;
114
+ }
115
+
116
+ message Vote {
117
+ // The actual vote information.
118
+ VoteData vote_data = 1;
119
+ // Author of the vote.
120
+ bytes author = 2;
121
+ // The ledger info carried with the vote (corresponding to the block of a
122
+ // potentially committed txn).
123
+ types.LedgerInfo ledger_info = 3;
124
+ // Signature of the ledger info.
125
+ bytes signature = 4;
126
+ }
127
+
128
+ message RequestBlock {
129
+ // The id of the requested block.
130
+ bytes block_id = 1;
131
+ uint64 num_blocks = 2;
132
+ }
133
+
134
+ enum BlockRetrievalStatus {
135
+ // Successfully fill in the request.
136
+ SUCCEEDED = 0;
137
+ // Can not find the block corresponding to block_id.
138
+ ID_NOT_FOUND = 1;
139
+ // Can not find enough blocks but find some.
140
+ NOT_ENOUGH_BLOCKS = 2;
141
+ }
142
+
143
+ message RespondBlock {
144
+ BlockRetrievalStatus status = 1;
145
+ // The responded block.
146
+ repeated Block blocks = 2;
147
+ }
@@ -14,7 +14,7 @@ import "proof.proto";
14
14
 
15
15
  // An event emitted from a smart contract
16
16
  message Event {
17
- AccessPath access_path = 1;
17
+ bytes key = 1;
18
18
  uint64 sequence_number = 2;
19
19
  bytes event_data = 3;
20
20
  }
@@ -0,0 +1,92 @@
1
+ // Copyright (c) The Libra Core Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ syntax = "proto3";
5
+
6
+ package execution;
7
+
8
+ import "get_with_proof.proto";
9
+ import "ledger_info.proto";
10
+ import "transaction.proto";
11
+ import "validator_set.proto";
12
+ import "vm_errors.proto";
13
+
14
+ // -----------------------------------------------------------------------------
15
+ // ---------------- Execution Service Definition
16
+ // -----------------------------------------------------------------------------
17
+ service Execution {
18
+ // Execute a list of signed transactions given by consensus. Return the id
19
+ // of the block and the root hash of the ledger after applying transactions
20
+ // in this block.
21
+ rpc ExecuteBlock(ExecuteBlockRequest) returns (ExecuteBlockResponse) {}
22
+
23
+ // Commit a previously executed block that has been agreed by consensus.
24
+ rpc CommitBlock(CommitBlockRequest) returns (CommitBlockResponse) {}
25
+
26
+ // Execute and commit a list of signed transactions received from peer
27
+ // during synchronization. Return the id of the block
28
+ rpc ExecuteChunk(ExecuteChunkRequest) returns (ExecuteChunkResponse) {}
29
+ }
30
+
31
+ message ExecuteBlockRequest {
32
+ // The list of transactions from consensus.
33
+ repeated types.SignedTransaction transactions = 1;
34
+
35
+ // Id of the parent block.
36
+ // We're going to use a special GENESIS_BLOCK_ID constant defined in
37
+ // crypto::hash module to refer to the block id of the Genesis block, which is
38
+ // executed in a special way.
39
+ bytes parent_block_id = 2;
40
+
41
+ // Id of the current block.
42
+ bytes block_id = 3;
43
+ }
44
+
45
+ // Result of transaction execution.
46
+ message ExecuteBlockResponse {
47
+ // Root hash of the ledger after applying all the transactions in this
48
+ // block.
49
+ bytes root_hash = 1;
50
+
51
+ // The execution result of the transactions. Each transaction has a status
52
+ // field that indicates whether it should be included in the ledger once the
53
+ // block is committed.
54
+ repeated types.VMStatus status = 2;
55
+
56
+ // The corresponding ledger version when this block is committed.
57
+ uint64 version = 3;
58
+
59
+ // If set, this field designates that if this block is committed, then the
60
+ // next epoch will start immediately with the included set of validators.
61
+ types.ValidatorSet validators = 4;
62
+ }
63
+
64
+ message CommitBlockRequest {
65
+ // The ledger info with signatures from 2f+1 validators. It contains the id
66
+ // of the block consensus wants to commit. This will cause the given block
67
+ // and all the uncommitted ancestors to be committed to storage.
68
+ types.LedgerInfoWithSignatures ledger_info_with_sigs = 1;
69
+ }
70
+
71
+ message CommitBlockResponse { CommitBlockStatus status = 1; }
72
+
73
+ enum CommitBlockStatus {
74
+ // The block is persisted.
75
+ SUCCEEDED = 0;
76
+
77
+ // Something went wrong.
78
+ FAILED = 1;
79
+ }
80
+
81
+ // Ask Execution service to execute and commit a chunk of contiguous
82
+ // transactions. All the transactions in this chunk should belong to the same
83
+ // epoch E. If the caller has a list of transactions that span two epochs, it
84
+ // should split the transactions.
85
+ message ExecuteChunkRequest {
86
+ types.TransactionListWithProof txn_list_with_proof = 1;
87
+ types.LedgerInfoWithSignatures ledger_info_with_sigs = 2;
88
+ }
89
+
90
+ // Either all transactions are successfully executed and persisted, or nothing
91
+ // happens.
92
+ message ExecuteChunkResponse {}
@@ -0,0 +1,12 @@
1
+ // Copyright (c) The Libra Core Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ syntax = "proto3";
5
+
6
+ package types;
7
+
8
+ /// The unique identifier for a module on the chain.
9
+ message ModuleId {
10
+ bytes address = 1;
11
+ string name = 2;
12
+ }
@@ -0,0 +1,18 @@
1
+ // Copyright (c) The Libra Core Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ syntax = "proto3";
5
+
6
+ package network;
7
+
8
+ import "transaction.proto";
9
+
10
+ /* MempoolSyncMsg represents the messages exchanging between validators to keep
11
+ * transactions in sync. The proto definition provides the spec on the wire so
12
+ * that others can implement their mempool service in various languages.
13
+ * Mempool service is responsible for sending and receiving MempoolSyncMsg
14
+ * across validators. */
15
+ message MempoolSyncMsg {
16
+ bytes peer_id = 1;
17
+ repeated types.SignedTransaction transactions = 2;
18
+ }
@@ -5,7 +5,7 @@ syntax = "proto3";
5
5
 
6
6
  package mempool;
7
7
 
8
- enum MempoolAddTransactionStatus {
8
+ enum MempoolAddTransactionStatusCode {
9
9
  // Transaction was sent to Mempool
10
10
  Valid = 0;
11
11
  // The sender does not have enough balance for the transaction.
@@ -19,3 +19,8 @@ enum MempoolAddTransactionStatus {
19
19
  // Invalid update. Only gas price increase is allowed
20
20
  InvalidUpdate = 5;
21
21
  }
22
+
23
+ message MempoolAddTransactionStatus {
24
+ MempoolAddTransactionStatusCode code = 1;
25
+ string message = 2;
26
+ }
@@ -0,0 +1,81 @@
1
+ // Copyright (c) The Libra Core Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ syntax = "proto3";
5
+
6
+ package network;
7
+
8
+ // A `PeerInfo` represents the network address(es) of a Peer.
9
+ message PeerInfo {
10
+ // Monotonically increasing incarnation number used to allow peers to issue
11
+ // updates to their `PeerInfo` and prevent attackers from propagating old
12
+ // `PeerInfo`s. This is usually a timestamp.
13
+ uint64 epoch = 1;
14
+ // Network addresses this peer can be reached at. An address is a serialized
15
+ // [multiaddr](https://multiformats.io/multiaddr/).
16
+ repeated bytes addrs = 2;
17
+ }
18
+
19
+ // A `PeerInfo` authenticated by the peer's root `network_signing_key` stored
20
+ // on-chain.
21
+ message SignedPeerInfo {
22
+ // A serialized `PeerInfo`.
23
+ bytes peer_info = 1;
24
+ // A signature over the above serialzed `PeerInfo`, signed by the validator's
25
+ // `network_signing_key` referred to by the `peer_id` account address.
26
+ bytes signature = 2;
27
+ }
28
+
29
+ // Discovery information relevant to public full nodes and clients.
30
+ message FullNodePayload {
31
+ // Monotonically increasing incarnation number used to allow peers to issue
32
+ // updates to their `FullNodePayload` and prevent attackers from propagating
33
+ // old `FullNodePayload`s. This is usually a timestamp.
34
+ uint64 epoch = 1;
35
+ // The DNS domain name other public full nodes should query to get this
36
+ // validator's list of full nodes.
37
+ bytes dns_seed_addr = 2;
38
+ }
39
+
40
+ // A signed `FullNodePayload`.
41
+ message SignedFullNodePayload {
42
+ // A serialized `FullNodePayload`.
43
+ bytes payload = 1;
44
+ // A signature over `payload` signed by the validator's `network_signing_key`
45
+ // referred to by the `peer_id` account address.
46
+ bytes signature = 2;
47
+ }
48
+
49
+ // A `Note` contains a validator's signed `PeerInfo` as well as a signed
50
+ // `FullNodePayload`, which provides relevant discovery info for public full
51
+ // nodes and clients.
52
+ message Note {
53
+ // Id of the peer.
54
+ bytes peer_id = 1;
55
+ // The validator node's signed `PeerInfo`.
56
+ SignedPeerInfo signed_peer_info = 2;
57
+ // The validator node's signed `FullNodePayload`.
58
+ SignedFullNodePayload signed_full_node_payload = 3;
59
+ }
60
+
61
+ // Discovery message exchanged as part of the discovery protocol.
62
+ // The discovery message sent by a peer consists of notes for all the peers the
63
+ // sending peer knows about.
64
+ message DiscoveryMsg { repeated Note notes = 1; }
65
+
66
+ // Identity message exchanged as part of the Identity protocol.
67
+ message IdentityMsg {
68
+ enum Role {
69
+ VALIDATOR = 0;
70
+ FULL_NODE = 1;
71
+ }
72
+ bytes peer_id = 1;
73
+ repeated bytes supported_protocols = 2;
74
+ Role role = 3;
75
+ }
76
+
77
+ // Ping message sent as liveness probe.
78
+ message Ping {}
79
+
80
+ // Pong message sent as response to liveness probe.
81
+ message Pong {}
@@ -0,0 +1,40 @@
1
+ // Copyright (c) The Libra Core Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ // A Debugging interface to be used to query debug information from a Node
5
+ syntax = "proto3";
6
+
7
+ package debug;
8
+
9
+ message GetNodeDetailsRequest {}
10
+
11
+ message GetNodeDetailsResponse { map<string, string> stats = 1; }
12
+
13
+ message GetEventsRequest {}
14
+
15
+ message GetEventsResponse { repeated Event events = 1; }
16
+
17
+ message Event {
18
+ string name = 1;
19
+ int64 timestamp = 2;
20
+ string json = 3;
21
+ }
22
+
23
+ message DumpJemallocHeapProfileRequest {}
24
+
25
+ message DumpJemallocHeapProfileResponse {
26
+ // Status code from jemalloc mallctl call. 0 indicates success.
27
+ int32 status_code = 1;
28
+ }
29
+
30
+ service NodeDebugInterface {
31
+ // Returns debug information about node
32
+ rpc GetNodeDetails(GetNodeDetailsRequest) returns (GetNodeDetailsResponse) {}
33
+
34
+ // Returns recent events generated by event! macro
35
+ rpc GetEvents(GetEventsRequest) returns (GetEventsResponse) {}
36
+
37
+ // Triggers a dump of heap profile.
38
+ rpc DumpJemallocHeapProfile(DumpJemallocHeapProfileRequest)
39
+ returns (DumpJemallocHeapProfileResponse) {}
40
+ }