Type Serialization(型のシリアライゼーション)

Account Action Thresholds

特定のタイプのアクションを実行するときに必要となるweight(重み)の最小閾値。以下のように3つの連続したu8値としてシリアライズされます。

  • deployment:u8値としてデプロイメントアクションを実行するために必要な重みの最小閾値
  • key_management:u8値として鍵管理アクションを実行するために必要な重みの最小閾値

Account Config

アカウントの公開鍵、メイン財布の残高、バリデータの設定を含むaccounts.toml内における個々のアカウント設定

  • public_key それ自体のバイト表現でシリアライズされるアカウントの公開鍵
  • balance U512値でシリアライズされるアカウントのメイン財布の残高
  • validator Option(オプション)でシリアライズされるアカウントのバリデータ設定

Account Hash

ユーザのアカウントのアドレスを表す、公開鍵のblake2bハッシュです。アカウントハッシュは、アカウントハッシュのバイトを含む32バイトのバッファとしてシリアライズされます。

Account Identifier

アカウントを検索するための識別子。ほとんどの場合、以下のいずれかで構成されます:

  • PublicKey:アカウントの公開鍵
  • AccountHash:アカウントの公開鍵のblake2bハッシュ

Activation Point

関連するプロトコルバージョンが適用される最初のeraです。u8タグでシリアライズされ、そのeraが genesis(初期)であるかどうかを示します。これがジェネシスである場合、続くバイトはタイムスタンプとなり、そうでない場合はera_idを示します。

  • era_id:プロトコルバージョンがアクティブになる際のeraを識別するEra ID newtype
  • timestamp:アクティベーションポイントがジェネシス変数の場合にtimestampとなる

AddressableEntityHash

それ自体のバイト表現にシリアライズされたアドレス指定可能なエンティティの16進数にエンコードされたアドレスです。

Approval

署名と署名者の公開鍵を含む構造体

  • signature:署名のバイト表現としてシリアライズされた承認署名。署名内の最初のバイトは、Ed25519署名の場合は1となりSecp256k1の場合は2となる
  • signer:PublicKeyのバイト表現にシリアライズされた承認署名者の公開鍵。PublicKeyがEd25519鍵の場合はシリアライズバッファの最初のバイトは1となり、その後に鍵そのもののバイトが続く。それ以外のSecp256k1の場合は最初のバイトが2となる

ApprovalsHash

bytesreprエンコードされた承認セットの暗号化ハッシュでありdigestとしてシリアライズされます。

AssociatedKey

マルチシグなどを目的としたAccountに限定的な権限を付与された鍵。これは、最初の4バイトはその中に保持されるキーの数と重みを表すu32値を表すBTreeMapとしてシリアライズされます。残りの部分は、シリアライズされた名前付き鍵と最初の4バイトで指定された長さの重みの繰り返しパターンで構成されています。

  • account_hash:関連する鍵のaccount hash
  • weight:u8値でシリアライズされる関連する鍵の重み

AvailableBlockRange

切れ目のないブロックの包括的な範囲。以下2つのフィールドを含む連続した2つのu64値としてシリアライズされる:

  • low:範囲の包括的下限
  • high:範囲の包括的上限

BalanceHoldAddr

バランス(残高)を保有するアドレス。以下のようにバランス(残高)を保有するアドレスタイプを記述するBalanceHoldAddrTagとしてシリアライズされます:

  • Gasは、0のBalanceHoldAddrTagに保有分用のお財布URefblock_timeが続くものとしてシリアライズされる
  • Processingは、1のBalanceHoldAddrTagに保有分用のお財布URefblock_timeが続くものとしてシリアライズされる

BalanceHoldAddrTag

BalanceHoldAddrタイプを記述するタグで、単一のu8値としてシリアライズされます。

BalanceResponse

BalanceResponseは、残高クエリへのレスポンスを行う構造体です。以下のフィールドで構成されています:

  • total_balance:U512値としてシリアライズされる保有分を考慮しないお財布の合計残高
  • available_balance:U512値としてシリアライズされる総残高からすべてのアクティブな保有合計を引いた利用可能残高
  • total_balance_proof:与えられた値がMerkle trieに存在することの証明。TrieMerkleProofとしてシリアライズされ、鍵、値、proof_stepにて構成
  • balance_holds:balance上の、時間に関連するアクティブなホールド。最初の4バイトがBlockTimeとBalanceHoldsWithProof内に保持されているBalanceHoldsWithProofの数を表すu32値を表すBTreeMapとしてシリアライズされます。残りは、最初の4バイトで決まる長さのシリアライズされたBlockTimesとBalanceHoldsWithProofsの繰り返しパターンで構成される

Bid

バリデータマップのエントリ。以下フィールドによって構造は成り立っています:

  • validator_public_key:バリデータの公開鍵。PublicKeyとしてシリアライズされる
  • bonding_purse:ボンディングに使用する財布。Urefとしてシリアライズされる
  • staked_amount:バリデータが賭けたトークンの量 (デリゲータは含まない)。U512値としてシリアライズされる
  • delegation_rate:入札のデリゲート率。32ビット整数プリミティブで署名されたi32としてシリアライズされる
  • vesting_schedule:genesis(ジェネシス)バリデータの権利確定スケジュール。非ジェネシスのバリデータの場合はNone(指定なし)。オプションとしてシリアライズされる
  • delegators:publicキーでインデックスされたバリデータのデリゲータ。デリゲータはBTreeMap形式でシリアライズされ、最初の4バイトがu32型の値でPublicKeyとデリゲータの数を表します。残りは、シリアライズされたPublickeysと最初の4バイトで決まるデリゲータの長さの繰り返しパターンで構成される
  • inactive:バリデータが追い出された場合。1バイトでシリアライズされるブール値で、trueは1、falseは0にマップされる

