From 5465d8420e18ebf44a8b5dcc923bd517d207bd0d Mon Sep 17 00:00:00 2001 From: aoikurokawa Date: Wed, 29 Apr 2026 04:19:09 +0900 Subject: [PATCH 1/2] feat: cli log --- clients/js/src/cli/utils.ts | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/clients/js/src/cli/utils.ts b/clients/js/src/cli/utils.ts index a034113..19942b7 100644 --- a/clients/js/src/cli/utils.ts +++ b/clients/js/src/cli/utils.ts @@ -4,6 +4,7 @@ import path from 'path'; import { Account, + AccountRole, Address, address, Commitment, @@ -32,7 +33,7 @@ import { import { Command } from 'commander'; import picocolors from 'picocolors'; import { parse as parseYaml } from 'yaml'; -import { Buffer, DataSource, fetchBuffer, Format, Seed } from '../generated'; +import { Buffer, DataSource, Encoding, fetchBuffer, Format, Seed } from '../generated'; import { createDefaultTransactionPlannerAndExecutor, getPdaDetails, PdaDetails } from '../internals'; import { decodeData, packDirectData, PackedData, packExternalData, packUrlData } from '../packData'; import { logErrorAndExit, logExports, logSuccess, logWarning } from './logs'; @@ -115,18 +116,42 @@ async function exportTransactionPlan( const { value: latestBlockhash } = await client.rpc.getLatestBlockhash().send(); for (let i = 0; i < singleTransactions.length; i++) { - const transaction = pipe( + const message = pipe( singleTransactions[i].message, m => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m), m => removeComputeUnitLimitInstruction(m), - compileTransaction, ); + logInstructions(message); + const transaction = compileTransaction(message); const encodedTransaction = decodeData(transactionEncoder.encode(transaction), options.exportEncoding); const prefix = picocolors.yellow(`[Transaction #${i + 1}]`); console.log(`${prefix}\n${encodedTransaction}\n`); } } +function logInstructions(message: TransactionMessage): void { + message.instructions.forEach((ix, i) => { + console.log(picocolors.cyan(`\n------ IX #${i + 1} ------\n`)); + console.log(`${ix.programAddress}\n`); + + (ix.accounts ?? []).forEach(account => { + const isWritable = + account.role === AccountRole.WRITABLE || account.role === AccountRole.WRITABLE_SIGNER; + const isSigner = + account.role === AccountRole.READONLY_SIGNER || account.role === AccountRole.WRITABLE_SIGNER; + const writable = isWritable ? 'W' : ''; + const signer = isSigner ? 'S' : ''; + console.log(`${String(account.address).padEnd(44)} ${writable.padStart(2)} ${signer.padStart(1)}`); + }); + + console.log(''); + + if (ix.data && ix.data.length > 0) { + console.log(`${decodeData(ix.data, Encoding.Base58)}\n`); + } + }); +} + function removeComputeUnitLimitInstruction< TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer, >(message: TTransactionMessage): TTransactionMessage { From a15b3cbfe28b6397ce368833bee7aa244daac64d Mon Sep 17 00:00:00 2001 From: aoikurokawa Date: Thu, 30 Apr 2026 04:03:06 +0900 Subject: [PATCH 2/2] fix: update --- clients/js/src/cli/utils.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clients/js/src/cli/utils.ts b/clients/js/src/cli/utils.ts index 19942b7..89633c9 100644 --- a/clients/js/src/cli/utils.ts +++ b/clients/js/src/cli/utils.ts @@ -121,11 +121,12 @@ async function exportTransactionPlan( m => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m), m => removeComputeUnitLimitInstruction(m), ); - logInstructions(message); const transaction = compileTransaction(message); const encodedTransaction = decodeData(transactionEncoder.encode(transaction), options.exportEncoding); const prefix = picocolors.yellow(`[Transaction #${i + 1}]`); - console.log(`${prefix}\n${encodedTransaction}\n`); + console.log(`\n${prefix}`); + logInstructions(message); + console.log(`${picocolors.yellow('Encoded:')}\n${encodedTransaction}\n`); } }