- Developers(開発者ガイド)概要
- 開発の事前準備
- 必須となるRust Crate(クレート)
- Writing On-Chain Code
- Getting Started with Rust
- Getting Started with AssemblyScript
- 基本的なスマートコントラクトをRustで書く方法
- スマートコントラクトのテスト
- スマートコントラクトのアップグレードとメンテナンス
- スマートコントラクトの呼び出し
- コントラクトとセッションコード
- セッションコードの書き方
- セッションコードのテスト
- コントラクトによるイベント発行を有効に
- コントラクトハッシュとパッケージハッシュの使い分け
- Casperスマートコントラクトのベストプラクティス
- Casper JSON-RPC API
- DAppsのビルド
- SDKクライアントライブラリ
- dApp Technology Stack
- ReactのFront-endテンプレート
- URefのアクセス権限とセキュリティへの考慮
- トランザクションへの署名
- スペキュラティブ(推測的)実行によるガス・コストの見積もり
- NCTLを使ったローカルネットワーク設定
- NCTLを使ったスマートコントラクトのテスト
- イベントの監視と消費
- CLIを使ったBlockchainとのやり取り
トランザクションへの署名
Casperネットワーク上にて実行するトランザクション(Transaction)を作成する際、アカウントオーナーもしくは正確には権限を持った署名者がアカウントの暗号鍵のペア(key-pair)にてトランザクションに署名しなくてはいけません。鍵ペアは、アカウントの秘密鍵と公開鍵の組み合わせとなっています。トランザクションへの署名は、そのトランザクションが実行対象であることをネットワークにて確認できる状態にします。
トランザクションが署名されると、署名者の公開鍵と紐づけられApproval(承認)とみなされます。有効な各トランザクションは、少なくとも1つの承認を得ています。
署名作成の過程は、ペイメントのハッシュとBodyHashを生成するトランザクションのセッションにて開始されます。BodyHashは、シリアライゼーション規格に記述しているようにTransactionV1Headerのコンポーネントとなります。それ以降は、TransactionV1Headerはハッシュされ、TransactionV1Hashを生成できるようになります。上述のとおり、TransactionV1Hashはアカウントの鍵ペアと結合されトランザクションの署名を生成します。
TransactionV1Hashにはトランザクションのボディ内のハッシュを含んでいるため、トランザクションや送信アカウントのキーに何らかの変更があった場合、TransactionV1Hashは無効となります。
公開鍵の暗号化
Casperネットワークは、Ed25519とsecp256k1両方の公開鍵暗号化と互換性をもっています。シリアル化の際に公開鍵と署名にはシングルバイトの接頭辞がつき、アルゴリズムを表示するタグとして使用されます。Ed25519の公開鍵の場合は接頭辞1が付き、secp256k1の場合は、接頭辞が2になります。
Casperはシリアライゼーション内ではblake2bのハッシュを使用しています。ただ、このハッシュの値は署名を行う際に再度ハッシュ化されます。ハッシュの型は、以下に記載しているように紐づいた鍵ペアのアルゴリズムによります。
・Ed25519の署名は、 SHA-512ダイジェスト認証を使用
・secp256k1の署名は、SHA-256ダイジェスト認証を使用