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型になっていない」のどちらかになる。