diff --git a/packages/validator-bonds-cli/README.md b/packages/validator-bonds-cli/README.md index 4f4807b5..d65f5bbb 100644 --- a/packages/validator-bonds-cli/README.md +++ b/packages/validator-bonds-cli/README.md @@ -49,13 +49,11 @@ Options: -u, --cluster solana cluster URL, accepts shortcuts (d/devnet, m/mainnet) (default: "http://127.0.0.1:8899") -c alias for "-u, --cluster" --commitment Commitment (default: "confirmed") - -k, --keypair Wallet keypair (path or ledger url in format usb://ledger/[][?key=]) (default: ~/.config/solana/id.json) + -k, --keypair Wallet keypair (path or ledger url in format usb://ledger/[][?key=]). Wallet keypair is used to pay for the transaction fees and as default value for signers. (default: ~/.config/solana/id.json) --program-id Program id of validator bonds contract (default: vBoNdEvzMrSai7is21XgVYik65mqtaKXuSdMBJ1xkW4) -s, --simulate Simulate (default: false) - -p, --print-only Print only mode, no execution, instructions are printed in base64 to output. This can be used for placing the admin commands to SPL - Governance UI by hand. (default: false) - --skip-preflight transaction execution flag "skip-preflight", see https://solanacookbook.com/guides/retrying-transactions.html#the-cost-of-skipping-preflight - (default: false) + -p, --print-only Print only mode, no execution, instructions are printed in base64 to output. This can be used for placing the admin commands to SPL Governance UI by hand. (default: false) + --skip-preflight transaction execution flag "skip-preflight", see https://solanacookbook.com/guides/retrying-transactions.html#the-cost-of-skipping-preflight (default: false) -d, --debug printing more detailed information of the CLI execution (default: false) -v, --verbose alias for --debug (default: false) -h, --help display help for command diff --git a/packages/validator-bonds-cli/__tests__/test-validator/initConfig.spec.ts b/packages/validator-bonds-cli/__tests__/test-validator/initConfig.spec.ts index 438dace3..df3c3ca9 100644 --- a/packages/validator-bonds-cli/__tests__/test-validator/initConfig.spec.ts +++ b/packages/validator-bonds-cli/__tests__/test-validator/initConfig.spec.ts @@ -19,6 +19,9 @@ describe('Init config account using CLI', () => { let configPath: string let configKeypair: Keypair let configCleanup: () => Promise + let keypairFeePayerPath: string + let keypairFeePayerKeypair: Keypair + let keypairFeePayerCleanup: () => Promise beforeAll(async () => { shellMatchers() @@ -31,10 +34,16 @@ describe('Init config account using CLI', () => { keypair: configKeypair, cleanup: configCleanup, } = await createTempFileKeypair()) + ;({ + path: keypairFeePayerPath, + keypair: keypairFeePayerKeypair, + cleanup: keypairFeePayerCleanup, + } = await createTempFileKeypair()) }) afterEach(async () => { await configCleanup() + await keypairFeePayerCleanup() }) it('inits config account', async () => { @@ -44,17 +53,30 @@ describe('Init config account using CLI', () => { cleanup: cleanupRentPayer, } = await createTempFileKeypair() const rentPayerFunds = 10 * LAMPORTS_PER_SOL - const tx = new Transaction().add( - SystemProgram.transfer({ - fromPubkey: provider.wallet.publicKey, - toPubkey: rentPayerKeypair.publicKey, - lamports: rentPayerFunds, - }) + await provider.sendAndConfirm( + new Transaction().add( + SystemProgram.transfer({ + fromPubkey: provider.wallet.publicKey, + toPubkey: rentPayerKeypair.publicKey, + lamports: rentPayerFunds, + }) + ) ) - await provider.sendAndConfirm!(tx) await expect( provider.connection.getBalance(rentPayerKeypair.publicKey) ).resolves.toStrictEqual(rentPayerFunds) + await provider.sendAndConfirm( + new Transaction().add( + SystemProgram.transfer({ + fromPubkey: provider.wallet.publicKey, + toPubkey: keypairFeePayerKeypair.publicKey, + lamports: LAMPORTS_PER_SOL, + }) + ) + ) + await expect( + provider.connection.getBalance(keypairFeePayerKeypair.publicKey) + ).resolves.toStrictEqual(LAMPORTS_PER_SOL) const admin = Keypair.generate().publicKey const operator = Keypair.generate().publicKey @@ -66,6 +88,8 @@ describe('Init config account using CLI', () => { 'cli', '-u', provider.connection.rpcEndpoint, + '-k', + keypairFeePayerPath, '--program-id', program.programId.toBase58(), 'init-config', @@ -113,6 +137,8 @@ describe('Init config account using CLI', () => { 'cli', '-u', provider.connection.rpcEndpoint, + '-k', + keypairFeePayerPath, '--program-id', program.programId.toBase58(), 'init-config', diff --git a/packages/validator-bonds-cli/src/index.ts b/packages/validator-bonds-cli/src/index.ts index df610f53..4f9e6d0d 100644 --- a/packages/validator-bonds-cli/src/index.ts +++ b/packages/validator-bonds-cli/src/index.ts @@ -7,7 +7,6 @@ import { parseKeypair, parsePubkey, } from '@marinade.finance/cli-common' -import { Keypair } from '@solana/web3.js' import { installCommands } from './commands' import { Logger } from 'pino' import { setValidatorBondsCliContext } from './context' @@ -29,8 +28,9 @@ program .option('--commitment ', 'Commitment', 'confirmed') .option( '-k, --keypair ', - 'Wallet keypair (path or ledger url in format usb://ledger/[][?key=]) ' + - ` (default: ${DEFAULT_KEYPAIR_PATH})` + 'Wallet keypair (path or ledger url in format usb://ledger/[][?key=]). ' + + 'Wallet keypair is used to pay for the transaction fees and as default value for signers. ' + + `(default: ${DEFAULT_KEYPAIR_PATH})` ) .option( '--program-id ', @@ -58,8 +58,8 @@ program .hook('preAction', async (command: Command, action: Command) => { const wallet = command.opts().keypair const walletKeypair = wallet - ? ((await wallet) as Keypair) - : await parseKeypair('~/.config/solana/id.json') + ? await parseKeypair(wallet) + : await parseKeypair(DEFAULT_KEYPAIR_PATH) if (command.opts().debug || command.opts().verbose) { logger.level = 'debug' }