UNPKG

@btc-vision/bitcoin-rpc

Version:

The one and only fully typed Bitcoin RPC client for Node.js

1,483 lines (1,236 loc) 44.9 kB
import { IFetchOptions, UnsuccessfulFetch } from 'rpc-request'; import { RESTClient, RESTIniOptions } from './rest.js'; import { BlockData } from '../types/BlockData.js'; import { RawTransaction } from '../types/BitcoinRawTransaction.js'; import { BitcoinVerbosity } from '../types/BitcoinVerbosity.js'; export type RPCIniOptions = RESTIniOptions & { user?: string; pass: string; wallet?: string; fullResponse?: boolean; }; export type JSONRPC = { jsonrpc?: string | number; id?: string | number; method: string; params?: object; }; export type Verbosity = { verbosity?: 0 | 1 | 2 }; export type Verbose = { verbose?: boolean }; export type Height = { height: number }; export type Blockhash = { blockhash: string }; export type TxId = { txid: string }; export type GetBlockParams = Verbosity & Blockhash; export type GetBlockFilterParams = Blockhash & { filtertype?: string }; export type GetBlockHeaderParams = Blockhash & Verbose; export type GetBlockStatsParams = { hash_or_height: string | number; stats?: string[]; }; export type GetChainTxStatsParams = { nblocks?: number; blockhash?: string }; export type GetMemPoolParams = TxId & Verbose; export type GetTxOutParams = TxId & { n: number; include_mempool?: boolean }; export type GetTxOutProofParams = { txids: string[]; blockhash?: string }; export type Descriptor = string | { desc: string; range: number | [number, number] }; export type ScanTxOutSetParams = { action: 'start' | 'abort' | 'status'; scanobjects: Descriptor[]; }; export type HelpParams = { command?: string }; export type LoggingParams = { include?: string[] | 'all' | 'none' | 0 | 1; exclude?: string[] | 'all' | 'none' | 0 | 1; }; export type GenerateParams = { nblocks: number; maxtries?: number }; export type GenerateToAddressParams = GenerateParams & { address: string }; export type GetBlockTemplateParams = { template_request: { mode?: 'template' | 'proposal'; capabilities?: string[]; rules: string[]; }; }; export type PrioritiseTransactionParams = TxId & { fee_delta: number }; export type HexData = { hexdata: string }; export type AddNodeParams = { node: string; command: 'add' | 'remove' | 'onetry'; }; export type DisconnectNodeParams = { address: string } | { nodeid: number }; export type SetBanParams = { subnet: string; command: 'add' | 'remove'; bantime?: number; absolute?: boolean; }; export type AddressType = 'legacy' | 'p2sh-segwit' | 'bech32'; export type CreateMultiSigParams = { nrequired: number; keys: string[]; address_type?: AddressType; }; export type DeriveAddressesParams = { descriptor: string; range?: number | [number, number]; }; export type EstimateMode = { estimate_mode?: 'UNSET' | 'ECONOMICAL' | 'CONSERVATIVE'; }; export type EstimateSmartFeeParams = EstimateMode & { conf_target: number }; export type SignMessageWithPrivKeyParams = { privkey: string; message: string }; export type VerifyMessageParams = { address: string; signature: string; message: string; }; export type HexString = { hexstring: string }; export type ConvertToPsbtParams = HexString & { permitsigdata?: boolean; iswitness?: boolean; }; export type BaseTransactionInput = { txid: string; vout: number }; export type TransactionInput = BaseTransactionInput & { sequence?: number }; export type TransactionOutput = { [address: string]: string | number } | { data: string }; export type BaseCreateTransaction = { inputs: TransactionInput[]; outputs: TransactionOutput[]; locktime?: number; }; export type CreateTransactionParams = BaseCreateTransaction & { replaceable?: boolean; }; export type DecodeRawTransactionParams = HexString & { iswitness?: boolean }; export type FinalizePsbtParams = { psbt: string; extract?: boolean }; export type BaseFundOptions = { options?: EstimateMode & { changeAddress?: string; changePosition?: number; change_type?: string; includeWatching?: boolean; lockUnspents?: boolean; feeRate?: number | string; subtractFeeFromOutputs?: number[]; replaceable?: boolean; conf_target?: number; }; }; export type FundRawTransactionParams = HexString & { options?: BaseFundOptions; iswitness?: boolean; }; export type GetRawTransactionParams = TxId & Verbose & { blockhash?: string }; export type SendRawTransactionParams = HexString & { maxfeerate?: number | string; }; export type PrevTx = { txid: string; vout: number; scriptPubKey: string; redeemScript?: string; witnessScript?: string; amount: number | string; }; export type SigHashType = | 'ALL' | 'NONE' | 'SINGLE' | 'ALL|ANYONECANPAY' | 'NONE|ANYONECANPAY' | 'SINGLE|ANYONECANPAY'; export type SignRawTransactionWithWalletParams = HexString & { prevtxs?: PrevTx[]; sighashtype?: SigHashType; }; export type SignRawTransactionWithKeyParams = { privkeys: string[]; } & SignRawTransactionWithWalletParams; export type TestmemPoolAcceptParams = { rawtxs: string[]; maxfeerate?: string | number; }; export type UtxoUpdatePsbtParams = { psbt: string; descriptors?: (string | { desc: string; range?: number | [number, number] })[]; }; export type Label = { label?: string }; export type AddMultiSigAddressParams = CreateMultiSigParams & Label; export type BumpFeeParams = { txid: string; options?: EstimateMode & { replaceable?: boolean } & ( | { confTarget?: number } | { totalFee?: number } ); }; export type CreateWalletParams = { passphrase?: string; avoid_reuse?: boolean; wallet_name: string; disable_private_keys?: boolean; blank?: boolean; }; export type GetBalanceParams = { avoid_reuse?: boolean; minconf?: number; include_watchonly?: boolean; }; export type GetNewAddressParams = { address_type?: AddressType } & Label; export type GetReceivedByAddressParams = { address: string; minconf?: number }; export type GetReceivedByLabelParams = { label: string; minconf?: number; }; export type GetTransactionParams = TxId & { include_watchonly?: boolean; verbose?: boolean; }; export type ImportAddressParams = { address: string; label?: string; rescan?: boolean; p2sh?: boolean; }; export type ImportMultiRequest = { timestamp: number | 'now'; internal?: boolean; watchonly?: boolean; label?: string; keypool?: boolean; } & ( | { desc: string; range?: number | [number, number] } | { scriptPubKey: { address: string } | string; redeemscript?: string; witnessscript?: string; pubkeys?: string[]; keys?: string[]; } ); export type ImportMultiParams = { requests: ImportMultiRequest[]; options?: { rescan?: boolean }; }; export type ImportPrivKeyParams = { privkey: string; label?: string; rescan?: boolean; }; export type ImportPrunedFundsParams = { rawtransaction: string; txoutproof: string; }; export type ImportPubKeyParams = { pubkey: string; label?: string; rescan?: boolean; }; export type ListLabelsParams = { purpose: 'receive' | 'send' }; export type ListReceivedByAddressParams = ListReceivedByLabelParams & { address_filter?: string; }; export type ListReceivedByLabelParams = { minconf?: number; include_empty?: boolean; include_watchonly?: boolean; }; export type ListSinceBlockParams = { blockhash?: string; target_confirmations?: number; include_watchonly?: boolean; include_removed?: boolean; }; export type ListTransactionsParams = { label?: string; count?: number; skip?: number; include_watchonly?: boolean; }; export type ListUnspentParams = { minconf?: number; maxconf?: number; addresses?: string[]; include_unsafe?: boolean; query_options?: { minimumAmount?: number | string; maximumAmount?: number | string; maximumCount?: number; minimumSumAmount?: number | string; }; }; export type LockUnspentParams = { unlock: boolean; transactions?: BaseTransactionInput[]; }; export type RescanBlockchainParams = { start_height?: number; stop_height?: number; }; export type BaseSendParams = EstimateMode & { comment?: string; replaceable?: boolean; conf_target?: number; }; export type SendManyParams = BaseSendParams & { amounts: { [address: string]: number | string }; subtractfeefrom?: string[]; }; export type SendToAddressParams = BaseSendParams & { avoid_reuse?: boolean; address: string; amount: string | number; comment_to?: string; subtractfeefromamount?: boolean; }; export type SetHDSeedParams = { newkeypool?: boolean; seed?: string }; export type SetLabelParams = { address: string; label: string }; export type SetWalletFlagParams = { flag: string; value?: boolean }; export type SignMessageParams = { address: string; message: string }; export type WalletCreateFundedPsbtParams = BaseCreateTransaction & BaseFundOptions & { bip32derivs?: boolean }; export type WalletPassphraseParams = { passphrase: string; timeout: number }; export type WalletPassphraseChangeParams = { oldpassphrase: string; newpassphrase: string; }; export type WalletProcessPsbtParams = { psbt: string; sign?: boolean; sighashtype?: SigHashType; bip32derivs?: boolean; }; interface JSONRPCError { code: number; message: string; } interface JSONRPCResult { result: object | null; error: JSONRPCError | null; id: string; } interface DefinedUnsuccessfulFetch extends UnsuccessfulFetch { data: JSONRPCResult; } export class RPCClient extends RESTClient { wallet?: string; fullResponse?: boolean; constructor({ user = '', pass, wallet, fullResponse, ...options }: RPCIniOptions) { super({ ...options, auth: { user, pass } }); this.fullResponse = !!fullResponse; this.wallet = typeof wallet === 'string' ? wallet : undefined; } batch(body: JSONRPC | JSONRPC[], uri = '/'): Promise<JSONRPCResult> { const request: IFetchOptions = { //headers: { // 'Content-Type': 'application/json', //}, body: JSON.stringify(body), }; return super.post(uri, request); } async rpc<T = unknown>(method: string, params = {}, wallet?: string): Promise<T> { const uri = typeof wallet === 'undefined' ? '/' : 'wallet/' + wallet; const body = { method, params, jsonrpc: '1.0', id: 'rpc-bitcoin' }; try { const response = await this.batch(body, uri); if (response.error && response.result === null) { throw this.fullResponse ? response.error : new Error(response.error.message); } if (!response.result) { throw new Error('No result'); } return (this.fullResponse ? response : response.result) as T; } catch (error) { const err: DefinedUnsuccessfulFetch = error as DefinedUnsuccessfulFetch; if (err && err.data && err.data.error && err.data.result === null) { throw this.fullResponse ? err.data : new Error(err.data.error.message); } throw error; } } /** * @description Returns the hash of the best (tip) block in the longest blockchain. */ getbestblockhash() { return this.rpc('getbestblockhash'); } /** * @description If verbosity is 0, returns a string that is serialized, hex-encoded data for block 'hash'. If verbosity is 1, returns an Object with information about block <hash>. If verbosity is 2, returns an Object with information about block <hash> and information about each transaction. */ getblock({ blockhash, verbosity = 1 }: GetBlockParams) { return this.rpc('getblock', { blockhash, verbosity }); } async getblockBatch(blockhashes: string[], verbosity = 1) { try { const body = blockhashes.map((blockhash) => { return { method: 'getblock', params: { blockhash, verbosity, }, jsonrpc: '1.0', id: 'rpc-bitcoin', }; }); const response = await this.batch(body, '/'); const finalResponse: (BlockData | null)[] = []; for (const res of response as unknown as JSONRPCResult[]) { if (res.result) { finalResponse.push(res.result as unknown as BlockData); } else { finalResponse.push(null); } } return finalResponse; } catch (error) { const err: DefinedUnsuccessfulFetch = error as DefinedUnsuccessfulFetch; if (err && err.data && err.data.error && err.data.result === null) { throw this.fullResponse ? err.data : new Error(err.data.error.message); } throw error; } } /** * @description Returns an object containing various state info regarding blockchain processing. */ getblockchaininfo() { return this.rpc('getblockchaininfo'); } /** * @description Returns the number of blocks in the longest blockchain. */ getblockcount() { return this.rpc('getblockcount'); } /** * @description Retrieve a BIP 157 content filter for a particular block. */ getblockfilter(options: GetBlockFilterParams) { return this.rpc('getblockfilter', options); } /** * @description Returns hash of block in best-block-chain at height provided. */ getblockhash({ height }: Height) { return this.rpc('getblockhash', { height }); } /** * @description Returns hash of block in best-block-chain at height provided. */ async getblockhashes(heights: Height, count: number) { try { const response = await this.batch( Array.from({ length: count }, (_, i) => { return { method: 'getblockhash', params: { height: heights.height + i }, jsonrpc: '1.0', id: 'rpc-bitcoin', }; }), '/', ); const finalResponse: (string | null)[] = []; for (const res of response as unknown as JSONRPCResult[]) { if (res.result) { finalResponse.push(res.result as unknown as string); } else { finalResponse.push(null); } } return finalResponse; } catch (error) { const err: DefinedUnsuccessfulFetch = error as DefinedUnsuccessfulFetch; if (err && err.data && err.data.error && err.data.result === null) { throw this.fullResponse ? err.data : new Error(err.data.error.message); } throw error; } } /** * @description If verbose is `false`, returns a string that is serialized, hex-encoded data for blockheader 'hash'. If verbose is `true`, returns an Object with information about blockheader <hash>. */ getblockheader({ blockhash, verbose = true }: GetBlockHeaderParams) { return this.rpc('getblockheader', { blockhash, verbose }); } /** * @description Compute per block statistics for a given window. */ getblockstats({ hash_or_height, stats = [] }: GetBlockStatsParams) { return this.rpc('getblockstats', { hash_or_height, stats }); } /** * @description Return information about all known tips in the block tree, including the main chain as well as orphaned branches. */ getchaintips() { return this.rpc('getchaintips'); } /** * @description Compute statistics about the total number and rate of transactions in the chain. */ getchaintxstats({ nblocks, blockhash }: GetChainTxStatsParams) { return this.rpc('getchaintxstats', { nblocks, blockhash }); } /** * @description Returns the proof-of-work difficulty as a multiple of the minimum difficulty. */ getdifficulty() { return this.rpc('getdifficulty'); } /** * @description If txid is in the mempool, returns all in-mempool ancestors. */ getmempoolancestors({ txid, verbose = false }: GetMemPoolParams) { return this.rpc('getmempoolancestors', { txid, verbose }); } /** * @description If txid is in the mempool, returns all in-mempool descendants. */ getmempooldescendants({ txid, verbose = false }: GetMemPoolParams) { return this.rpc('getmempooldescendants', { txid, verbose }); } /** * @description Returns mempool data for given transaction */ getmempoolentry({ txid }: TxId) { return this.rpc('getmempoolentry', { txid }); } /** * @description Returns details on the active state of the TX memory pool. */ getmempoolinfo() { return this.rpc('getmempoolinfo'); } /** * @description Returns all transaction ids in memory pool as a json array of string transaction ids. */ getrawmempool({ verbose = false }: Verbose = {}) { return this.rpc('getrawmempool', { verbose }); } /** * @description Returns details about an unspent transaction output. */ gettxout({ txid, n, include_mempool = true }: GetTxOutParams) { return this.rpc('gettxout', { txid, n, include_mempool }); } /** * @description Returns a hex-encoded proof that "txid" was included in a block. */ gettxoutproof({ txids, blockhash }: GetTxOutProofParams) { return this.rpc('gettxoutproof', { txids, blockhash }); } /** * @description Returns statistics about the unspent transaction output set. */ gettxoutsetinfo() { return this.rpc('gettxoutsetinfo'); } /** * @description Treats a block as if it were received before others with the same work. */ preciousblock({ blockhash }: Blockhash) { return this.rpc('preciousblock', { blockhash }); } /** * @description Prune the blockchain. */ pruneblockchain({ height }: Height) { return this.rpc('pruneblockchain', { height }); } /** * @description Dumps the mempool to disk. It will fail until the previous dump is fully loaded. */ savemempool() { return this.rpc('savemempool'); } /** * @description Scans the unspent transaction output set for entries that match certain output descriptors. */ scantxoutset({ action, scanobjects }: ScanTxOutSetParams) { return this.rpc('scantxoutset', { action, scanobjects }); } /** * @description Verifies blockchain database. */ verifychain({ checklevel = 3, nblocks = 6 } = {}) { return this.rpc('verifychain', { checklevel, nblocks }); } /** * @description Verifies that a proof points to a transaction in a block, returning the transaction it commits to and throwing an RPC error if the block is not in our best chain. */ verifytxoutproof({ proof }: { proof: string }) { return this.rpc('verifytxoutproof', { proof }); } /** * @description Returns an object containing information about memory usage. */ getmemoryinfo({ mode = 'stats' } = {}) { return this.rpc('getmemoryinfo', { mode }); } /** * @description Returns details of the RPC server. */ getrpcinfo() { return this.rpc('getrpcinfo'); } /** * @description List all commands, or get help for a specified command. */ help({ command }: HelpParams = {}) { return this.rpc('help', { command }); } /** * @description Gets and sets the logging configuration. */ logging({ include, exclude }: LoggingParams = {}) { return this.rpc('logging', { include, exclude }); } /** * @description Stop Bitcoin server. */ stop() { return this.rpc('stop'); } /** * @description Returns the total uptime of the server. */ uptime() { return this.rpc('uptime'); } /** * @description Mine blocks immediately to a specified address (before the RPC call returns) */ generatetoaddress(options: GenerateToAddressParams, wallet?: string) { return this.rpc('generatetoaddress', options, wallet || this.wallet); } /** * @description It returns data needed to construct a block to work on. */ getblocktemplate(options: GetBlockTemplateParams) { return this.rpc('getblocktemplate', options); } /** * @description Returns a json object containing mining-related information. */ getmininginfo() { return this.rpc('getmininginfo'); } /** * @description Returns the estimated network hashes per second based on the last `n` blocks. */ getnetworkhashps(options = {}) { return this.rpc('getnetworkhashps', options); } /** * @description Accepts the transaction into mined blocks at a higher (or lower) priority */ prioritisetransaction(options: PrioritiseTransactionParams) { return this.rpc('prioritisetransaction', options); } /** * @description Attempts to submit new block to network. */ submitblock(options: HexData) { return this.rpc('submitblock', options); } /** * @description Decode the given hexdata as a header and submit it as a candidate chain tip if valid. */ submitheader(options: HexData) { return this.rpc('submitheader', options); } /** * @description Attempts to add or remove a node from the addnode list. */ addnode(options: AddNodeParams) { return this.rpc('addnode', options); } /** * @description Clear all banned IPs. */ clearbanned() { return this.rpc('clearbanned'); } /** * @description Immediately disconnects from the specified peer node. */ disconnectnode(params: DisconnectNodeParams) { if ('address' in params) { return this.rpc('disconnectnode', { address: params.address }); } return this.rpc('disconnectnode', { nodeid: params.nodeid }); } /** * @description Returns information about the given added node, or all added nodes */ getaddednodeinfo(options: { node?: string } = {}) { return this.rpc('getaddednodeinfo', options); } /** * @description Returns the number of connections to other nodes. */ getconnectioncount() { return this.rpc('getconnectioncount'); } /** * @description Returns information about network traffic, including bytes in, bytes out, and current time. */ getnettotals() { return this.rpc('getnettotals'); } /** * @description Returns an object containing various state info regarding P2P networking. */ getnetworkinfo() { return this.rpc('getnetworkinfo'); } /** * @description Return known addresses which can potentially be used to find new nodes in the network */ getnodeaddresses(options = {}) { return this.rpc('getnodeaddresses', options); } /** * @description Returns data about each connected network node as a json array of objects. */ getpeerinfo() { return this.rpc('getpeerinfo'); } /** * @description List all banned IPs/Subnets. */ listbanned() { return this.rpc('listbanned'); } /** * @description Requests that a ping be sent to all other nodes, to measure ping time. */ ping() { return this.rpc('ping'); } /** * @description Attempts to add or remove an IP/Subnet from the banned list */ setban(options: SetBanParams) { return this.rpc('setban', options); } /** * @description Disable/enable all p2p network activity. */ setnetworkactive(options: { state: boolean }) { return this.rpc('setnetworkactive', options); } /** * @description Analyzes and provides information about the current status of a PSBT and its inputs */ analyzepsbt(options: { psbt: string }) { return this.rpc('analyzepsbt', options); } /** * @description Combine multiple partially signed Bitcoin transactions into one transaction. */ combinepsbt(options: { txs: string[] }) { return this.rpc('combinepsbt', options); } /** * @description Combine multiple partially signed transactions into one transaction. */ combinerawtransaction(options: { txs: string[] }) { return this.rpc('combinerawtransaction', options); } /** * @description Converts a network serialized transaction to a PSBT. */ converttopsbt(options: ConvertToPsbtParams) { return this.rpc('converttopsbt', options); } /** * @description Creates a transaction in the Partially Signed Transaction format. */ createpsbt(options: CreateTransactionParams) { return this.rpc('createpsbt', options); } /** * @description Create a transaction spending the given inputs and creating new outputs. */ createrawtransaction(options: CreateTransactionParams) { return this.rpc('createrawtransaction', options); } /** * @description Return a JSON object representing the serialized, base64-encoded partially signed Bitcoin transaction. */ decodepsbt(options: { psbt: string }) { return this.rpc('decodepsbt', options); } /** * @description Return a JSON object representing the serialized, hex-encoded transaction. */ decoderawtransaction(options: DecodeRawTransactionParams) { return this.rpc('decoderawtransaction', options); } /** * @description Decode a hex-encoded script. */ decodescript(options: HexString) { return this.rpc('decodescript', options); } /** * @description Finalize the inputs of a PSBT. */ finalizepsbt(options: FinalizePsbtParams) { return this.rpc('finalizepsbt', options); } /** * @description Add inputs to a transaction until it has enough in value to meet its out value. */ fundrawtransaction(options: FundRawTransactionParams, wallet?: string) { return this.rpc('fundrawtransaction', options, wallet || this.wallet); } /** * @description Return the raw transaction data. */ getrawtransaction(options: GetRawTransactionParams) { return this.rpc('getrawtransaction', options); } async getrawtransactionBatch<V extends BitcoinVerbosity>(txids: string[], verbose = true) { try { const body = txids.map((txid) => { return { method: 'getrawtransaction', params: { txid, verbose, }, jsonrpc: '1.0', id: 'rpc-bitcoin', }; }); const response = await this.batch(body, '/'); const finalResponse: (RawTransaction<V> | null)[] = []; for (const res of response as unknown as JSONRPCResult[]) { if (res.result) { finalResponse.push(res.result as unknown as RawTransaction<V>); } else { finalResponse.push(null); } } return finalResponse; } catch (error) { const err: DefinedUnsuccessfulFetch = error as DefinedUnsuccessfulFetch; if (err && err.data && err.data.error && err.data.result === null) { throw this.fullResponse ? err.data : new Error(err.data.error.message); } throw error; } } /** * @description Joins multiple distinct PSBTs with different inputs and outputs into one PSBT with inputs and outputs from all of the PSBTs. */ joinpsbts(options: { txs: string[] }) { return this.rpc('joinpsbts', options); } /** * @description Submits raw transaction (serialized, hex-encoded) to local node and network. */ sendrawtransaction(options: SendRawTransactionParams) { return this.rpc('sendrawtransaction', options); } /** * @description Sign inputs for raw transaction */ signrawtransactionwithkey(options: SignRawTransactionWithKeyParams) { return this.rpc('signrawtransactionwithkey', options); } /** * @description Returns result of mempool acceptance tests indicating if raw transaction (serialized, hex-encoded) would be accepted by mempool. */ testmempoolaccept(options: TestmemPoolAcceptParams) { return this.rpc('testmempoolaccept', options); } /** * @description Updates a PSBT with witness UTXOs retrieved from the UTXO set or the mempool. */ utxoupdatepsbt(options: UtxoUpdatePsbtParams) { return this.rpc('utxoupdatepsbt', options); } /** * @description Creates a multi-signature address with n signature of m keys required. */ createmultisig(options: CreateMultiSigParams) { return this.rpc('createmultisig', options); } /** * @description Derives one or more addresses corresponding to an output descriptor. */ deriveaddresses({ descriptor, range }: DeriveAddressesParams) { return this.rpc('deriveaddresses', { descriptor, range }); } /** * @description Estimates the approximate fee per kilobyte needed for a transaction to begin confirmation within `conf_target` blocks if possible and return the number of blocks for which the estimate is valid. */ estimatesmartfee(options: EstimateSmartFeeParams) { return this.rpc('estimatesmartfee', options); } /** * @description Analyses a descriptor. */ getdescriptorinfo(options: { descriptor: string }) { return this.rpc('getdescriptorinfo', options); } /** * @description Sign a message with the private key of an address. */ signmessagewithprivkey(options: SignMessageWithPrivKeyParams) { return this.rpc('signmessagewithprivkey', options); } /** * @description Return information about the given bitcoin address. */ validateaddress(options: { address: string }) { return this.rpc('validateaddress', options); } /** * @description Verify a signed message */ verifymessage(options: VerifyMessageParams) { return this.rpc('verifymessage', options); } /** * @description Mark in-wallet transaction `txid` as abandoned */ abandontransaction(options: TxId, wallet?: string) { return this.rpc('abandontransaction', options, wallet || this.wallet); } /** * @description Stops current wallet rescan triggered by an RPC call */ abortrescan(wallet?: string) { return this.rpc('abortrescan', undefined, wallet || this.wallet); } /** * @description Add a nrequired-to-sign multisignature address to the wallet. */ addmultisigaddress(options: AddMultiSigAddressParams, wallet?: string) { return this.rpc('addmultisigaddress', options, wallet || this.wallet); } /** * @description Safely copies current wallet file to destination. */ backupwallet(options: { destination: string }, wallet?: string) { return this.rpc('backupwallet', options, wallet || this.wallet); } /** * @description Bumps the fee of an opt-in-RBF transaction T, replacing it with a new transaction B. */ bumpfee(options: BumpFeeParams, wallet?: string) { return this.rpc('bumpfee', options, wallet || this.wallet); } /** * @description Creates and loads a new wallet. */ createwallet(options: CreateWalletParams) { return this.rpc('createwallet', options); } /** * @description Reveals the private key corresponding to 'address'. */ dumpprivkey(options: { address: string }, wallet?: string) { return this.rpc('dumpprivkey', options, wallet || this.wallet); } /** * @description Dumps all wallet keys in a human-readable format to a server-side file. */ dumpwallet(options: { filename: string }, wallet?: string) { return this.rpc('dumpwallet', options, wallet || this.wallet); } /** * @description Encrypts the wallet with 'passphrase'. */ encryptwallet(options: { passphrase: string }, wallet?: string) { return this.rpc('encryptwallet', options, wallet || this.wallet); } /** * @description Returns the list of addresses assigned the specified label. */ getaddressesbylabel(options: { label: string }, wallet?: string) { return this.rpc('getaddressesbylabel', options, wallet || this.wallet); } /** * @description Return information about the given bitcoin address. */ getaddressinfo(options: { address: string }, wallet?: string) { return this.rpc('getaddressinfo', options, wallet || this.wallet); } /** * @description Returns the total available balance. */ getbalance(options: GetBalanceParams, wallet?: string) { return this.rpc('getbalance', options, wallet || this.wallet); } /** * @description Returns all balances in BTC. */ getbalances(wallet?: string) { return this.rpc('getbalances', undefined, wallet || this.wallet); } /** * @description Returns a new Bitcoin address for receiving payments. */ getnewaddress(options: GetNewAddressParams, wallet?: string) { return this.rpc('getnewaddress', options, wallet || this.wallet); } /** * @description Returns a new Bitcoin address, for receiving change. */ getrawchangeaddress(options: { address_type?: AddressType }, wallet?: string) { return this.rpc('getrawchangeaddress', options, wallet || this.wallet); } /** * @description Returns the total amount received by the given address in transactions with at least minconf confirmations. */ getreceivedbyaddress(options: GetReceivedByAddressParams, wallet?: string) { return this.rpc('getreceivedbyaddress', options, wallet || this.wallet); } /** * @description Returns the total amount received by addresses with `label` in transactions with at least `minconf` confirmations. */ getreceivedbylabel(options: GetReceivedByLabelParams, wallet?: string) { return this.rpc('getreceivedbylabel', options, wallet || this.wallet); } /** * @description Get detailed information about in-wallet transaction `txid` */ gettransaction(options: GetTransactionParams, wallet?: string) { return this.rpc('gettransaction', options, wallet || this.wallet); } /** * @description Returns the server's total unconfirmed balance */ getunconfirmedbalance(wallet?: string) { return this.rpc('getunconfirmedbalance', undefined, wallet || this.wallet); } /** * @description Returns an object containing various wallet state info. */ getwalletinfo(wallet?: string) { return this.rpc('getwalletinfo', undefined, wallet || this.wallet); } /** * @description Adds an address or script (in hex) that can be watched as if it were in your wallet but cannot be used to spend. */ importaddress(options: ImportAddressParams, wallet?: string) { return this.rpc('importaddress', options, wallet || this.wallet); } /** * @description Import addresses/scripts (with private or public keys, redeem script (P2SH)), optionally rescanning the blockchain from the earliest creation time of the imported scripts. */ importmulti(options: ImportMultiParams, wallet?: string) { return this.rpc('importmulti', options, wallet || this.wallet); } /** * @description Adds a private key (as returned by `dumpprivkey`) to your wallet. */ importprivkey(options: ImportPrivKeyParams, wallet?: string) { return this.rpc('importprivkey', options, wallet || this.wallet); } /** * @description Imports funds without rescan. Corresponding address or script must previously be included in wallet. */ importprunedfunds(options: ImportPrunedFundsParams, wallet?: string) { return this.rpc('importprunedfunds', options, wallet || this.wallet); } /** * @description Adds a public key (in hex) that can be watched as if it were in your wallet but cannot be used to spend. */ importpubkey(options: ImportPubKeyParams, wallet?: string) { return this.rpc('importpubkey', options, wallet || this.wallet); } /** * @description Imports keys from a wallet dump file (see `dumpwallet`). */ importwallet(options: { filename: string }, wallet?: string) { return this.rpc('importwallet', options, wallet || this.wallet); } /** * @description Fills the keypool. */ keypoolrefill(options: { newsize?: number }, wallet?: string) { return this.rpc('keypoolrefill', options, wallet || this.wallet); } /** * @description Lists groups of addresses which have had their common ownership made public by common use as inputs or as the resulting change in past transactions */ listaddressgroupings(wallet?: string) { return this.rpc('listaddressgroupings', undefined, wallet || this.wallet); } /** * @description Returns the list of all labels, or labels that are assigned to addresses with a specific purpose. */ listlabels(options: ListLabelsParams, wallet?: string) { return this.rpc('listlabels', options, wallet || this.wallet); } /** * @description Returns list of temporarily unspendable outputs. */ listlockunspent(wallet?: string) { return this.rpc('listlockunspent', undefined, wallet || this.wallet); } /** * @description List balances by receiving address. */ listreceivedbyaddress(options: ListReceivedByAddressParams, wallet?: string) { return this.rpc('listreceivedbyaddress', options, wallet || this.wallet); } /** * @description List received transactions by label. */ listreceivedbylabel(options: ListReceivedByLabelParams, wallet?: string) { return this.rpc('listreceivedbylabel', options, wallet || this.wallet); } /** * @description Get all transactions in blocks since block `blockhash`, or all transactions if omitted. */ listsinceblock(options: ListSinceBlockParams, wallet?: string) { return this.rpc('listsinceblock', options, wallet || this.wallet); } /** * @description Returns up to `count` most recent transactions skipping the first `skip` transactions. */ listtransactions(options: ListTransactionsParams, wallet?: string) { return this.rpc('listtransactions', options, wallet || this.wallet); } /** * @description Returns array of unspent transaction outputs with between `minconf` and `maxconf` (inclusive) confirmations. */ listunspent(options: ListUnspentParams, wallet?: string) { return this.rpc('listunspent', options, wallet || this.wallet); } /** * @description Returns a list of wallets in the wallet directory. */ listwalletdir() { return this.rpc('listwalletdir'); } /** * @description Returns a list of currently loaded wallets. */ listwallets() { return this.rpc('listwallets'); } /** * @description Loads a wallet from a wallet file or directory. */ loadwallet({ filename }: { filename: string }) { return this.rpc('loadwallet', { filename }); } /** * @description Updates list of temporarily unspendable outputs. */ lockunspent(options: LockUnspentParams, wallet?: string) { return this.rpc('lockunspent', options, wallet || this.wallet); } /** * @description Deletes the specified transaction from the wallet. */ removeprunedfunds(options: TxId, wallet?: string) { return this.rpc('removeprunedfunds', options, wallet || this.wallet); } /** * @description Rescan the local blockchain for wallet related transactions. */ rescanblockchain(options: RescanBlockchainParams, wallet?: string) { return this.rpc('rescanblockchain', options, wallet || this.wallet); } /** * @description Send multiple times. */ sendmany(options: SendManyParams, wallet?: string) { return this.rpc('sendmany', options, wallet || this.wallet); } /** * @description Send an amount to a given address. */ sendtoaddress(options: SendToAddressParams, wallet?: string) { return this.rpc('sendtoaddress', options, wallet || this.wallet); } /** * @description Set or generate a new HD wallet seed. */ sethdseed(options: SetHDSeedParams, wallet?: string) { return this.rpc('sethdseed', options, wallet || this.wallet); } /** * @description Sets the label associated with the given address. */ setlabel(options: SetLabelParams, wallet?: string) { return this.rpc('setlabel', options, wallet || this.wallet); } /** * @description Set the transaction fee per kB for this wallet. */ settxfee(options: { amount: number | string }, wallet?: string) { return this.rpc('settxfee', options, wallet || this.wallet); } /** * @description Change the state of the given wallet flag for a wallet. */ setwalletflag(options: SetWalletFlagParams, wallet?: string) { return this.rpc('setwalletflag', options, wallet || this.wallet); } /** * @description Sign a message with the private key of an address */ signmessage(options: SignMessageParams, wallet?: string) { return this.rpc('signmessage', options, wallet || this.wallet); } /** * @description Sign inputs for raw transaction */ signrawtransactionwithwallet(options: SignRawTransactionWithWalletParams, wallet?: string) { return this.rpc('signrawtransactionwithwallet', options, wallet || this.wallet); } /** * @description Unloads the wallet. */ unloadwallet({ wallet_name }: { wallet_name?: string } = {}) { if (typeof wallet_name !== 'undefined') { return this.rpc('unloadwallet', { wallet_name }); } return this.rpc('unloadwallet', undefined, this.wallet); } /** * @description Creates and funds a transaction in the Partially Signed Transaction format. */ walletcreatefundedpsbt(options: WalletCreateFundedPsbtParams, wallet?: string) { return this.rpc('walletcreatefundedpsbt', options, wallet || this.wallet); } /** * @description Removes the wallet encryption key from memory, locking the wallet. */ walletlock(wallet?: string) { return this.rpc('walletlock', undefined, wallet || this.wallet); } /** * @description Stores the wallet decryption key in memory for `timeout` seconds. */ walletpassphrase(options: WalletPassphraseParams, wallet?: string) { return this.rpc('walletpassphrase', options, wallet || this.wallet); } /** * @description Changes the wallet passphrase from `oldpassphrase` to `newpassphrase`. */ walletpassphrasechange(options: WalletPassphraseChangeParams, wallet?: string) { return this.rpc('walletpassphrasechange', options, wallet || this.wallet); } /** * @description Update a PSBT with input information from our wallet and then sign inputs that we can sign for. */ walletprocesspsbt(options: WalletProcessPsbtParams, wallet?: string) { return this.rpc('walletprocesspsbt', options, wallet || this.wallet); } /** * @description Returns information about the active ZeroMQ notifications. */ getzmqnotifications() { return this.rpc('getzmqnotifications'); } }