BidAddr

BidAddr は、オークションシステムコントラクトの入札に関連するデータを管理します。BidAddr は、入札の種類を表す単一のu8タグとしてシリアライズされ、その後に入札自体に関する情報が続きます。以下のいずれかになります:

  • Unified:古い(レガシー)バージョンと結合した入札のBidAddr。u8の0にレガシービッド(入札)を識別するaccount_hashが続く形でシリアライズされる
  • Validator:バリデータの入札。u8の1とバリデータのaccount_hashでシリアライズされる
  • Delegator:デリゲータの入札。u8 の 2 の後に関連付けられたバリデータの account_hashが続き、その後にデリゲータのaccount_hashが続く
  • Credit:オークションのクレジットを表すBidAddr。u8の4の後にバリデータの account_hashおよび該当するクレジットのEraIdを続けた形式でシリアライズされる

BidKind

オークションの入札変数

下記表にあるように入札毎の型を表示するu8値としてシリアライズされます:

BidKindu8Description
Unified0与えられたバリデータに対する全てのデリゲータを持つ古いデータ
Validator1バリデータのデータのみを持つ入札レコード
Delegator2デリゲータのデータのみを持つ入札レコード

BlockGlobalAddr

特定のブロックに関連付けされたシングルトンの値のアドレスです。ブロックのタイムスタンプや、ブロックの実行中に発行されたメッセージの総カウントなど、ブロックの実行中に計算または設定される値です。

これは2つのu8値としてシリアライズされ、最初のu8値はカテゴリーを表し、その後に以下のように基礎となる値が続きます:

  • BlockTimeはu8の0で始まり、ブロック時間のu8が続く
  • MessageCountはu8の1で始まり、u8のメッセージ数が続く

BlockIdentifier

ブロックを取得するための識別子。殆どの場合、下記いずれかによって構成されています。

  • hash:ハッシュでブロックの識別と取得を行います。BlockHashは、ハッシュそのもののバイト表現としてシリアライズされます
  • height:Blockをその高さとともに識別および取得します。高さは、1個のu64値としてシリアライズされます
  • state_root_hash:Blockをそのステート・ルート・ハッシュで識別および取得します。こ れは、ステート・ルート・ハッシュのバイト表現にシリアライズされます。state_root_hashのシリアライズされたバッファは32バイト長です

BlockSignatures

1つのブロックに対する署名のコレクションであり関連するブロックのハッシュとera IDが含まれています。

BlockSignaturesには2つのバージョンがあり、どちらかのバージョンを示すu8タグが先頭に付きます。

  • BlockSignaturesV1はu8の0の後にBlockSignaturesV1が続く形でシリアライズされる
  • BlockSignaturesV2はu8の1の後にBlockSignaturesV2が続く形でシリアライズされる

BlockSignaturesV1

BlockSignaturesV1は、Casper 2.0 リリース以前に作成されたブロックに適用される BlockSignaturesのレガシーバージョンです。構造は以下の通り:

  • block_hash:関連ブロックのブロックハッシュ。ハッシュ自体のバイト表現としてシリアライズされる
  • era_id:このブロックが作成されたeraのID。単一のu64値としてシリアライズされる
  • proofs:ブロックハッシュに対するバリデータの署名を集めたブロックの証明。それは、BTreeMapとしてシリアライズされ最初の4バイトはu32値にてその中に含まれるPublicKeyssignatures(署名)の数を表す。残りの部分は、最初の4バイトで指定された長さの公開鍵と署名の繰り返しで構成される

BlockSignaturesV2

BlockSignaturesV2は、Casper 2.0リリース以降に作成されたブロックに適用される BlockSignaturesの最新バージョンです。構造は以下の通り:

  • block_hash:関連ブロックのブロックハッシュ。ハッシュ自体のバイト表現としてシリアライズされる
  • block_height:ブロックの高さ。単一のu64値としてシリアライズされる
  • era_id:このブロックが作成されたeraのID。単一のu64値としてシリアライズされる
  • chain_name_hash:関連するブロックのチェーン名のハッシュ。ハッシュ自体のバイト表現としてシリアライズされる
  • proofs: ブロックハッシュに対するバリデータの署名を集めたブロックの証明。BTreeMapとしてシリアライズされ、最初の4バイトはu32値にてその中に含まれるPublicKeys(公開鍵)とsignatures(署名)の数を表す。残りの部分は、最初の4バイトで指定された長さにてシリアライズされた公開鍵と署名の繰り返しパターンで構成される

BlockSyncStatus

個々のブロックの同期ステータス。該当ブロックのblock hashのバイト表現としてシリアライズされ、その後にブロックの高さのu64を表すオプションが続き、残りはstring(文字列)としてのacquisition_stateのバイト表現となります。

BlockTime

単一のu64値としてシリアライズされたブロック時間

BTreeMap

BTreeMapは、Casperネットワーク内のキーと値をマッピングする方法です。BTreeMapは、最初の4バイトがu32値でシリアライズされ、鍵と値の数を表しています。残りの部分は、シリアライズされた鍵と最初の4バイトで指定された長さの値の繰り返しパターンで構成されます。

BTreeSet

