Protocol Documentation

Table of Contents

api.proto

Top


      
        

TxResponse

Error は GRPC Error Code で返す

API

TxGate は Client から Transaction を受け取る
Method NameRequest TypeResponse TypeDescription
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 ) 検索結果が見つからなかった場合

consensus.proto

Top


      
        

ConsensusResponse

Error は GRPC Error Code で返す

PropagateBlockRequest

PropagateBlock において伝搬する側が送信するデータである。
FieldTypeLabelDescription
block Block
伝搬する Block。最初に Block を送信する。 
transaction Transaction
伝搬する Block が持っている Transaction。Block を送信した後に順番に送信する。 

PropagateBlockResponse

PropagateBlock において伝搬される側が送信するデータである。
FieldTypeLabelDescription
signature Signature
Block を正しく受け取ったことを伝搬する側に伝えるために署名を送信する。 

Consensus

ConsensusGate は合意形成に使用する rpc を定義する。
これを使用するのは合意形成に参加するPeerのみである。
Method NameRequest TypeResponse TypeDescription
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でない場合

objects.proto

Top


      
        

Account

アカウントを表すオブジェクト。
FieldTypeLabelDescription
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 を指定する。
FieldTypeLabelDescription
balance int64
増やす balance の量。 

AddObject

AddObject は TargetId で指定した Storage に Object を追加する。(list or dict)
TargetId は WalletId を指定する。
FieldTypeLabelDescription
key string
Storage 内の要素を指定するためのキー値。 
object Object
指定した List Object に追加する Object。 

AddPeer

AddPeer はネットワークに Peer を追加する。
TargetId は AccountId(PeerId) を指定する。
FieldTypeLabelDescription
address string
Peer にアクセスするためのグローバルアドレス。 
publicKey bytes
Peer を操作するための公開鍵。 

AddPublicKeys

AddPublicKey は TragetId で指定したアカウントに鍵を追加する。
TargetId は AccountId を指定する。
FieldTypeLabelDescription
publicKeys bytes repeated
アカウントに登録する公開鍵のリスト。 

Address

Proskenion 上のオブジェクトにアクセスするためのオブジェクト。
FieldTypeLabelDescription
address string
 

BanPeer

BanPeer は Peer を使用禁止にする。
TargetId は AccountId(PeerId) を指定する。
Ban された Peer は金輪際合意形成/同期に参加できない。

Block

Block の構造。
FieldTypeLabelDescription
payload Block.Payload
 
signature Signature
Payload を現在のラウンドにおけるリーダーが署名したもの。 

Block.Payload



        
          
FieldTypeLabelDescription
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 アルゴリズムとして実際に適用する。
FieldTypeLabelDescription
variables CheckAndCommitProsl.VariablesEntry repeated
Update ProSL を実行する際の引数列。 

CheckAndCommitProsl.VariablesEntry



        
          
FieldTypeLabelDescription
key string
 
value Object
 

Command

Proskenion を操作するためのプリミティブな命令。
FieldTypeLabelDescription
authorizerId string
誰の権限で命令を実行するかを AccountId で指定する。 
targetId string
どの対象に命令を実行するかを指定する。 
createAccount CreateAccount
 
addBalance AddBalance
 
transferBalance TransferBalance
 
addPublicKeys AddPublicKeys
 
removePublicKeys RemovePublicKeys
 
setQuorum SetQuorum
 
defineStorage DefineStorage
 
createStorage CreateStorage
 
updateObject UpdateObject
 
addObject AddObject
 
transferObject TransferObject
 
addPeer AddPeer
 
activatePeer ActivatePeer
 
suspendPeer SuspendPeer
 
banPeer BanPeer
 
consign Consign
 
checkAndCommitProsl CheckAndCommitProsl
 
forceUpdateStorage ForceUpdateStorage
 

Consign

Consign は Account と Peer を紐付ける
TargetId は AccountId を指定する。
FieldTypeLabelDescription
peerId string
アカウントが信頼する Peer の id。 

CreateAccount

