Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

@bitgo/bitcoinjs-lib

Package Overview
Dependencies
Maintainers
6
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bitgo/bitcoinjs-lib - npm Package Compare versions

Comparing version 6.1.0-rc.3 to 6.1.0-rc.4

2

package.json
{
"name": "@bitgo/bitcoinjs-lib",
"version": "6.1.0-rc.3",
"version": "6.1.0-rc.4",
"description": "Client-side Bitcoin JavaScript library",

@@ -5,0 +5,0 @@ "main": "./src/index.js",

@@ -28,3 +28,3 @@ 'use strict';

}
static fromBuffer(buffer) {
static fromBuffer(buffer, amountType = 'number') {
if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)');

@@ -44,2 +44,3 @@ const bufferReader = new bufferutils_1.BufferReader(buffer);

true,
amountType,
);

@@ -60,4 +61,4 @@ bufferReader.offset += tx.byteLength();

}
static fromHex(hex) {
return Block.fromBuffer(Buffer.from(hex, 'hex'));
static fromHex(hex, amountType = 'number') {
return Block.fromBuffer(Buffer.from(hex, 'hex'), amountType);
}

@@ -64,0 +65,0 @@ static calculateTarget(bits) {

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
exports.BufferReader = exports.BufferWriter = exports.cloneBuffer = exports.reverseBuffer = exports.writeUInt64LE = exports.readUInt64LE = void 0;
exports.BufferReader = exports.BufferWriter = exports.cloneBuffer = exports.reverseBuffer = exports.writeUInt64LE = exports.readUInt64LE = exports.readUInt64BigIntLE = void 0;
const types = require('./types');

@@ -9,22 +9,30 @@ const typeforce = require('typeforce');

function verifuint(value, max) {
if (typeof value !== 'number')
throw new Error('cannot write a non-number as a number');
if (typeof value !== 'number' && typeof value !== 'bigint')
throw new Error('value must be a number or bigint');
if (value < 0)
throw new Error('specified a negative value for writing an unsigned value');
if (value > max) throw new Error('RangeError: value out of range');
if (Math.floor(value) !== value)
if (typeof value === 'number' && Math.floor(value) !== value)
// bigint is enforced int
throw new Error('value has a fractional component');
}
function readUInt64BigIntLE(buffer, offset) {
return buffer.readBigUInt64LE(offset);
}
exports.readUInt64BigIntLE = readUInt64BigIntLE;
function readUInt64LE(buffer, offset) {
const a = buffer.readUInt32LE(offset);
let b = buffer.readUInt32LE(offset + 4);
b *= 0x100000000;
verifuint(b + a, 0x001fffffffffffff);
return b + a;
const result = readUInt64BigIntLE(buffer, offset);
verifuint(result, 0x001fffffffffffff);
return Number(result);
}
exports.readUInt64LE = readUInt64LE;
function writeUInt64LE(buffer, value, offset) {
verifuint(value, 0x001fffffffffffff);
buffer.writeInt32LE(value & -1, offset);
buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4);
if (typeof value === 'number') {
verifuint(value, 0x001fffffffffffff);
} else if (typeof value === 'bigint') {
verifuint(value, BigInt('0xffffffffffffffff'));
} else {
throw new Error('value must be a number or bigint');
}
buffer.writeBigUInt64LE(BigInt(value), offset);
return offset + 8;

@@ -131,2 +139,7 @@ }

}
readUInt64BigInt() {
const result = readUInt64BigIntLE(this.buffer, this.offset);
this.offset += 8;
return result;
}
readVarInt() {

@@ -133,0 +146,0 @@ const vi = varuint.decode(this.buffer, this.offset);

@@ -317,8 +317,15 @@ 'use strict';

// not all inputs will have .value defined
const incoming = this.__INPUTS.reduce((a, x) => a + (x.value >>> 0), 0);
const incoming = this.__INPUTS.reduce(
(a, x) =>
a + (typeof x.value !== 'undefined' ? BigInt(x.value) : BigInt(0)),
BigInt(0),
);
// but all outputs do, and if we have any input value
// we can immediately determine if the outputs are too small
const outgoing = this.__TX.outs.reduce((a, x) => a + x.value, 0);
const outgoing = this.__TX.outs.reduce(
(a, x) => a + BigInt(x.value),
BigInt(0),
);
const fee = incoming - outgoing;
const feeRate = fee / bytes;
const feeRate = Number(fee) / bytes; // assume fee fits within number
return feeRate > this.maximumFeeRate;

@@ -325,0 +332,0 @@ }

