send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
84 lines • 7.15 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BitgoUTXOLib = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const bitcoin = __importStar(require("bitgo-utxo-lib"));
const buildUTXO = async (network, privateKey, changeAddress, toAddress, valueIn, utxos, options) => {
const fees = new bignumber_js_1.default(options && options.fee !== undefined ? options.fee : 10000);
const value = options && options.subtractFee ? valueIn.minus(fees) : valueIn;
if (value.lt(0)) {
throw new Error(`Unable to include fee in value, fee exceeds value (${fees.toFixed()} > ${valueIn.toFixed()})`);
}
const tx = new bitcoin.TransactionBuilder(network);
if (options && options.version) {
tx.setVersion(options.version);
}
if (options && options.versionGroupID) {
tx.setVersionGroupId(options.versionGroupID);
}
if (options && options.expiryHeight) {
tx.setExpiryHeight(options.expiryHeight);
}
if (options && options.lockTime) {
tx.setLockTime(options.lockTime);
}
if (options && options.consensusBranchId) {
tx.setConsensusBranchId(options.consensusBranchId);
}
// Only use the required utxos
const [usedUTXOs, sum] = utxos.reduce(([utxoAcc, total], utxo) => total.lt(value.plus(fees))
? [[...utxoAcc, utxo], total.plus(utxo.amount)]
: [utxoAcc, total], [[], new bignumber_js_1.default(0)]);
if (sum.lt(value.plus(fees))) {
throw new Error("Insufficient balance to broadcast transaction");
}
// Add all inputs
usedUTXOs.map((utxo) => {
tx.addInput(utxo.txHash, utxo.vOut);
});
const change = sum.minus(value).minus(fees);
// Add outputs
tx.addOutput(toAddress, value.toNumber());
if (change.gt(0)) {
tx.addOutput(changeAddress, change.toNumber());
}
// Sign inputs
usedUTXOs.map((utxo, i) => {
tx.sign(i, privateKey, null, options && options.signFlag !== undefined ? options.signFlag : null, utxo.amount);
});
return tx.build();
};
const loadPrivateKey = (network, privateKey) => {
return bitcoin.ECPair.fromPrivateKeyBuffer(Buffer.from(privateKey, "hex"), network);
};
exports.BitgoUTXOLib = {
buildUTXO,
loadPrivateKey,
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Z29VdHhvTGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9saWJyYXJpZXMvYml0Z29VdHhvTGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQXFDO0FBQ3JDLHdEQUEwQztBQUkxQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQ25CLE9BQXdDLEVBQ3hDLFVBQWUsRUFDZixhQUFxQixFQUNyQixTQUFpQixFQUNqQixPQUFrQixFQUNsQixLQUFhLEVBQ2IsT0FTQyxFQUMrQixFQUFFO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksc0JBQVMsQ0FDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQzdELENBQUM7SUFFRixNQUFNLEtBQUssR0FDUCxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ25FLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNiLE1BQU0sSUFBSSxLQUFLLENBQ1gsc0RBQXNELElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FDakcsQ0FBQztLQUNMO0lBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUM1QixFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNsQztJQUNELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVB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