@bitgo/utxo-lib
Advanced tools
Comparing version 1.10.0-rc.12 to 1.10.0-rc.13
@@ -17,13 +17,8 @@ "use strict"; | ||
} | ||
// We only use `txb.build()` on certain legacy v1 SDKs. | ||
// Since native segwit was never enabled in v1 we do not have to worry about p2wsh inputs | ||
// and can focus on p2sh and p2shP2wsh. | ||
if (!input.script) { | ||
throw new Error(`native segwit not supported`); | ||
let decompiledSigScript; | ||
if (input.witness && input.witness.length > 0) { | ||
decompiledSigScript = input.witness; | ||
} | ||
const inputClassification = bscript.classifyInput(input.script, true); | ||
const decompiledSigScript = input.witness.length ? input.witness : bscript.decompile(input.script); | ||
const expectedScriptType = inputClassification === bscript.types.P2SH || inputClassification === bscript.types.P2WSH; | ||
if (!expectedScriptType) { | ||
return; | ||
else { | ||
decompiledSigScript = bscript.decompile(input.script); | ||
} | ||
@@ -37,4 +32,7 @@ // The shape of a non-standard half-signed input is | ||
if (op0 !== opcodes.OP_0 && !(Buffer.isBuffer(op0) && op0.length === 0)) { | ||
throw new Error(`unexpected instruction`); | ||
return; | ||
} | ||
if (bscript.classifyOutput(sigScript) !== bscript.types.MULTISIG) { | ||
return; | ||
} | ||
const paddedSigScript = [ | ||
@@ -54,2 +52,2 @@ op0, | ||
exports.padInputScript = padInputScript; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uU3RhbmRhcmRIYWxmU2lnbmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL25vblN0YW5kYXJkSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILHVDQUF1QztBQUN2QyxxQ0FBcUM7QUFJckM7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLEtBQVksRUFBRSxjQUFzQjtJQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7S0FDdEU7SUFFRCx1REFBdUQ7SUFDdkQseUZBQXlGO0lBQ3pGLHVDQUF1QztJQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRyxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLG1CQUFtQixLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRXJILElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUN2QixPQUFPO0tBQ1I7SUFFRCxtREFBbUQ7SUFDbkQsNEJBQTRCO0lBQzVCLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwQyxPQUFPO0tBQ1I7SUFFRCxNQUFNLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztJQUU5RCxJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQzNDO0lBRUQsTUFBTSxlQUFlLEdBQUc7UUFDdEIsR0FBRztRQUNILEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRixTQUFTO0tBQ1YsQ0FBQztJQUVGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDeEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7S0FDakM7U0FBTTtRQUNMLDREQUE0RDtRQUM1RCxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDakQ7QUFDSCxDQUFDO0FBNUNELHdDQTRDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIG9wY29kZXMgZnJvbSAnYml0Y29pbi1vcHMnO1xuaW1wb3J0ICogYXMgYnNjcmlwdCBmcm9tICcuLi9zY3JpcHQnO1xuXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4vc2lnbmF0dXJlJztcblxuLyoqXG4gKiBAcGFyYW0gaW5wdXQgLSBJbnB1dCBvZiBub24tc3RhbmRhcmQgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gY3JlYXRlZCB3aXRoIGB0eC5idWlsZCgpYCBpbnN0ZWFkIG9mIGB0eC5idWlsZEluY29tcGxldGUoKWAuXG4gKiBAcGFyYW0gc2lnbmF0dXJlSW5kZXggLSBQb3NpdGlvbiB0byBtYXAgdGhlIGV4aXN0aW5nIHNpZ25hdHVyZXMgdG8uIE90aGVyIHNpZ25hdHVyZXMgd2lsbCBiZSBwYWRkZWQgd2l0aCBPUF8wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkSW5wdXRTY3JpcHQoaW5wdXQ6IElucHV0LCBzaWduYXR1cmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghWzAsIDEsIDJdLmluY2x1ZGVzKHNpZ25hdHVyZUluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzaWduYXR1cmUgaW5kZXg6IG11c3QgYmUgb25lIG9mIFswLCAxLCAyXWApO1xuICB9XG5cbiAgLy8gV2Ugb25seSB1c2UgYHR4Yi5idWlsZCgpYCBvbiBjZXJ0YWluIGxlZ2FjeSB2MSBTREtzLlxuICAvLyBTaW5jZSBuYXRpdmUgc2Vnd2l0IHdhcyBuZXZlciBlbmFibGVkIGluIHYxIHdlIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHAyd3NoIGlucHV0c1xuICAvLyBhbmQgY2FuIGZvY3VzIG9uIHAyc2ggYW5kIHAyc2hQMndzaC5cbiAgaWYgKCFpbnB1dC5zY3JpcHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hdGl2ZSBzZWd3aXQgbm90IHN1cHBvcnRlZGApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRDbGFzc2lmaWNhdGlvbiA9IGJzY3JpcHQuY2xhc3NpZnlJbnB1dChpbnB1dC5zY3JpcHQsIHRydWUpO1xuICBjb25zdCBkZWNvbXBpbGVkU2lnU2NyaXB0ID0gaW5wdXQud2l0bmVzcy5sZW5ndGggPyBpbnB1dC53aXRuZXNzIDogYnNjcmlwdC5kZWNvbXBpbGUoaW5wdXQuc2NyaXB0KTtcbiAgY29uc3QgZXhwZWN0ZWRTY3JpcHRUeXBlID0gaW5wdXRDbGFzc2lmaWNhdGlvbiA9PT0gYnNjcmlwdC50eXBlcy5QMlNIIHx8IGlucHV0Q2xhc3NpZmljYXRpb24gPT09IGJzY3JpcHQudHlwZXMuUDJXU0g7XG5cbiAgaWYgKCFleHBlY3RlZFNjcmlwdFR5cGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgc2hhcGUgb2YgYSBub24tc3RhbmRhcmQgaGFsZi1zaWduZWQgaW5wdXQgaXNcbiAgLy8gICBPUF8wIDxzaWduYXR1cmU+IDxwMm1zPlxuICBpZiAoZGVjb21waWxlZFNpZ1NjcmlwdC5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBbb3AwLCBzaWduYXR1cmVCdWZmZXIsIHNpZ1NjcmlwdF0gPSBkZWNvbXBpbGVkU2lnU2NyaXB0O1xuXG4gIGlmIChvcDAgIT09IG9wY29kZXMuT1BfMCAmJiAhKEJ1ZmZlci5pc0J1ZmZlcihvcDApICYmIG9wMC5sZW5ndGggPT09IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGluc3RydWN0aW9uYCk7XG4gIH1cblxuICBjb25zdCBwYWRkZWRTaWdTY3JpcHQgPSBbXG4gICAgb3AwLFxuICAgIC4uLlswLCAxLCAyXS5tYXAoKGkpID0+IChpID09PSBzaWduYXR1cmVJbmRleCA/IHNpZ25hdHVyZUJ1ZmZlciA6IEJ1ZmZlci5mcm9tKFtdKSkpLFxuICAgIHNpZ1NjcmlwdCxcbiAgXTtcblxuICBpZiAoaW5wdXQud2l0bmVzcy5sZW5ndGgpIHtcbiAgICBpbnB1dC53aXRuZXNzID0gcGFkZGVkU2lnU2NyaXB0O1xuICB9IGVsc2Uge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJzY3JpcHQgdXNlcyBhbiBvZGQgXCJCdWZmZXJcIiB0eXBlIChwZXIganNkb2MpXG4gICAgaW5wdXQuc2NyaXB0ID0gYnNjcmlwdC5jb21waWxlKHBhZGRlZFNpZ1NjcmlwdCk7XG4gIH1cbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uU3RhbmRhcmRIYWxmU2lnbmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL25vblN0YW5kYXJkSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILHVDQUF1QztBQUN2QyxxQ0FBcUM7QUFJckM7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLEtBQVksRUFBRSxjQUFzQjtJQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7S0FDdEU7SUFFRCxJQUFJLG1CQUFtQixDQUFDO0lBQ3hCLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDN0MsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztLQUNyQztTQUFNO1FBQ0wsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkQ7SUFFRCxtREFBbUQ7SUFDbkQsNEJBQTRCO0lBQzVCLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwQyxPQUFPO0tBQ1I7SUFFRCxNQUFNLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztJQUM5RCxJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDdkUsT0FBTztLQUNSO0lBRUQsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1FBQ2hFLE9BQU87S0FDUjtJQUVELE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEdBQUc7UUFDSCxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsU0FBUztLQUNWLENBQUM7SUFFRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ3hCLEtBQUssQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO0tBQ2pDO1NBQU07UUFDTCw0REFBNEQ7UUFDNUQsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2pEO0FBQ0gsQ0FBQztBQXZDRCx3Q0F1Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgKiBhcyBvcGNvZGVzIGZyb20gJ2JpdGNvaW4tb3BzJztcbmltcG9ydCAqIGFzIGJzY3JpcHQgZnJvbSAnLi4vc2NyaXB0JztcblxuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICcuL3NpZ25hdHVyZSc7XG5cbi8qKlxuICogQHBhcmFtIGlucHV0IC0gSW5wdXQgb2Ygbm9uLXN0YW5kYXJkIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIGNyZWF0ZWQgd2l0aCBgdHguYnVpbGQoKWAgaW5zdGVhZCBvZiBgdHguYnVpbGRJbmNvbXBsZXRlKClgLlxuICogQHBhcmFtIHNpZ25hdHVyZUluZGV4IC0gUG9zaXRpb24gdG8gbWFwIHRoZSBleGlzdGluZyBzaWduYXR1cmVzIHRvLiBPdGhlciBzaWduYXR1cmVzIHdpbGwgYmUgcGFkZGVkIHdpdGggT1BfMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZElucHV0U2NyaXB0KGlucHV0OiBJbnB1dCwgc2lnbmF0dXJlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICBpZiAoIVswLCAxLCAyXS5pbmNsdWRlcyhzaWduYXR1cmVJbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc2lnbmF0dXJlIGluZGV4OiBtdXN0IGJlIG9uZSBvZiBbMCwgMSwgMl1gKTtcbiAgfVxuXG4gIGxldCBkZWNvbXBpbGVkU2lnU2NyaXB0O1xuICBpZiAoaW5wdXQud2l0bmVzcyAmJiBpbnB1dC53aXRuZXNzLmxlbmd0aCA+IDApIHtcbiAgICBkZWNvbXBpbGVkU2lnU2NyaXB0ID0gaW5wdXQud2l0bmVzcztcbiAgfSBlbHNlIHtcbiAgICBkZWNvbXBpbGVkU2lnU2NyaXB0ID0gYnNjcmlwdC5kZWNvbXBpbGUoaW5wdXQuc2NyaXB0KTtcbiAgfVxuXG4gIC8vIFRoZSBzaGFwZSBvZiBhIG5vbi1zdGFuZGFyZCBoYWxmLXNpZ25lZCBpbnB1dCBpc1xuICAvLyAgIE9QXzAgPHNpZ25hdHVyZT4gPHAybXM+XG4gIGlmIChkZWNvbXBpbGVkU2lnU2NyaXB0Lmxlbmd0aCAhPT0gMykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFtvcDAsIHNpZ25hdHVyZUJ1ZmZlciwgc2lnU2NyaXB0XSA9IGRlY29tcGlsZWRTaWdTY3JpcHQ7XG4gIGlmIChvcDAgIT09IG9wY29kZXMuT1BfMCAmJiAhKEJ1ZmZlci5pc0J1ZmZlcihvcDApICYmIG9wMC5sZW5ndGggPT09IDApKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGJzY3JpcHQuY2xhc3NpZnlPdXRwdXQoc2lnU2NyaXB0KSAhPT0gYnNjcmlwdC50eXBlcy5NVUxUSVNJRykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZGRlZFNpZ1NjcmlwdCA9IFtcbiAgICBvcDAsXG4gICAgLi4uWzAsIDEsIDJdLm1hcCgoaSkgPT4gKGkgPT09IHNpZ25hdHVyZUluZGV4ID8gc2lnbmF0dXJlQnVmZmVyIDogQnVmZmVyLmZyb20oW10pKSksXG4gICAgc2lnU2NyaXB0LFxuICBdO1xuXG4gIGlmIChpbnB1dC53aXRuZXNzLmxlbmd0aCkge1xuICAgIGlucHV0LndpdG5lc3MgPSBwYWRkZWRTaWdTY3JpcHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYnNjcmlwdCB1c2VzIGFuIG9kZCBcIkJ1ZmZlclwiIHR5cGUgKHBlciBqc2RvYylcbiAgICBpbnB1dC5zY3JpcHQgPSBic2NyaXB0LmNvbXBpbGUocGFkZGVkU2lnU2NyaXB0KTtcbiAgfVxufVxuIl19 |
{ | ||
"name": "@bitgo/utxo-lib", | ||
"version": "1.10.0-rc.12", | ||
"version": "1.10.0-rc.13", | ||
"description": "Client-side Bitcoin JavaScript library", | ||
@@ -21,11 +21,17 @@ "main": "./dist/src/index.js", | ||
"scripts": { | ||
"prepare": "npm run build", | ||
"build": "tsc --project tsconfig.build.json", | ||
"coverage-report": "nyc report --reporter=lcov", | ||
"coverage-html": "nyc report --reporter=html", | ||
"coverage": "npm run build && BITGO_UTXO_LIB_TEST_EXPECTED_COUNT=3594 nyc --check-coverage --branches 88 --functions 90 mocha", | ||
"integration-test": "mocha test/integration/", | ||
"standard": "standard", | ||
"test": "npm run standard && npm run coverage", | ||
"coverage": "npm run build && nyc --check-coverage mocha", | ||
"test": "npm run coverage", | ||
"unit-test": "mocha" | ||
}, | ||
"nyc": { | ||
"include": [ | ||
"src/**" | ||
], | ||
"branches": 78, | ||
"functions": 90 | ||
}, | ||
"repository": { | ||
@@ -41,18 +47,7 @@ "type": "git", | ||
"@bitgo/blake2b": "^3.0.1", | ||
"bech32": "0.0.3", | ||
"bigi": "^1.4.0", | ||
"bip66": "^1.1.0", | ||
"bitcoin-ops": "^1.3.0", | ||
"bitcoinjs-lib": "git+https://github.com/BitGo/bitcoinjs-lib.git#19fd098772", | ||
"bs58check": "^2.0.0", | ||
"create-hash": "^1.1.0", | ||
"create-hmac": "^1.1.3", | ||
"debug": "~3.1.0", | ||
"ecurve": "^1.0.0", | ||
"merkle-lib": "^2.0.10", | ||
"pushdata-bitcoin": "^1.0.1", | ||
"randombytes": "^2.0.1", | ||
"safe-buffer": "^5.0.1", | ||
"typeforce": "^1.11.3", | ||
"varuint-bitcoin": "^1.0.4", | ||
"wif": "^2.0.1" | ||
"varuint-bitcoin": "^1.0.4" | ||
}, | ||
@@ -62,20 +57,11 @@ "devDependencies": { | ||
"axios": "^0.21.1", | ||
"bip39": "^2.3.0", | ||
"bip65": "^1.0.1", | ||
"bs58": "^4.0.0", | ||
"dhttp": "^2.4.2", | ||
"debug": "^3.1.0", | ||
"fs-extra": "^9.1.0", | ||
"minimaldata": "^1.0.2", | ||
"mocha": "^8.4.0", | ||
"nyc": "^15.1.0", | ||
"proxyquire": "^1.4.0", | ||
"sinon": "^1.12.2", | ||
"standard": "^9.0.2", | ||
"ts-node": "^9.1.1" | ||
"ts-node": "^9.1.1", | ||
"typescript": "^4.4.3" | ||
}, | ||
"license": "MIT", | ||
"optionalDependencies": { | ||
"secp256k1": "^3.5.2" | ||
}, | ||
"gitHead": "fce052925597b7ca2e83e233499c8ea2eec06b4b" | ||
"gitHead": "0d3db112db1495986f23e0e12b56c617f5c0bfd7" | ||
} |
146
README.md
@@ -1,28 +0,6 @@ | ||
# BitGo UTXO library (bitgo-utxo-lib) | ||
[![Build Status](https://travis-ci.org/BitGo/bitgo-utxo-lib.png?branch=master)](https://travis-ci.org/BitGo/bitgo-utxo-lib) | ||
[![NPM](https://img.shields.io/npm/v/bitgo-utxo-lib.svg)](https://www.npmjs.org/package/bitgo-utxo-lib) | ||
[![Known Vulnerabilities](https://snyk.io/test/github/BitGo/bitgo-utxo-lib/badge.svg?targetFile=package.json)](https://snyk.io/test/github/BitGo/bitgo-utxo-lib?targetFile=package.json) | ||
# BitGo UTXO library | ||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) | ||
This library is a wrapper around [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib) adding altcoin support. | ||
Originally a fork of [bitcoinjs-lib](https://github.com/BitGo/bitcoinjs-lib); we evolved this library to support the transaction building process of different UTXO based coins. | ||
## Supported coins | ||
- Bitcoin | ||
- Bitcoin Cash | ||
- Bitcoin Gold | ||
- Bitcoin SV (Satoshi Vision) | ||
- Dash | ||
- Litecoin | ||
- Zcash (Sapling compatible) | ||
## Features | ||
- Clean: Pure JavaScript, concise code, easy to read. | ||
- Tested: Coverage > 90%, third-party integration tests. | ||
- Compatible: Works on Node.js and all modern browsers. | ||
- Powerful: Support for advanced features, such as multi-sig, HD Wallets. | ||
- Secure: Strong random number generation, PGP signed releases, trusted developers. | ||
- Principled: No support for browsers with RNG (IE < 11) | ||
- Standardized: Node community coding style, Browserify, Node's stdlib and Buffers. | ||
- Experiment-friendly: Mainnet and Testnet support. | ||
- Multicoin support: Configurable behaviour based on [network](https://github.com/BitGo/bitgo-utxo-lib/blob/master/src/networks.js) objects. | ||
@@ -38,112 +16,28 @@ - Backed by [BitGo](https://www.bitgo.com/info/) | ||
### Node.js | ||
``` javascript | ||
var bitGoUTXO = require('@bitgo/utxo-lib') | ||
```typescript | ||
import * as utxolib from '@bitgo/utxo-lib' | ||
``` | ||
### Browser | ||
If you're familiar with how to use browserify, ignore this and proceed normally. | ||
These steps are advisory only, and may not be suitable for your application. | ||
[Browserify](https://github.com/substack/node-browserify) is assumed to be installed for these steps. | ||
## Usage | ||
For your project, create an `index.js` file | ||
``` javascript | ||
let bitGoUTXO = require('@bitgo/utxo-lib') | ||
Support for parsing and building altcoin transactions is provided by the following methods | ||
// your code here | ||
function myFunction () { | ||
return bitGoUTXO.ECPair.makeRandom().toWIF() | ||
} | ||
* `utxolib.bitgo.createTransactionFromBuffer(buffer, network): UtxoTransaction` (similarly `createTransactionFromHex(string, network)`) | ||
* `utxolib.bitgo.createTransactionBuilderForNetwork(network): UtxoTransactionBuilder` | ||
* `utxolib.bitgo.createTransactionBuilderFromTransaction(tx): UtxoTransactionBuilder` | ||
module.exports = { | ||
myFunction | ||
} | ||
``` | ||
The `UtxoTransaction(Builder)` classes have the same interface as the `Transaction` type in `bitcoinjs-lib` . | ||
Now, to compile for the browser: | ||
``` bash | ||
browserify index.js --standalone foo > app.js | ||
``` | ||
## Supported coins | ||
You can now put `<script src="app.js" />` in your web page, using `foo.myFunction` to create a new Bitcoin private key. | ||
|Network|Mainnet|Testnet| | ||
|---|---|---| | ||
|Bitcoin|`utxolib.networks.bitcoin`|`utxolib.networks.testnet`| | ||
|Bitcoin Cash|`utxolib.networks.bitcoincash`|`utxolib.networks.bitcoincashTestnet`| | ||
|Bitcoin Gold|`utxolib.networks.bitcoingold`|`utxolib.networks.bitcoingoldTestnet`| | ||
|Bitcoin SV (Satoshi Vision)|`utxolib.networks.bitcoinsv`|`utxolib.networks.bitcoinsvTestnet`| | ||
|Dash|`utxolib.networks.dash`|`utxolib.networks.dash`| | ||
|Litecoin|`utxolib.networks.litecoin`|`utxolib.networks.litecoinTest`| | ||
|Zcash|`utxolib.networks.zcash`|`utxolib.networks.zcashTest`| | ||
**NOTE**: If you uglify the javascript, you must exclude the following variable names from being mangled: `BigInteger`, `ECPair`, `Point`. | ||
This is because of the function-name-duck-typing used in [typeforce](https://github.com/dcousens/typeforce). | ||
Example: | ||
``` bash | ||
uglifyjs ... --mangle --reserved 'BigInteger,ECPair,Point' | ||
``` | ||
**NOTE**: This library tracks Node LTS features, if you need strict ES5, use [`--transform babelify`](https://github.com/babel/babelify) in conjunction with your `browserify` step (using an [`es2015`](http://babeljs.io/docs/plugins/preset-es2015/) preset). | ||
**NOTE**: If you expect this library to run on an iOS 10 device, ensure that you are using [buffer@5.0.5](https://github.com/feross/buffer/pull/155) or greater. | ||
## Examples | ||
The below examples are implemented as integration tests, they should be very easy to understand. | ||
Otherwise, pull requests are appreciated. | ||
Some examples interact (via HTTPS) with a 3rd Party Blockchain Provider (3PBP). | ||
### Bitcoin | ||
- [Generate a random address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L12) | ||
- [Generate an address from a SHA256 hash](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L19) | ||
- [Import an address via WIF](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L29) | ||
- [Generate a 2-of-3 P2SH multisig address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L36) | ||
- [Generate a SegWit address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L50) | ||
- [Generate a SegWit P2SH address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L60) | ||
- [Generate a SegWit 3-of-4 multisig address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L71) | ||
- [Generate a SegWit 2-of-2 P2SH multisig address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L86) | ||
- [Support the retrieval of transactions for an address (3rd party blockchain)](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L100) | ||
- [Generate a Testnet address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L121) | ||
- [Generate a Litecoin address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/addresses.js#L131) | ||
- [Create a 1-to-1 Transaction](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L14) | ||
- [Create a 2-to-2 Transaction](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L28) | ||
- [Create (and broadcast via 3PBP) a typical Transaction](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L46) | ||
- [Create (and broadcast via 3PBP) a Transaction with an OP\_RETURN output](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L88) | ||
- [Create (and broadcast via 3PBP) a Transaction with a 2-of-4 P2SH(multisig) input](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L115) | ||
- [Create (and broadcast via 3PBP) a Transaction with a SegWit P2SH(P2WPKH) input](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L151) | ||
- [Create (and broadcast via 3PBP) a Transaction with a SegWit 3-of-4 P2SH(P2WSH(multisig)) input](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/transactions.js#L183) | ||
- [Import a BIP32 testnet xpriv and export to WIF](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L8) | ||
- [Export a BIP32 xpriv, then import it](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L15) | ||
- [Export a BIP32 xpub](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L26) | ||
- [Create a BIP32, bitcoin, account 0, external address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L35) | ||
- [Create a BIP44, bitcoin, account 0, external address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L50) | ||
- [Create a BIP49, bitcoin testnet, account 0, external address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L66) | ||
- [Use BIP39 to generate BIP32 addresses](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/bip32.js#L83) | ||
- [Create (and broadcast via 3PBP) a Transaction where Alice can redeem the output after the expiry](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/cltv.js#L37) | ||
- [Create (and broadcast via 3PBP) a Transaction where Alice and Bob can redeem the output at any time](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/cltv.js#L71) | ||
- [Create (but fail to broadcast via 3PBP) a Transaction where Alice attempts to redeem before the expiry](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/cltv.js#L104) | ||
- [Recover a private key from duplicate R values](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/crypto.js#L14) | ||
- [Recover a BIP32 parent private key from the parent public key, and a derived, non-hardened child private key](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/crypto.js#L115) | ||
- [Generate a single-key stealth address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/stealth.js#L70:) | ||
- [Generate a single-key stealth address (randomly)](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/stealth.js#L89:) | ||
- [Recover parent recipient.d, if a derived private key is leaked (and nonce was revealed)](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/stealth.js#L105) | ||
- [Generate a dual-key stealth address](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/stealth.js#L122) | ||
- [Generate a dual-key stealth address (randomly)](https://github.com/BitGo/BitGoJS/tree/master/modules/utxo-lib/test/integration/stealth.js#L145) | ||
If you have a use case that you feel could be listed here, please [ask for it](https://github.com/BitGo/bitgo-utxo-lib/issues/new)! | ||
### Running the test suite | ||
``` bash | ||
npm test | ||
npm run-script coverage | ||
``` | ||
## Complementing Libraries | ||
- [BIP21](https://github.com/bitcoinjs/bip21) - A BIP21 compatible URL encoding utility library | ||
- [BIP38](https://github.com/bitcoinjs/bip38) - Passphrase-protected private keys | ||
- [BIP39](https://github.com/bitcoinjs/bip39) - Mnemonic generation for deterministic keys | ||
- [BIP32-Utils](https://github.com/bitcoinjs/bip32-utils) - A set of utilities for working with BIP32 | ||
- [BIP66](https://github.com/bitcoinjs/bip66) - Strict DER signature decoding | ||
- [BIP69](https://github.com/bitcoinjs/bip69) - Lexicographical Indexing of Transaction Inputs and Outputs | ||
- [Base58](https://github.com/cryptocoinjs/bs58) - Base58 encoding/decoding | ||
- [Base58 Check](https://github.com/bitcoinjs/bs58check) - Base58 check encoding/decoding | ||
- [Bech32](https://github.com/bitcoinjs/bech32) - A BIP173 compliant Bech32 encoding library | ||
- [coinselect](https://github.com/bitcoinjs/coinselect) - A fee-optimizing, transaction input selection module for bitcoinjs-lib. | ||
- [merkle-lib](https://github.com/bitcoinjs/merkle-lib) - A performance conscious library for merkle root and tree calculations. | ||
- [minimaldata](https://github.com/bitcoinjs/minimaldata) - A module to check bitcoin policy: SCRIPT_VERIFY_MINIMALDATA | ||
## LICENSE [MIT](LICENSE) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Git dependency
Supply chain riskContains a dependency which resolves to a remote git URL. Dependencies fetched from git URLs are not immutable can be used to inject untrusted code or reduce the likelihood of a reproducible install.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
6
8
585012
4436
43
1
+ Addedbitcoinjs-lib@git+https://github.com/BitGo/bitcoinjs-lib.git#19fd098772
- Removedbech32@0.0.3
- Removedbigi@^1.4.0
- Removedbip66@^1.1.0
- Removedcreate-hash@^1.1.0
- Removedcreate-hmac@^1.1.3
- Removeddebug@~3.1.0
- Removedecurve@^1.0.0
- Removedmerkle-lib@^2.0.10
- Removedpushdata-bitcoin@^1.0.1
- Removedrandombytes@^2.0.1
- Removedsafe-buffer@^5.0.1
- Removedwif@^2.0.1
- Removedbech32@0.0.3(transitive)
- Removedbigi@1.4.2(transitive)
- Removedbindings@1.5.0(transitive)
- Removedbip66@1.1.5(transitive)
- Removedbn.js@4.12.0(transitive)
- Removedbrorand@1.1.0(transitive)
- Removedbrowserify-aes@1.2.0(transitive)
- Removedbuffer-xor@1.0.3(transitive)
- Removedcreate-hmac@1.1.7(transitive)
- Removeddebug@3.1.0(transitive)
- Removeddrbg.js@1.0.1(transitive)
- Removedecurve@1.0.6(transitive)
- Removedelliptic@6.5.7(transitive)
- Removedevp_bytestokey@1.0.3(transitive)
- Removedfile-uri-to-path@1.0.0(transitive)
- Removedhash.js@1.1.7(transitive)
- Removedhmac-drbg@1.0.1(transitive)
- Removedmerkle-lib@2.0.10(transitive)
- Removedminimalistic-assert@1.0.1(transitive)
- Removedminimalistic-crypto-utils@1.0.1(transitive)
- Removedms@2.0.0(transitive)
- Removednan@2.22.0(transitive)
- Removedpushdata-bitcoin@1.0.1(transitive)
- Removedrandombytes@2.1.0(transitive)
- Removedsecp256k1@3.8.1(transitive)
- Removedwif@2.0.6(transitive)