BTreeSetは、Casperネットワーク内に値のセットを格納する方法です。BTreeSetは、最初の4バイトがu32値でシリアライズされ、その中に保持される値の数をu32表現にて表します。残りは、最初の4バイトで指定された長さの値の繰り返し系列で構成されます。

ByteCode

コントラクトのWasmバイトのコンテナ。単一u8のBidKindとしてシリアライズされ、その後に残りのByteのサイズを表すu32値、そして記述されたとおりのByteが続きます。

Bytes

バイトの長さを表すu32値としてシリアライズされ、その後にバイトそのものが続くHex(16進数に)エンコードされたバイトです。

ByteCodeKind

単一のu8値としてシリアライズされたバイトコードのタイプ(型)。0は空のバイトコードを示し、1は最初のバージョンのCasper実行エンジンで実行されるV1CasperWasmを示します。2は最初のバージョンのCasper実行エンジンで実行されるV2CasperWasmを示します。

Caller

Callerは、呼び出し元のエンティティのIDである。これは、後述の2つのうちどちらかにてシリアライズされる:

  • Initiatorは全体的な呼び出しアカウントであり、u8タグ0の後に呼び出しアカウントのaccount_hashが続くものとしてシリアライズされる
  • Entityは、スマートコントラクトやシステムコントラクトのような呼び出し側のエンティティである。u8タグの1とそれに続くpackage_hashentity_hashとしてシリアライズされる

CallStackElement

CallStackElementは、Casper 2.0リリース以前に作成されたレガシー列挙型で、コールスタック内のサブコールの起点を表す。u8タグで始まり、以下のように呼び出し元のタイプを記述する:

ChainNameDigest

チェーン名の暗号化ハッシュで、ハッシュ自体のバイト表現としてシリアライズされます。

ChainspecRegistry

ChainspecRegistryは、ファイル名とファイル自体のハッシュとのマッピングを含む一意のキーの変数です。このマップはChainspec.tomlを含み、Accounts.tomlGlobalState.tomlを含むことがあります。このマップは BTreeMap としてシリアライズされ、最初の 4 バイトは文字列とダイジェスト(digest)として保持される名前の数を表すu32値を表します。残りの部分は、直列化された文字列と最初の4バイトで指定された長さのダイジェストの繰り返しパターンで構成されます。

  • chainspec_raw_hashは常に含まれる
  • genesis_accounts_raw_hashは、特定の状況において含まれることがある
  • global_state_raw_hashは、特定の状況において含まれることがある

ChecksumRegistry

チェックサムレジストリ。BTreeMapとしてシリアライズされ、最初の4バイトはチェックサム名の文字列とダイジェストの数を表すu32値を表します。残りの部分は、シリアライズされた文字列の繰り返しパターンと最初の4バイトで指定された長さのダイジェストで構成されます。

ContractRuntimeTag

コントラクトのランタイムタグのタグであり、VmCasperV1では0、VmCasperV2では1のu8タグとしてシリアライズされます。

Delegator

バリデータ(または “デリゲート”)にステークを委任する当事者を表す。構造は以下フィールドから成り立っています:

  • delegator_public_key:PublicKeyとしてシリアライズされるデリゲータの公開鍵
  • staked_amount: U512値としてシリアライズされる委任者が賭けた金額
  • bonding_purse:URef型の値としてシリアライズされる委任に関連付けられたボンディング財布
  • validator_public_key:PublicKeyとしてシリアライズされるバリデータの公開鍵
  • vesting_schedule:指定したデリゲータの入札の権利確定スケジュール。非ジェネシスのバリデータの場合はNone(指定なし)でありOptionとしてシリアライズされる

Digest

blake2bハッシュダイジェストです。ダイジェストはハッシュのバイト表現としてシリアライズされる。

DisabledVersions

無効になったコントラクトのバージョン以下を含む:

  • contract_version:u32値としてシリアライズされるプロトコルのメジャーバージョン内のコントラクトのバージョン
  • protocol_version_major:u32値としてシリアライズされるこのコントラクトが対応しているプロトコルのメジャーバージョン

Effects

transformのベクトルとしてシリアライズされ、実行中に生成されたすべてのトランスフォームのログ。

Entity Action Thresholds

特定のタイプのアクションを実行するときに必要な重みの最小閾値です。以下のように連続した3つのu8値としてシリアライズされます。

  • deployment:デプロイメントアクションを実行するために必要な重みの最小閾値をu8値で表したもの
  • upgrade_management:アップグレード管理アクションを実行するために必要な重みの最小閾値をu8値で表したもの
  • key_management:鍵管理アクションを実行するために必要な重みの最小閾値をu8値で表したもの

EntityAddr

AddressableEntityのアドレス。u8 EntityKindTagに続き、以下のようにhash_addrのバイトを含む32バイトのバッファとしてシリアライズされる:

  • System:u8の0としてシリアライズされその後にhash_addrが続くhash_addrが続くネイティブコントラクトの実装に関連付けられたパッケージ
  • Account:u8の1としてシリアライズされその後にhash_addrが続くAccountハッシュに関連付けられているパッケージ
  • SmartContract:u8の2としてシリアライズされその後にhash_addrが続くチェーン上に保存されたWasmに関連付けられたパッケージ

EntityKind

