# Protocol Documentation ## Table of Contents - [bdware/bdledger/api/common.proto](#bdware/bdledger/api/common.proto) - [Block](#bdware.bdledger.api.Block) - [Contract](#bdware.bdledger.api.Contract) - [Transaction](#bdware.bdledger.api.Transaction) - [Contract.ContractUnitRequestType](#bdware.bdledger.api.Contract.ContractUnitRequestType) - [TransactionType](#bdware.bdledger.api.TransactionType) - [bdware/bdledger/api/error_details.proto](#bdware/bdledger/api/error_details.proto) - [InvalidArgument](#bdware.bdledger.api.InvalidArgument) - [InvalidArgument.FieldViolation](#bdware.bdledger.api.InvalidArgument.FieldViolation) - [bdware/bdledger/api/ledger.proto](#bdware/bdledger/api/ledger.proto) - [CreateLedgerRequest](#bdware.bdledger.api.CreateLedgerRequest) - [CreateLedgerResponse](#bdware.bdledger.api.CreateLedgerResponse) - [GetLedgersResponse](#bdware.bdledger.api.GetLedgersResponse) - [SendTransactionRequest](#bdware.bdledger.api.SendTransactionRequest) - [SendTransactionRequest.Transaction](#bdware.bdledger.api.SendTransactionRequest.Transaction) - [SendTransactionResponse](#bdware.bdledger.api.SendTransactionResponse) - [Ledger](#bdware.bdledger.api.Ledger) - [bdware/bdledger/api/node.proto](#bdware/bdledger/api/node.proto) - [ClientVersionResponse](#bdware.bdledger.api.ClientVersionResponse) - [Node](#bdware.bdledger.api.Node) - [bdware/bdledger/api/query.proto](#bdware/bdledger/api/query.proto) - [BlockFilter](#bdware.bdledger.api.BlockFilter) - [BlocksRequest](#bdware.bdledger.api.BlocksRequest) - [CountBlocksResponse](#bdware.bdledger.api.CountBlocksResponse) - [CountTransactionsResponse](#bdware.bdledger.api.CountTransactionsResponse) - [GetBlockByHashRequest](#bdware.bdledger.api.GetBlockByHashRequest) - [GetBlockByHashResponse](#bdware.bdledger.api.GetBlockByHashResponse) - [GetBlocksResponse](#bdware.bdledger.api.GetBlocksResponse) - [GetTransactionByBlockHashAndIndexRequest](#bdware.bdledger.api.GetTransactionByBlockHashAndIndexRequest) - [GetTransactionByBlockHashAndIndexResponse](#bdware.bdledger.api.GetTransactionByBlockHashAndIndexResponse) - [GetTransactionByHashRequest](#bdware.bdledger.api.GetTransactionByHashRequest) - [GetTransactionByHashResponse](#bdware.bdledger.api.GetTransactionByHashResponse) - [GetTransactionsResponse](#bdware.bdledger.api.GetTransactionsResponse) - [TransactionFilter](#bdware.bdledger.api.TransactionFilter) - [TransactionsRequest](#bdware.bdledger.api.TransactionsRequest) - [BlocksRequest.IncludeTransactions](#bdware.bdledger.api.BlocksRequest.IncludeTransactions) - [Query](#bdware.bdledger.api.Query) - [google/protobuf/empty.proto](#google/protobuf/empty.proto) - [Empty](#google.protobuf.Empty) - [Scalar Value Types](#scalar-value-types)
## bdware/bdledger/api/common.proto ### Block | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | hash | [bytes](#bytes) | | 区块的哈希,当区块处于待确认状态时为`null` | | parent_hashes | [bytes](#bytes) | repeated | 父区块的哈希 | | witnesses | [bytes](#bytes) | repeated | 见证者账户地址 | | timestamp | [int64](#int64) | | 区块产生时的 UNIX 时间戳,单位为秒 | | size | [uint64](#uint64) | | 区块大小的字节数 | | transaction_count | [uint32](#uint32) | | 区块包含的事务数量 | | transactions_root | [bytes](#bytes) | | 区块的事务默克尔树根 | | transactions | [Transaction](#bdware.bdledger.api.Transaction) | repeated | 事务对象的数组,或为空 | | transaction_hashes | [bytes](#bytes) | repeated | 20字节的交易哈希的数组,或为空 | ### Contract | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | contractName | [bytes](#bytes) | | 合约名称 | | randomNum | [uint32](#uint32) | | 合约执行的节点数量 | | operation | [bytes](#bytes) | | 合约方法 | | arg | [bytes](#bytes) | | 合约方法参数 | | path | [bytes](#bytes) | | 合约文件路径(合约在IDE工程的相对路径) | | content | [bytes](#bytes) | | 合约内容(可为合约文件相对路径/合约脚本) | | pubkey | [bytes](#bytes) | | 用户公钥 | ### Transaction | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | block_hash | [bytes](#bytes) | | 事务所在的区块的哈希,当事务处于待确认状态时为`null` | | index | [uint32](#uint32) | | 事务在区块中的位置 index,当事务处于待确认状态时为`null` | | hash | [bytes](#bytes) | | 事务的哈希 | | type | [TransactionType](#bdware.bdledger.api.TransactionType) | | 事务类型 | | from | [bytes](#bytes) | | 发送账户地址 | | nonce | [uint64](#uint64) | | 这条事务之前发送者所发送的事务数量 | | to | [bytes](#bytes) | | 接收账户地址,或者调用的合约地址,或者`null`如为合约创建 | | data | [bytes](#bytes) | | 数据或合约代码 | | v | [bytes](#bytes) | | ECDSA recovery id | | r | [bytes](#bytes) | | ECDSA signature r | | s | [bytes](#bytes) | | ECDSA signature s | ### Contract.ContractUnitRequestType | Name | Number | Description | | ---- | ------ | ----------- | | START | 0 | | | STOP | 1 | | | EXECUTE | 2 | | | REPLY | 3 | | | REQUEST | 4 | | | PREPREPARE | 5 | | | PREPARE | 6 | | | COMMIT | 7 | | | ADDPEER | 8 | | | DROPPEER | 9 | | | STATESYNC | 10 | | ### TransactionType 事务类型 | Name | Number | Description | | ---- | ------ | ----------- | | RECORD | 0 | 通用数据记录 | | MESSAGE | 1 | 消息 | | CONTRACT_CREATION | 2 | 合约创建 | | CONTRACT_INVOCATION | 3 | 合约调用 | | CONTRACT_STATUS | 4 | 合约状态 | ## bdware/bdledger/api/error_details.proto ### InvalidArgument InvalidArgument indicates client specified an invalid argument. Note that this differs from FailedPrecondition. It indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name). | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | field_violations | [InvalidArgument.FieldViolation](#bdware.bdledger.api.InvalidArgument.FieldViolation) | repeated | Describes all violations in a client request. | ### InvalidArgument.FieldViolation A message type used to describe a single invalid field. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | field | [string](#string) | | A path leading to a field in the request body. The value will be a sequence of dot-separated identifiers that identify a protocol buffer field. E.g., "field_violations.field" would identify this field. | | description | [string](#string) | | A description of why the request element is bad. | ## bdware/bdledger/api/ledger.proto ### CreateLedgerRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | name | [string](#string) | | | ### CreateLedgerResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ok | [bool](#bool) | | | ### GetLedgersResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledgers | [string](#string) | repeated | | ### SendTransactionRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledger | [string](#string) | | | | transaction | [SendTransactionRequest.Transaction](#bdware.bdledger.api.SendTransactionRequest.Transaction) | | | ### SendTransactionRequest.Transaction | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | type | [TransactionType](#bdware.bdledger.api.TransactionType) | | | | from | [bytes](#bytes) | | | | to | [bytes](#bytes) | | | | data | [bytes](#bytes) | | | ### SendTransactionResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | hash | [bytes](#bytes) | | | ### Ledger | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | CreateLedger | [CreateLedgerRequest](#bdware.bdledger.api.CreateLedgerRequest) | [CreateLedgerResponse](#bdware.bdledger.api.CreateLedgerResponse) | Create a new ledger 创建一个新账本 | | GetLedgers | [.google.protobuf.Empty](#google.protobuf.Empty) | [GetLedgersResponse](#bdware.bdledger.api.GetLedgersResponse) | Get all ledgers 查询所有帐本列表 | | SendTransaction | [SendTransactionRequest](#bdware.bdledger.api.SendTransactionRequest) | [SendTransactionResponse](#bdware.bdledger.api.SendTransactionResponse) | Send a new transaction 发送一个新事务 | ## bdware/bdledger/api/node.proto ### ClientVersionResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | version | [string](#string) | | 节点客户端版本 | ### Node | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | ClientVersion | [.google.protobuf.Empty](#google.protobuf.Empty) | [ClientVersionResponse](#bdware.bdledger.api.ClientVersionResponse) | Get BDLedger node version 查询BDLedger节点版本 | ## bdware/bdledger/api/query.proto ### BlockFilter | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | hash | [bytes](#bytes) | | | | timestamp | [int64](#int64) | | | ### BlocksRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledger | [string](#string) | | | | start_timestamp | [int64](#int64) | | | | end_timestamp | [int64](#int64) | | | | filters | [BlockFilter](#bdware.bdledger.api.BlockFilter) | repeated | | | include_transactions | [BlocksRequest.IncludeTransactions](#bdware.bdledger.api.BlocksRequest.IncludeTransactions) | | | ### CountBlocksResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | count | [uint64](#uint64) | | | | start_timestamp | [int64](#int64) | | | | end_timestamp | [int64](#int64) | | | ### CountTransactionsResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | count | [uint64](#uint64) | | | | start_timestamp | [int64](#int64) | | | | end_timestamp | [int64](#int64) | | | ### GetBlockByHashRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledger | [string](#string) | | | | hash | [bytes](#bytes) | | | | full_transactions | [bool](#bool) | | | ### GetBlockByHashResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | block | [Block](#bdware.bdledger.api.Block) | | | ### GetBlocksResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | blocks | [Block](#bdware.bdledger.api.Block) | repeated | | | start_timestamp | [int64](#int64) | | | | end_timestamp | [int64](#int64) | | | ### GetTransactionByBlockHashAndIndexRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledger | [string](#string) | | | | block_hash | [bytes](#bytes) | | | | index | [uint32](#uint32) | | | ### GetTransactionByBlockHashAndIndexResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | transaction | [Transaction](#bdware.bdledger.api.Transaction) | | | ### GetTransactionByHashRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledger | [string](#string) | | | | hash | [bytes](#bytes) | | | ### GetTransactionByHashResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | transaction | [Transaction](#bdware.bdledger.api.Transaction) | | | ### GetTransactionsResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | transactions | [Transaction](#bdware.bdledger.api.Transaction) | repeated | | | start_timestamp | [int64](#int64) | | | | end_timestamp | [int64](#int64) | | | ### TransactionFilter repeated Transaction/BlockFilters are combined by "&&"(and) operator; | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | hash | [bytes](#bytes) | | | | from | [bytes](#bytes) | | | | to | [bytes](#bytes) | | | | timestamp | [bytes](#bytes) | | | ### TransactionsRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ledger | [string](#string) | | | | start_timestamp | [int64](#int64) | | required | | end_timestamp | [int64](#int64) | | | | filters | [TransactionFilter](#bdware.bdledger.api.TransactionFilter) | repeated | | ### BlocksRequest.IncludeTransactions | Name | Number | Description | | ---- | ------ | ----------- | | NONE | 0 | 不包含交易数据 | | HASH | 1 | 包含交易哈希列表 | | FULL | 2 | 包含完整交易列表 | ### Query | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| | GetBlockByHash | [GetBlockByHashRequest](#bdware.bdledger.api.GetBlockByHashRequest) | [GetBlockByHashResponse](#bdware.bdledger.api.GetBlockByHashResponse) | Get a block identified by its hash 查询哈希所指定的区块 | | GetBlocks | [BlocksRequest](#bdware.bdledger.api.BlocksRequest) | [GetBlocksResponse](#bdware.bdledger.api.GetBlocksResponse) | Get blocks in a timestamp range 查询时间范围内的区块 start_timestamp is required | | CountBlocks | [BlocksRequest](#bdware.bdledger.api.BlocksRequest) | [CountBlocksResponse](#bdware.bdledger.api.CountBlocksResponse) | Count all blocks in a ledger, or blocks in a timestamp range 查询帐本中的所有区块数量,或时间范围内的区块数量 | | GetTransactionByHash | [GetTransactionByHashRequest](#bdware.bdledger.api.GetTransactionByHashRequest) | [GetTransactionByHashResponse](#bdware.bdledger.api.GetTransactionByHashResponse) | Get a transaction identified by its hash 查询哈希所指定的事务 | | GetTransactionByBlockHashAndIndex | [GetTransactionByBlockHashAndIndexRequest](#bdware.bdledger.api.GetTransactionByBlockHashAndIndexRequest) | [GetTransactionByBlockHashAndIndexResponse](#bdware.bdledger.api.GetTransactionByBlockHashAndIndexResponse) | Get a transaction identified by hash of the block it belongs to and its index inside the block 查询所在区块的哈希与其在区块中的index所指定的事务 | | GetTransactions | [TransactionsRequest](#bdware.bdledger.api.TransactionsRequest) | [GetTransactionsResponse](#bdware.bdledger.api.GetTransactionsResponse) | Get transactions in a timestamp range 查询时间范围内的事务 | | CountTransactions | [TransactionsRequest](#bdware.bdledger.api.TransactionsRequest) | [CountTransactionsResponse](#bdware.bdledger.api.CountTransactionsResponse) | Count all transactions in a ledger, or transactions in a timestamp range 查询帐本中的所有事务数量,或时间范围内的事务数量 start_timestamp is required | ## google/protobuf/empty.proto ### Empty A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`. ## Scalar Value Types | .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | | ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- | | double | | double | double | float | float64 | double | float | Float | | float | | float | float | float | float32 | float | float | Float | | int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | | int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum | | uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) | | uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) | | sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | | sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum | | fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) | | fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum | | sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | | sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum | | bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | | string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) | | bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |