UNPKG

bch-slpjs

Version:

Simple Ledger Protocol (SLP) JavaScript Library

59 lines (49 loc) 2.2 kB
import axios, { AxiosRequestConfig } from 'axios'; import BigNumber from 'bignumber.js'; import { SlpTransactionDetails, SlpTransactionType } from './slpjs'; export class BitdbNetwork { bitdbUrl: string; constructor(bitdbUrl='https://bitdb.bch.sx/q/'){ this.bitdbUrl = bitdbUrl; } async getTokenInformation(tokenId: string) { let query = { "v": 3, "q": { "find": { "out.h1": "534c5000", "out.s3": "GENESIS", "tx.h": tokenId } }, "r": { "f": "[ .[] | { token_type: .out[0].h2, timestamp: (if .blk? then (.blk.t | strftime(\"%Y-%m-%d %H:%M\")) else null end), symbol: .out[0].s4, name: .out[0].s5, document: .out[0].s6, document_sha256: .out[0].h7, decimals: .out[0].h8, baton: .out[0].h9, quantity: .out[0].h10, URI: \"https://tokengraph.network/token/\\(.tx.h)\" } ]" } } const data = Buffer.from(JSON.stringify(query)).toString('base64'); let config: AxiosRequestConfig = { method: 'GET', url: this.bitdbUrl + data }; const response = (await axios(config)).data; const list = []; if(response.c){ list.push(...response.c); } if(response.u){ list.push(...response.u); } if(list.length === 0) { throw new Error('Token not found'); } let tokenDetails: SlpTransactionDetails = { transactionType: SlpTransactionType.GENESIS, tokenIdHex: tokenId, versionType: parseInt(list[0].token_type, 16), timestamp: list[0].timestamp, symbol: list[0].symbol, name: list[0].name, documentUri: list[0].document, documentSha256: Buffer.from(list[0].document_sha256), decimals: parseInt(list[0].decimals, 16) || 0, containsBaton: Buffer.from(list[0].baton,'hex').readUIntBE(0,1) >= 2, batonVout: Buffer.from(list[0].baton,'hex').readUIntBE(0,1), genesisOrMintQuantity: new BigNumber(list[0].quantity, 16).dividedBy(10**(parseInt(list[0].decimals, 16))) } return tokenDetails; } }