UNPKG

sensible-sdk

Version:

Sensible-SDK

143 lines (142 loc) 6.26 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Wallet = void 0; const bsv = require("../bsv"); const utils_1 = require("../common/utils"); const sensible_api_1 = require("../sensible-api"); const tx_composer_1 = require("../tx-composer"); class Wallet { constructor(privwif, network = sensible_api_1.API_NET.MAIN, feeb, apiTarget = sensible_api_1.API_TARGET.SENSIBLE, apiUrl) { if (privwif) { this.privateKey = new bsv.PrivateKey(privwif, network); } else { this.privateKey = bsv.PrivateKey.fromRandom(network); } this.address = this.privateKey.toAddress(network); this.blockChainApi = new sensible_api_1.SensibleApi(network, apiTarget, apiUrl); this.feeb = feeb; this.network = network; } getUnspents() { return __awaiter(this, void 0, void 0, function* () { return yield this.blockChainApi.getUnspents(this.address.toString()); }); } getBalance() { return __awaiter(this, void 0, void 0, function* () { let { pendingBalance, balance } = yield this.blockChainApi.getBalance(this.address.toString()); return balance + pendingBalance; }); } send(address, amount, options) { return __awaiter(this, void 0, void 0, function* () { const txComposer = new tx_composer_1.TxComposer(); let utxos = yield this.blockChainApi.getUnspents(this.address.toString()); utxos.forEach((v) => { txComposer.appendP2PKHInput({ address: new bsv.Address(v.address, this.network), txId: v.txId, outputIndex: v.outputIndex, satoshis: v.satoshis, }); }); txComposer.appendP2PKHOutput({ address: new bsv.Address(address, this.network), satoshis: amount, }); txComposer.appendChangeOutput(this.address, this.feeb); utxos.forEach((v, index) => { txComposer.unlockP2PKHInput(this.privateKey, index); }); return yield this.broadcastTxComposer(txComposer, options); }); } sendArray(receivers, options) { return __awaiter(this, void 0, void 0, function* () { const txComposer = new tx_composer_1.TxComposer(); let utxos = yield this.blockChainApi.getUnspents(this.address.toString()); utxos.forEach((v) => { txComposer.appendP2PKHInput({ address: new bsv.Address(v.address, this.network), txId: v.txId, outputIndex: v.outputIndex, satoshis: v.satoshis, }); }); receivers.forEach((v) => { txComposer.appendP2PKHOutput({ address: new bsv.Address(v.address, this.network), satoshis: v.amount, }); }); txComposer.appendChangeOutput(this.address, this.feeb); utxos.forEach((v, index) => { txComposer.unlockP2PKHInput(this.privateKey, index); }); return yield this.broadcastTxComposer(txComposer, options); }); } merge(options) { return __awaiter(this, void 0, void 0, function* () { const txComposer = new tx_composer_1.TxComposer(); let utxos = yield this.blockChainApi.getUnspents(this.address.toString()); utxos.forEach((v) => { txComposer.appendP2PKHInput({ address: new bsv.Address(v.address, this.network), txId: v.txId, outputIndex: v.outputIndex, satoshis: v.satoshis, }); }); txComposer.appendChangeOutput(this.address, this.feeb); utxos.forEach((v, index) => { txComposer.unlockP2PKHInput(this.privateKey, index); }); return yield this.broadcastTxComposer(txComposer, options); }); } broadcastTxComposer(txComposer, options) { return __awaiter(this, void 0, void 0, function* () { const { noBroadcast, dump } = options || {}; if (dump) { (0, utils_1.dumpTx)(txComposer.getTx(), this.network); } if (noBroadcast) { return txComposer; } yield this.blockChainApi.broadcast(txComposer.getRawHex()); return txComposer; }); } sendOpReturn(opreturnData, options) { return __awaiter(this, void 0, void 0, function* () { const txComposer = new tx_composer_1.TxComposer(); let utxos = yield this.blockChainApi.getUnspents(this.address.toString()); utxos.forEach((v) => { txComposer.appendP2PKHInput({ address: new bsv.Address(v.address, this.network), txId: v.txId, outputIndex: v.outputIndex, satoshis: v.satoshis, }); }); txComposer.appendOpReturnOutput(opreturnData); txComposer.appendChangeOutput(this.address, this.feeb); utxos.forEach((v, index) => { txComposer.unlockP2PKHInput(this.privateKey, index); }); return yield this.broadcastTxComposer(txComposer, options); }); } } exports.Wallet = Wallet;