メインネットの Whirlpool を使ってトークンをスワップする際、人気があり多くのスワップが集中しているプールではトランザクションが実行されにくくなる場合があります。新しいトークンがリストされた直後などが該当します。

「プライオリティ・フィー」と呼ばれる追加の手数料を支払うことで、トランザクションを優先的に処理してもらうことができます。この追加の手数料はバリデータ、つまり Solana ネットワークに対して支払うもので、Orca に対して支払うものではありません。

プライオリティ・フィーは処理が集中しているアカウントを利用するトランザクションのなかでの争いに適用されます。一部の Whirlpool にスワップが集中している状態で、あまり人気がない Whirlpool を使うスワップを実行する場合には必要ないケースも多いです。

<aside> 💡 Phantom など一部のウォレットは署名するトランザクションに対してプライオリティ・フィーに関する命令を自動で追加しています。

</aside>

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

下図では使用する Compute Unit (CU) の上限を 300,000 にセットし、1 CU ごとに 33,333 micro lamports を追加で支払う設定を行っています。

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

screenshot 2024-01-08 2.14.57.png

追加手数料を支払うスワップの実行

1 devUSDC を devSAMO にスワップします。

CU の上限は 300,000 とし、1 CU ごとに 33,333 micro lamports を追加します。

これは、10,000 M micro lamports = 10,000 lamports (0.00001 SOL) の追加手数料を意味します。

$$ 33,333 \times 300,000 = 9,999,900,000 \simeq 10,000,000,000 $$

コード

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