bch-slpjs
Version:
Simple Ledger Protocol (SLP) JavaScript Library
59 lines (49 loc) • 2.2 kB
text/typescript
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;
}
}