import { Address, AirGapProtocol, AirGapTransaction, AirGapTransactionsWithCursor, Amount, Balance, CryptoDerivative, ExtendedKeyPair, ExtendedPublicKey, ExtendedSecretKey, FeeDefaults, KeyPair, ProtocolMetadata, ProtocolUnitsMetadata, PublicKey, RecursivePartial, SecretKey, Signature, SignedTransaction, TransactionFullConfiguration, TransactionDetails, UnsignedTransaction, TransactionSimpleConfiguration } from '@airgap/module-kit'; import { BitcoinJS } from '../types/bitcoinjs'; import { BitcoinCryptoConfiguration } from '../types/crypto'; import { BitcoinProtocolNetwork, BitcoinProtocolOptions, BitcoinStandardProtocolNetwork, BitcoinUnits } from '../types/protocol'; import { BitcoinSignedTransaction, BitcoinTransactionCursor, BitcoinUnsignedTransaction } from '../types/transaction'; import { ExtendedPublicKeyEncoding, ExtendedSecretKeyEncoding } from '../utils/key'; export interface BitcoinProtocol<_SignedTransaction extends SignedTransaction = BitcoinSignedTransaction, _UnsignedTransaction extends UnsignedTransaction = BitcoinUnsignedTransaction> extends AirGapProtocol<{ AddressResult: Address; ProtocolNetwork: BitcoinProtocolNetwork; CryptoConfiguration: BitcoinCryptoConfiguration; SignedTransaction: _SignedTransaction; TransactionCursor: BitcoinTransactionCursor; Units: BitcoinUnits; FeeEstimation: FeeDefaults; UnsignedTransaction: _UnsignedTransaction; }, 'Bip32', 'Crypto', 'FetchDataForAddress', 'FetchDataForMultipleAddresses'> { _isBitcoinProtocol: true; } export interface BitcoinKeyConfiguration { xpriv: { type: ExtendedSecretKeyEncoding; }; xpub: { type: ExtendedPublicKeyEncoding; }; } export declare class BitcoinProtocolImpl implements BitcoinProtocol { readonly _isBitcoinProtocol: true; private readonly options; private readonly keyConfiguration; private readonly cryptoClient; readonly bitcoinJS: BitcoinJS; constructor(options?: RecursivePartial, keyConfiguration?: BitcoinKeyConfiguration, bitcoinJS?: any, bitcoinJSMessage?: any); readonly units: ProtocolUnitsMetadata; readonly feeDefaults: FeeDefaults; readonly metadata: ProtocolMetadata; getMetadata(): Promise>; getAddressFromPublicKey(publicKey: PublicKey | ExtendedPublicKey): Promise; private getAddressFromNonExtendedPublicKey; private getAddressFromExtendedPublicKey; deriveFromExtendedPublicKey(extendedPublicKey: ExtendedPublicKey, visibilityIndex: number, addressIndex: number): Promise; getDetailsFromTransaction(transaction: BitcoinSignedTransaction | BitcoinUnsignedTransaction, _publicKey: PublicKey | ExtendedPublicKey): Promise[]>; private getDetailsFromSignedTransaction; private getDetailsFromUnsignedTransaction; verifyMessageWithPublicKey(message: string, signature: Signature, publicKey: ExtendedPublicKey | PublicKey): Promise; encryptAsymmetricWithPublicKey(payload: string, publicKey: ExtendedPublicKey | PublicKey): Promise; private readonly cryptoConfiguration; getCryptoConfiguration(): Promise; getKeyPairFromDerivative(derivative: CryptoDerivative): Promise; getExtendedKeyPairFromDerivative(derivative: CryptoDerivative): Promise; deriveFromExtendedSecretKey(extendedSecretKey: ExtendedSecretKey, visibilityIndex: number, addressIndex: number): Promise; signTransactionWithSecretKey(transaction: BitcoinUnsignedTransaction, secretKey: SecretKey | ExtendedSecretKey): Promise; private signTransactionWithNonExtendedSecretKey; private signTransactionWithExtendedSecretKey; private createSignedTransaction; signMessageWithKeyPair(message: string, keyPair: ExtendedKeyPair | KeyPair): Promise; decryptAsymmetricWithKeyPair(payload: string, keyPair: ExtendedKeyPair | KeyPair): Promise; encryptAESWithSecretKey(payload: string, secretKey: SecretKey | ExtendedSecretKey): Promise; decryptAESWithSecretKey(payload: string, secretKey: SecretKey | ExtendedSecretKey): Promise; getNetwork(): Promise; getTransactionsForPublicKey(publicKey: ExtendedPublicKey | PublicKey, limit: number, cursor?: BitcoinTransactionCursor): Promise>; private getTransactionsForNonExtendedPublicKey; private getTransactionsForExtendedPublicKey; getTransactionsForAddress(address: string, limit: number, cursor?: BitcoinTransactionCursor): Promise>; getTransactionsForAddresses(addresses: string[], limit: number, cursor?: BitcoinTransactionCursor): Promise>; getBalanceOfPublicKey(publicKey: ExtendedPublicKey | PublicKey): Promise>; private getBalanceOfNonExtendedPublicKey; private getBalanceOfExtendedPublicKey; getBalanceOfAddress(address: string): Promise>; getBalanceOfAddresses(addresses: string[]): Promise>; getTransactionMaxAmountWithPublicKey(publicKey: ExtendedPublicKey | PublicKey, to: string[], configuration?: TransactionFullConfiguration): Promise>; getTransactionFeeWithPublicKey(_publicKey: ExtendedPublicKey | PublicKey, _details: TransactionDetails[], _configuration?: TransactionSimpleConfiguration): Promise>; prepareTransactionWithPublicKey(publicKey: ExtendedPublicKey | PublicKey, details: TransactionDetails[], configuration?: TransactionFullConfiguration): Promise; private prepareTransactionWithNonExtendedPublicKey; private prepareTransactionWithExtendedPublicKey; broadcastTransaction(transaction: BitcoinSignedTransaction): Promise; private convertExtendedSecretKey; private convertExtendedPublicKey; private convertCryptoDerivative; private derivativeToBip32Node; } export declare function createBitcoinProtocol(options?: RecursivePartial): BitcoinProtocol; export declare const BITCOIN_MAINNET_PROTOCOL_NETWORK: BitcoinStandardProtocolNetwork; export declare function createBitcoinProtocolOptions(network?: Partial): BitcoinProtocolOptions;