Skip to content

Commit

Permalink
Merge pull request #29 from ThalaLabs/0xbe1/configurable.network
Browse files Browse the repository at this point in the history
feat: configurable network as global option --network <network>
  • Loading branch information
0xbe1 authored Dec 8, 2024
2 parents c9a6d42 + 12e4597 commit 94a0161
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 32 deletions.
7 changes: 5 additions & 2 deletions src/commands/decode.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Command } from 'commander';
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { decode } from '../parser.js';

export function registerDecodeCommand(program: Command, aptos: Aptos) {
export function registerDecodeCommand(program: Command) {
program
.command('decode')
.description('Decode multisig transaction bytes')
Expand All @@ -19,6 +19,9 @@ export function registerDecodeCommand(program: Command, aptos: Aptos) {
}
)
.action(async (options: { bytes: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
console.log(chalk.blue(`Decoding multisig payload: ${options.bytes}`));
console.log(await decode(aptos, options.bytes));
Expand Down
7 changes: 5 additions & 2 deletions src/commands/encode.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import * as fs from 'node:fs';
import { Command } from 'commander';
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { encode } from '../parser.js';

export function registerEncodeCommand(program: Command, aptos: Aptos) {
export function registerEncodeCommand(program: Command) {
program
.command('encode')
.description('Encode entry function payload')
Expand All @@ -17,6 +17,9 @@ export function registerEncodeCommand(program: Command, aptos: Aptos) {
}
)
.action(async (options: { txnPayloadFile: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
console.log(chalk.blue(`Encoding transaction payload: ${options.txnPayloadFile}`));
// TODO: verify the file is a valid json with function_id, type_args, and args
Expand Down
7 changes: 6 additions & 1 deletion src/commands/execute.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
import { Command } from 'commander';
import {
Aptos,
AptosConfig,
generateRawTransaction,
generateTransactionPayload,
Network,
SimpleTransaction,
} from '@aptos-labs/ts-sdk';
import { loadAccount } from '../accounts.js';
import { decode } from '../parser.js';
import chalk from 'chalk';

export function registerExecuteCommand(program: Command, aptos: Aptos) {
export function registerExecuteCommand(program: Command) {
program
.command('execute')
.description('Execute a multisig transaction')
.requiredOption('-m, --multisig-address <multisig-address>', 'Multisig address')
.requiredOption('-p, --profile <profile>', 'Profile to use for the transaction')
.action(async (options: { multisigAddress: string; profile: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
const sender = loadAccount(options.profile);
// TODO: this throws error when there's no executable txn
Expand Down
6 changes: 4 additions & 2 deletions src/commands/executed.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Command } from 'commander';
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { decode } from '../parser.js';
import { fetchAliasIfPresent, getAllAddressesFromBook } from '../addressBook.js';
import { knownAddresses } from '../labels.js';

export function registerExecutedCommand(program: Command, aptos: Aptos) {
export function registerExecutedCommand(program: Command) {
program
.command('executed')
.description('Get successfully executed transactions for a multisig')
Expand All @@ -29,6 +29,8 @@ export function registerExecutedCommand(program: Command, aptos: Aptos) {
}
)
.action(async (options: { multisig: string; limit?: number }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));
const n = options.limit || 10;
console.log(
chalk.blue(
Expand Down
8 changes: 6 additions & 2 deletions src/commands/pending.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { Command } from 'commander';
import { fetchPendingTxns } from '../transactions.js';

export const registerPendingCommand = (program: Command, aptos: Aptos) => {
export const registerPendingCommand = (program: Command) => {
program
.command('pending')
.description('Get pending transaction(s) for a multisig')
Expand All @@ -27,8 +27,12 @@ export const registerPendingCommand = (program: Command, aptos: Aptos) => {
}
)
.action(async (options: { multisig: string; sequence_number?: number }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
console.log(chalk.blue(`Fetching pending transactions for multisig: ${options.multisig}`));
// const aptos = new Aptos(new AptosConfig({ network: options.network as Network }));
let txns = await fetchPendingTxns(aptos, options.multisig, options.sequence_number);
for (const txn of txns) {
console.log(txn);
Expand Down
7 changes: 5 additions & 2 deletions src/commands/propose.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Command } from 'commander';
import fs from 'fs';
import path from 'path';
import { Aptos, generateTransactionPayload } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, generateTransactionPayload, Network } from '@aptos-labs/ts-sdk';
import { decodeEntryFunction } from '../entryFunction.js';
import { loadAccount } from '../accounts.js';
import chalk from 'chalk';

export function registerProposeCommand(program: Command, aptos: Aptos) {
export function registerProposeCommand(program: Command) {
program
.command('propose')
.description('Propose a multisig transaction')
Expand All @@ -15,6 +15,9 @@ export function registerProposeCommand(program: Command, aptos: Aptos) {
.requiredOption('-f, --txn-payload-file <file>', 'Path to the transaction payload file')
.action(
async (options: { multisigAddress: string; profile: string; txnPayloadFile: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
const { multisigAddress, profile, txnPayloadFile } = options;
const sender = loadAccount(profile);
Expand Down
7 changes: 5 additions & 2 deletions src/commands/simulate.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { Command } from 'commander';
import { MultisigTransaction, summarizeTransactionSimulation } from '../transactions.js';
import { decode } from '../parser.js';

export const registerSimulateCommand = (program: Command, aptos: Aptos) => {
export const registerSimulateCommand = (program: Command) => {
program
.command('simulate')
.description('Simulate transaction for a multisig (ignoring signer thresholds)')
Expand All @@ -28,6 +28,9 @@ export const registerSimulateCommand = (program: Command, aptos: Aptos) => {
}
)
.action(async (options: { multisig: string; sequence_number: number }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
console.log(
chalk.blue(
Expand Down
7 changes: 5 additions & 2 deletions src/commands/summary.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { Command } from 'commander';
import { fetchAliasIfPresent, getAllAddressesFromBook } from '../addressBook.js';
import { numPendingTxns } from '../transactions.js';

export const registerSummaryCommand = (program: Command, aptos: Aptos) => {
export const registerSummaryCommand = (program: Command) => {
program
.command('summary')
.description('Get summary information for a multisig')
Expand All @@ -16,6 +16,9 @@ export const registerSummaryCommand = (program: Command, aptos: Aptos) => {
return value;
})
.action(async (options: { multisig: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

// 1. Fetch Signer Info
const [signers] = await aptos.view<string[][]>({
payload: {
Expand Down
10 changes: 8 additions & 2 deletions src/commands/vote.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Aptos } from '@aptos-labs/ts-sdk';
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import chalk from 'chalk';
import { Command } from 'commander';
import { voteTransaction } from '../transactions.js';

export const registerVoteCommand = (program: Command, aptos: Aptos) => {
export const registerVoteCommand = (program: Command) => {
const voteCommand = program.command('vote').description('Vote on pending transaction');

voteCommand
Expand Down Expand Up @@ -32,6 +32,9 @@ export const registerVoteCommand = (program: Command, aptos: Aptos) => {
return value;
})
.action(async (options: { multisig: string; sequence_number: number; profile: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
console.log(
chalk.blue(
Expand Down Expand Up @@ -77,6 +80,9 @@ export const registerVoteCommand = (program: Command, aptos: Aptos) => {
return value;
})
.action(async (options: { multisig: string; sequence_number: number; profile: string }) => {
const network = program.getOptionValue('network') as Network;
const aptos = new Aptos(new AptosConfig({ network }));

try {
console.log(
chalk.blue(
Expand Down
30 changes: 15 additions & 15 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#!/usr/bin/env node

import { Command } from 'commander';
import { Command, Option } from 'commander';

import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
import { registerPendingCommand } from './commands/pending.js';
import { registerAddressesCommand } from './commands/addresses.js';
import { registerExecutedCommand } from './commands/executed.js';
Expand All @@ -17,22 +16,23 @@ import { registerExecuteCommand } from './commands/execute.js';

const program = new Command();

// TODO: configurable network
const config = new AptosConfig({ network: Network.DEVNET });
const aptos = new Aptos(config);

program.name('dontrust').description('CLI tool for Aptos multisig management').version('1.0.0');
program.addOption(
new Option('-n, --network <network>', 'network to use')
.choices(['devnet', 'testnet', 'mainnet'])
.default('mainnet')
);

registerPendingCommand(program, aptos);
registerExecutedCommand(program, aptos);
registerDecodeCommand(program, aptos);
registerEncodeCommand(program, aptos);
registerPendingCommand(program);
registerExecutedCommand(program);
registerDecodeCommand(program);
registerEncodeCommand(program);
registerAddressesCommand(program);
registerSummaryCommand(program, aptos);
registerSimulateCommand(program, aptos);
registerVoteCommand(program, aptos);
registerSummaryCommand(program);
registerSimulateCommand(program);
registerVoteCommand(program);
registerDocgenCommand(program);
registerProposeCommand(program, aptos);
registerExecuteCommand(program, aptos);
registerProposeCommand(program);
registerExecuteCommand(program);

program.parse();

0 comments on commit 94a0161

Please sign in to comment.