import { Address, AirGapProtocol, AirGapTransaction, AirGapTransactionsWithCursor, Amount, Balance, CryptoDerivative, KeyPair, ProtocolMetadata, PublicKey, SecretKey, Signature, TransactionFullConfiguration, TransactionDetails, TransactionSimpleConfiguration } from '@airgap/module-kit'; import { SubstrateBlockExplorerClient } from '../block-explorer/SubstrateBlockExplorerClient'; import { SubstrateAccountController } from '../controller/account/SubstrateAccountController'; import { SubstrateTransactionController } from '../controller/transaction/SubstrateTransactionController'; import { SubstrateAccountId } from '../data/account/address/SubstrateAddress'; import { TypedSubstrateAddress } from '../data/account/address/SubstrateAddressFactory'; import { SubstrateTransactionType } from '../data/transaction/SubstrateTransaction'; import { SubstrateNodeClient } from '../node/SubstrateNodeClient'; import { SubstrateProtocolConfiguration } from '../types/configuration'; import { SubstrateCryptoConfiguration } from '../types/crypto'; import { SubstrateProtocolNetwork, SubstrateProtocolOptions } from '../types/protocol'; import { SubstrateSignedTransaction, SubstrateTransactionCursor, SubstrateTransactionDetails, SubstrateUnsignedTransaction } from '../types/transaction'; export interface SubstrateProtocol<_ProtocolConfiguration extends SubstrateProtocolConfiguration = SubstrateProtocolConfiguration, _Units extends string = string, _ProtocolNetwork extends SubstrateProtocolNetwork = SubstrateProtocolNetwork, _CryptoConfiguration extends SubstrateCryptoConfiguration = SubstrateCryptoConfiguration> extends AirGapProtocol<{ AddressResult: Address; ProtocolNetwork: _ProtocolNetwork; CryptoConfiguration: _CryptoConfiguration; Units: _Units; FeeEstimation: Amount<_Units>; UnsignedTransaction: SubstrateUnsignedTransaction; SignedTransaction: SubstrateSignedTransaction; TransactionCursor: SubstrateTransactionCursor; }, 'Crypto', 'FetchDataForAddress'> { _isSubstrateProtocol: true; encodeDetails(txs: SubstrateTransactionDetails<_ProtocolConfiguration>[]): Promise; decodeDetails(serialized: string): Promise[]>; } export declare abstract class SubstrateProtocolImpl<_Units extends string, _ProtocolConfiguration extends SubstrateProtocolConfiguration, _ProtocolNetwork extends SubstrateProtocolNetwork = SubstrateProtocolNetwork, _NodeClient extends SubstrateNodeClient<_ProtocolConfiguration> = SubstrateNodeClient<_ProtocolConfiguration>, _AccountController extends SubstrateAccountController<_ProtocolConfiguration> = SubstrateAccountController<_ProtocolConfiguration>, _TransactionController extends SubstrateTransactionController<_ProtocolConfiguration> = SubstrateTransactionController<_ProtocolConfiguration>> implements SubstrateProtocol<_ProtocolConfiguration, _Units, _ProtocolNetwork, SubstrateCryptoConfiguration<_ProtocolConfiguration>> { readonly _isSubstrateProtocol: true; protected readonly configuration: _ProtocolConfiguration; protected readonly cryptoConfiguration: SubstrateCryptoConfiguration<_ProtocolConfiguration>; readonly accountController: _AccountController; readonly transactionController: _TransactionController; readonly nodeClient: _NodeClient; readonly blockExplorer: SubstrateBlockExplorerClient; private readonly cryptoClient; protected constructor(options: SubstrateProtocolOptions<_Units, _ProtocolConfiguration, _ProtocolNetwork>, nodeClient: _NodeClient, accountController: _AccountController, transactionController: _TransactionController, blockExplorer: SubstrateBlockExplorerClient); protected readonly metadata: ProtocolMetadata<_Units>; getMetadata(): Promise>; getAddressFromPublicKey(publicKey: PublicKey): Promise; getDetailsFromTransaction(transaction: SubstrateUnsignedTransaction | SubstrateSignedTransaction, _publicKey: PublicKey): Promise[]>; verifyMessageWithPublicKey(message: string, signature: Signature, publicKey: PublicKey): Promise; encryptAsymmetricWithPublicKey(payload: string, publicKey: PublicKey): Promise; getCryptoConfiguration(): Promise>; getKeyPairFromDerivative(derivative: CryptoDerivative): Promise; signTransactionWithSecretKey(transaction: SubstrateUnsignedTransaction, secretKey: SecretKey): Promise; signMessageWithKeyPair(message: string, keyPair: KeyPair): Promise; decryptAsymmetricWithKeyPair(payload: string, keyPair: KeyPair): Promise; encryptAESWithSecretKey(payload: string, secretKey: SecretKey): Promise; decryptAESWithSecretKey(payload: string, secretKey: SecretKey): Promise; protected readonly network: _ProtocolNetwork; getNetwork(): Promise<_ProtocolNetwork>; getTransactionsForPublicKey(publicKey: PublicKey, limit: number, cursor?: SubstrateTransactionCursor): Promise>; getTransactionsForAddress(address: string, limit: number, cursor?: SubstrateTransactionCursor): Promise>; getBalanceOfPublicKey(publicKey: PublicKey): Promise>; getBalanceOfAddress(address: string): Promise>; getTransactionMaxAmountWithPublicKey(publicKey: PublicKey, to: string[], configuration?: TransactionFullConfiguration<_Units>): Promise>; getTransactionFeeWithPublicKey(publicKey: PublicKey, details: TransactionDetails<_Units>[], _configuration?: TransactionSimpleConfiguration): Promise>; prepareTransactionWithPublicKey(publicKey: PublicKey, details: TransactionDetails<_Units>[], configuration?: TransactionFullConfiguration<_Units>): Promise; broadcastTransaction(transaction: SubstrateSignedTransaction): Promise; encodeDetails(txs: SubstrateTransactionDetails<_ProtocolConfiguration>[]): Promise; decodeDetails(serialized: string): Promise[]>; private getDetailsFromEncodedTransaction; protected abstract getFutureRequiredTransactions(accountId: SubstrateAccountId>, intention: 'check' | 'transfer'): Promise<[SubstrateTransactionType<_ProtocolConfiguration>, any][]>; }