タイプを記述するu8 EntityKindTagとしてシリアライズされ、さらに以下のようなデータが続くPackageのタイプです:

  • System:ネイティブ・コントラクト実装に関連付けられたパッケージ。u8の0に SystemEntityTypeが続く形でシリアライズされる
  • Account:Accountハッシュに関連付けられたパッケージ。u8の1にaccount_hashが続く形でシリアライズされる
  • SmartContract:u8の2にcontract runtime tagが続く形でシリアライズされ、チェーン上に保存されたWasmに関連付けられたパッケージ

EntityKindTag

Systemは0、Accountは1、SmartContractは2のu8タグとしてシリアライズされるEntityKindの変数タグです。

EntityVersionKey

u32値としてシリアライズされるProtocolVersionとEntityVersionを組み合わせた主な要素です。

EntityVersions

最初の4バイトがAddressableEntityHashesにマッピングされたEntityVersionKeysの数を示す u32値のBTreeMapとしてシリアライズされたエンティティバージョンのコレクションです。残りの部分は、シリアライズされた最初の4バイトで指定された長さであるEntityVersionKeyとAddressableEntityHashの繰り返しパターンで構成されています。

EntryPoint (Contract)

署名方法の型です。名前だけでなくインデックスでも参照できるため引数の順序は重要です。

  • name:Stringとしてシリアライズされたエントリーポイントの名前
  • args:このメソッドの引数。エントリーポイントに渡される引数を表す各パラメータであるParameterのリストとしてシリアライズされる
  • ret:Unitとしてシリアライズされるメソッドの戻り値の型
  • access:コントラクトエントリーポイントで可能なアクセス制御オプションを記述した列挙型。u8の値 1 (public) または 2 (authorized usersのList) でシリアライズされる
  • entry_point_type:エントリーポイントのタイプを識別する。Sessionの場合は0、Contractの場合は1でシリアライズされる

EntryPoint (Entity)

メソッドの型シグネチャ。構造は以下フィールドにて成り立っています:

  • name:Stringとしてシリアライズされたエントリーポイントの名前
  • args: このメソッドの引数。エントリーポイントに渡される引数を表す各パラメータであるParameterのリストとしてシリアライズされる
  • ret:Unitとしてシリアライズされるメソッドの戻り値の型
  • access:コントラクトエントリーポイントで可能なアクセス制御オプションを記述した列挙型。u8の値 1 (public) または 2 (authorized usersのList) でシリアライズされる
  • entry_point_type
  • entry_point_payment

EntryPointAddr

エントリーポイントのアドレス。以下の2種類のいずれかでシリアライズされる:

  • VmCasperV1:V1エントリーポイント。u8の0の後にEntityAddrとname_bytes (エントリーポイント名の32バイトハッシュ) が続く形でシリアライズされる
  • VmCasperV2:V2 のエントリーポイント。u8の1の後にEntityAddr、Selector(u32)の順にシリアライズされる

EntrypointPayment

エントリーポイントの呼び出しと実行の代金を誰が支払うかを指定する列挙型。1つのu8バイトタグとして以下のようにシリアライズされる:

  • Caller:0としてシリアライズされ、呼び出し元がコストを負担しなければならないことを示す
  • DirectInvocationOnly:1としてシリアライズされ、そのコントラクトが自分自身を実行するためのコストは支払うがそれ以降のコントラクトの呼び出しの実行コストは支払わないことを示す
  • SelfOnward:2としてシリアライズされ、コントラクトが自分自身とそれ以降のコントラクトの呼び出しの実行コストを支払うことを示す

EntrypointType

メソッド実行のコンテキスト。以下のいずれかとしてシリアライズされます:

  • Caller:単一のu8, 0b00000000としてシリアライズされます
  • DirectInvocationOnly:単一のu8, 0b00000001としてシリアライズされます
  • SelfOnward:単一のu8, 0b10000000としてシリアライズされます

EntrypointV2

V2 Casper VMのエントリーポイント。セレクタを表すu32にフラグを表すu32が続く形でシリアライズされます。

EntryPoints

指定されたエンティティのエントリーポイントであり、最初の4バイトはString to EntryPointsの数を表すu32値を表すBTreeMapとしてシリアライズされます。残りの部分は、直列化されたStringと最初の4バイトで指定された長さのEntryPointsの繰り返しパターンで構成されます。

EraID

Era IDのnewtype。単一のu64値としてシリアライズされます。

EraInfo

各eraに記録されるオークションのメタデータ。これはseigniorage allocations(シニョリッジの割当)のListとしてシリアライズされます。

ExecutableDeployItem

u8の識別タグとそれに続く以下の追加バイトとしてシリアライズされるDeployの実行可能コンポーネントです:

  • ModuleBytes:u8タグ0とそれに続くバイト数およびruntimeargsとしてシリアライズされます
  • StoredContractByHash:AddressableEntityHashとしてのコントラクトハッシュ、エントリーポイント名のStringruntimeargsが続く形でu8タグの1にシリアライズされます
  • StoredContractByName:2のu8タグとしてシリアライズし、その後に名前付き鍵を String、エントリー・ポイント名をString、runtimeargsを指定します
  • StoredVersionedContractByHash:3のu8タグにPackageHashOptionとしてバージョン、エントリーポイントにStringruntimeargsを指定してシリアライズします
  • StoredVersionedContractByName:名前付き鍵にString、バージョンにOption、エントリポイント名にStringruntimeargsを指定し4のu8タグにシリアライズされます
  • Transfer:5のu8タグとruntimeargsでシリアライズされます

ExecutionEffect

シングルデプロイによる実行変換のジャーナル。

  • operations:操作Listとしてシリアライズされるオペレーション結果
  • transforms:deployの実行中に実行された実際のトランスフォーム

