メインコンテンツへ移動
AIチュートリアル

Stellar TradeのSorobanコントラクトを構築・テスト・理解する

Stellar TradeのSorobanコントラクトが、予測市場のポジション、配当、払い戻し、紹介、報酬、ガバナンスをどのように管理するかを学びます。このチュートリアルでは、ワークスペースの構成、ローカル検証、市場のライフサイクル、安全性チェック、デプロイ時の注意点を解説します。

Stellar TradeのSorobanコントラクトを構築・テスト・理解する

はじめに

Stellar Trade Contractsは、Stellar上に構築されたオープンソースの予測市場プロトタイプであるStellar Trade向けのSorobanコントラクトワークスペースです。これらのコントラクトは、XLMがマーケットプールに入る仕組み、参加者がポジションを減らす方法、解決またはキャンセルされた市場で配当金と返金を分配する方法を管理します。

このリポジトリは、アプリケーションを支えるコントラクトの構築、テスト、レビュー、デプロイを行う開発者向けに設計されています。市場コントラクトに加えて、トークン、紹介、ランキング、統合テスト用のクレートも含まれています。

ワークスペースを理解する

リポジトリは、役割を明確に分担する5つの主要なクレートで構成されています。

  • prediction_market:市場の作成、ポジションの受付、ポジションの削減、解決者の操作、比例配当の計算、キャンセル時の返金処理、手数料の計上、異議申し立てとガバナンスを処理します。
  • stellar_trade_token:管理者制御、認証済みミンター、一時停止制御、任意の供給上限を備えた報酬トークンを提供します。新規デプロイでは、名称にStellar Trade、シンボルにSTRDを使用します。
  • referral_registry:紹介を登録し、紹介チェーンの深さを制限し、紹介手数料を分配します。
  • leaderboard:参加者のポイントと勝敗記録を追跡し、スコアの減衰を適用し、認証済みの報酬ミントをサポートします。
  • cross_contract_invariants:市場、紹介、ランキング、トークンの各コントラクトにまたがる会計と動作をテストします。

Rustワークスペースをセットアップする

このプロジェクトでは、rust-toolchain.tomlを通じてRust 1.91.0とwasm32v1-noneターゲットを固定しています。リポジトリルートからチェックを実行する前に、リポジトリで指定されているツールチェーンとターゲットをインストールしてください。

環境の準備ができたら、ワークスペース全体のテストスイートを実行します。

cargo test --workspace --all-features

フォーマットチェックでは、ソースがプロジェクトのフォーマット規則に従っていることを確認します。

cargo fmt --all -- --check

警告をエラーとして扱ってClippyを実行し、コード品質と正確性に関する問題を検出します。

cargo clippy --workspace --all-features -- -D warnings

リリースプロファイルを使用して、予測市場コントラクトをWebAssembly向けにビルドします。

cargo build --release --target wasm32v1-none -p prediction_market

これらのコマンドは、リポジトリのGitHub Actionsワークフローで使用されるチェックに対応しています。ワークフローでは、WASMアーティファクトのビルドに加え、デフォルトブランチへの変更とプルリクエストに対するコントラクト間不変条件テストも実行します。

市場のライフサイクルを追う

1. 市場を作成する

認証済みの作成者が、市場の質問、カテゴリー、締切時刻を公開します。市場の作成には権限が必要なため、呼び出し元はコントラクトで設定された認証ルールを満たす必要があります。

2. ポジションを取る

参加者はplace_betを呼び出し、YESまたはNOのいずれかにXLMを賭けます。コントラクトは設定された手数料を適用し、結果として得られるポジションを参加者が選択した側に加算します。

ポジション削減の仕組みは、ピアツーピア販売、注文板、空売りポジションではありません。参加者が既に記録している賭け金に対する操作です。

3. 決済前にポジションを減らす

市場が締め切られる前であれば、参加者はreduce_positionを呼び出して既存の賭け金を減らせます。コントラクトは参加者の記録済みの側を使用し、削減した賭け金と維持される手数料ルールに基づいて返還額を計算します。

コントラクトは参加者の既存ポジションから側を選択するため、呼び出し元はこの操作を側の切り替えや他の参加者との取引として扱わないでください。

4. 市場を解決する

認証済みの解決者が、市場の締切後に結果を送信します。その後、市場コントラクトが勝ちポジションに対する比例配当を計算します。

