![見出し画像](https://assets.st-note.com/production/uploads/images/142079644/rectangle_large_type_2_56cd2d938810d974f745ad7873d2c574.png?width=800)
【完全保存版】JupiterのV6 Swap APIを実行してみよう!
当記事は、こちらの記事の「V6 Swap API」の部分を翻訳・編集したものです。
0 始める前の注意(翻訳者による補足)
今回、実際のSOLを使用することになるため、ガス代分が消費されます。
また、秘密鍵を入力する箇所があります。
そのため、新しくウォレットを作成し、そこに少額のSOLを入れて試すことを強くお勧めします。
テストで行う場合は、自分の資産が入ったウォレットを使わないよう、十分ご注意ください。
特に、後から出てくる、dotenvの箇所などが、よくわかっていない場合には、無理やり進むのではなく、先に進まないという選択肢も大事だと思います。
また、記事の中で出てくるコードは、こちらのGithubで確認ができます。
1 はじめに
Jupiter APIは、開発者がSolana上で流動性にアクセスするための最も簡単な方法です。
希望のペア、金額、およびスリッページを指定するだけで、APIはスワップを実行するために必要なシリアライズされたトランザクションを返し、それをSolanaブロックチェーンに必要な署名と共に渡すことができます。
試してみましょう!
# Copy and paste this into your terminal!
curl -s 'https://quote-api.jup.ag/v6/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amount=1000000&slippageBps=1' | jq '.outAmount'
![](https://assets.st-note.com/img/1716840449825-xQ9vDWYj8F.png?width=800)
2 V6 APIリファレンス
すべてのJupiterスワップはバージョン付きトランザクションとアドレスルックアップテーブルを使用しています。
しかし、すべてのウォレットがバージョン付きトランザクションをサポートしているわけではないため、バージョン付きトランザクションをサポートしていないウォレットを検出した場合、asLegacyTransactionパラメーターを使用する必要があります。
OpenAPIドキュメントでJupiter API Documentationの詳細をご覧ください。
このドキュメントにはRESTリクエストリストと組み込みのAPIプレイグラウンドが含まれています。APIプレイグラウンドを使用して、APIコールを今すぐ試してみてください!
3 V6 Swap APIのガイド
1 必要なライブラリをインストールする
この例を実行するには、NodeJS 16以上が必要です。コマンドラインターミナルで次のライブラリをインストールしてください。
補足
ドキュメントでは、@project-serum/anchorでしたが、@coral-xyz/anchorに修正しました。
npm i @solana/web3.js
npm i cross-fetch
npm i @coral-xyz/anchor
npm i bs58
![](https://assets.st-note.com/img/1716841066908-xlHDQZiXq9.png?width=800)
2 ライブラリからインポートし、接続を設定する
次に、コードスニペットをjavascriptファイルjupiter-api-example.jsにコピーします。
コードを実行する準備ができたらnode jupiter-api-example.jsと入力します。
以下、いくつか補足です。
まずは、こちらのコマンドで、「package.json」を作りました。
npm init -y
![](https://assets.st-note.com/img/1716841773224-M6X7SZpjpV.png?width=800)
次に、package.jsonに下のように設定しました。
![](https://assets.st-note.com/img/1716841877982-l268VgmTNC.png?width=800)
最後に、中身はこのように変更し、実行しました。
![](https://assets.st-note.com/img/1716841982346-ObgbsdzVPy.png?width=800)
import {
Connection,
Keypair,
VersionedTransaction,
clusterApiUrl,
} from "@solana/web3.js";
import fetch from "cross-fetch";
import { Wallet } from "@coral-xyz/anchor";
import bs58 from "bs58";
let connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
TIP
常に自身のRPCエンドポイントを使用することを確認してください。
上記の例で使用されているRPCエンドポイントは、もう動作しない可能性があります。
RPCエンドポイントに関する詳細は、公式のSolanaドキュメントで公開されているRPCエンドポイントについて学んでください。
3 ウォレットを設定する
テスト目的でプライベートキーを貼り付けることができますが、本番アプリケーションでは推奨されません。
注意
この先、自分の秘密鍵を使います。
必ず、テスト用のものを使い、自信がない場合には、引き返してください。
まずは、dotenvをインストールします。
![](https://assets.st-note.com/img/1716842767361-RtVwmUULwk.png?width=800)
次に、「.env」ファイルを作り、「PRIVATE_KEY」を設定します。
![](https://assets.st-note.com/img/1716842832461-6xRbSCjAlI.png?width=800)
現状、git に上げる予定がない場合でも、うっかりミスを防ぐために、「.gitignore」を設定することを強くお勧めします。
![](https://assets.st-note.com/img/1716842915932-VVvo3cyFfZ.png?width=800)
最後に、下のようにして、dotenvを使用します。
![](https://assets.st-note.com/img/1716843006450-FZwTpLcuas.png?width=800)
4 スワップのルートを取得する
ここでは、SOLからUSDCへのスワップの見積もりを取得します。
![](https://assets.st-note.com/img/1716846541884-JvWK3yElQ1.png?width=800)
ちなみに、量を指定しているのはこの部分です。
![](https://assets.st-note.com/img/1716847797336-Dzdbon9UXh.png?width=800)
特定のトークン取引ペアの最良のスワップルートを、出力トークン量の多い順に取得します。
![](https://assets.st-note.com/img/1716846722954-qXBTfF532G.png?width=800)
プラットフォーム手数料
手数料を請求したい場合は、quoteにplatformFeeBpsパラメーターを渡します。
金額
APIは整数の金額を受け取り、各トークンの小数点以下の桁数を考慮する必要があります。
例えば、USDCは小数点以下6桁で、1 USDCはAPIに渡すときに1000000となります。
5 スワップを実行するためのシリアライズされたトランザクションを取得する
見積もりを取得したら、その見積もりをシリアライズして、チェーン上で提出できるスワップトランザクションに変換する必要があります。
![](https://assets.st-note.com/img/1716844961692-mWDNdjXcsk.png?width=800)
![](https://assets.st-note.com/img/1716845183195-KcrXnLw40U.png?width=800)
6 トランザクションをデシリアライズして署名する
署名を行うために、「deserialize」を行なっています。
![](https://assets.st-note.com/img/1716845287747-LZdi2ja30B.png?width=800)
7 トランザクションを実行する
「serialize」でシリライズしているので、その後、「sendRawTransaction」で送付しています。
![](https://assets.st-note.com/img/1716846914849-1qDqFoLqBQ.png?width=800)
SOLANAネットワークの混雑
Solanaのネットワーク混雑により、sendRawTransactionメソッドがトランザクションを正常に送信できない場合があります。
この場合は、このtransactionSenderファイルを確認して、トランザクションを送信してください。
4 トランザクションの実行
では、次のコマンドで、実行してみましょう。
node jupiter-api-example.js
![](https://assets.st-note.com/img/1716847523833-udqdfmqJAE.png?width=800)
このように実行ができました。
![](https://assets.st-note.com/img/1716847527596-C7Lliv6uYg.png?width=800)
このように、内部でSwapが行われていることも確認することができます。
![](https://assets.st-note.com/img/1716847866306-unYsKhOtc0.png?width=800)
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