ExecutionResultV1

1回のデプロイの結果。Failureを0、Successを1として示すu8タグとしてシリアライズされます。以下の適切な構造に従っています:

Failure(実行に失敗した結果)

  • effect:デプロイの実行effect(効果)
  • transfers:deploy実行中に処理された転送の記録。Listとしてシリアライズされます
  • cost:U512値としてシリアライズされるデプロイ実行コスト
  • error_message:文字列としてシリアライズされる実行したデプロイに関連するエラーメッセージ

Success(実行に成功した結果)

  • effect:デプロイの実行effect(効果)
  • transfers:deploy実行中に処理された転送の記録。Listとしてシリアライズされます
  • cost:U512値としてシリアライズされるデプロイ実行コスト

ExecutionResultV2

単一トランザクションの結果。Failureを0、Successを1として示すu8タグとしてシリアライズされます。以下の適切な構造に従っています:

Failure(実行に失敗した結果)

  • effects:トランザクションの実行effect(効果)
  • transfers:Listとしてシリアライズされるトランザクション実行中に処理された転送の記録
  • cost:U512値としてシリアライズされるトランザクション実行コスト
  • error_message:文字列としてシリアライズされる実行したトランザクションに関連するエラーメッセージ

Success(実行に成功した結果)

  • effects:トランザクションの実行effect(効果)
  • transfers:Listとしてシリアライズされるトランザクション実行中に処理された転送の記録
  • cost:U512値としてシリアライズされるトランザクション実行コスト

Gas

Gas構造体はU512のガス量としてシリアライズされます。

Group

「ユーザーグループ」とラベルされています。バージョン管理されたコントラクトの各メソッドは、そのメソッドの呼び出しを許可された1つ以上のユーザーグループと関連付けることができます。ユーザーグループはStringとしてシリアライズされます。

Groups

最初の4バイトはユーザーグループの数を表すu32値と、その中に保持されるURefのBTreeSetsを表すBTreeMapとしてシリアライズされます。残りの部分は、シリアル化されたユーザーグループと最初の4バイトで指定された長さのBTreeSetsの繰り返しパターンで構成されます。

Keys

Global Stateにおけるkeyは以下のデータ型の何れかとなります:

  • 32バイトのアカウント識別子 (呼称:”account identity key”)
  • 32バイトのイミュータブルなコントラクトの識別子 (呼称:”hash key”)
  • 32バイトの参照識別子 (呼称:”unforgeable reference”)
  • 32バイトのtransfer(転送)識別子
  • 32バイトのデプロイ情報識別子
  • 32バイトの残高識別子
  • 32バイトのオークションビッド(入札)識別子
  • 32バイトのオークション出金識別子
  • 32バイトの辞書(Dictionary)識別子
  • 32バイトのシステムコントラクトの登録
  • 32バイトのオークションアンボンド識別子
  • 32バイトのChainspec登録

ここで注意すべき1つの例外は、EraInfoの識別子であり実際にはu64値としてシリアライズされタグ用に1バイトが追加されるということです。

Account Identity Key

このキー(鍵)の型は、グローバル・ステートのアカウント専用に使用されます。システム内のすべてのアカウントは、アカウント識別キーの元に格納されなければなりません。この鍵を表す32バイトの識別子は、関連するアカウントの作成に使われた公開鍵のblake2b256ハッシュから派生したものです(詳細はアカウントを参照)。

Hash Key

このキー(鍵)の型は、コントラクトを永久に保存するために使われます。一旦ハッシュキーにコントラクトが書き込まれると、そのコントラクトが変更されることはありません。このキーを表す32バイトの識別子は、deployハッシュのblake2b256ハッシュ(詳細はblock-structure-headを参照)に4バイトのシーケンシャルIDを連結したものである。IDはデプロイごとに0から始まり、コントラクトが格納されるたびに1ずつ増加します。このIDの目的は、同じデプロイに格納された各コントラクトが一意のキーを持つようにすることです。

Unforgeable Reference (URef)

大まかに言うと、URefは値の格納やURefに格納された値と対話するためのパーミッションの管理に使用できます。URefは、値が格納されているアドレスと、URefへのアクセス権を含むタプルです。URefの管理方法の詳細については、「Unforgeable Reference」のセクションを参照してください。

Transfer Key

このキータイプは、グローバル・ステートでのtransfer(転送)にのみ使用されます。システム内のすべての転送は、転送キーに格納されなければならず他のタイプでは格納されません。このキーを表す32バイトの識別子は、指定された転送に関連付けられた転送アドレスのblake2b256ハッシュから派生します。

DeployInfo Key

このキータイプは、特にグローバル・ステートのデプロイに関連する情報を格納するために使用されます。与えられたデプロイ情報はこのキーにのみ格納されます。このキーを表す32バイトの識別子はデプロイ自体のblake2b256ハッシュから派生します。

EraInfo Key

このキータイプは、特に特定のeraのAuctionメタデータに関連する情報を格納するために使用されます。このキーに格納されるデータ型は、指定されたeraのシニョリッジの割当てのベクトルです。このキーの識別子は、プリミティブなu64データ型をラップした新しい型でありオークション情報が格納されたeraの番号に関連します。

このキータイプは、特にグローバル・ステートのオークション入札の関連情報の格納に使用され入札情報はこのキーにのみ格納されます。このキーを表す32バイトの識別子は、関連するアカウントの作成に使用された公開鍵のblake2b256ハッシュから派生したものです(詳細はアカウントを参照)。

