UNPKG

blockbook-fetcher

Version:

Blockbook API fetcher for Browser / Node.js

663 lines (619 loc) 18 kB
/** blockbook-schemas.ts */ export const BackendInfoSchema = { type: 'object', properties: { error: { type: 'string' }, chain: { type: 'string' }, blocks: { type: 'number' }, headers: { type: 'number' }, bestBlockHash: { type: 'string' }, difficulty: { type: 'string' }, sizeOnDisk: { type: 'number' }, version: { type: 'string' }, subversion: { type: 'string' }, protocolVersion: { type: 'string' }, timeOffset: { type: 'number' }, warnings: { type: 'string' }, consensus_version: { type: 'string' }, consensus: {}, }, }; export const InternalStateColumnSchema = { type: 'object', properties: { name: { type: 'string' }, version: { type: 'number' }, rows: { type: 'number' }, keyBytes: { type: 'number' }, valueBytes: { type: 'number' }, updated: { type: 'string' }, }, required: ['name', 'version', 'rows', 'keyBytes', 'valueBytes', 'updated'], }; export const BlockbookInfoSchema = { type: 'object', properties: { coin: { type: 'string' }, network: { type: 'string' }, host: { type: 'string' }, version: { type: 'string' }, gitCommit: { type: 'string' }, buildTime: { type: 'string' }, syncMode: { type: 'boolean' }, initialSync: { type: 'boolean' }, inSync: { type: 'boolean' }, bestHeight: { type: 'number' }, lastBlockTime: { type: 'string' }, inSyncMempool: { type: 'boolean' }, lastMempoolTime: { type: 'string' }, mempoolSize: { type: 'number' }, decimals: { type: 'number' }, dbSize: { type: 'number' }, hasFiatRates: { type: 'boolean' }, hasTokenFiatRates: { type: 'boolean' }, currentFiatRatesTime: { type: 'string' }, historicalFiatRatesTime: { type: 'string' }, historicalTokenFiatRatesTime: { type: 'string' }, supportedStakingPools: { type: 'array', items: { type: 'string' }, }, dbSizeFromColumns: { type: 'number' }, dbColumns: { type: 'array', items: InternalStateColumnSchema, }, about: { type: 'string' }, }, required: [ 'coin', 'network', 'host', 'version', 'gitCommit', 'buildTime', 'syncMode', 'initialSync', 'inSync', 'bestHeight', 'lastBlockTime', 'inSyncMempool', 'lastMempoolTime', 'mempoolSize', 'decimals', 'dbSize', 'about', ], }; export const SystemInfoSchema = { type: 'object', properties: { blockbook: BlockbookInfoSchema, backend: BackendInfoSchema, }, required: ['blockbook', 'backend'], }; export const GetBlockHashSchema = { type: 'object', properties: { blockHash: { type: 'string' } }, required: ['blockHash'], }; export const APIErrorSchema = { type: 'object', properties: { Text: { type: 'string' }, Public: { type: 'boolean' }, }, required: ['Text', 'Public'], }; export const AddressAliasSchema = { type: 'object', properties: { Type: { type: 'string' }, Alias: { type: 'string' }, }, required: ['Type', 'Alias'], }; export const EthereumInternalTransferSchema = { type: 'object', properties: { type: { type: 'number' }, from: { type: 'string' }, to: { type: 'string' }, value: { type: 'string' }, }, required: ['type', 'from', 'to', 'value'], }; export const EthereumParsedInputParamSchema = { type: 'object', properties: { type: { type: 'string' }, values: { type: 'array', items: { type: 'string' }, }, }, required: ['type'], }; export const EthereumParsedInputDataSchema = { type: 'object', properties: { methodId: { type: 'string' }, name: { type: 'string' }, function: { type: 'string' }, params: { type: 'array', items: EthereumParsedInputParamSchema, }, }, required: ['methodId', 'name'], }; export const EthereumSpecificSchema = { type: 'object', properties: { type: { type: 'number' }, createdContract: { type: 'string' }, status: { type: 'number' }, error: { type: 'string' }, nonce: { type: 'number' }, gasLimit: { type: 'number' }, gasUsed: { type: 'number' }, gasPrice: { type: 'string' }, maxPriorityFeePerGas: { type: 'string' }, maxFeePerGas: { type: 'string' }, baseFeePerGas: { type: 'string' }, l1Fee: { type: 'number' }, l1FeeScalar: { type: 'string' }, l1GasPrice: { type: 'string' }, l1GasUsed: { type: 'number' }, data: { type: 'string' }, parsedData: EthereumParsedInputDataSchema, internalTransfers: { type: 'array', items: EthereumInternalTransferSchema, }, }, required: ['status', 'nonce', 'gasLimit'], }; export const MultiTokenValueSchema = { type: 'object', properties: { id: { type: 'string' }, value: { type: 'string' }, }, }; export const TokenTransferSchema = { type: 'object', properties: { type: { type: 'string' }, // enum, but allow as string for compatibility standard: { type: 'string' }, from: { type: 'string' }, to: { type: 'string' }, contract: { type: 'string' }, name: { type: 'string' }, symbol: { type: 'string' }, decimals: { type: 'number' }, value: { type: 'string' }, multiTokenValues: { type: 'array', items: MultiTokenValueSchema, }, }, //required: ['type', 'standard', 'from', 'to', 'contract', 'decimals'], }; export const VoutSchema = { type: 'object', properties: { value: { type: 'string' }, n: { type: 'number' }, spent: { type: 'boolean' }, spentTxId: { type: 'string' }, spentIndex: { type: 'number' }, spentHeight: { type: 'number' }, hex: { type: 'string' }, asm: { type: 'string' }, addresses: { // Blockbook sometimes return null for ETH coins type: ['array', 'null'], items: { type: 'string' }, }, isAddress: { type: 'boolean' }, isOwn: { type: 'boolean' }, type: { type: 'string' }, }, required: ['n', 'addresses', 'isAddress'], }; export const VinSchema = { type: 'object', properties: { txid: { type: 'string' }, vout: { type: 'number' }, sequence: { type: 'number' }, n: { type: 'number' }, addresses: { type: 'array', items: { type: 'string' }, }, isAddress: { type: 'boolean' }, isOwn: { type: 'boolean' }, value: { type: 'string' }, hex: { type: 'string' }, asm: { type: 'string' }, coinbase: { type: 'string' }, }, required: ['n', 'isAddress'], }; export const TxSchema = { type: 'object', properties: { txid: { type: 'string' }, version: { type: 'number' }, lockTime: { type: 'number' }, vin: { type: 'array', items: VinSchema, }, vout: { type: 'array', items: VoutSchema, }, blockHash: { type: 'string' }, blockHeight: { type: 'number' }, confirmations: { type: 'number' }, confirmationETABlocks: { type: 'number' }, confirmationETASeconds: { type: 'number' }, blockTime: { type: 'number' }, size: { type: 'number' }, vsize: { type: 'number' }, value: { type: 'string' }, valueIn: { type: 'string' }, fees: { type: 'string' }, hex: { type: 'string' }, rbf: { type: 'boolean' }, coinSpecificData: {}, tokenTransfers: { type: 'array', items: TokenTransferSchema, }, ethereumSpecific: EthereumSpecificSchema, addressAliases: { type: 'object', additionalProperties: AddressAliasSchema, }, }, required: ['txid', 'vin', 'vout', 'blockHeight', 'confirmations', 'blockTime', 'value'], }; export const ErrorSchema = { type: 'object', properties: { error: { type: 'string' }, }, required: ['error'], }; export const TxSchemaOrError = { oneOf: [TxSchema, ErrorSchema], }; export const FeeStatsSchema = { type: 'object', properties: { txCount: { type: 'number' }, totalFeesSat: { type: 'string' }, averageFeePerKb: { type: 'number' }, decilesFeePerKb: { type: 'array', items: { type: 'number' }, }, }, required: ['txCount', 'totalFeesSat', 'averageFeePerKb', 'decilesFeePerKb'], }; export const StakingPoolSchema = { type: 'object', properties: { contract: { type: 'string' }, name: { type: 'string' }, pendingBalance: { type: 'string' }, pendingDepositedBalance: { type: 'string' }, depositedBalance: { type: 'string' }, withdrawTotalAmount: { type: 'string' }, claimableAmount: { type: 'string' }, restakedReward: { type: 'string' }, autocompoundBalance: { type: 'string' }, }, required: [ 'contract', 'name', 'pendingBalance', 'pendingDepositedBalance', 'depositedBalance', 'withdrawTotalAmount', 'claimableAmount', 'restakedReward', 'autocompoundBalance', ], }; export const ContractInfoSchema = { type: 'object', properties: { type: { type: 'string' }, standard: { type: 'string' }, contract: { type: 'string' }, name: { type: 'string' }, symbol: { type: 'string' }, decimals: { type: 'number' }, createdInBlock: { type: 'number' }, destructedInBlock: { type: 'number' }, }, //required: ['type', 'standard', 'contract', 'name', 'symbol', 'decimals'], }; export const TokenSchema = { type: 'object', properties: { type: { type: 'string' }, standard: { type: 'string' }, name: { type: 'string' }, path: { type: 'string' }, contract: { type: 'string' }, transfers: { type: 'number' }, symbol: { type: 'string' }, decimals: { type: 'number' }, balance: { type: 'string' }, baseValue: { type: 'number' }, secondaryValue: { type: 'number' }, ids: { type: 'array', items: { type: 'string' }, }, multiTokenValues: { type: 'array', items: MultiTokenValueSchema, }, totalReceived: { type: 'string' }, totalSent: { type: 'string' }, }, //required: ['type', 'standard', 'name', 'transfers', 'decimals'], }; export const AddressSchema = { type: 'object', properties: { page: { type: 'number' }, totalPages: { type: 'number' }, itemsOnPage: { type: 'number' }, address: { type: 'string' }, balance: { type: 'string' }, totalReceived: { type: 'string' }, totalSent: { type: 'string' }, unconfirmedBalance: { type: 'string' }, unconfirmedTxs: { type: 'number' }, unconfirmedSending: { type: 'string' }, unconfirmedReceiving: { type: 'string' }, txs: { type: 'number' }, addrTxCount: { type: 'number' }, nonTokenTxs: { type: 'number' }, internalTxs: { type: 'number' }, transactions: { type: 'array', items: TxSchema, }, txids: { type: 'array', items: { type: 'string' }, }, nonce: { type: 'string' }, usedTokens: { type: 'number' }, tokens: { type: 'array', items: TokenSchema, }, secondaryValue: { type: 'number' }, tokensBaseValue: { type: 'number' }, tokensSecondaryValue: { type: 'number' }, totalBaseValue: { type: 'number' }, totalSecondaryValue: { type: 'number' }, contractInfo: ContractInfoSchema, erc20Contract: ContractInfoSchema, addressAliases: { type: 'object', additionalProperties: AddressAliasSchema, }, stakingPools: { type: 'array', items: StakingPoolSchema, }, }, required: ['address', 'balance', 'unconfirmedBalance', 'unconfirmedTxs', 'txs'], }; export const AddressSchemaOrError = { oneOf: [AddressSchema, ErrorSchema], }; export const UtxoSchema = { type: 'object', properties: { txid: { type: 'string' }, vout: { type: 'number' }, value: { type: 'string' }, height: { type: 'number' }, confirmations: { type: 'number' }, address: { type: 'string' }, path: { type: 'string' }, lockTime: { type: 'number' }, coinbase: { type: 'boolean' }, }, required: ['txid', 'vout', 'value', 'confirmations'], }; export const UtxoArraySchemaOrError = { oneOf: [ { type: 'array', items: UtxoSchema, }, ErrorSchema, ], }; export const BlockInfoSchema = { type: 'object', properties: { Hash: { type: 'string' }, Time: { type: 'number' }, Txs: { type: 'number' }, Size: { type: 'number' }, Height: { type: 'number' }, }, required: ['Hash', 'Time', 'Txs', 'Size', 'Height'], }; export const BlocksSchema = { type: 'object', properties: { page: { type: 'number' }, totalPages: { type: 'number' }, itemsOnPage: { type: 'number' }, blocks: { type: 'array', items: BlockInfoSchema, }, }, required: ['blocks'], }; export const BlockSchema = { type: 'object', properties: { page: { type: 'number' }, totalPages: { type: 'number' }, itemsOnPage: { type: 'number' }, hash: { type: 'string' }, previousBlockHash: { type: 'string' }, nextBlockHash: { type: 'string' }, height: { type: 'number' }, confirmations: { type: 'number' }, size: { type: 'number' }, time: { type: 'number' }, version: { type: ['string', 'number'] }, merkleRoot: { type: 'string' }, nonce: { type: 'string' }, bits: { type: 'string' }, difficulty: { type: 'string' }, tx: { type: 'array', items: { type: 'string' }, }, txCount: { type: 'number' }, txs: { type: 'array', items: TxSchema, }, addressAliases: { type: 'object', additionalProperties: AddressAliasSchema, }, }, required: [ 'hash', 'height', 'confirmations', 'size', 'merkleRoot', 'bits', 'difficulty', 'txCount', ], }; export const BlockSchemaOrError = { oneOf: [BlockSchema, ErrorSchema], }; export const RawBlockSchema = { type: 'object', properties: { hex: { type: 'string' }, }, required: ['hex'], }; export const RawBlockSchemaOrError = { oneOf: [RawBlockSchema, ErrorSchema], }; export const SendTxSchema = { type: 'object', properties: { result: { type: 'string' }, }, }; export const SendTxSchemaOrError = { oneOf: [ SendTxSchema, { type: 'object', properties: { error: { type: 'object', properties: { message: { type: 'string' }, }, required: ['message'], }, }, required: ['error'], }, ], }; export const AvailableVsCurrenciesSchema = { type: 'object', properties: { ts: { type: 'number', nullable: true }, available_currencies: { type: 'array', items: { type: 'string' }, }, error: { type: 'string', nullable: true }, }, required: ['available_currencies'], }; export const AvailableVsCurrenciesSchemaOrError = { oneOf: [AvailableVsCurrenciesSchema, ErrorSchema], }; export const FiatTickerSchema = { type: 'object', properties: { ts: { type: 'number', nullable: true }, rates: { type: 'object', additionalProperties: { type: 'number' }, }, error: { type: 'string', nullable: true }, }, required: ['rates'], }; export const FiatTickerSchemaOrError = { oneOf: [FiatTickerSchema, ErrorSchema], }; export const BalanceHistorySchema = { type: 'object', properties: { time: { type: 'number' }, txs: { type: 'number' }, received: { type: 'string' }, sent: { type: 'string' }, sentToSelf: { type: 'string' }, rates: { type: 'object', additionalProperties: { type: 'number' }, }, txid: { type: 'string' }, }, required: ['time', 'txs', 'received', 'sent', 'sentToSelf'], }; export const BalanceHistoryArraySchema = { type: 'array', items: BalanceHistorySchema, }; export const BalanceHistoryArraySchemaOrError = { oneOf: [BalanceHistoryArraySchema, ErrorSchema], }; export const EstimateFeesSchema = { type: 'object', properties: { result: { type: 'string', }, }, }; export const EstimateFeesSchemaOrError = { oneOf: [EstimateFeesSchema, ErrorSchema], };