Whirlpool を使ってトークンをスワップできるようになりましょう。

プログラムで実現すること

下図では Orca のサイトで 1 USDC を 231.94 SAMO にスワップ(交換)しようとしています。

今回はこれと同じことをプログラムで実装します(ただし Devnet で行います)。

スクリーンショット 2022-06-13 21.14.14.png

WhirlpoolClientの作成

これまでは Devnet の RPC エンドポイントや秘密鍵の情報はソースコード上に書いたりインポートしたりして読み込んでいました。

これを Solana のプログラムを作るデファクト・スタンダードのフレームワークである、Anchor フレームワークの仕組みに沿って読み込むように変更します。

そして、Whirlpool へアクセスするためのクライアントを初期化するところまで進めます。

コード

src フォルダ下に「021_build_whirlpool_client.ts」を作り、内容は下記とします。

import { AnchorProvider } from "@coral-xyz/anchor";
import { WhirlpoolContext, buildWhirlpoolClient, ORCA_WHIRLPOOL_PROGRAM_ID } from "@orca-so/whirlpools-sdk";

// UNIX/Linux/Mac
// bash$ export ANCHOR_PROVIDER_URL=https://api.devnet.solana.com
// bash$ export ANCHOR_WALLET=wallet.json
// bash$ ts-node this_script.ts
//
// Windows
// > set ANCHOR_PROVIDER_URL=https://api.devnet.solana.com
// > set ANCHOR_WALLET=wallet.json
// > ts-node this_script.ts

async function main() {
  const provider = AnchorProvider.env();
  const ctx = WhirlpoolContext.withProvider(provider, ORCA_WHIRLPOOL_PROGRAM_ID);
  const client = buildWhirlpoolClient(ctx);

  console.log("endpoint:", ctx.connection.rpcEndpoint);
  console.log("wallet pubkey:", ctx.wallet.publicKey.toBase58());
}

main();

実行結果