このキータイプは、特にグローバル・ステートにおけるオークションの出金に関連する情報の格納に使用され出金情報はこの鍵にのみ保存されます。この鍵を表す32バイトの識別子は、関連するアカウントの作成に使用された公開鍵のblake2b256ハッシュから派生したものです(詳細はアカウントを参照)。

キーのシリアライゼーション

キーのデータ型にはさまざまな種類があり、それぞれ異なるシリアライズが行われます。この章では、各変数がどのようにシリアライズされるかを詳しく説明します。シリアライズされたバッファの先頭のバイトは、シリアライズされたvariant(変数)を示すタグとして動作します。

KeySerialization Tag
Account0
Hash1
URef2
Transfer3
DeployInfo4
EraInfo5
Balance6
Bid7
Withdraw8
Dictionary9
SystemContractRegistry10
EraSummary11
Unbond12
ChainspecRegistry13
ChecksumRegistry14
BidAddr15

Package | 16 | | AddressableEntity | 17 | | ByteCode | 18 | | Message | 19 |

  • Account は、基礎となるAccountHashのバイト表現を含む32バイト長のバッファとしてシリアライズされます
  • Hash は、基礎となるHash自体のバイト表現を含む32バイト長のバッファとしてシリアライズされます
  • URef は、URefのアドレスとそのURefへのアクセス権を含むタプルです。URefのシリアライズされた表現は33バイト長です。最初の32バイトはURefアドレスのバイト表現であり、最後のバイトはURefのアクセス権に対応するビットを含んでいます。AccessRightsのシリアライズ方法については、この章のCLValueセクションを参照してください
  • Transfer は、転送のハッシュのバイト表現を含む32バイト長のバッファとしてシリアライズされます
  • DeployInfo は、Deployハッシュのバイト表現を含む32バイト長のバッファとしてシリアライズされます。Deployハッシュのシリアライズ方法については、上記のDeploy のセクションを参照してください
  • EraInfoは、u64のリトルエンディアン・バイト表現を含むu64プリミティブ型をシリアライズします
  • Balance は、URefアドレスのバイト表現を含む32バイトのロングバッファとしてシリアライズされます
  • BidとWithdrawはどちらも識別子としてAccountHashを含むため、Accountのバリアントと同じ方法でシリアライズされます
  • Dictionaryは、辞書項目の識別名をハッシュ化したシードURefのバイト表現を含む32バイト長のバッファとしてシリアライズされます
  • SystemContractRegistry は、ゼロの32バイト長のバッファとしてシリアライズされます
  • EraSummary は 32バイト長のゼロのバッファとしてシリアライズされる
  • Unbond は識別子としてAccountHashを含むため、Accountのバリアントと同じ方法でシリアライズされます
  • ChainspecRegistry は、32バイト長の1のバッファとしてシリアライズされます
  • ChecksumRegistry は、32バイト長のゼロのバッファとしてシリアライズされます
  • BidAddr は3種類のうちの1つである:
    • Unified は、タグ0の後にレガシービッドのバイト表現を含む32バイト長のバッファが続くものとしてシリアライズされる
    • Validator は、タグ1とその後にバリデータのハッシュをバイト単位で格納した32バイト長のバッファを持つものとしてシリアライズされる
    • Delegator はタグ2の後に関連するバリデータのハッシュを格納した32バイト長のバッファと指定されたデリゲータのハッシュを格納した32バイト長のバッファを付加してシリアライズされる

Permissions

値に対して実行できるアクションには、read、write、addの3種類があります。addがwriteとは別に呼び出されるのは、可換性をチェックするためです。利用可能なアクションは、キータイプとコンテキストに依存します。あるキータイプは、コントラクトAPIを介してスマート・コントラクトによる制御されたアクセスのみを許可し、他のキータイプはシステム自体によって生成され使用される値を参照し、スマート・コントラクトには全くアクセスできないが、オフチェーン・クエリによって読み取ることができます。以下の表にまとめています:

KeyType Available Actions
AccountRead + Add (via API)
HashRead
URefRead + Write and/or Add
TransferSystem
DeploySystem
EraInfoSystem
BalanceRead (via API)
BidSystem
WithdrawSystem
DictionaryRead (via API)
SystemContractRegistryRead (via API)
UnbondSystem
ChainspecRegistryRead (via API)

URefの場合のパーミッション管理方法については、URef permissionsをご参照くださいませ。

MessageTopics

コントラクトレベルのメッセージのトピック。BTreeMapとして最初の4バイトはu32値でシリアライズされ、その中に含まれるtopic_name文字列とtopic_name_hashの数を表します。残りの部分は、最初の4バイトで指定された長さの、シリアライズされたtopic_nameと topic_name_hashの繰り返しパターンで構成されます。

MessageTopicSummary

グローバル・ステートに格納されるメッセージ・トピックの概要。message_countのu32値の後にBlockTimeが続くものとしてシリアライズされます。

Motes

U512値としてシリアライズされたMotesの数を表す構造体です。

NamedArg

コントラクトの名前付き引数。Stringと関連するCLValueの組み合わせでシリアライズされます。

NamedKey

Casper Key型への文字列識別子のマッピング。BTreeMapとしてシリアライズされ、最初の4 バイトが名前付き鍵と値の数を表すu32値を表します。

  • name:エントリの名前。文字列としてシリアライズされる
  • key:エントリーの値で、Casper Key型である

