クライアント
Sunriseクライアントライブラリを使用すると、カスタムのprotobufツーリングを実行したり、Tendermint JSON-RPCコールを手作業で作成したりすることなく、アプリケーションからチェーンのクエリ、BLOBの送信、トランザクションの署名/ブロードキャストを行うことができます。
利用可能なSDK
「利用可能なSDK」セクションへのリンク- JavaScript / TypeScript - npmで利用可能なプライマリSDK
- Rust - Buf/Prostを使用したgRPC + protobuf型生成
- GoおよびPythonバインディング - 近日公開予定(貢献を歓迎します)
JavaScript / TypeScript SDK
「JavaScript / TypeScript SDK」セクションへのリンクインストール
「インストール」セクションへのリンクnpm install @sunriselayer/client @cosmjs/proto-signing @cosmjs/stargate# またはpnpm add @sunriselayer/client @cosmjs/proto-signing @cosmjs/stargate# またはyarn add @sunriselayer/client @cosmjs/proto-signing @cosmjs/stargate基本的な使用法
「基本的な使用法」セクションへのリンクこのクライアントは、Cosmos SDKチェーンと対話するための標準ライブラリであるCosmJSと共に使用するように設計されています。
以下は、集中流動性ポジションを作成する方法の例です。
import { createEncodeObject, sunriseTypesRegistry,} from "@sunriselayer/client";// すべてのモジュールのスキーマと型はクライアントからエクスポートされます。// ここでは、`MsgCreatePosition`メッセージのスキーマをインポートします。import { MsgCreatePositionSchema } from "@sunriselayer/client/types/liquiditypool";import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";import { SigningStargateClient, coin } from "@cosmjs/stargate";
const RPC = "https://goldberg-rpc.sunrise.node"; // ノードに置き換えてくださいconst SENDER_MNEMONIC = process.env.MNEMONIC!; // 秘密鍵は絶対にコミットしないでください
// これは簡略化された例です。実際のアプリケーションでは、クエリクライアントから// プールの詳細を取得し、ユーザーが提供した価格からティックを計算します。const MOCK_POOL_ID = 1n; // 注:uint64フィールドにはBigIntを使用してくださいconst MOCK_LOWER_TICK = -20000n;const MOCK_UPPER_TICK = 20000n;
async function main() { // 1. ニーモニックからウォレットと署名者を作成します const signer = await DirectSecp256k1HdWallet.fromMnemonic(SENDER_MNEMONIC, { prefix: "sunrise", // SunriseのBech32アドレスプレフィックス }); const [account] = await signer.getAccounts(); const senderAddress = account.address; console.log("送信者アドレス:", senderAddress);
// 2. 署名者と型レジストリを使用して署名クライアントを作成します const client = await SigningStargateClient.connectWithSigner(RPC, signer, { registry: sunriseTypesRegistry, // Sunriseメッセージのカスタム型レジストリ }); console.log("正常に接続しました:", RPC);
// 3. 「Create Position」トランザクションメッセージを準備します // すべてのメッセージフィールドは完全に型付けされ、検証されます。 const msg = createEncodeObject(MsgCreatePositionSchema, { sender: senderAddress, poolId: MOCK_POOL_ID, lowerTick: MOCK_LOWER_TICK, upperTick: MOCK_UPPER_TICK, // @cosmjs/stargateの`coin`ヘルパーを使用してCoinオブジェクトを作成します tokenBase: coin("1000000", "urise"), // 1 RISE tokenQuote: coin("5000000", "uusdc"), // 5 USDC(例) minAmountBase: "0", // スリッページ保護 minAmountQuote: "0", // スリッページ保護 });
// 4. 手数料を定義し、トランザクションに署名してブロードキャストします const fee = { amount: [coin("10000", "uusdrise")], gas: "400000", // ガス制限 }; const memo = "Created position via @sunriselayer/client";
console.log("トランザクションをブロードキャストしています..."); const { transactionHash } = await client.signAndBroadcast( senderAddress, [msg], fee, memo );
console.log("正常にポジションを作成しました!"); console.log("トランザクションハッシュ:", transactionHash);}
main().catch(console.error);TypeScriptを使用する場合、すべてのメソッドは完全に型付けされます。
Rust SDK(近日公開)
「Rust SDK(近日公開)」セクションへのリンクRust SDKは現在、protobuf生成を通じて実装されています。セットアップ方法は次のとおりです。
プロジェクト構造
「プロジェクト構造」セクションへのリンクmy-sunrise-client/├── src/│ └── main.rs├── buf.yaml└── buf.gen.yaml設定ファイル
「設定ファイル」セクションへのリンクbuf.yaml:
version: v2deps: - buf.build/cosmos/cosmos-sdk - buf.build/cosmos/cosmos-proto - buf.build/cosmos/gogo-proto - buf.build/protocolbuffers/wellknowntypesbuf.gen.yaml:
version: v2managed: enabled: true
plugins: - remote: buf.build/community/neoeinstein-prost:v0.4.0 out: src opt: - compile_well_known_types - extern_path=.google.protobuf=::pbjson_types - remote: buf.build/community/neoeinstein-prost-serde:v0.3.1 out: src - remote: buf.build/community/neoeinstein-tonic:v0.4.1 out: src opt: - compile_well_known_types - extern_path=.google.protobuf=::pbjson_types
inputs: - git_repo: https://github.com/sunriselayer/sunrise.git branch: main subdir: protoセットアップと生成
「セットアップと生成」セクションへのリンク# 必要な依存関係を追加しますcargo add tonic tonic-build pbjson-types
# 依存関係を更新し、コードを生成しますbuf dep updatebuf generateuse tonic::transport::Channel;use sunriselayer::sunrise::da::v1::query_client::QueryClient;use sunriselayer::sunrise::da::v1::ParamsRequest;
#[tokio::main]async fn main() -> anyhow::Result<()> { let mut client = QueryClient::connect("http://localhost:9090").await?; let resp = client.params(ParamsRequest {}).await?; println!("DA params: {:?}", resp.into_inner()); Ok(())}追加リソース
「追加リソース」セクションへのリンクトラブルシューティング
「トラブルシューティング」セクションへのリンク| 問題 | 解決策 |
|---|---|
| 接続が拒否されました | RPC URLを確認し、DAノードが実行されていることを確認してください |
| 認証エラー | アカウントに十分な資金があることを確認してください |
| Rustのビルド失敗 | Rust 1.74+に更新し、cargo clean && buf generateを実行してください |