spl-token送信時にTokenAccountNotFoundError

以下のリポジトリ(私が作ったやつ)を使って、複数のウォレットアドレスにSPLトークンをバッチ処理的に送信しようとしました。

https://github.com/penpendayo/transfer-spl-token-typescript

 

そうしたら途中で「TokenAccountNotFoundError」というエラーが起きました💧

この原因についてメモ。

原因

以下の記事様にすべて書かれていたので、自分が書くことはほとんどないのですが

Solana web3.jsでNFTミント後にNFT送信するとTokenAccountNotFoundErrorエラー – myMemoBlog by 256hax

 

要するに、送信先トークンアカウント作成のトランザクションがSolana上で処理される前に、トークンを送ろうとするとこのエラーが起こるらしいです。

なので、これらの処理の間に一定のsleep処理を入れてやるとうまくいくようです。

具体的にどれくらいsleepすればいいのか分からなかったので、とりあえず2秒だけsleepしてみることにしました。

コードだと以下のような感じ。

// 送信先ウォレットのトークンアカウントを取得し、存在しない場合は作成する
const toTokenAccount = await getOrCreateAssociatedTokenAccount(
  connection,
  fromWallet,
  mint,
  toWalletPublicAddress
);
await sleep(2000);
// 指定したトークンを、送信元→送信先に、指定した数量だけ送る
const signature = await transfer(
  connection,
  fromWallet,
  fromTokenAccount.address,
  toTokenAccount.address,
  fromWallet.publicKey,
  amount,
  []
);

 

2秒にしたのは、Solanaは50,000TPSくらいまで処理できるらしいので、2022年8月現在だと3,000TPSくらいしかトランザクションが流れていないので2秒もあれば処理できてるでしょ・・みたいな理由です。

 

これで今のところ、同じようなエラーが発生してません。

 

おわり

Dapp
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました