# BDLedger API documentation
<a name="top"></a>

## 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)
    - [RecentBlocksRequest](#bdware.bdledger.api.RecentBlocksRequest)
    - [TransactionFilter](#bdware.bdledger.api.TransactionFilter)
    - [TransactionsRequest](#bdware.bdledger.api.TransactionsRequest)
  
    - [IncludeTransactions](#bdware.bdledger.api.IncludeTransactions)
  
    - [Query](#bdware.bdledger.api.Query)
  
- [google/protobuf/empty.proto](#google/protobuf/empty.proto)
    - [Empty](#google.protobuf.Empty)
  
- [Scalar Value Types](#scalar-value-types)



<a name="bdware/bdledger/api/common.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## bdware/bdledger/api/common.proto



<a name="bdware.bdledger.api.Block"></a>

### Block



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| hash | [bytes](#bytes) |  | 区块的哈希，当区块处于待确认状态时为`null` |
| creator | [bytes](#bytes) |  | 产块者账户地址 |
| nonce | [uint64](#uint64) |  | 这个区块之前产块者产生的区块数量 |
| 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字节的事务哈希的数组，或为空 |






<a name="bdware.bdledger.api.Contract"></a>

### 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) |  | 用户公钥 |






<a name="bdware.bdledger.api.Transaction"></a>

### Transaction



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| block_hash | [bytes](#bytes) |  | 事务所在的区块的哈希，当事务处于待确认状态时为`null` |
| block_timestamp | [int64](#int64) |  | 事务所在的区块产生时的 UNIX 时间戳，单位为秒 |
| 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) |  | 数据或合约代码 |





 


<a name="bdware.bdledger.api.Contract.ContractUnitRequestType"></a>

### 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 |  |



<a name="bdware.bdledger.api.TransactionType"></a>

### TransactionType
事务类型

| Name | Number | Description |
| ---- | ------ | ----------- |
| RECORD | 0 | 通用数据记录 |
| MESSAGE | 1 | 消息 |
| CONTRACT_CREATION | 2 | 合约创建 |
| CONTRACT_INVOCATION | 3 | 合约调用 |
| CONTRACT_STATUS | 4 | 合约状态 |


 

 

 



<a name="bdware/bdledger/api/error_details.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## bdware/bdledger/api/error_details.proto



<a name="bdware.bdledger.api.InvalidArgument"></a>

### 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. |






<a name="bdware.bdledger.api.InvalidArgument.FieldViolation"></a>

### 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., &#34;field_violations.field&#34; would identify this field. |
| description | [string](#string) |  | A description of why the request element is bad. |





 

 

 

 



<a name="bdware/bdledger/api/ledger.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## bdware/bdledger/api/ledger.proto



<a name="bdware.bdledger.api.CreateLedgerRequest"></a>

### CreateLedgerRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| name | [string](#string) |  | 账本名称 |






<a name="bdware.bdledger.api.CreateLedgerResponse"></a>

### CreateLedgerResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ok | [bool](#bool) |  | 是否创建成功 |






<a name="bdware.bdledger.api.GetLedgersResponse"></a>

### GetLedgersResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledgers | [string](#string) | repeated | 帐本名称列表 |






<a name="bdware.bdledger.api.SendTransactionRequest"></a>

### SendTransactionRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledger | [string](#string) |  | 账本名称 |
| transaction | [SendTransactionRequest.Transaction](#bdware.bdledger.api.SendTransactionRequest.Transaction) |  | 事务信息 |






<a name="bdware.bdledger.api.SendTransactionRequest.Transaction"></a>

### SendTransactionRequest.Transaction



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| type | [TransactionType](#bdware.bdledger.api.TransactionType) |  | 事务类型，目前仅支持通用数据记录，即type为RECORD (0) |
| from | [bytes](#bytes) |  | 任意20字节的地址，用于区分使用同一节点的事务发起者 |
| nonce | [uint64](#uint64) |  | 正整数，同一from每个nonce应只使用一次，防止重复的事务（可以每次发送事务&#43;1） |
| to | [bytes](#bytes) |  | 对于通用数据记录不需传递，无意义 |
| data | [bytes](#bytes) |  | 事务数据内容，字节数组 |






<a name="bdware.bdledger.api.SendTransactionResponse"></a>

### SendTransactionResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| hash | [bytes](#bytes) |  | 事务哈希 |





 

 

 


<a name="bdware.bdledger.api.Ledger"></a>

### 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 发送一个新事务 |

 



<a name="bdware/bdledger/api/node.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## bdware/bdledger/api/node.proto



<a name="bdware.bdledger.api.ClientVersionResponse"></a>

### ClientVersionResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| version | [string](#string) |  | 节点客户端版本 |





 

 

 


<a name="bdware.bdledger.api.Node"></a>

### 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节点版本 |

 



<a name="bdware/bdledger/api/query.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## bdware/bdledger/api/query.proto



<a name="bdware.bdledger.api.BlockFilter"></a>

### BlockFilter
暂不支持


| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| hash | [bytes](#bytes) |  |  |
| timestamp | [int64](#int64) |  |  |






<a name="bdware.bdledger.api.BlocksRequest"></a>

### 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 | [IncludeTransactions](#bdware.bdledger.api.IncludeTransactions) |  | 包含事务信息详细程度 |






<a name="bdware.bdledger.api.CountBlocksResponse"></a>

### CountBlocksResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| count | [uint64](#uint64) |  | 区块数量 |
| start_timestamp | [int64](#int64) |  | 本次查询有效的查询范围开始时间戳 |
| end_timestamp | [int64](#int64) |  | 本次查询有效的查询范围结束时间戳 |






<a name="bdware.bdledger.api.CountTransactionsResponse"></a>

### CountTransactionsResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| count | [uint64](#uint64) |  | 事务数量 |
| start_timestamp | [int64](#int64) |  | 本次查询有效的查询范围开始时间戳 |
| end_timestamp | [int64](#int64) |  | 本次查询有效的查询范围结束时间戳 |






<a name="bdware.bdledger.api.GetBlockByHashRequest"></a>

### GetBlockByHashRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledger | [string](#string) |  | 账本名称 |
| hash | [bytes](#bytes) |  | 区块哈希 |
| full_transactions | [bool](#bool) |  | 是否返回完整事务列表，而不是事务哈希列表 |






<a name="bdware.bdledger.api.GetBlockByHashResponse"></a>

### GetBlockByHashResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| block | [Block](#bdware.bdledger.api.Block) |  | 区块信息 |






<a name="bdware.bdledger.api.GetBlocksResponse"></a>

### GetBlocksResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| blocks | [Block](#bdware.bdledger.api.Block) | repeated | 区块列表 |
| start_timestamp | [int64](#int64) |  | 本次查询有效的查询范围开始时间戳 |
| end_timestamp | [int64](#int64) |  | 本次查询有效的查询范围结束时间戳 |






<a name="bdware.bdledger.api.GetTransactionByBlockHashAndIndexRequest"></a>

### GetTransactionByBlockHashAndIndexRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledger | [string](#string) |  | 账本名称 |
| block_hash | [bytes](#bytes) |  | 事务所属区块哈希 |
| index | [uint32](#uint32) |  | 事务在区块中的位置 |






<a name="bdware.bdledger.api.GetTransactionByBlockHashAndIndexResponse"></a>

### GetTransactionByBlockHashAndIndexResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| transaction | [Transaction](#bdware.bdledger.api.Transaction) |  | 事务信息 |






<a name="bdware.bdledger.api.GetTransactionByHashRequest"></a>

### GetTransactionByHashRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledger | [string](#string) |  | 账本名称 |
| hash | [bytes](#bytes) |  | 事务哈希 |






<a name="bdware.bdledger.api.GetTransactionByHashResponse"></a>

### GetTransactionByHashResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| transaction | [Transaction](#bdware.bdledger.api.Transaction) |  | 事务信息 |






<a name="bdware.bdledger.api.GetTransactionsResponse"></a>

### GetTransactionsResponse



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| transactions | [Transaction](#bdware.bdledger.api.Transaction) | repeated | 事务列表 |
| start_timestamp | [int64](#int64) |  | 本次查询有效的查询范围开始时间戳 |
| end_timestamp | [int64](#int64) |  | 本次查询有效的查询范围结束时间戳 |






<a name="bdware.bdledger.api.RecentBlocksRequest"></a>

### RecentBlocksRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledger | [string](#string) |  | 账本名称 |
| count | [int64](#int64) |  | 查询区块数量 |
| include_transactions | [IncludeTransactions](#bdware.bdledger.api.IncludeTransactions) |  | 包含事务信息详细程度 |






<a name="bdware.bdledger.api.TransactionFilter"></a>

### TransactionFilter
repeated Transaction/BlockFilters are combined by &#34;&amp;&amp;&#34;(and) operator;


| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| hash | [bytes](#bytes) |  |  |
| from | [bytes](#bytes) |  |  |
| to | [bytes](#bytes) |  |  |
| timestamp | [bytes](#bytes) |  |  |






<a name="bdware.bdledger.api.TransactionsRequest"></a>

### TransactionsRequest



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ledger | [string](#string) |  | 账本名称 |
| start_timestamp | [int64](#int64) |  | 查询范围开始时间戳 |
| end_timestamp | [int64](#int64) |  | 查询范围结束时间戳 |
| filters | [TransactionFilter](#bdware.bdledger.api.TransactionFilter) | repeated | 暂不支持 |





 


<a name="bdware.bdledger.api.IncludeTransactions"></a>

### IncludeTransactions
包含事务信息详细程度

| Name | Number | Description |
| ---- | ------ | ----------- |
| NONE | 0 | 不包含事务数据 |
| HASH | 1 | 包含事务哈希列表 |
| FULL | 2 | 包含完整事务列表 |


 

 


<a name="bdware.bdledger.api.Query"></a>

### 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 查询时间范围内的区块 Requirement: start_timestamp &lt;= end_timestamp If neither &#39;start_timestamp&#39; nor &#39;end_timestamp&#39; is specified, then &#39;start_timestamp&#39; will be set to the genesis block&#39;s timestamp, and &#39;end_timestamp&#39; will be set to (start_timestamp &#43; query.maxDuration) (query.maxDuration is specified in go-bdledger&#39;s config file). If only &#39;end_timestamp&#39; is not specified, or (end_timestamp - start_timestamp &gt; query.maxDuration), then &#39;end_timestamp&#39; will be set to (start_timestamp &#43; query.maxDuration). If only &#39;start_timestamp&#39; is not specified, then &#39;start_timestamp&#39; will be set to (end_timestamp - query.maxDuration). In all cases, &#39;start_timestamp&#39; will never be earlier than the genesis block&#39;s timestamp, and &#39;end_timestamp&#39; will never be later than the current timestamp when the node process the query request. |
| CountBlocks | [BlocksRequest](#bdware.bdledger.api.BlocksRequest) | [CountBlocksResponse](#bdware.bdledger.api.CountBlocksResponse) | Count all blocks in a ledger, or blocks in a timestamp range 查询帐本中的所有区块数量，或时间范围内的区块数量 Requirement: start_timestamp &lt;= end_timestamp If neither &#39;start_timestamp&#39; nor &#39;end_timestamp&#39; is specified, then count all blocks in the specified ledger. If only &#39;end_timestamp&#39; is not specified, then count all blocks with timestamps later than &#39;start_timestamp&#39;. If only &#39;start_timestamp&#39; is not specified, then count all blocks with timestamps earlier than &#39;end_timestamp&#39;. In all cases, &#39;start_timestamp&#39; will never be earlier than the genesis block&#39;s timestamp, and &#39;end_timestamp&#39; will never be later than the current timestamp when the node process the query request. |
| GetRecentBlocks | [RecentBlocksRequest](#bdware.bdledger.api.RecentBlocksRequest) | [GetBlocksResponse](#bdware.bdledger.api.GetBlocksResponse) | Get recent &#39;count&#39; blocks (Only support IncludeTransactions=NONE for now) 查询最新的 &#39;count&#39; 个区块 |
| 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 查询时间范围内的事务 &#39;start_timestamp&#39; and &#39;end_timestamp&#39; follow the same requirements and rules as in &#39;GetBlocks&#39;. |
| CountTransactions | [TransactionsRequest](#bdware.bdledger.api.TransactionsRequest) | [CountTransactionsResponse](#bdware.bdledger.api.CountTransactionsResponse) | Count all transactions in a ledger, or transactions in a timestamp range 查询帐本中的所有事务数量，或时间范围内的事务数量 &#39;start_timestamp&#39; and &#39;end_timestamp&#39; follow the same requirements and rules as in &#39;CountBlocks&#39;. |

 



<a name="google/protobuf/empty.proto"></a>
<p align="right"><a href="#top">Top</a></p>

## google/protobuf/empty.proto



<a name="google.protobuf.Empty"></a>

### 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 |
| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- |
| <a name="double" /> double |  | double | double | float | float64 | double | float | Float |
| <a name="float" /> float |  | float | float | float | float32 | float | float | Float |
| <a name="int32" /> 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) |
| <a name="int64" /> 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 |
| <a name="uint32" /> uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
| <a name="uint64" /> uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
| <a name="sint32" /> 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) |
| <a name="sint64" /> 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 |
| <a name="fixed32" /> 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) |
| <a name="fixed64" /> 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 |
| <a name="sfixed32" /> sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| <a name="sfixed64" /> sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| <a name="bool" /> bool |  | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass |
| <a name="string" /> string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| <a name="bytes" /> bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |

