Solanaの Address Lookup Table (通称LUTまたはALT)をアカウントクローズしたときに発生したエラー。
Agenda
前提
LUTをクローズするためには、以下のステップが必要になる。
- LUTを作成(AddressLookupTableProgram.createLookupTable)
- LUTにLookupするアドレスを登録(AddressLookupTableProgram.extendLookupTable)
- LUTを無効化(AddressLookupTableProgram.deactivateLookupTable)
- LUTをクローズ(AddressLookupTableProgram.closeLookupTable)
現象
AddressLookupTableProgram.closeLookupTable を実行すると以下のエラーが発生。
ts-node src/addressLookupTable/4_closeLookupTable.ts
(node:39006) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
/Users/scripts/solana/spl-token-v0.3.x/node_modules/@solana/web3.js/src/connection.ts:5922
throw new SendTransactionError(
^
SendTransactionError: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: invalid program argument
at Connection.sendEncodedTransaction (/Users/scripts/solana/spl-token-v0.3.x/node_modules/@solana/web3.js/src/connection.ts:5922:13)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Connection.sendRawTransaction (/Users/scripts/solana/spl-token-v0.3.x/node_modules/@solana/web3.js/src/connection.ts:5881:20)
at async Connection.sendTransaction (/Users/scripts/solana/spl-token-v0.3.x/node_modules/@solana/web3.js/src/connection.ts:5829:14)
at async main (/Users/scripts/solana/spl-token-v0.3.x/src/addressLookupTable/4_closeLookupTable.ts:73:21) {
logs: [
'Program AddressLookupTab1e1111111111111111111111111 invoke [1]',
"Table cannot be closed until it's fully deactivated in 43 blocks",
'Program AddressLookupTab1e1111111111111111111111111 failed: invalid program argument'
]
}
原因
アカウント無効化のトランザクション承認に必要なブロック数が足りていないため。
つまり、バリデーターがブロックチェーン全体にトランザクションの浸透待ち(バリデーターが作業中)の状態になっている。
対応
ブロックチェーンが浸透するまで待つ。
自分のケースは数分で浸透した。