bitgesell-bitcoinjs
Version:
Bitgesell BitcoinJS
144 lines (142 loc) • 5.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
BITGESELL_MAINNET: function() {
return _bitgesellnetworks.BITGESELL_MAINNET;
},
Psbt: function() {
return _bitcoinjslib.Psbt;
}
});
var _bitcoinjslib = require("bitcoinjs-lib");
var _psbtutils = require("bitcoinjs-lib/src/psbt/psbtutils.js");
var _sha3 = require("@noble/hashes/sha3");
var _varuintbitcoin = require("varuint-bitcoin");
var _bitgesellnetworks = require("bitgesell-networks");
var toLE = function(number) {
var size = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 4;
var buf = Buffer.alloc(size);
if (size === 8) buf.writeBigUInt64LE(BigInt(number), 0);
else buf.writeUInt32LE(number, 0);
return buf;
};
var getPreimage = function(param) {
var version = param.version, vIn = param.vIn, vOut = param.vOut, locktime = param.locktime, inputIdx = param.inputIdx, scriptCode = param.scriptCode, value = param.value, sighashType = param.sighashType;
var versionBuf = toLE(version);
var prevouts = Buffer.concat(vIn.map(function(param) {
var txid = param.txid, vout = param.vout;
var hash = Buffer.from(txid, 'hex').reverse();
return Buffer.concat([
hash,
toLE(vout)
]);
}));
var sequence = Buffer.concat(vIn.map(function(param) {
var sequence = param.sequence;
return toLE(sequence);
}));
var input = vIn[inputIdx];
var outpoint = Buffer.concat([
Buffer.from(input.txid, 'hex').reverse(),
toLE(input.vout)
]);
var scriptCodeLen = Buffer.from([
scriptCode.length
]);
var valBuf = toLE(value, 8);
var seqBuf = toLE(input.sequence);
var outputs = Buffer.concat(vOut.map(function(param) {
var value = param.value, script = param.script;
return Buffer.concat([
toLE(value, 8),
Buffer.from((0, _varuintbitcoin.encode)(script.length).buffer),
script
]);
}));
var locktimeBuf = toLE(locktime, 4);
var sighashTypeBuf = toLE(sighashType, 4);
return Buffer.concat([
versionBuf,
Buffer.from((0, _sha3.keccak_256)(prevouts)),
Buffer.from((0, _sha3.keccak_256)(sequence)),
outpoint,
scriptCodeLen,
scriptCode,
valBuf,
seqBuf,
Buffer.from((0, _sha3.keccak_256)(outputs)),
locktimeBuf,
sighashTypeBuf
]);
};
var patchPsbt = function() {
if (_bitcoinjslib.Psbt.prototype.__psbtPatched) return;
_bitcoinjslib.Psbt.prototype.signInput = function patchPsbt(inputIdx, keyPair) {
var _this = this;
for(var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
args[_key - 2] = arguments[_key];
}
var input = this.data.inputs[inputIdx];
var pubkeyBuf = Buffer.from(keyPair.publicKey);
var sighashType = 0x01;
var tx = this.__CACHE.__TX;
var vIn = tx.ins.map(function(inp, idx) {
return {
txid: Buffer.from(inp.hash).reverse().toString('hex'),
vout: inp.index,
sequence: inp.sequence,
value: _this.data.inputs[idx].witnessUtxo.value
};
});
var vOut = tx.outs.map(function(out) {
return {
value: out.value,
script: out.script
};
});
var preimage = getPreimage({
version: tx.version,
vIn: vIn,
vOut: vOut,
locktime: tx.locktime,
inputIdx: inputIdx,
scriptCode: _bitcoinjslib.payments.p2pkh({
pubkey: pubkeyBuf
}).output,
value: vIn[inputIdx].value,
sighashType: sighashType
});
var sighash = Buffer.from((0, _sha3.keccak_256)(preimage));
var sigDER = _bitcoinjslib.script.signature.encode(Buffer.from(keyPair.sign(sighash)), sighashType);
input.partialSig = [
{
signature: sigDER,
pubkey: pubkeyBuf
}
];
input.__bglSigDER = sigDER;
input.__bglPubkey = pubkeyBuf;
return this;
};
_bitcoinjslib.Psbt.prototype.finalizeInput = function(inputIndex) {
for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
args[_key - 1] = arguments[_key];
}
var input = this.data.inputs[inputIndex];
input.finalScriptWitness = (0, _psbtutils.witnessStackToScriptWitness)([
input.__bglSigDER,
input.__bglPubkey
]);
return this;
};
_bitcoinjslib.Psbt.prototype.__psbtPatched = true;
};
patchPsbt();