@@ -50,3 +50,3 @@ 'use strict';

}
static fromBuffer(buffer, _NO_STRICT) {
static fromBuffer(buffer, _NO_STRICT, amountType = 'number') {
const bufferReader = new bufferutils_1.BufferReader(buffer);

@@ -79,3 +79,6 @@ const tx = new Transaction();

tx.outs.push({
value: bufferReader.readUInt64(),
value:
amountType === 'number'
? bufferReader.readUInt64()
: bufferReader.readUInt64BigInt(),
script: bufferReader.readVarSlice(),

@@ -98,4 +101,4 @@ });

}
static fromHex(hex) {
return Transaction.fromBuffer(Buffer.from(hex, 'hex'), false);
static fromHex(hex, amountType = 'number') {
return Transaction.fromBuffer(Buffer.from(hex, 'hex'), false, amountType);
}

@@ -102,0 +105,0 @@ static isCoinbaseHash(buffer) {

@@ -26,4 +26,8 @@ 'use strict';

const SATOSHI_MAX = 21 * 1e14;
const BIG_SATOSHI_MAX = BigInt('1000000000000000000');
function Satoshi(value) {
return typeforce.UInt53(value) && value <= SATOSHI_MAX;
return (
(typeforce.UInt53(value) && value <= SATOSHI_MAX) ||
(typeof value === 'bigint' && value >= 0 && value <= BIG_SATOSHI_MAX)
);
}

@@ -30,0 +34,0 @@ exports.Satoshi = Satoshi;

/// <reference types="node" />
import { Transaction } from './transaction';
export declare class Block {
static fromBuffer(buffer: Buffer): Block;
static fromHex(hex: string): Block;
export declare class Block<TNumber extends number | bigint = number> {
static fromBuffer<TNumber extends number | bigint = number>(buffer: Buffer, amountType?: 'number' | 'bigint'): Block<TNumber>;
static fromHex<TNumber extends number | bigint = number>(hex: string, amountType?: 'number' | 'bigint'): Block<TNumber>;
static calculateTarget(bits: number): Buffer;
static calculateMerkleRoot(transactions: Transaction[], forWitness?: boolean): Buffer;
static calculateMerkleRoot<TNumber extends number | bigint = number>(transactions: Array<Transaction<TNumber>>, forWitness?: boolean): Buffer;
version: number;

@@ -15,3 +15,3 @@ prevHash?: Buffer;

nonce: number;
transactions?: Transaction[];
transactions?: Array<Transaction<TNumber>>;
getWitnessCommit(): Buffer | null;

@@ -18,0 +18,0 @@ hasWitnessCommit(): boolean;

/// <reference types="node" />
export declare function readUInt64BigIntLE(buffer: Buffer, offset: number): bigint;
export declare function readUInt64LE(buffer: Buffer, offset: number): number;
export declare function writeUInt64LE(buffer: Buffer, value: number, offset: number): number;
export declare function writeUInt64LE(buffer: Buffer, value: number | bigint, offset: number): number;
export declare function reverseBuffer(buffer: Buffer): Buffer;

@@ -17,3 +18,3 @@ export declare function cloneBuffer(buffer: Buffer): Buffer;

writeUInt32(i: number): void;
writeUInt64(i: number): void;
writeUInt64(i: number | bigint): void;
writeVarInt(i: number): void;

@@ -36,2 +37,3 @@ writeSlice(slice: Buffer): void;

readUInt64(): number;
readUInt64BigInt(): bigint;
readVarInt(): number;

@@ -38,0 +40,0 @@ readSlice(n: number): Buffer;

@@ -5,3 +5,3 @@ /// <reference types="node" />

import { Transaction } from './transaction';
interface TxbSignArg {
interface TxbSignArg<TNumber extends number | bigint = number> {
prevOutScriptType: string;

@@ -12,3 +12,3 @@ vin: number;

hashType?: number;
witnessValue?: number;
witnessValue?: TNumber;
witnessScript?: Buffer;

@@ -18,6 +18,6 @@ controlBlock?: Buffer;

}
export declare class TransactionBuilder {
export declare class TransactionBuilder<TNumber extends number | bigint = number> {
network: Network;
maximumFeeRate: number;
static fromTransaction(transaction: Transaction, network?: Network): TransactionBuilder;
static fromTransaction<TNumber extends number | bigint = number>(transaction: Transaction<TNumber>, network?: Network): TransactionBuilder<TNumber>;
private __PREV_TX_SET;

@@ -31,7 +31,7 @@ private __INPUTS;

setVersion(version: number): void;
addInput(txHash: Buffer | string | Transaction, vout: number, sequence?: number, prevOutScript?: Buffer, value?: number): number;
addOutput(scriptPubKey: string | Buffer, value: number): number;
build(): Transaction;
buildIncomplete(): Transaction;
sign(signParams: number | TxbSignArg, keyPair?: Signer, redeemScript?: Buffer, hashType?: number, witnessValue?: number, witnessScript?: Buffer, controlBlock?: Buffer, annex?: Buffer): void;
addInput(txHash: Buffer | string | Transaction<TNumber>, vout: number, sequence?: number, prevOutScript?: Buffer, value?: TNumber): number;
addOutput(scriptPubKey: string | Buffer, value: TNumber): number;
build(): Transaction<TNumber>;
buildIncomplete(): Transaction<TNumber>;
sign(signParams: number | TxbSignArg<TNumber>, keyPair?: Signer, redeemScript?: Buffer, hashType?: number, witnessValue?: TNumber, witnessScript?: Buffer, controlBlock?: Buffer, annex?: Buffer): void;
private __addInputUnsafe;

@@ -38,0 +38,0 @@ private __build;

/// <reference types="node" />
export interface Output {
export interface Output<TNumber extends number | bigint = number> {
script: Buffer;
value: number;
value: TNumber;
}

@@ -13,3 +13,3 @@ export interface Input {

}
export declare class Transaction {
export declare class Transaction<TNumber extends number | bigint = number> {
static readonly DEFAULT_SEQUENCE = 4294967295;

@@ -25,4 +25,4 @@ static readonly SIGHASH_DEFAULT = 0;

static readonly ADVANCED_TRANSACTION_FLAG = 1;
static fromBuffer(buffer: Buffer, _NO_STRICT?: boolean): Transaction;
static fromHex(hex: string): Transaction;
static fromBuffer<TNumber extends number | bigint = number>(buffer: Buffer, _NO_STRICT?: boolean, amountType?: 'number' | 'bigint'): Transaction<TNumber>;
static fromHex<TNumber extends number | bigint = number>(hex: string, amountType?: 'number' | 'bigint'): Transaction<TNumber>;
static isCoinbaseHash(buffer: Buffer): boolean;

@@ -32,6 +32,6 @@ version: number;

ins: Input[];
outs: Output[];
outs: Array<Output<TNumber>>;
isCoinbase(): boolean;
addInput(hash: Buffer, index: number, sequence?: number, scriptSig?: Buffer): number;
addOutput(scriptPubKey: Buffer, value: number): number;
addOutput(scriptPubKey: Buffer, value: TNumber): number;
hasWitnesses(): boolean;

@@ -41,3 +41,3 @@ weight(): number;

byteLength(_ALLOW_WITNESS?: boolean): number;
clone(): Transaction;
clone(): Transaction<TNumber>;
/**

@@ -52,4 +52,4 @@ * Hash transaction for signing a specific input.

hashForSignature(inIndex: number, prevOutScript: Buffer, hashType: number): Buffer;
hashForWitnessV1(inIndex: number, prevOutScripts: Buffer[], values: number[], hashType: number, leafHash?: Buffer, annex?: Buffer): Buffer;
hashForWitnessV0(inIndex: number, prevOutScript: Buffer, value: number, hashType: number): Buffer;
hashForWitnessV1(inIndex: number, prevOutScripts: Buffer[], values: TNumber[], hashType: number, leafHash?: Buffer, annex?: Buffer): Buffer;
hashForWitnessV0(inIndex: number, prevOutScript: Buffer, value: TNumber, hashType: number): Buffer;
getHash(forWitness?: boolean): Buffer;

@@ -56,0 +56,0 @@ getId(): string;

@@ -7,3 +7,3 @@ export declare function UInt31(value: number): boolean;

export declare function Signer(obj: any): boolean;
export declare function Satoshi(value: number): boolean;
export declare function Satoshi(value: number | bigint): boolean;
export declare const ECPoint: any;

@@ -10,0 +10,0 @@ export declare const Network: any;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc