sensible-sdk
Version:
Sensible-SDK
143 lines (142 loc) • 6.26 kB
JavaScript
"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;