Qubicスマートコントラクトを書くための非公式ガイド
この非公式ガイドは、Qubicスマートコントラクトの開発に関する概要を提供し、主な機能、メモリ割り当て、および堅牢で効率的なデプロイメントを保証するためのテスト手順を詳述しています。
Qsilver · 2024年6月27日
はじめに
Qubicスマートコントラクト(SC)を書くための非公式ガイドへようこそ。このガイドは、Qubicエコシステム内でスマートコントラクトを開発および実装する方法を、QPIのコアドキュメントから学びつつ、明確かつ簡潔に示すことを目的としています。
Qubicスマートコントラクトの概要
現在、SCを書くための主なドキュメントはGitHub上のQPIファイルです。QPIはQubicプログラミングインターフェースを意味し、API(アプリケーションプログラミングインターフェース)に類似していますが、Qubicに特化しています。
QPIファイルには以下が含まれます:
- 禁止文字: 乗算や除算演算子、プリプロセッサディレクティブは使用不可。
- コアコード構造:
- 5000行のコード: 単一ビットから数百万の要素を持つ配列まで、すべてのタイプの変数サイズを定義。
- 1000行のコード: 効率的なデータ処理のためのさまざまなキューと関連データタイプを管理。
- 最後の数百行: Qubicネットワークの状態へのアクセスを可能に。
QPIの主要機能
以下は、QPIで提供される重要な機能の一部です:
id arbitrator() const;
id computor(uint16 computorIndex) const; // [0..675]
uint8 day() const; // [1..31]
uint8 dayOfWeek() const; // [0..6]
uint16 epoch() const; // [0..9'999]
bit getEntity() const; // エンティティが見つかった場合は “true” を返し、そうでない場合は “false” を返します
uint8 hour() const; // [0..23]
sint64 invocationReward() const;
id invocator() const; // このコントラクトをトリガーしたユーザー/コントラクトのIDを返します。無い場合はNULL_IDを返します
template <typename T> id K12(const T& data) const;
uint16 millisecond() const; // [0..999]
uint8 minute() const; // [0..59]
uint8 month() const; // [1..12]
id nextId(const id& currentId) const;
sint64 numberOfPossessedShares() const;
id originator() const; // すべての呼び出しチェーンをトリガーしたユーザーのIDを返します。無い場合はNULL_IDを返します
uint8 second() const; // [0..59]
bit signatureValidity() const;
uint32 tick() const; // [0..999'999'999]
uint8 year() const; // [0..99] (0 = 2000, 1 = 2001, …, 99 = 2099)
これは何を意味するのでしょうか?
Qubicスマートコントラクトはチューリング完全であり、ほぼすべての計算ロジックを実装できます。ただし、特定の制限により、SCは高度に区分化された安全な環境で実行されます。
メモリ割り当て
SCは、すべてのメモリを事前に割り当てる必要がある静的メモリ割り当てモデルを使用します。この設計は、1GBのRAM制限内でデータ構造を効率的に管理するために重要です。この制限は将来倍増する予定ですが、固定割り当てのままであるため、メモリ使用量の慎重な計画が必要です。
ライブラリの使用
現在、外部ライブラリをSCで使用することはできません。必要なコードはすべてソースに直接含める必要があります。時間が経つにつれて、さまざまなライブラリを組み込んだSCが増えると、これらは他のSC内で公に使用可能になるかもしれません。
トランザクションとRCFネットワークメッセージ
各SCには公開鍵から派生したユニークなアドレスがあり、契約IDは最下位の64ビットです。SCはこのアドレスに送られたトランザクションによって呼び出され、inputData
が操作を指定します。さらに、SCの状態はRCFネットワークメッセージを使用してクエリできます。
例: エアドロップSC
エアドロップSCは、データセットを通じて反復し、1つのSCトランザクションあたり1ティックで各アドレスにQUまたはトークンを配布することができます。現在の制限はティックあたり1024トランザクションであり、これにより最大5億の転送がティックあたりで可能になります。実際のスループットはSCの複雑さによります。
SCのテスト方法
- SCを開発する: スマートコントラクトコードを記述し、デバッグします。
- qubic-cliを更新する: SCトランザクションとRCF機能が統合されていることを確認します。
- テストネットコアの更新を作成する: SCをテストネット環境に統合します。
- テストを実行する: qubic-cliを使用してテストネットノードをクエリし、SCのパフォーマンスを検証します。
- ストレステスト: 安定性を確保するために負荷テストと自動テストを実行します。
- 承認のために提出する: デバッグが完了したら、SCをクオーラム承認のために提出し、その後IPOに進みます。
これらのステップに従うことで、スマートコントラクトが堅牢で効率的であり、Qubicネットワークにデプロイする準備が整っていることを確認できます。コーディングをお楽しみください!
Qsilverの「非公式」シリーズを読む
最新の情報については、Valis Discordに参加し、Xでフォローし、私たちのブログをブックマークしてください。