bsv-sdk
Version:
bsv sdk
169 lines (168 loc) • 7.35 kB
JavaScript
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;
;