Protocol Documentation
Table of Contents
TxResponse
Error は GRPC Error Code で返す
API
TxGate は Client から Transaction を受け取る
Method Name | Request Type | Response Type | Description |
Write |
Transaction |
TxResponse |
Write は Transaction を受け付ける。
受け取った Transaction は ProposalTxQueue に挿入した後、他のPeerに伝搬する。
InvalidArgument (code = 3) : One of following conditions:
1 ) StatelessValidator で落ちる場合
AlreadyExist (code = 6) : One of following conditions:
1 ) 既に同じ Transaction を受け取っていた場合 |
Read |
Query |
QueryResponse |
Read は Query を受け付ける。
受け取った Query の規則に従ってデータを取得し Peer の署名を添付した QueryResponse を返す。
InvalidArgument (code = 3) : One of following conditions:
1 ) Verify で落ちる場合
2 ) Validate で落ちる場合
NotFound (code = 5) : One of following conditions:
1 ) 検索結果が見つからなかった場合 |
ConsensusResponse
Error は GRPC Error Code で返す
PropagateBlockRequest
PropagateBlock において伝搬する側が送信するデータである。
Field | Type | Label | Description |
block |
Block |
|
伝搬する Block。最初に Block を送信する。 |
transaction |
Transaction |
|
伝搬する Block が持っている Transaction。Block を送信した後に順番に送信する。 |
PropagateBlockResponse
PropagateBlock において伝搬される側が送信するデータである。
Field | Type | Label | Description |
signature |
Signature |
|
Block を正しく受け取ったことを伝搬する側に伝えるために署名を送信する。 |
Consensus
ConsensusGate は合意形成に使用する rpc を定義する。
これを使用するのは合意形成に参加するPeerのみである。
Method Name | Request Type | Response Type | Description |
PropagateTx |
Transaction |
ConsensusResponse |
PropagateTx は Client から受け取った Transaction を自分以外の Peer に伝搬させる。
Context には送信者の署名をつける。
InvalidArgument (code = 3) : One of following conditions:
1 ) StatelessValidator で落ちる場合
PermissionDenied (code = 7) : One of following conditions:
1 ) Context の 署名の主がPeerでない場合 |
PropagateBlock |
PropagateBlockRequest stream |
PropagateBlockResponse stream |
PropagateBlock は Commit する block と txList を自分以外の Peer に伝搬させる。
Context には送信者の署名をつける
InvalidArgument (code = 3) : One of following conditions:
1 ) Block is nil.
2 ) Block Verify failed.
3 ) Transaction is nil.
4 ) Transaction Verify failed.
AlreadyExist (code = 6) : One of following conditions:
1 ) Block is already exist in block queue.
PermissionDenied (code = 7) : One of following conditions:
1 ) Context の 署名の主がPeerでない場合 |
Account
アカウントを表すオブジェクト。
Field | Type | Label | Description |
accountId |
string |
|
アカウントを特定するユニークなアドレス。 |
accountName |
string |
|
アカウントの表示名。 |
publicKeys |
bytes |
repeated |
アカウントを操作するための鍵の列。 |
quorum |
int32 |
|
アカウントを操作するために必要最小限の鍵の数。 |
balance |
int64 |
|
アカウントの保有する基軸通貨の数。 |
delegatePeerId |
string |
|
アカウントが信頼しているピアのアドレス。 |
ActivatePeer
ActivatePeer は Peer を active 状態にする。
TargetId は AccountId(PeerId) を指定する。
Active 状態の Peer は合意形成に参加できる。
AddBalance
AddBalance は targetId の balance を増やす。
TargetId は AccountId を指定する。
Field | Type | Label | Description |
balance |
int64 |
|
増やす balance の量。 |
AddObject
AddObject は TargetId で指定した Storage に Object を追加する。(list or dict)
TargetId は WalletId を指定する。
Field | Type | Label | Description |
key |
string |
|
Storage 内の要素を指定するためのキー値。 |
object |
Object |
|
指定した List Object に追加する Object。 |
AddPeer
AddPeer はネットワークに Peer を追加する。
TargetId は AccountId(PeerId) を指定する。
Field | Type | Label | Description |
address |
string |
|
Peer にアクセスするためのグローバルアドレス。 |
publicKey |
bytes |
|
Peer を操作するための公開鍵。 |
AddPublicKeys
AddPublicKey は TragetId で指定したアカウントに鍵を追加する。
TargetId は AccountId を指定する。
Field | Type | Label | Description |
publicKeys |
bytes |
repeated |
アカウントに登録する公開鍵のリスト。 |
Address
Proskenion 上のオブジェクトにアクセスするためのオブジェクト。
Field | Type | Label | Description |
address |
string |
|
|
BanPeer
BanPeer は Peer を使用禁止にする。
TargetId は AccountId(PeerId) を指定する。
Ban された Peer は金輪際合意形成/同期に参加できない。
Block
Block の構造。
Block.Payload
Field | Type | Label | Description |
height |
int64 |
|
現在のBlockのHeight+1。 |
preBlockHash |
bytes |
|
現在の Block のハッシュ値。 |
createdTime |
int64 |
|
Blockを生成した時間(リーダーがProposalを生成した時間であり、Commitされた時間ではない)。 |
wsvHash |
bytes |
|
Block 実行後の WSV のルートハッシュ値。 |
txHistoryHash |
bytes |
|
Block 実行後の TxHistory のルートハッシュ値。 |
txListHash |
bytes |
|
Transaction の集合(列)のハッシュ値。 |
round |
int32 |
|
現在の Round。 |
CheckAndCommitProsl
CheckAndCommitProsl は TargetId で指定した ProSL を検証して妥当であれば適用する。
TargetId は WalletId を指定する。
具体的には variables を引数列として渡して Update ProSL を実行し真を返した時、
新たな incentive or consensus or update アルゴリズムとして実際に適用する。
CheckAndCommitProsl.VariablesEntry
Command
Proskenion を操作するためのプリミティブな命令。
Consign
Consign は Account と Peer を紐付ける
TargetId は AccountId を指定する。
Field | Type | Label | Description |
peerId |
string |
|
アカウントが信頼する Peer の id。 |
CreateAccount
CerateAccount は TargetId の アカウントの生成を行う。
TargetId には AccountId を指定する。
Field | Type | Label | Description |
publicKeys |
bytes |
repeated |
アカウントに登録する公開鍵のリスト。 |
quorum |
int32 |
|
アカウントの権限を行使するために必要な最小の鍵の数。 |
CreateStorage
CreateStorage は定義された Storage を TargetId で指定されたアカウントで実体化する。
TargetId は WalletId を指定する。
DefineStorage
DefineStorage は Storage を定義する。
TargetId は StorageId を指定する。
Field | Type | Label | Description |
storage |
Storage |
|
Storage の key とそのデフォルトの value。 |
ForceUpdateStorage
ForceUpdateStorage は TargetId で指定した Storage を強制上書きする。
TargetId は WalletId を指定する。
ForceUpdateStorage は Validate で必ず false が返る。
Field | Type | Label | Description |
storage |
Storage |
|
上書き後の Storage の定義。 |
MegaBinaryChunk
未実装。 (参考 : https://triple-underscore.github.io/RFC2616-ja.html#section-3.6.1)
Field | Type | Label | Description |
chunkSize |
int64 |
|
全体 |
lastChunk |
int64 |
|
どこから始まるか |
data |
bytes |
|
|
MegaStorage
未実装。
MegaStorage.MetaEntry
Object
Proskenion で扱えるデータ構造をまとめたオブジェクト。
ObjectDict
オブジェクトの辞書を表すオブジェクト。
ObjectDict.DictEntry
ObjectList
オブジェクトのリストを表すオブジェクト。
Field | Type | Label | Description |
list |
Object |
repeated |
オブジェクトの列。 |
OrderBy
ソートのキーと順序の識別オブジェクト。
Peer
ピアを表すオブジェクト。
Field | Type | Label | Description |
peerId |
string |
|
ピアを特定するユニークなアドレス。 |
address |
string |
|
ピアにアクセスするためのグローバルアドレス。(ex. ip:port) |
publicKey |
bytes |
|
ピアの公開鍵。 |
active |
bool |
|
ピアが同期して活動しているかの真偽値。 |
ban |
bool |
|
ピアがチェーン上から排斥されているかの真偽値。 |
RemovePublicKeys
RemovePublicKey は TargetId で指定したアカウントの鍵を削除する。
TargetId は AccountId を指定する。
Field | Type | Label | Description |
publicKeys |
bytes |
repeated |
アカウントから削除する公開鍵のリスト。 |
SetQuorum
SetAccountQuorum は TargetId アカウントの quorum を更新する。
TargetId は AccountId を指定する。
Field | Type | Label | Description |
quorum |
int32 |
|
アカウントの権限を行使するために必要な最小の鍵の数。 |
Signature
署名を表すオブジェクト。
Field | Type | Label | Description |
publicKey |
bytes |
|
公開鍵を base64 エンコードしたもの。 |
signature |
bytes |
|
秘密鍵でハッシュ値を署名したもの。 |
Storage
ストレージを表すオブジェクト。
Storage.ObjectEntry
SuspendPeer
SuspendPeer は Peer を 非active 状態にする。
TargetId は AccountId(PeerId) を指定する。
非active 状態の Peer は合意形成に参加しない。(Consign の対象にできない)
Transaction
Transaction は Client が送信する取引の内容を記述したものである。
Transaction.Payload
Field | Type | Label | Description |
createdTime |
int64 |
|
Transaction を生成した時間(UnixTime)。 |
commands |
Command |
repeated |
Transaction が逐次実行するコマンド列。 |
TransferBalance
Transfer Command は送金を行う。
targetId は 送金元の AccountId を示す。
Field | Type | Label | Description |
destAccountId |
string |
|
送金先の AccountId。 |
balance |
int64 |
|
送金する balance の量。 |
TransferObject
TransferObject は Storage 内の key で指定された要素内の Object を送信する。(list or dict)
TargetId は WalletId を指定する。
Field | Type | Label | Description |
key |
string |
|
Storage 内の要素を指定するためのキー値。 |
destAccountId |
string |
|
送信先の AccountId。 |
object |
Object |
|
送信する Object の内容(存在しない場合は失敗する)。 |
UpdateObject
UpdateObject は Storage 内の Object を更新する。
TargetId は WalletId を指定する。
Field | Type | Label | Description |
key |
string |
|
Storage 内の要素を指定するためのキー値。 |
object |
Object |
|
変更後の Object。 |
ObjectCode
Object の識別コード。
Name | Number | Description |
AnythingObjectCode |
0 |
|
BoolObjectCode |
1 |
|
Int32ObjectCode |
2 |
|
Int64ObjectCode |
3 |
|
Uint32ObjectCode |
4 |
|
Uint64ObjectCode |
5 |
|
StringObjectCode |
6 |
|
BytesObjectCode |
7 |
|
AddressObjectCode |
8 |
|
SignatureObjectCode |
9 |
|
AccountObjectCode |
10 |
|
PeerObjectCode |
11 |
|
ListObjectCode |
12 |
|
DictObjectCode |
13 |
|
StorageObjectCode |
14 |
|
MegaStorageObjectCode |
15 |
|
CommandObjectCode |
16 |
|
TransactionObjectCode |
17 |
|
BlockObjectCode |
18 |
|
OrderCode
順序の識別コード。DESC(降順), ASC(昇順)。
Name | Number | Description |
DESC |
0 |
|
ASC |
1 |
|
AndOperator
AssertOperator
CastOperator
CommandOperator
CommandOperator.ParamsEntry
ConcatOperator
DivisionOperator
EachOperator
Deprecated...
ElifOperator
ElseOperator
Field | Type | Label | Description |
prosl |
Prosl |
|
|
ErrCatchOperator
IfOperator
IndexedOperator
IsDefinedOperator
Field | Type | Label | Description |
variableName |
string |
|
|
LenOperator
ListComprehensionOperator
ListOperator
MapOperator
MapOperator.ObjectEntry
MinusOperator
ModOperator
MultipleOperator
OrOperator
Field | Type | Label | Description |
storages |
ValueOperator |
|
List Obejct and each object is Storage Object.
Storage.Id is vertex id.
toKey is Storage[toKey] = ObjectList<AddressObject>
Allowed edges inputs Storage.Id -> Storage[toKey]...
Output : ObjectList<StorageObject>
Storage has Id = "Address/outStorageName" and "rank" = rank. |
toKey |
ValueOperator |
|
|
outName |
ValueOperator |
|
|
PlusOperator
Prosl
ProslOperator
QueryOperator
RequireOperator
ReturnOperator
SetOperator
SliceOperator
return ListObeject[left, right) : left == nil: left is 0, right == nil: right is len(list).
SortOperator
StorageOperator
TxOperator
ValueOperator
ValuedOperator
VariableOperator
Field | Type | Label | Description |
variableName |
string |
|
|
VerifyOperator
XorOperator
ErrCode
Name | Number | Description |
NoErr |
0 |
|
Anything |
1 |
|
Internal |
2 |
|
Sentence |
3 |
|
UnImplemented |
4 |
|
Assertation |
5 |
|
QueryVerify |
6 |
|
QueryValidate |
7 |
|
Type |
8 |
|
NotEnoughArgument |
9 |
|
FailedOperate |
10 |
|
UnExpectedReturnValue |
11 |
|
OutOfRange |
12 |
|
Undefined |
13 |
|
CastType |
14 |
|
Query
Query は Proskenion 上のデータを取得するためのフォーマットである。
Query.Payload
Field | Type | Label | Description |
authorizerId |
string |
|
誰の権限で Query を発行するかを AccountId で指定する。 |
select |
string |
|
取得したい要素の名前を指定する。 |
requstCode |
ObjectCode |
|
取得する Object の型を指定する。 |
fromId |
string |
|
検索対象となる id を指定する。 |
where |
string |
|
TODO: fromId が範囲指定だった場合、取得した Object に filter をかける条件式を記述する。 |
orderBy |
OrderBy |
|
fromId が範囲指定だった場合、取得したリストをソートするルールを指定する。 |
limit |
int32 |
|
fromId が範囲指定だった場合、取得したリストを何番目まで返すかを指定する。 |
createdTime |
int64 |
|
Query を発行した時間を指定する。 |
QueryResponse
QueryResponse は Read RPC の返り値である。
Field | Type | Label | Description |
object |
Object |
|
Query で取得したデータ。 |
signature |
Signature |
|
Object を Query を実行した Peer が署名したもの。 |
SyncRequest
SynRequest は取得したい BlockChain の先頭のブロックハッシュを渡す。
終了は io.EOF を用いる。
Field | Type | Label | Description |
blockHash |
bytes |
|
|
SyncResponse
SyncResponse は Block と Transaction の列を返す。
データベースのロック解除のために空を返す。
空を返されたら Request で再び続きから取得する。
Sync
SyncGate は 同期を行うための通信
Method Name | Request Type | Response Type | Description |
Sync |
SyncRequest stream |
SyncResponse stream |
Sync は同期したい側が正しいデータを持っている Peer に対して投げるリクエストである。
InvalidArgument (code = 3) : One of following conditions:
1 ) Block hash is nil.
2 ) Block Verify failed.
3 ) Transaction is nil.
4 ) Transaction Verify failed.
DeadlineExceeded (Code = 4) One fo following conditoins:
1 ) Timeout stream response.
AlreadyExist (code = 6) : One of following conditions:
1 ) Block is already exist is blockchain. |
Scalar Value Types
.proto Type | Notes | C++ Type | Java Type | Python Type |
double |
|
double |
double |
float |
float |
|
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 |
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 |
uint32 |
Uses variable-length encoding. |
uint32 |
int |
int/long |
uint64 |
Uses variable-length encoding. |
uint64 |
long |
int/long |
sint32 |
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. |
int32 |
int |
int |
sint64 |
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. |
int64 |
long |
int/long |
fixed32 |
Always four bytes. More efficient than uint32 if values are often greater than 2^28. |
uint32 |
int |
int |
fixed64 |
Always eight bytes. More efficient than uint64 if values are often greater than 2^56. |
uint64 |
long |
int/long |
sfixed32 |
Always four bytes. |
int32 |
int |
int |
sfixed64 |
Always eight bytes. |
int64 |
long |
int/long |
bool |
|
bool |
boolean |
boolean |
string |
A string must always contain UTF-8 encoded or 7-bit ASCII text. |
string |
String |
str/unicode |
bytes |
May contain any arbitrary sequence of bytes. |
string |
ByteString |
str |