アカウント構造の名前付きキーの部分は、ここで説明するように文字列から Casper Key 値へのマッピングとしてシリアライズされます。

NamedKeyAddr

EntityAddrとしてシリアライズされたNamedKeyアドレスの後に、文字列の長さを表すu8と文字列自体の32バイト表現が続きます。

NamedKeyValue

NamedKey値。CLValueとしてシリアライズされたnamed_keyの後に、同じくCLValueとしてシリアライズされたキーの名前が続きます。

NamedKeys

名前付きキーのコレクション。BTreeMapとしてシリアライズされ、最初の4バイトは名前とキーの数を表すu32値です。残りの部分は、最初の 4 バイトで指定された長さの名前とキーの繰り返しパターンで構成されます。

Operation

デプロイの実行中に行われる操作。以下を含む:

  • key:Stringとしてシリアライズされたフォーマットされたキーの文字列
  • kind: OpKind、実行された操作のタイプ。以下の表に基づきシングルバイトとしてシリアライズされる:
OpKindSerialization
Read0
Write1
Add2
NoOp3

Package

エンティティ、メタデータ、セキュリティ・コンテナを定義する構造体。この構造体は以下のフィールドで構成される:

PackageHash

AddressableEntityに関連付けられたパッケージの16進数にエンコードされたアドレスで、それ自身のバイト表現としてシリアライズされます。

PackageStatus

パッケージのロック状態。trueはロックされたパッケージを表し、falseはアンロックされたパッケージを表すbooleanとしてシリアライズされます。

Parameter

名前の後にCLTypeが続く構造になっているメソッドへのパラメータです。これは、CLTypeが続くStringとしてシリアライズされます。

ProtocolVersion

Casperプラットフォームのプロトコルバージョンを示すnewtypeです。各バージョン、メジャー、マイナー、パッチを順に示す3つのu32値としてシリアライズされます。

PublicKey

アルゴリズム・タグの接頭辞を含む、16進数にエンコードされた暗号化公開鍵。PublicKeyにてシリアライゼーションを確認できます。

RewardedSignatures

特定の過去のブロックに対する最終署名の識別子のリスト。これは、単一の先祖ブロックに対する署名を記述するSingleBlockRewardedSignaturesのベクトルとしてシリアライズされます。最初のエントリは親ブロックのシグネチャを表し、2番目は親の親のシグネチャを表す 等。

RuntimeArgs

スマートコントラクトに渡される引数のコレクションを表します。タプルで構成されるListとしてシリアライズされます。

SeigniorageAllocation

シニョリッジ割り当てに関する情報。

その通貨割り当てがバリデータのものである場合は、バリデータのPublicKeyの後にU512の金額が続く形でシリアライズされます。

デリゲータの場合は、デリゲータのPublicKeyとバリデータのPublicKey、そしてU512の順にシリアライズされます。

SemVer

メジャーバージョンとマイナーバージョン、そしてパッチバージョンを表す3つのu32としてシリアライズされるセマンティックバージョンの構造体です。

Signature

signature(署名)は暗号プリミティブ署名のバイト表現をシリアライズします。シグネチャの最初のバイトは、Ed25519シグネチャの場合は1、Secp256k1の場合は2となります。

Stored Values

グローバル・ステートに格納される値はStoredValueです。StoredValueは、以下の3種類のうちの1つの変数となります:

CLValueとcontractについては後述します。アカウントについての詳細はaccounts-headにてご確認いただけます。

各StoredValueは、グローバル・ステートに書き込まれる際にシリアライズされます。シリアライズのフォーマットは、StoredValueのどの変数であるかを示すシングルバイトのタグと変数のシリアライズからなります。各変数のタグは以下の通りです:

  • CLValue is 0
  • Account is 1
  • Contract is 2

CLTypeのシリアライゼーションの詳細は以下のセクションにあります。CLValueのシリアライゼーション・フォーマットをベースにし、contractとaccountのシリアライゼーション・ルールを簡潔に書くことができます:

  • contract は、CLTypeがTuple3(List(U8), Map(String, Key), Tuple3(U32, U32, U32))に等しいデータと同じようにシリアライズされる
  • account は、CLTypeがTuple5(ByteArray(U8, 32), Map(String, Key), URef, Map(ByteArray(U8, 32), U8), Tuple2(U8, U8))に等しいデータと同じようにシリアライズされる

注:Tuple5は現在サポートされているCLTypeではないが、タプル1、タプル2、タプル3の場合ジェネラライズ方法はどのサイズのタプルでもルールは明確です。

SystemContractRegistry

SystemContractRegistryは、システムコントラクトの名前とContractHashのマッピングを行う一意のキーです。これには、Mint、Auction、HandlePaymentそしてStandardPayment が含まれます。これはBTreeMapとしてシリアライズされ、最初の4バイトは文字列としての名前とその中に保持されるContractHashesの数を表すu32値を表します。残りの部分は、シリアライズされた文字列と、最初の4バイトで指定された長さのContractHashの繰り返しパターンで構成されます。

SystemEntityType

以下の表に従って、コントラクトを識別する単一のu8タグとしてシリアライズされるシステムコントラクトのエンティティタイプ:

TagSystem Contract
0Mint
1HandlePayment
2StandardPayment
3Auction

TimeDiff

シングル u64値としてシリアライズされる人間が読み取り可能な2つのタイムスタンプの間隔

Timestamp

単一のu64値にシリアライズされRFC 3339に従ってフォーマット化されたタイムスタンプ

TopicNameHash

