PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-bin/src/commands/cmdAddress
Просмотр файла: cmdGenerate.ts
import * as utxolib from '@bitgo/utxo-lib';
import { CommandModule } from 'yargs';
import { getNetworkOptionsDemand, keyOptions, KeyOptions } from '../../args';
import {
formatAddressTree,
formatDescriptorAddress,
formatFixedScriptAddress,
generateDescriptorAddress,
generateFixedScriptAddress,
getDescriptorAddressPlaceholderDescription,
getFixedScriptAddressPlaceholderDescription,
getRange,
parseIndexRange,
} from '../../generateAddress';
type IndexLimitOptions = {
index?: string[];
limit?: number;
};
const indexLimitOptions = {
index: {
type: 'string',
array: true,
description: 'Address index. Can be given as a range (e.g. 0-99). Takes precedence over --limit.',
},
limit: {
type: 'number',
description: 'Alias for --index with range starting at 0 to limit-1.',
default: 100,
},
} as const;
function getIndexRangeFromArgv(argv: IndexLimitOptions): number[] {
if (argv.index) {
return parseIndexRange(argv.index);
}
if (argv.limit) {
return getRange(0, argv.limit - 1);
}
throw new Error(`no index or limit`);
}
type ArgsGenerateAddressFixedScript = KeyOptions &
IndexLimitOptions & {
network: utxolib.Network;
chain?: number[];
format: string;
};
export const cmdGenerateFixedScript: CommandModule<unknown, ArgsGenerateAddressFixedScript> = {
command: 'fromFixedScript',
describe: 'generate bitgo fixed-script addresses',
builder(b) {
return b
.options(getNetworkOptionsDemand('bitcoin'))
.options(keyOptions)
.option('format', {
type: 'string',
default: '%p0\t%a',
description: `Format string.\nPlaceholders:\n${getFixedScriptAddressPlaceholderDescription()}`,
})
.option('chain', { type: 'number', array: true, description: 'Address chain' })
.options(indexLimitOptions);
},
handler(argv): void {
for (const address of generateFixedScriptAddress({
...argv,
index: getIndexRangeFromArgv(argv),
})) {
if (argv.format === 'tree') {
console.log(formatAddressTree(address));
} else {
console.log(formatFixedScriptAddress(address, argv.format));
}
}
},
};
type ArgsGenerateDescriptorAddress = {
network: utxolib.Network;
descriptor: string;
format: string;
} & IndexLimitOptions;
export const cmdFromDescriptor: CommandModule<unknown, ArgsGenerateDescriptorAddress> = {
command: 'fromDescriptor [descriptor]',
describe: 'generate address from descriptor',
builder(b) {
return b
.options(getNetworkOptionsDemand('bitcoin'))
.positional('descriptor', {
type: 'string',
demandOption: true,
})
.options({
format: {
type: 'string',
description: `Format string.\nPlaceholders:\n${getDescriptorAddressPlaceholderDescription()}`,
default: '%i\t%a',
},
})
.options(indexLimitOptions);
},
handler(argv) {
for (const address of generateDescriptorAddress({
...argv,
index: getIndexRangeFromArgv(argv),
})) {
if (argv.format === 'tree') {
console.log(formatAddressTree(address));
} else {
console.log(formatDescriptorAddress(address, argv.format));
}
}
},
};
Выполнить команду
Для локальной разработки. Не используйте в интернете!