Solana Anchorで「undefined (reading 'toBuffer')」エラー

Solana, Anchor, MetaplexのWeb3.jsでPublicKeyを扱うときによくやってしまう凡ミス。

現象

anchor testを実行すると以下のエラー。

ターミナル:

TypeError: Cannot read properties of undefined (reading 'toBuffer')

該当箇所(TSファイル):

const fromTokenAccount = await getOrCreateAssociatedTokenAccount(
    connection, // connection
    payer, // payer
    mint, // mint address
    payer.publicKey // owner
);

原因

console.logで出力すると「undefined」になっていた。
mint部分がtoBufferできない(今回のケースだと値が存在しない)ために発生。
今回は本番用とStub用で値を書き換えていて、Stub用に切り替えたときに、存在しない値を代入してしまっていた。

対応

正しい値を代入する。今回はmintアドレスの代入が必要だったので、以下のようにPublicKey型の値を代入して解決。

mint = new PublicKey('6rR9KWvY17aQXv1c1TveYrUHPqy53hKE3ZoKXh8QLTwF');

const fromTokenAccount = await getOrCreateAssociatedTokenAccount(
    connection, // connection
    payer, // payer
    mint, // mint address
    payer.publicKey // owner
);

なお、本件のエラーは、だいたい「値が存在しない」または「PublicKey型になっていない」のどちらかになる。