トピック名のblake2bハッシュ。トピック名のハッシュバイトを持つ32バイトバッファにシリアライズされるトピック名のハッシュ

TransferAddr

それ自体のバイト表現にシリアライズされる16進数にエンコードされたtransfer(転送)アドレス

TransformKindV1

デプロイ実行時に実行される実際の変換。以下の表に従って、実行されたトランスフォームのタイプを示す単一のu8値としてシリアライズされます。残りのバイトは、記載されている情報とシリアライズを表します。

Transform TypeSerializationDescription
Identity0影響のない変換
Write_CLValue1与えられたCLValueをグローバルステートへ書き込みます
Write_Account2与えられたAccountをグローバルステートへ書き込みます
Write_Contract_WASM3スマートコントラクトのWasmをグローバルステートへ書き込みます
Write_Contract4スマートコントラクトをグローバルステートへ書き込みます
Write_Contract_Package5contract packageをグローバルステートへ書き込みます
Write_Deploy_Info6与えられたDeployInfoをグローバルステートへ書き込みます
Write_Transfer7与えられたTransferをグローバルステートへ書き込みます
Write_Era_Info8与えられたEraInfoをグローバルステートへ書き込みます
Write_Bid9与えられたBidをグローバルステートへ書き込みます
Write_Withdraw10与えられたWithdrawをグローバルステートへ書き込みます
Add_INT3211与えられたi32の追加
Add_UINT6412与えられたu64の追加
Add_UINT12813与えられたU128の追加
Add_UINT25614与えられたU256の追加
Add_UINT51215与えられたU512の追加
Add_Keys16与えられた名前付き鍵のコレクションの追加
Failure17エラーメッセージを含む失敗した変換

TransformKindV2

デプロイ実行時に実行される実際の変換。以下の表に従って、実行されたトランスフォームのタイプを示す単一のu8値としてシリアライズされます。残りのバイトは、記載されている情報とシリアライズを表します。

Transform TypeSerializationDescription
Identity0グローバルステートから読み取った結果として作成され影響のない変換
Write1グローバルステートに新しい値を書き込みます
AddInt322与えられたi32の追加
AddUInt643与えられたu64の追加
AddUInt1284与えられたU128の追加
AddUInt2565与えられたU256の追加
AddUInt5126与えられたU512の追加
AddKeys7与えられた名前付き鍵のコレクションの追加
Failure8エラーメッセージを含む失敗した変換
Prune9指定されたキーのグローバルステートエントリへのパスを削除します。刈り込まれた要素は、以前に生成されたグローバルステートのルート・ハッシュから到達可能なままですが、次に生成されるグローバルステートのルート・ハッシュとそれ以降の状態には含まれません。

TransformEntry

デプロイ実行中に実行された変換

TransformV1

A legacy transform struct serialized as a String of the key followed by the transformkindv1.

Transformv2

実行されたトランスフォームを表す構造体で、キーの後にtransformkindv2が続くStringとしてシリアライズされます。

UnbondingPurse

アンボンディングに使用する財布(パース)。以下によって成り立っている構造体です:

  • bonding_purse:URefとしてシリアライズされるボンディングパース
  • validator_public_key:PublicKeyとしてシリアライズされるバリデータの公開鍵
  • unbonder_public_key:PublicKeyとしてシリアライズされるボンドしていない公開鍵
  • era_of_creation:EraIdのnewtypeとしてu64値にシリアライズされる対象のアンボンドリクエストが作成されたEra
  • amount:U512値としてシリアライズされるアンボンドする合計値
  • new_validator:公開鍵を含むOptionとしてシリアライズされる再度デリゲートされるバリデータの公開鍵

ValidatorBid

バリデータマップのエントリ。この構造体は以下のフィールドで構成される:

  • validator_public_key:PublicKeyとしてシリアライズされデリゲータがデリゲートするバリデータの公開鍵
  • bonding_purse:URef型の値としてシリアライズされるデリゲーション(委任)に紐づいたボンディングパース
  • staked_amount:U512値としてシリアライズされるデリゲータ(委任者)がステークしいる合計
  • delegation_rate:u8値としてシリアライズされるデリゲート(委任)レート
  • vesting_schedule:Optionでシリアライズされる提供されたデリゲータービッドの権利確定スケジュール。非ジェネシスのバリデータである場合はNone(指定なし)となります。
  • inactive:booleanでシリアライズバリデータの無効状態

ValidatorChange

以下の通りu8としてシリアライズされる2つのera間におけるバリデータの状態変化:

TagChange
0Added
1Removed
2Banned
3Cannot Propose
4Seen as Faulty

ValidatorConfig

bonded_amountにシリアライズされu8としてdelegation_rateが後続するバリデータアカウントの設定

ValidatorCredit

バリデータクレジットの記録を表記する以下フィールドを持つ構造体:

WithdrawPurse

1.5にてUnbondingPurseに置き換えられた案ボンディングに使用されたお財布(パース)。1.5以前のWithdrawPursesはUnbondingPursesとされており現在は履歴データで構成されています。

  • bonding_purseURefとしてシリアライズされたボンディングパース
  • validator_public_key: PublicKeyとしてシリアライズされたバリデータの公開鍵
  • unbonder_public_keyPublicKeyとしてシリアライズされた、アンボンダーの公開鍵
  • era_of_creationEraId newtypeとしてu64値にシリアライズされたこのアンボンディングリクエストが作成されたEra
  • amountU512値にシリアライズされたアンボンディング合計値