解決には権限が必要です。このワークスペースは自動オラクルを提供していません。認証済みの解決者が外部の価格またはネットワークデータを使用して結果を送信しない限り、それらのデータによって市場が確定することはありません。

5. 勝ち分を請求する、またはキャンセル時の返金を受ける

参加者は、市場の解決後にコントラクトを通じて比例配当を請求します。キャンセルされた市場では、通常の勝ちポジションへの配当フローとは別の返金処理が行われます。

解決者の選定、解決基準、証拠、異議申し立ての処理は、重要な信頼前提です。デプロイ済みの市場を利用する前に、これらのプロセスを確認してください。

会計と安全性の特性を確認する

コントラクトの動作を変更する前に、不変条件マトリックスを読んでください。重要な会計ルールと、それを保護するテストとの対応がまとめられています。

マトリックスには、次のような領域が含まれます。

  • 手数料の保全と市場単位での手数料分離。
  • 比例配当の上限。
  • キャンセル時の動作。
  • 紹介に関する会計。
  • 報酬供給量の追跡。
  • ストレージの有効期限処理。
  • 緊急停止経路。

手数料、報酬、配当計算式、ストレージの有効期間を変更する場合は、関連する回帰テストと不変条件テストも同時に更新してください。変更が複数のコントラクトに影響する場合は、cross_contract_invariantsクレートが特に役立ちます。

過去の問題報告を正しく利用する

issues/ディレクトリには、過去のセキュリティおよび正確性に関する報告が含まれています。背景を理解するためにissues/README.mdを読んでください。

これらのレポートは、過去の設計上のリスクを記録したものです。コントラクトが監査済みであることの証明や、記載されたすべての問題が現在も有効であることの確認として扱わないでください。現在のソースコード、テスト、不変条件マトリクスと併せて、レビューの参考資料として使用してください。

デプロイの準備

テストネットへのデプロイでは、過去のコントラクトIDとトークンメタデータが保持されます。新しいデプロイでは新しいアドレスが作成され、STRDが初期化されます。既存の保有者や残高が移行されることはありません。

デプロイ前に、以下のすべてを確認してください。

  • 対象ネットワーク。
  • コントラクトID。
  • 管理者の身元。
  • 手数料設定。
  • リゾルバー設定。

シークレットキー、ウォレットのリカバリーフレーズ、.deploy.env、デプロイ出力、またはローカルの身元情報ファイルをリポジトリにコミットしないでください。

ローカルのフロントエンド開発およびアプリケーションレベルのデプロイ手順については、アプリケーションREADMEを参照してください。

高度な開発のヒント

コントラクト間の動作をテストする

1つのクレートに対するローカルな変更に見えても、紹介、報酬、ランキング記録、またはトークン供給量に影響する可能性があります。単一クレートのユニットテストだけに頼らず、ワークスペース全体のテストスイートとコントラクト間の不変条件テストを実行してください。

権限境界を明確に保つ

マーケットの作成、結果の確定、トークン管理、ミント、その他の機密性の高い操作には、認可制御が使用されています。コントラクトをレビューまたは拡張する際は、各操作を実行できる身元情報と、一時停止制御が緊急時の動作に与える影響を確認してください。

ストレージの有効期間の変更をレビューする

ストレージTTLの処理は、プロジェクトの安全性モデルの一部です。ストレージへのアクセスパターンや有効期間を変更する場合は、不変条件マトリクスとの整合性を確認し、回帰テストでカバーしてください。

リリース成果物を検証する

変更を公開またはデプロイする前に、フォーマット、Clippy、テスト、リリース用WASMビルドを実行してください。ローカルビルドが正常に完了することは開発上の前提条件ですが、設定やデプロイ時の身元情報のレビューに代わるものではありません。

まとめ

Stellar Trade Contractsは、予測市場の作成、YESおよびNOポジションの記録、ステークの減額、結果の確定、比例配分による請求、キャンセルされた市場の返金に必要なSorobanロジックを提供します。付属クレートは、報酬トークン、紹介、ランキング、統合機能を追加します。

このリポジトリを安全に扱うには、まず固定されたRust環境を使用し、ワークスペース全体のチェックを実行して、市場のライフサイクルを理解し、会計やストレージの動作を変更する前に不変条件マトリクスを確認してください。デプロイ時には、すべての権限とネットワーク設定を検証し、すべての秘密情報をバージョン管理の対象外に保ってください。