Sui CLIで始めるブロックチェーン入門:マルチシグとガススマッシング
Sui CLI で始めるブロックチェーン入門
はじめに
Sui ブロックチェーンは、Move 言語を採用した高性能な第 3 世代ブロックチェーンです。
この記事では、Sui CLI を使用した基本的な操作から。
マルチシグトランザクションの実装。
そして興味深いガススマッシング現象までを実践的に解説します。
なぜ Sui を選ぶのか?
-
高いスケーラビリティ
- 並列トランザクション処理による高スループットを実現。
- 独自のコンセンサスメカニズムを採用。
- 低レイテンシーで高速な処理が可能。
-
開発者フレンドリー
- Move 言語による型安全なスマートコントラクトの開発。
- 充実した CLI ツールで簡単に操作。
- 分かりやすい公式ドキュメントで学習も容易。
-
セキュリティ重視
- オブジェクト中心の設計で安全性を確保。
- 厳格な所有権モデルでリスクを最小化。
- 包括的な監査システムで安全性を担保。
他のブロックチェーンとの比較
特徴 | Sui | Solana | Ethereum |
---|---|---|---|
言語 | Move | Rust | Solidity |
TPS | 120k+ | 65k+ | 15-30 |
ガス代 | 低コスト | 低コスト | 変動大 |
開発難易度 | 中 | 高 | 中 |
本記事で学べること
- Sui CLI の基本的な使い方
- マルチシグトランザクションの実装方法
- ガススマッシング現象の理解と対処法
- 実践的なトラブルシューティング
用語解説
ブロックチェーンの世界には独特の用語が多く登場します。
まずは主要な用語を理解しましょう。
重要な単位について
- SUI: このブロックチェーンのネイティブトークン(通貨)です。
-
MIST: SUI の最小単位です。
- 1 SUI = 1,000,000,000 MIST
- 例: 1.5 SUI = 1,500,000,000 MIST
基本用語
-
ガス代: トランザクション(取引)を実行するために必要な手数料です。
ブロックチェーンを利用するためのコストとなります。 -
DevNet: 開発者用のテストネットワークです。
本番環境ではないので、自由に実験が可能です。 -
CLI: Command Line Interface(コマンドライン・インターフェース)の略です。
テキストベースで操作を行うツールとして使用します。
トランザクション関連
-
マルチシグ: 複数の署名(承認)が必要な取引形式です。
セキュリティを高めるために使用されます。 -
ガスバジェット: 取引に使用可能な最大ガス代です。
取引失敗を防ぐため、適切な設定が重要です。 -
オブジェクト: Sui で管理される全てのデータの基本単位です。
コインや NFT などが該当します。 -
アドレス: ウォレット(財布)の住所のようなものです。
取引の送金先として使用されます。
Sui CLI のインストール方法
1. 事前準備
必要なツール:
- Git
- Rust(バージョン 1.70.0 以上)
- CMake(バージョン 3.20.0 以上)
- C++コンパイラ
2. Rust のインストール(未インストールの場合)
# Rustのインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# パスの設定を反映
source $HOME/.cargo/env
3. Sui CLI のインストール
# cargoを使用してSui CLIをインストール
cargo install --locked --git https://github.com/MystenLabs/sui.git --branch devnet sui
# インストールの確認
sui --version
4. 初期設定
# 新しいウォレットの作成
sui client new-address ed25519
# DevNet環境への切り替え
sui client switch --env devnet
# Faucetからテスト用のSUIを取得
sui client faucet
1. 環境構築
Sui CLI のインストール確認
$ sui --version
sui 1.42.0-ae8883db4bbc
DevNet 環境の設定
$ sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias │ url │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ testnet │ https://fullnode.testnet.sui.io:443 │ │
│ devnet │ https://fullnode.devnet.sui.io:443 │ * │
╰─────────┴─────────────────────────────────────┴────────╯
現在の DevNet 環境が正しく設定されていることが確認できます。
2. アカウント管理
アドレスの確認
$ sui client addresses
╭──────────────────────┬────────────────────────────────────────────────────────────────────┬────────╮
│ alias │ address │ active │
├──────────────────────┼────────────────────────────────────────────────────────────────────┼────────┤
│ example-wallet-1 │ 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef │ * │
│ example-wallet-2 │ 0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890 │ │
╰──────────────────────┴────────────────────────────────────────────────────────────────────┴────────╯
ガス残高の確認
$ sui client gas
╭────────────────────────────────────────────────────────────────────┬────────────────────┬──────────╮
│ gasCoinId │ mistBalance (MIST) │ suiBalance│
├────────────────────────────────────────────────────────────────────┼────────────────────┼──────────┤
│ 0x1111111111111111111111111111111111111111111111111111111111111111 │ 1000000000 │ 1.00 │
│ 0x2222222222222222222222222222222222222222222222222222222222222222 │ 1498002120 │ 1.49 │
╰────────────────────────────────────────────────────────────────────┴────────────────────┴──────────╯
3. マルチシグトランザクションの実装
トランザクションのプレビュー
$ sui client ptb --gas-budget 10000000 --split-coins gas [500000000] --assign split_result \
--transfer-objects [split_result] @0x1234...cdef --preview
╭─────────────────────────────────────────────────────────────────────────────────────────╮
│ PTB Preview │
├──────────────────┬──────────────────────────────────────────────────────────────────────┤
│ command │ values │
├──────────────────┼──────────────────────────────────────────────────────────────────────┤
│ split-coins │ gas [500000000] │
│ assign │ split_result │
│ transfer-objects │ [split_result] @0x1234...cdef │
│ gas-budget │ 10000000 │
╰──────────────────┴──────────────────────────────────────────────────────────────────────╯
ガススマッシング現象の観察
実際のトランザクション実行時に興味深い現象が観察されました:
Gas Cost Summary:
Storage Cost: 1976000 MIST
Computation Cost: 1000000 MIST
Storage Rebate: 978120 MIST
Non-refundable Storage Fee: 9880 MIST
この現象で注目すべき点:
-
ストレージコスト
- 全体の 66.4%を占める最も大きな部分です(1,976,000 MIST)
- 内訳:
- 返金: 49.5%(978,120 MIST)
- 手数料: 0.5%(9,880 MIST)
- ストレージ保持: 50.0%(988,000 MIST)
-
計算コスト
- 全体の 33.6%を占めています(1,000,000 MIST)
- 返金されない固定費用です
-
リベートシステム
- ストレージコストの約 49.5%が返金されます
- 実質的な負担を軽減する仕組みです
- 次回のトランザクションで使用可能です
4. ガススマッシング現象の分析
現象の説明
ガススマッシング現象とは、トランザクション実行時のガス代(手数料)が予想以上に高くなる現象です。
これは以下の要素で構成されています:
-
ストレージコスト
- データの保存にかかる費用です。
- 全体の約 66%を占める最も大きな部分です。
- 一部は後で返金される(リベート)仕組みがあります。
-
計算コスト
- トランザクションの処理にかかる費用です。
- 全体の約 33%を占めています。
- 返金されない固定費用となります。
-
リベート(返金)システム
- ストレージコストの約 50%が返金されます。
- 実質的な負担を軽減する仕組みです。
- 次回のトランザクションで使用可能です。
図解
実践的なアドバイス
-
適切なガス代の設定方法
# 安全な取引のための推奨設定 sui client transfer-sui \ --amount 1000000 MIST \ --to $ADDRESS \ --gas-budget 10000000 MIST # 余裕を持った設定
-
コスト削減のコツ
- 複数の小さな取引をまとめる
- 同じオブジェクトを再利用する
- 不要なデータは削除する
5. トラブルシューティング
よくあるエラーと解決方法
-
ガス不足エラー
Error: InsufficientGas
解決方法:
- ガス予算を増やす(推奨:10,000,000 MIST)
- トランザクションサイズの最適化
- バッチ処理の検討
-
オブジェクトロックエラー
Error: ObjectLocked
解決方法:
- トランザクションの完了を待つ
- 別のコインオブジェクトを使用
- ロック状態の確認コマンド実行
-
不正なアドレス指定
Error: InvalidAddress
解決方法:
- アドレスフォーマットの確認
- チェックサムの検証
- テスト環境での事前確認
デバッグのベストプラクティス
-
ステップバイステップのアプローチ
# 1. オブジェクトの状態確認 sui client object $OBJECT_ID # 2. トランザクションの詳細確認 sui client transaction $TX_DIGEST # 3. ガス情報の分析 sui client gas
-
ログの活用
# トランザクションの詳細なログ出力 sui client transfer-sui --amount 1000000 MIST --to $ADDRESS --gas-budget 10000000 MIST --verbose
-
テスト環境での検証
- DevNet での事前テスト
- 少額での動作確認
- エラーケースの再現確認
コミュニティリソース
-
公式サポート
-
開発者リソース
まとめ
-
学んだこと
- Sui CLI の基本的な使い方
- マルチシグトランザクションの実装手順
- ガススマッシング現象の理解
-
次のステップ
- Move 言語でのスマートコントラクト開発
- カスタムトランザクションの実装
- テストネットでの検証
Discussion