UNPKG

bsv-sdk

Version:

bsv sdk

169 lines (168 loc) 7.35 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sensible_sdk_1 = require("sensible-sdk"); const CommonUtils_1 = require("../utils/CommonUtils"); const SingersMap_1 = require("../utils/SingersMap"); const node_fetch_1 = __importDefault(require("node-fetch")); function getFtGenesisInfo(ftGenesisTxid) { return __awaiter(this, void 0, void 0, function* () { const response = yield (0, node_fetch_1.default)('https://api.showmoney.app' + '/aggregation/v2/app/sensible/getFtGenesisByTxId', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ txId: ftGenesisTxid }) }).then((response) => { return response.json(); }); return response; }); } class Sensible { constructor(network, feeb, tokenWif, metasvAuth) { this.network = network; this.feeb = feeb; this.tokenWif = tokenWif; this.metasvAuth = metasvAuth; } ftMergeTime(codehash, genesis, sensibleId) { return __awaiter(this, void 0, void 0, function* () { let signersRaw = SingersMap_1.signersMap.get(sensibleId); if (signersRaw == undefined) { const ftGenesisTxid = (0, CommonUtils_1.reverceFtByteString)(sensibleId); const res = yield getFtGenesisInfo(ftGenesisTxid); if (res.code == 0 && res.data.signers) { signersRaw = res.data.signers; } else { signersRaw = SingersMap_1.defaultSigners; } } const ft = new sensible_sdk_1.SensibleFT({ network: this.network, purse: this.tokenWif, feeb: this.feeb, apiTarget: sensible_sdk_1.API_TARGET.METASV, signers: signersRaw }); ft.sensibleApi.authorize(this.metasvAuth); const senderAddress = sensible_sdk_1.bsv.PrivateKey.fromWIF(this.tokenWif).toAddress(this.network).toString(); const balanceDetailRes = yield ft.getBalanceDetail({ codehash, genesis, address: senderAddress }); let ftUtxoCount = balanceDetailRes.utxoCount; let [remainUtxoCount, mergeTime] = (0, CommonUtils_1.getMergeTime)(ftUtxoCount); return mergeTime; }); } ftMergeOne(codehash, genesis, sensibleId, purseWif) { return __awaiter(this, void 0, void 0, function* () { let signersRaw = SingersMap_1.signersMap.get(sensibleId); if (signersRaw == undefined) { const ftGenesisTxid = (0, CommonUtils_1.reverceFtByteString)(sensibleId); const res = yield getFtGenesisInfo(ftGenesisTxid); if (res.code == 0 && res.data.signers) { signersRaw = res.data.signers; } else { signersRaw = SingersMap_1.defaultSigners; } } const { signers, signerSelecteds } = yield sensible_sdk_1.SensibleFT.selectSigners(signersRaw); const ft = new sensible_sdk_1.SensibleFT({ network: this.network, purse: purseWif, feeb: this.feeb, apiTarget: sensible_sdk_1.API_TARGET.METASV, signers, signerSelecteds }); ft.sensibleApi.authorize(this.metasvAuth); const senderAddress = sensible_sdk_1.bsv.PrivateKey.fromWIF(this.tokenWif).toAddress(this.network).toString(); try { const { txid } = yield ft.merge({ codehash, genesis, ownerWif: this.tokenWif }); console.log(`merge token success,txid: ${txid}`); } catch (e) { console.log(e); return false; } return true; }); } ftMerge(codehash, genesis, sensibleId, purseWif) { return __awaiter(this, void 0, void 0, function* () { let signersRaw = SingersMap_1.signersMap.get(sensibleId); if (signersRaw == undefined) { const ftGenesisTxid = (0, CommonUtils_1.reverceFtByteString)(sensibleId); const res = yield getFtGenesisInfo(ftGenesisTxid); if (res.code == 0 && res.data.signers) { signersRaw = res.data.signers; } else { signersRaw = SingersMap_1.defaultSigners; } } const { signers, signerSelecteds } = yield sensible_sdk_1.SensibleFT.selectSigners(signersRaw); const ft = new sensible_sdk_1.SensibleFT({ network: this.network, purse: purseWif, feeb: this.feeb, apiTarget: sensible_sdk_1.API_TARGET.METASV, signers, signerSelecteds }); ft.sensibleApi.authorize(this.metasvAuth); const senderAddress = sensible_sdk_1.bsv.PrivateKey.fromWIF(this.tokenWif).toAddress(this.network).toString(); const balanceDetailRes = yield ft.getBalanceDetail({ codehash, genesis, address: senderAddress }); let ftUtxoCount = balanceDetailRes.utxoCount; let [remainUtxoCount, mergeTime] = (0, CommonUtils_1.getMergeTime)(ftUtxoCount); const receiverCount = 1; if (receiverCount > 10 && remainUtxoCount > 3) { //3to100 mergeTime++; } else if (receiverCount > 6 && receiverCount <= 10 && remainUtxoCount > 10) { //10to10 mergeTime++; } else if (receiverCount > 3 && receiverCount <= 6 && remainUtxoCount > 6) { //6to6 mergeTime++; } for (let i = 0; i < mergeTime; i++) { const { txid } = yield ft.merge({ codehash, genesis, ownerWif: this.tokenWif }); console.log(`merge token success ${i},txid: ${txid}`); // await sleep(15) } return; }); } } exports.default = Sensible;