UNPKG

blockbook-client

Version:

Client for interacting with Trezor's blockbook API

288 lines (257 loc) 7.88 kB
import * as t from 'io-ts' import { requiredOptionalCodec, extendCodec } from '@bitaccess/ts-common' import { NormalizedTxCommonVin, NormalizedTxCommonVout, NormalizedTxCommon, AddressDetailsCommonBasic, GetAddressDetailsOptions, TokenDetailsTypeXpubAddress, BlockInfoCommon, paginated, } from './common' /* * Get transaction */ export const NormalizedTxBitcoinVinWithoutCoinbase = extendCodec( NormalizedTxCommonVin, { value: t.string, // '2895163' }, 'NormalizedTxBitcoinVinWithoutCoinbase', ) export type NormalizedTxBitcoinVinWithoutCoinbase = t.TypeOf<typeof NormalizedTxBitcoinVinWithoutCoinbase> export const NormalizedTxBitcoinVinWithCoinbase = extendCodec( NormalizedTxCommonVin, { coinbase: t.string, }, 'NormalizedTxBitcoinVinWithCoinbase', ) export type NormalizedTxBitcoinVinWithCoinbase = t.TypeOf<typeof NormalizedTxBitcoinVinWithCoinbase> export const NormalizedTxBitcoinVin = t.union( [NormalizedTxBitcoinVinWithoutCoinbase, NormalizedTxBitcoinVinWithCoinbase], 'NormalizedTxBitcoinVin', ) export type NormalizedTxBitcoinVin = t.TypeOf<typeof NormalizedTxBitcoinVin> export const NormalizedTxBitcoinVout = extendCodec( NormalizedTxCommonVout, { value: t.string, }, 'NormalizedTxBitcoinVout', ) export type NormalizedTxBitcoinVout = t.TypeOf<typeof NormalizedTxBitcoinVout> export const NormalizedTxBitcoin = extendCodec( NormalizedTxCommon, { vin: t.array(NormalizedTxBitcoinVin), vout: t.array(NormalizedTxBitcoinVout), valueIn: t.string, // '2895163' fees: t.string, // '302808' }, 'NormalizedTxBitcoin', ) export type NormalizedTxBitcoin = t.TypeOf<typeof NormalizedTxBitcoin> /* * Get transaction specific */ export const SpecificTxBitcoinVinScriptSig = t.type( { asm: t.string, // '30440220...049936719f[ALL] 03231bb7d...2636f' hex: t.string, // '47304402...1f2636f' }, 'SpecificTxBitcoinVinScriptSig', ) export type SpecificTxBitcoinVinScriptSig = t.TypeOf<typeof SpecificTxBitcoinVinScriptSig> export const SpecificTxBitcoinVin = t.type( { txid: t.string, // 'fa0b399f8eb9813f4549fc1066a134f93d1b4c7c6563d12629227ef3faf231b6' vout: t.number, // 4 scriptSig: SpecificTxBitcoinVinScriptSig, sequence: t.number, // 4294967295 }, 'SpecificTxBitcoinVin', ) export type SpecificTxBitcoinVin = t.TypeOf<typeof SpecificTxBitcoinVin> export const SpecificTxBitcoinVoutScriptPubKey = requiredOptionalCodec( { asm: t.string, // 'OP_HASH160 2fa547b613bf425f0308933bbaac5c67899c745d OP_EQUAL' hex: t.string, // 'a9142fa547b613bf425f0308933bbaac5c67899c745d87' type: t.string, // 'scripthash' }, { reqSigs: t.number, // 1 addresses: t.array(t.string), // ['362wgRYYj8ybZwuQzxE2PNykjJAwStKARz'] address: t.string, // 362wgRYYj8ybZwuQzxE2PNykjJAwStKARz }, 'SpecificTxBitcoinVoutScriptPubKey', ) export type SpecificTxBitcoinVoutScriptPubKey = t.TypeOf<typeof SpecificTxBitcoinVoutScriptPubKey> export const SpecificTxBitcoinVout = t.type( { value: t.number, // 0.01351072 n: t.number, // 0 scriptPubKey: SpecificTxBitcoinVoutScriptPubKey, }, 'SpecificTxBitcoinVout', ) export type SpecificTxBitcoinVout = t.TypeOf<typeof SpecificTxBitcoinVout> export const SpecificTxBitcoin = requiredOptionalCodec( { txid: t.string, // '2266ea441e3fbd144e33dc6c62c0d354d59dc267b48efe9a98a6e2fe6584cbd1' hash: t.string, // '2266ea441e3fbd144e33dc6c62c0d354d59dc267b48efe9a98a6e2fe6584cbd1' version: t.number, // 2 size: t.number, // 223 locktime: t.number, // 0 vin: t.array(SpecificTxBitcoinVin), vout: t.array(SpecificTxBitcoinVout), hex: t.string, // '0200000001b63...88ac00000000' }, { vsize: t.number, // 223 weight: t.number, // 892 blockhash: t.string, // '0000000000000000000aac117ba0c0910956020b30e847154311d7d01d50476f' confirmations: t.number, // 2 time: t.number, // 1574787637 blocktime: t.number, // 1574787637 }, 'SpecificTxBitcoin', ) export type SpecificTxBitcoin = t.TypeOf<typeof SpecificTxBitcoin> /** * Get address */ export const AddressDetailsBitcoinBasic = extendCodec( AddressDetailsCommonBasic, { totalReceived: t.string, // '4331220', totalSent: t.string, // '2895163', }, 'AddressDetailsBitcoinBasic', ) export type AddressDetailsBitcoinBasic = t.TypeOf<typeof AddressDetailsBitcoinBasic> export const AddressDetailsBitcoinTokens = AddressDetailsBitcoinBasic export type AddressDetailsBitcoinTokens = t.TypeOf<typeof AddressDetailsBitcoinTokens> export const AddressDetailsBitcoinTokenBalances = AddressDetailsBitcoinBasic export type AddressDetailsBitcoinTokenBalances = t.TypeOf<typeof AddressDetailsBitcoinTokenBalances> export const AddressDetailsBitcoinTxids = paginated( extendCodec( AddressDetailsBitcoinTokenBalances, {}, { txids: t.array(t.string), }, 'AddressDetailsBitcoinTxids', ), ) export type AddressDetailsBitcoinTxids = t.TypeOf<typeof AddressDetailsBitcoinTxids> export const AddressDetailsBitcoinTxs = paginated( extendCodec( AddressDetailsBitcoinTokenBalances, {}, { transactions: t.array(NormalizedTxBitcoin), }, 'AddressDetailsBitcoinTxs', ), ) export type AddressDetailsBitcoinTxs = t.TypeOf<typeof AddressDetailsBitcoinTxs> /** * Get Xpub */ export const GetXpubDetailsTokensOption = t.keyof( { nonzero: null, used: null, derived: null, }, 'GetXpubDetailsTokensOption', ) export type GetXpubDetailsTokensOption = t.TypeOf<typeof GetXpubDetailsTokensOption> export const GetXpubDetailsOptions = extendCodec( GetAddressDetailsOptions, {}, { usedTokens: t.number, // 2 tokens: GetXpubDetailsTokensOption, }, 'GetXpubDetailsOptions', ) export type GetXpubDetailsOptions = t.TypeOf<typeof GetXpubDetailsOptions> export const TokenDetailsXpubAddress = t.type( { type: TokenDetailsTypeXpubAddress, // 'XPUBAddress', name: t.string, // 'DUCd1B3YBiXL5By15yXgSLZtEkvwsgEdqS', path: t.string, // 'm/44'/3'/0'/0/0', transfers: t.number, // 3, decimals: t.number, // 8, }, 'TokenDetailsXpubAddress', ) export type TokenDetailsXpubAddress = t.TypeOf<typeof TokenDetailsXpubAddress> export const TokenDetailsXpubAddressBalance = extendCodec( TokenDetailsXpubAddress, {}, { balance: t.string, // '0', totalReceived: t.string, // '2803986975', totalSent: t.string, // '2803986975' }, 'TokenDetailsXpubAddressBalance', ) export type TokenDetailsXpubAddressBalance = t.TypeOf<typeof TokenDetailsXpubAddressBalance> export const XpubDetailsBasic = AddressDetailsBitcoinBasic export type XpubDetailsBasic = t.TypeOf<typeof XpubDetailsBasic> export const XpubDetailsTokens = extendCodec( XpubDetailsBasic, {}, { tokens: t.array(TokenDetailsXpubAddress), }, 'XpubDetailsTokens', ) export type XpubDetailsTokens = t.TypeOf<typeof XpubDetailsTokens> export const XpubDetailsTokenBalances = extendCodec( XpubDetailsBasic, {}, { tokens: t.array(TokenDetailsXpubAddressBalance), }, 'XpubDetailsTokenBalances', ) export type XpubDetailsTokenBalances = t.TypeOf<typeof XpubDetailsTokenBalances> export const XpubDetailsTxids = paginated( extendCodec( XpubDetailsTokenBalances, {}, { txids: t.array(t.string), }, 'XpubDetailsTxids', ), ) export type XpubDetailsTxids = t.TypeOf<typeof XpubDetailsTxids> export const XpubDetailsTxs = paginated( extendCodec( XpubDetailsTokenBalances, {}, { transactions: t.array(NormalizedTxBitcoin), }, 'XpubDetailsTxs', ), ) export type XpubDetailsTxs = t.TypeOf<typeof XpubDetailsTxs> /** * Get block */ export const BlockInfoBitcoin = extendCodec( BlockInfoCommon, {}, { txs: t.array(NormalizedTxBitcoin), }, 'BlockInfoBitcoin', ) export type BlockInfoBitcoin = t.TypeOf<typeof BlockInfoBitcoin>