CerateAccount は TargetId の アカウントの生成を行う。
TargetId には AccountId を指定する。
FieldTypeLabelDescription
publicKeys bytes repeated
アカウントに登録する公開鍵のリスト。 
quorum int32
アカウントの権限を行使するために必要な最小の鍵の数。 

CreateStorage

CreateStorage は定義された Storage を TargetId で指定されたアカウントで実体化する。
TargetId は WalletId を指定する。

DefineStorage

DefineStorage は Storage を定義する。
TargetId は StorageId を指定する。
FieldTypeLabelDescription
storage Storage
Storage の key とそのデフォルトの value。 

ForceUpdateStorage

ForceUpdateStorage は TargetId で指定した Storage を強制上書きする。
TargetId は WalletId を指定する。
ForceUpdateStorage は Validate で必ず false が返る。
FieldTypeLabelDescription
storage Storage
上書き後の Storage の定義。 

MegaBinaryChunk

未実装。 (参考 : https://triple-underscore.github.io/RFC2616-ja.html#section-3.6.1)
FieldTypeLabelDescription
chunkSize int64
全体 
lastChunk int64
どこから始まるか 
data bytes
 

MegaStorage

未実装。
FieldTypeLabelDescription
meta MegaStorage.MetaEntry repeated
 
megaBinaryHash bytes
 

MegaStorage.MetaEntry



        
          
FieldTypeLabelDescription
key string
 
value Object
 

Object

Proskenion で扱えるデータ構造をまとめたオブジェクト。
FieldTypeLabelDescription
type ObjectCode
オブジェクトの識別子。 
boolean bool
 
i32 int32
 
i64 int64
 
u32 uint32
 
u64 uint64
 
str string
 
data bytes
 
address string
 
sig Signature
 
account Account
 
peer Peer
 
list ObjectList
 
dict ObjectDict
 
storage Storage
 
megaStorage MegaStorage
 
command Command
 
transaction Transaction
 
block Block
 

ObjectDict

オブジェクトの辞書を表すオブジェクト。
FieldTypeLabelDescription
dict ObjectDict.DictEntry repeated
文字列をキー値、オブジェクトをバリュー値に持つ辞書。 

ObjectDict.DictEntry



        
          
FieldTypeLabelDescription
key string
 
value Object
 

ObjectList

オブジェクトのリストを表すオブジェクト。
FieldTypeLabelDescription
list Object repeated
オブジェクトの列。 

OrderBy

ソートのキーと順序の識別オブジェクト。
FieldTypeLabelDescription
key string
 
order OrderCode
 

Peer

ピアを表すオブジェクト。
FieldTypeLabelDescription
peerId string
ピアを特定するユニークなアドレス。 
address string
ピアにアクセスするためのグローバルアドレス。(ex. ip:port) 
publicKey bytes
ピアの公開鍵。 
active bool
ピアが同期して活動しているかの真偽値。 
ban bool
ピアがチェーン上から排斥されているかの真偽値。 

RemovePublicKeys

RemovePublicKey は TargetId で指定したアカウントの鍵を削除する。
TargetId は AccountId を指定する。
FieldTypeLabelDescription
publicKeys bytes repeated
アカウントから削除する公開鍵のリスト。 

SetQuorum

SetAccountQuorum は TargetId アカウントの quorum を更新する。
TargetId は AccountId を指定する。
FieldTypeLabelDescription
quorum int32
アカウントの権限を行使するために必要な最小の鍵の数。 

Signature

署名を表すオブジェクト。
FieldTypeLabelDescription
publicKey bytes
公開鍵を base64 エンコードしたもの。 
signature bytes
秘密鍵でハッシュ値を署名したもの。 

Storage

ストレージを表すオブジェクト。
FieldTypeLabelDescription
id string
ストレージを特定するユニークなアドレス。 
object Storage.ObjectEntry repeated
ストレージの中身を表すキーバリューデータ構造。 

Storage.ObjectEntry



        
          
FieldTypeLabelDescription
key string
 
value Object
 

SuspendPeer

SuspendPeer は Peer を 非active 状態にする。
TargetId は AccountId(PeerId) を指定する。
非active 状態の Peer は合意形成に参加しない。(Consign の対象にできない)

Transaction

Transaction は Client が送信する取引の内容を記述したものである。
FieldTypeLabelDescription
payload Transaction.Payload
 
signatures Signature repeated
Paylaod をコマンドの操作者達によって署名した Signature のリスト。 

Transaction.Payload



        
          
FieldTypeLabelDescription
createdTime int64
Transaction を生成した時間(UnixTime)。 
commands Command repeated
Transaction が逐次実行するコマンド列。 

TransferBalance

Transfer Command は送金を行う。
targetId は 送金元の AccountId を示す。
FieldTypeLabelDescription
destAccountId string
送金先の AccountId。 
balance int64
送金する balance の量。 

TransferObject

TransferObject は Storage 内の key で指定された要素内の Object を送信する。(list or dict)
TargetId は WalletId を指定する。
FieldTypeLabelDescription
key string
Storage 内の要素を指定するためのキー値。 
destAccountId string
送信先の AccountId。 
object Object
送信する Object の内容(存在しない場合は失敗する)。 

UpdateObject

UpdateObject は Storage 内の Object を更新する。
TargetId は WalletId を指定する。
FieldTypeLabelDescription
key string
Storage 内の要素を指定するためのキー値。 
object Object
変更後の Object。 

ObjectCode

Object の識別コード。
NameNumberDescription
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(昇順)。
NameNumberDescription
DESC 0
ASC 1

prosl.proto

Top


      
        

AndFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

AndOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

AssertOperator



        
          
FieldTypeLabelDescription
op ConditionalFormula
 

CastOperator



        
          
FieldTypeLabelDescription
type ObjectCode
 
object ValueOperator
 

CommandOperator



        
          
FieldTypeLabelDescription
command_name string
 
params CommandOperator.ParamsEntry repeated
 

CommandOperator.ParamsEntry



        
          
FieldTypeLabelDescription
key string
 
value ValueOperator
 

ConcatOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

ConditionalFormula



        
          
FieldTypeLabelDescription
or OrFormula
|| 
and AndFormula
&& 
not NotFormula
! 
eq EqFormula
== 
ne NeFormula
!= 
gt GtFormula
> 
ge GeFormula
>= 
lt LtFormula
< 
le LeFormula
<= 
verifyOp VerifyOperator
 

DivisionOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

EachOperator

Deprecated...
FieldTypeLabelDescription
list ValueOperator
 
variableName string
 
do Prosl
 

ElifOperator



        
          
FieldTypeLabelDescription
op ConditionalFormula
 
prosl Prosl
 

ElseOperator



        
          
FieldTypeLabelDescription
prosl Prosl
 

EqFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

ErrCatchOperator



        
          
FieldTypeLabelDescription
code ErrCode
 
prosl Prosl
 

GeFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

GtFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

IfOperator



        
          
FieldTypeLabelDescription
op ConditionalFormula
 
prosl Prosl
 

IndexedOperator



        
          
FieldTypeLabelDescription
object ValueOperator
 
type ObjectCode
 
index ValueOperator
 

IsDefinedOperator



        
          
FieldTypeLabelDescription
variableName string
 

LeFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

LenOperator



        
          
FieldTypeLabelDescription
list ValueOperator
 

ListComprehensionOperator



        
          
FieldTypeLabelDescription
list ValueOperator
 
variableName string
 
if ConditionalFormula
 
element ValueOperator
 

ListOperator



        
          
FieldTypeLabelDescription
object ValueOperator repeated
 

LtFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

MapOperator



        
          
FieldTypeLabelDescription
object MapOperator.ObjectEntry repeated
 

MapOperator.ObjectEntry



        
          
FieldTypeLabelDescription
key string
 
value ValueOperator
 

MinusOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

ModOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

MultipleOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

NeFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

NotFormula



        
          
FieldTypeLabelDescription
op ValueOperator
 

OrFormula



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

OrOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

PageRankOperator



        
          
FieldTypeLabelDescription
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



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

Prosl



        
          
FieldTypeLabelDescription
ops ProslOperator repeated
 

ProslOperator



        
          
FieldTypeLabelDescription
setOp SetOperator
 
ifOp IfOperator
 
elifOp ElifOperator
 
elseOp ElseOperator
 
errOp ErrCatchOperator
 
requireOp RequireOperator
 
assertOp AssertOperator
 
returnOp ReturnOperator
 
eachOp EachOperator
 

QueryOperator



        
          
FieldTypeLabelDescription
authorizerId ValueOperator
 
select string
 
type ObjectCode
 
from ValueOperator
 
where ValueOperator
 
orderBy OrderBy
 
limit int32
 

RequireOperator



        
          
FieldTypeLabelDescription
op ConditionalFormula
 

ReturnOperator



        
          
FieldTypeLabelDescription
op ValueOperator
 

SetOperator



        
          
FieldTypeLabelDescription
variableName string
 
value ValueOperator
 

SliceOperator

return ListObeject[left, right) : left == nil: left is 0, right == nil: right is len(list).
FieldTypeLabelDescription
list ValueOperator
 
left ValueOperator
 
right ValueOperator
 

SortOperator



        
          
FieldTypeLabelDescription
list ValueOperator
 
orderBy OrderBy
 
type ObjectCode
 
limit ValueOperator
 

StorageOperator



        
          
FieldTypeLabelDescription
object MapOperator
 

TxOperator



        
          
FieldTypeLabelDescription
commands ValueOperator
 

ValueOperator



        
          
FieldTypeLabelDescription
queryOp QueryOperator
 
txOp TxOperator
 
cmdOp CommandOperator
 
storageOp StorageOperator
 
plusOp PlusOperator
 
minusOp MinusOperator
 
mulOp MultipleOperator
 
divOp DivisionOperator
 
modOp ModOperator
 
orOp OrOperator
 
andOp AndOperator
 
xorOp XorOperator
 
concatOp ConcatOperator
 
valuedOp ValuedOperator
 
indexedOp IndexedOperator
 
variableOp VariableOperator
 
object Object
 
listOp ListOperator
 
mapOp MapOperator
 
castOp CastOperator
 
listComprehensionOp ListComprehensionOperator
 
sortOp SortOperator
 
sliceOp SliceOperator
 
isDefinedOp IsDefinedOperator
 
verifyOp VerifyOperator
 
pageRankOp PageRankOperator
 
lenOp LenOperator
 

ValuedOperator



        
          
FieldTypeLabelDescription
object ValueOperator
 
type ObjectCode
 
key string
 

VariableOperator



        
          
FieldTypeLabelDescription
variableName string
 

VerifyOperator



        
          
FieldTypeLabelDescription
sig ValueOperator
 
hash ValueOperator
 

XorOperator



        
          
FieldTypeLabelDescription
ops ValueOperator repeated
 

ErrCode


        
NameNumberDescription
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.proto

Top


      
        

Query

Query は Proskenion 上のデータを取得するためのフォーマットである。
FieldTypeLabelDescription
payload Query.Payload
 
signature Signature
Payload を Query 発行者が署名したもの。 

Query.Payload



        
          
FieldTypeLabelDescription
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 の返り値である。
FieldTypeLabelDescription
object Object
Query で取得したデータ。 
signature Signature
Object を Query を実行した Peer が署名したもの。 

sync.proto

Top


      
        

SyncRequest

SynRequest は取得したい BlockChain の先頭のブロックハッシュを渡す。
終了は io.EOF を用いる。
FieldTypeLabelDescription
blockHash bytes
 

SyncResponse

SyncResponse は Block と Transaction の列を返す。
データベースのロック解除のために空を返す。
空を返されたら Request で再び続きから取得する。
FieldTypeLabelDescription
block Block
 
transaction Transaction
 

Sync

SyncGate は 同期を行うための通信
Method NameRequest TypeResponse TypeDescription
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 TypeNotesC++ TypeJava TypePython 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