@atomicfinance/bitcoin-utils 3.4.7 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/lib/index.js +243 -0
- package/package.json +5 -5
- package/CHANGELOG.md +0 -218
package/dist/index.d.ts
CHANGED
|
@@ -15,12 +15,12 @@ declare const compressPubKey: (pubKey: string) => string;
|
|
|
15
15
|
* @return {Network}
|
|
16
16
|
*/
|
|
17
17
|
declare const getAddressNetwork: (address: string) => BitcoinNetwork;
|
|
18
|
-
|
|
18
|
+
type CoinSelectTarget = {
|
|
19
19
|
value: number;
|
|
20
20
|
script?: Buffer;
|
|
21
21
|
id?: string;
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
type CoinSelectResponse = {
|
|
24
24
|
inputs: bT.UTXO[];
|
|
25
25
|
outputs: CoinSelectTarget[];
|
|
26
26
|
change: CoinSelectTarget;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -63,13 +67,13 @@ const getAddressNetwork = (address) => {
|
|
|
63
67
|
// TODO: can this be simplified using just bitcoinjs-lib??
|
|
64
68
|
let networkKey;
|
|
65
69
|
// bech32
|
|
66
|
-
networkKey = lodash_1.findKey(bitcoin_networks_1.BitcoinNetworks, (network) => address.startsWith(network.bech32));
|
|
70
|
+
networkKey = (0, lodash_1.findKey)(bitcoin_networks_1.BitcoinNetworks, (network) => address.startsWith(network.bech32));
|
|
67
71
|
// base58
|
|
68
72
|
if (!networkKey) {
|
|
69
73
|
const prefix = crypto_1.base58.decode(address).toString('hex').substring(0, 2);
|
|
70
|
-
networkKey = lodash_1.findKey(bitcoin_networks_1.BitcoinNetworks, (network) => {
|
|
71
|
-
const pubKeyHashPrefix = crypto_1.padHexStart(network.pubKeyHash.toString(16), 1);
|
|
72
|
-
const scriptHashPrefix = crypto_1.padHexStart(network.scriptHash.toString(16), 1);
|
|
74
|
+
networkKey = (0, lodash_1.findKey)(bitcoin_networks_1.BitcoinNetworks, (network) => {
|
|
75
|
+
const pubKeyHashPrefix = (0, crypto_1.padHexStart)(network.pubKeyHash.toString(16), 1);
|
|
76
|
+
const scriptHashPrefix = (0, crypto_1.padHexStart)(network.scriptHash.toString(16), 1);
|
|
73
77
|
return [pubKeyHashPrefix, scriptHashPrefix].includes(prefix);
|
|
74
78
|
});
|
|
75
79
|
}
|
|
@@ -220,7 +224,7 @@ const getPubKeyHash = (address, network) => {
|
|
|
220
224
|
};
|
|
221
225
|
exports.getPubKeyHash = getPubKeyHash;
|
|
222
226
|
const validateAddress = (_address, network) => {
|
|
223
|
-
const address = utils_1.addressToString(_address);
|
|
227
|
+
const address = (0, utils_1.addressToString)(_address);
|
|
224
228
|
if (typeof address !== 'string') {
|
|
225
229
|
throw new errors_1.InvalidAddressError(`Invalid address: ${address}`);
|
|
226
230
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.validateAddress = exports.getPubKeyHash = exports.AddressTypes = exports.witnessStackToScriptWitness = exports.normalizeTransactionObject = exports.decodeRawTransaction = exports.selectCoins = exports.getAddressNetwork = exports.compressPubKey = exports.calculateFee = void 0;
|
|
30
|
+
const crypto_1 = require("@atomicfinance/crypto");
|
|
31
|
+
const errors_1 = require("@atomicfinance/errors");
|
|
32
|
+
const types_1 = require("@atomicfinance/types");
|
|
33
|
+
const utils_1 = require("@atomicfinance/utils");
|
|
34
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
35
|
+
const varuint = __importStar(require("bip174/src/lib/converter/varint"));
|
|
36
|
+
const bitcoin_networks_1 = require("bitcoin-networks");
|
|
37
|
+
const bitcoin = __importStar(require("bitcoinjs-lib"));
|
|
38
|
+
const classify = __importStar(require("bitcoinjs-lib/src/classify"));
|
|
39
|
+
const coinselect_1 = __importDefault(require("coinselect"));
|
|
40
|
+
const accumulative_1 = __importDefault(require("coinselect/accumulative"));
|
|
41
|
+
const lodash_1 = require("lodash");
|
|
42
|
+
const AddressTypes = ['legacy', 'p2sh-segwit', 'bech32'];
|
|
43
|
+
exports.AddressTypes = AddressTypes;
|
|
44
|
+
const calculateFee = (numInputs, numOutputs, feePerByte) => {
|
|
45
|
+
return (numInputs * 148 + numOutputs * 34 + 10) * feePerByte;
|
|
46
|
+
};
|
|
47
|
+
exports.calculateFee = calculateFee;
|
|
48
|
+
/**
|
|
49
|
+
* Get compressed pubKey from pubKey.
|
|
50
|
+
* @param {!string} pubKey - 65 byte string with prefix, x, y.
|
|
51
|
+
* @return {string} Returns the compressed pubKey of uncompressed pubKey.
|
|
52
|
+
*/
|
|
53
|
+
const compressPubKey = (pubKey) => {
|
|
54
|
+
const x = pubKey.substring(2, 66);
|
|
55
|
+
const y = pubKey.substring(66, 130);
|
|
56
|
+
const even = parseInt(y.substring(62, 64), 16) % 2 === 0;
|
|
57
|
+
const prefix = even ? '02' : '03';
|
|
58
|
+
return prefix + x;
|
|
59
|
+
};
|
|
60
|
+
exports.compressPubKey = compressPubKey;
|
|
61
|
+
/**
|
|
62
|
+
* Get a network object from an address
|
|
63
|
+
* @param {string} address The bitcoin address
|
|
64
|
+
* @return {Network}
|
|
65
|
+
*/
|
|
66
|
+
const getAddressNetwork = (address) => {
|
|
67
|
+
// TODO: can this be simplified using just bitcoinjs-lib??
|
|
68
|
+
let networkKey;
|
|
69
|
+
// bech32
|
|
70
|
+
networkKey = (0, lodash_1.findKey)(bitcoin_networks_1.BitcoinNetworks, (network) => address.startsWith(network.bech32));
|
|
71
|
+
// base58
|
|
72
|
+
if (!networkKey) {
|
|
73
|
+
const prefix = crypto_1.base58.decode(address).toString('hex').substring(0, 2);
|
|
74
|
+
networkKey = (0, lodash_1.findKey)(bitcoin_networks_1.BitcoinNetworks, (network) => {
|
|
75
|
+
const pubKeyHashPrefix = (0, crypto_1.padHexStart)(network.pubKeyHash.toString(16), 1);
|
|
76
|
+
const scriptHashPrefix = (0, crypto_1.padHexStart)(network.scriptHash.toString(16), 1);
|
|
77
|
+
return [pubKeyHashPrefix, scriptHashPrefix].includes(prefix);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return bitcoin_networks_1.BitcoinNetworks[networkKey];
|
|
81
|
+
};
|
|
82
|
+
exports.getAddressNetwork = getAddressNetwork;
|
|
83
|
+
const selectCoins = (utxos, targets, feePerByte, fixedInputs = []) => {
|
|
84
|
+
let selectUtxos = utxos;
|
|
85
|
+
// Default coinselect won't accumulate some inputs
|
|
86
|
+
// TODO: does coinselect need to be modified to ABSOLUTELY not skip an input?
|
|
87
|
+
const coinselectStrat = fixedInputs.length
|
|
88
|
+
? accumulative_1.default
|
|
89
|
+
: coinselect_1.default;
|
|
90
|
+
if (fixedInputs.length) {
|
|
91
|
+
selectUtxos = [
|
|
92
|
+
// Order fixed inputs to the start of the list so they are used
|
|
93
|
+
...fixedInputs,
|
|
94
|
+
...utxos.filter((utxo) => !fixedInputs.find((input) => input.vout === utxo.vout && input.txid === utxo.txid)),
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
const { inputs, outputs, fee } = coinselectStrat(selectUtxos, targets, Math.ceil(feePerByte));
|
|
98
|
+
let change;
|
|
99
|
+
if (inputs && outputs) {
|
|
100
|
+
change = outputs.find((output) => output.id !== 'main');
|
|
101
|
+
}
|
|
102
|
+
return { inputs, outputs, fee, change };
|
|
103
|
+
};
|
|
104
|
+
exports.selectCoins = selectCoins;
|
|
105
|
+
const OUTPUT_TYPES_MAP = {
|
|
106
|
+
[classify.types.P2WPKH]: 'witness_v0_keyhash',
|
|
107
|
+
[classify.types.P2WSH]: 'witness_v0_scripthash',
|
|
108
|
+
};
|
|
109
|
+
const decodeRawTransaction = (hex, network) => {
|
|
110
|
+
const bjsTx = bitcoin.Transaction.fromHex(hex);
|
|
111
|
+
const vin = bjsTx.ins.map((input) => {
|
|
112
|
+
return {
|
|
113
|
+
txid: Buffer.from(input.hash).reverse().toString('hex'),
|
|
114
|
+
vout: input.index,
|
|
115
|
+
scriptSig: {
|
|
116
|
+
asm: bitcoin.script.toASM(input.script),
|
|
117
|
+
hex: input.script.toString('hex'),
|
|
118
|
+
},
|
|
119
|
+
txinwitness: input.witness.map((w) => w.toString('hex')),
|
|
120
|
+
sequence: input.sequence,
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
const vout = bjsTx.outs.map((output, n) => {
|
|
124
|
+
const type = classify.output(output.script);
|
|
125
|
+
const vout = {
|
|
126
|
+
value: output.value / 1e8,
|
|
127
|
+
n,
|
|
128
|
+
scriptPubKey: {
|
|
129
|
+
asm: bitcoin.script.toASM(output.script),
|
|
130
|
+
hex: output.script.toString('hex'),
|
|
131
|
+
reqSigs: 1,
|
|
132
|
+
type: OUTPUT_TYPES_MAP[type] || type,
|
|
133
|
+
addresses: [],
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
try {
|
|
137
|
+
const address = bitcoin.address.fromOutputScript(output.script, network);
|
|
138
|
+
vout.scriptPubKey.addresses.push(address);
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
/** If output script is not parasable, we just skip it */
|
|
142
|
+
}
|
|
143
|
+
return vout;
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
txid: bjsTx.getHash(false).reverse().toString('hex'),
|
|
147
|
+
hash: bjsTx.getHash(true).reverse().toString('hex'),
|
|
148
|
+
version: bjsTx.version,
|
|
149
|
+
locktime: bjsTx.locktime,
|
|
150
|
+
size: bjsTx.byteLength(),
|
|
151
|
+
vsize: bjsTx.virtualSize(),
|
|
152
|
+
weight: bjsTx.weight(),
|
|
153
|
+
vin,
|
|
154
|
+
vout,
|
|
155
|
+
hex,
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
exports.decodeRawTransaction = decodeRawTransaction;
|
|
159
|
+
const normalizeTransactionObject = (tx, fee, block) => {
|
|
160
|
+
const value = tx.vout.reduce((p, n) => p.plus(new bignumber_js_1.default(n.value).times(1e8)), new bignumber_js_1.default(0));
|
|
161
|
+
const result = {
|
|
162
|
+
hash: tx.txid,
|
|
163
|
+
value: value.toNumber(),
|
|
164
|
+
_raw: tx,
|
|
165
|
+
confirmations: 0,
|
|
166
|
+
status: tx.confirmations > 0 ? types_1.TxStatus.Success : types_1.TxStatus.Pending,
|
|
167
|
+
};
|
|
168
|
+
if (fee) {
|
|
169
|
+
const feePrice = Math.round(fee / tx.vsize);
|
|
170
|
+
Object.assign(result, {
|
|
171
|
+
fee,
|
|
172
|
+
feePrice,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (block) {
|
|
176
|
+
Object.assign(result, {
|
|
177
|
+
blockHash: block.hash,
|
|
178
|
+
blockNumber: block.number,
|
|
179
|
+
confirmations: tx.confirmations,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
};
|
|
184
|
+
exports.normalizeTransactionObject = normalizeTransactionObject;
|
|
185
|
+
// TODO: This is copy pasta because it's not exported from bitcoinjs-lib
|
|
186
|
+
// https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/csv.spec.ts#L477
|
|
187
|
+
const witnessStackToScriptWitness = (witness) => {
|
|
188
|
+
let buffer = Buffer.allocUnsafe(0);
|
|
189
|
+
function writeSlice(slice) {
|
|
190
|
+
buffer = Buffer.concat([buffer, Buffer.from(slice)]);
|
|
191
|
+
}
|
|
192
|
+
function writeVarInt(i) {
|
|
193
|
+
const currentLen = buffer.length;
|
|
194
|
+
const varintLen = varuint.encodingLength(i);
|
|
195
|
+
buffer = Buffer.concat([buffer, Buffer.allocUnsafe(varintLen)]);
|
|
196
|
+
varuint.encode(i, buffer, currentLen);
|
|
197
|
+
}
|
|
198
|
+
function writeVarSlice(slice) {
|
|
199
|
+
writeVarInt(slice.length);
|
|
200
|
+
writeSlice(slice);
|
|
201
|
+
}
|
|
202
|
+
function writeVector(vector) {
|
|
203
|
+
writeVarInt(vector.length);
|
|
204
|
+
vector.forEach(writeVarSlice);
|
|
205
|
+
}
|
|
206
|
+
writeVector(witness);
|
|
207
|
+
return buffer;
|
|
208
|
+
};
|
|
209
|
+
exports.witnessStackToScriptWitness = witnessStackToScriptWitness;
|
|
210
|
+
const getPubKeyHash = (address, network) => {
|
|
211
|
+
const outputScript = bitcoin.address.toOutputScript(address, network);
|
|
212
|
+
const type = classify.output(outputScript);
|
|
213
|
+
if (![classify.types.P2PKH, classify.types.P2WPKH].includes(type)) {
|
|
214
|
+
throw new Error(`Bitcoin swap doesn't support the address ${address} type of ${type}. Not possible to derive public key hash.`);
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
const bech32 = bitcoin.address.fromBech32(address);
|
|
218
|
+
return bech32.data;
|
|
219
|
+
}
|
|
220
|
+
catch (e) {
|
|
221
|
+
const base58 = bitcoin.address.fromBase58Check(address);
|
|
222
|
+
return base58.hash;
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
exports.getPubKeyHash = getPubKeyHash;
|
|
226
|
+
const validateAddress = (_address, network) => {
|
|
227
|
+
const address = (0, utils_1.addressToString)(_address);
|
|
228
|
+
if (typeof address !== 'string') {
|
|
229
|
+
throw new errors_1.InvalidAddressError(`Invalid address: ${address}`);
|
|
230
|
+
}
|
|
231
|
+
let pubKeyHash;
|
|
232
|
+
try {
|
|
233
|
+
pubKeyHash = getPubKeyHash(address, network);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
throw new errors_1.InvalidAddressError(`Invalid Address. Failed to parse: ${address}`);
|
|
237
|
+
}
|
|
238
|
+
if (!pubKeyHash) {
|
|
239
|
+
throw new errors_1.InvalidAddressError(`Invalid Address: ${address}`);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
exports.validateAddress = validateAddress;
|
|
243
|
+
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomicfinance/bitcoin-utils",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"node": ">=14"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@atomicfinance/crypto": "^3.
|
|
28
|
-
"@atomicfinance/errors": "^3.
|
|
29
|
-
"@atomicfinance/types": "^3.
|
|
30
|
-
"@atomicfinance/utils": "^3.
|
|
27
|
+
"@atomicfinance/crypto": "^3.5.1",
|
|
28
|
+
"@atomicfinance/errors": "^3.5.1",
|
|
29
|
+
"@atomicfinance/types": "^3.5.1",
|
|
30
|
+
"@atomicfinance/utils": "^3.5.1",
|
|
31
31
|
"@babel/runtime": "^7.12.1",
|
|
32
32
|
"bignumber.js": "^9.0.0",
|
|
33
33
|
"bip174": "^2.0.1",
|
package/CHANGELOG.md
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
# @atomicfinance/bitcoin-utils
|
|
2
|
-
|
|
3
|
-
## 3.4.7
|
|
4
|
-
|
|
5
|
-
### Patch Changes
|
|
6
|
-
|
|
7
|
-
- 0ba01ef: Bump @node-dlc to 0.23.6
|
|
8
|
-
- Updated dependencies [0ba01ef]
|
|
9
|
-
- @atomicfinance/types@3.4.7
|
|
10
|
-
- @atomicfinance/crypto@3.4.7
|
|
11
|
-
- @atomicfinance/errors@3.4.7
|
|
12
|
-
- @atomicfinance/utils@3.4.7
|
|
13
|
-
|
|
14
|
-
## 3.4.6
|
|
15
|
-
|
|
16
|
-
### Patch Changes
|
|
17
|
-
|
|
18
|
-
- b765b9c: Bump nodep-dlc to 0.23.5
|
|
19
|
-
- Updated dependencies [b765b9c]
|
|
20
|
-
- @atomicfinance/types@3.4.6
|
|
21
|
-
- @atomicfinance/crypto@3.4.6
|
|
22
|
-
- @atomicfinance/errors@3.4.6
|
|
23
|
-
- @atomicfinance/utils@3.4.6
|
|
24
|
-
|
|
25
|
-
## 3.4.5
|
|
26
|
-
|
|
27
|
-
### Patch Changes
|
|
28
|
-
|
|
29
|
-
- 74b7a4f: Bump node-dlc to 0.23.4
|
|
30
|
-
- Updated dependencies [74b7a4f]
|
|
31
|
-
- @atomicfinance/types@3.4.5
|
|
32
|
-
- @atomicfinance/crypto@3.4.5
|
|
33
|
-
- @atomicfinance/errors@3.4.5
|
|
34
|
-
- @atomicfinance/utils@3.4.5
|
|
35
|
-
|
|
36
|
-
## 3.4.4
|
|
37
|
-
|
|
38
|
-
### Patch Changes
|
|
39
|
-
|
|
40
|
-
- cc8f06a: Bump node-dlc to 0.23.3
|
|
41
|
-
- Updated dependencies [cc8f06a]
|
|
42
|
-
- @atomicfinance/types@3.4.4
|
|
43
|
-
- @atomicfinance/crypto@3.4.4
|
|
44
|
-
- @atomicfinance/errors@3.4.4
|
|
45
|
-
- @atomicfinance/utils@3.4.4
|
|
46
|
-
|
|
47
|
-
## 3.4.3
|
|
48
|
-
|
|
49
|
-
### Patch Changes
|
|
50
|
-
|
|
51
|
-
- db49017: Bump node-dlc to 0.23.2 for all packages
|
|
52
|
-
- Updated dependencies [db49017]
|
|
53
|
-
- @atomicfinance/types@3.4.3
|
|
54
|
-
- @atomicfinance/crypto@3.4.3
|
|
55
|
-
- @atomicfinance/errors@3.4.3
|
|
56
|
-
- @atomicfinance/utils@3.4.3
|
|
57
|
-
|
|
58
|
-
## 3.4.2
|
|
59
|
-
|
|
60
|
-
### Patch Changes
|
|
61
|
-
|
|
62
|
-
- e701ba6: Bump node-dlc- to 0.23.1 and add node-dlc batch tx builder validation tests
|
|
63
|
-
- Updated dependencies [e701ba6]
|
|
64
|
-
- @atomicfinance/types@3.4.2
|
|
65
|
-
- @atomicfinance/crypto@3.4.2
|
|
66
|
-
- @atomicfinance/errors@3.4.2
|
|
67
|
-
- @atomicfinance/utils@3.4.2
|
|
68
|
-
|
|
69
|
-
## 3.4.1
|
|
70
|
-
|
|
71
|
-
### Patch Changes
|
|
72
|
-
|
|
73
|
-
- 9781efe: Add getInputsForDualFunding functionality and bump @node-dlc
|
|
74
|
-
- Updated dependencies [9781efe]
|
|
75
|
-
- @atomicfinance/types@3.4.1
|
|
76
|
-
- @atomicfinance/crypto@3.4.1
|
|
77
|
-
- @atomicfinance/errors@3.4.1
|
|
78
|
-
- @atomicfinance/utils@3.4.1
|
|
79
|
-
|
|
80
|
-
## 3.4.0
|
|
81
|
-
|
|
82
|
-
### Minor Changes
|
|
83
|
-
|
|
84
|
-
- 314d7d7: Add batch dlc funding transactions
|
|
85
|
-
|
|
86
|
-
### Patch Changes
|
|
87
|
-
|
|
88
|
-
- Updated dependencies [314d7d7]
|
|
89
|
-
- @atomicfinance/types@3.4.0
|
|
90
|
-
- @atomicfinance/crypto@3.4.0
|
|
91
|
-
- @atomicfinance/errors@3.4.0
|
|
92
|
-
- @atomicfinance/utils@3.4.0
|
|
93
|
-
|
|
94
|
-
## 3.3.1
|
|
95
|
-
|
|
96
|
-
### Patch Changes
|
|
97
|
-
|
|
98
|
-
- 7f6f4a8: Fix rounding error with find payout
|
|
99
|
-
- Updated dependencies [7f6f4a8]
|
|
100
|
-
- @atomicfinance/crypto@3.3.1
|
|
101
|
-
- @atomicfinance/errors@3.3.1
|
|
102
|
-
- @atomicfinance/types@3.3.1
|
|
103
|
-
- @atomicfinance/utils@3.3.1
|
|
104
|
-
|
|
105
|
-
## 3.3.0
|
|
106
|
-
|
|
107
|
-
### Minor Changes
|
|
108
|
-
|
|
109
|
-
- 4a512ee: Fix find outcome index for hyperbola payout curve edge case
|
|
110
|
-
|
|
111
|
-
### Patch Changes
|
|
112
|
-
|
|
113
|
-
- Updated dependencies [4a512ee]
|
|
114
|
-
- @atomicfinance/crypto@3.3.0
|
|
115
|
-
- @atomicfinance/errors@3.3.0
|
|
116
|
-
- @atomicfinance/types@3.3.0
|
|
117
|
-
- @atomicfinance/utils@3.3.0
|
|
118
|
-
|
|
119
|
-
## 3.2.5
|
|
120
|
-
|
|
121
|
-
### Patch Changes
|
|
122
|
-
|
|
123
|
-
- Updated dependencies [a72c7b9]
|
|
124
|
-
- @atomicfinance/types@3.2.5
|
|
125
|
-
- @atomicfinance/crypto@3.2.5
|
|
126
|
-
- @atomicfinance/errors@3.2.5
|
|
127
|
-
- @atomicfinance/utils@3.2.5
|
|
128
|
-
|
|
129
|
-
## 3.2.4
|
|
130
|
-
|
|
131
|
-
### Patch Changes
|
|
132
|
-
|
|
133
|
-
- 177b76a: Upgrade node-dlc to 0.22.4
|
|
134
|
-
- Updated dependencies [177b76a]
|
|
135
|
-
- @atomicfinance/crypto@3.2.4
|
|
136
|
-
- @atomicfinance/errors@3.2.4
|
|
137
|
-
- @atomicfinance/types@3.2.4
|
|
138
|
-
- @atomicfinance/utils@3.2.4
|
|
139
|
-
|
|
140
|
-
## 3.2.3
|
|
141
|
-
|
|
142
|
-
### Patch Changes
|
|
143
|
-
|
|
144
|
-
- @atomicfinance/crypto@3.2.3
|
|
145
|
-
- @atomicfinance/errors@3.2.3
|
|
146
|
-
- @atomicfinance/types@3.2.3
|
|
147
|
-
- @atomicfinance/utils@3.2.3
|
|
148
|
-
|
|
149
|
-
## 3.2.2
|
|
150
|
-
|
|
151
|
-
### Patch Changes
|
|
152
|
-
|
|
153
|
-
- @atomicfinance/crypto@3.2.2
|
|
154
|
-
- @atomicfinance/errors@3.2.2
|
|
155
|
-
- @atomicfinance/types@3.2.2
|
|
156
|
-
- @atomicfinance/utils@3.2.2
|
|
157
|
-
|
|
158
|
-
## 3.2.1
|
|
159
|
-
|
|
160
|
-
### Patch Changes
|
|
161
|
-
|
|
162
|
-
- Updated dependencies [f69141e]
|
|
163
|
-
- @atomicfinance/types@3.2.1
|
|
164
|
-
- @atomicfinance/crypto@3.2.1
|
|
165
|
-
- @atomicfinance/errors@3.2.1
|
|
166
|
-
- @atomicfinance/utils@3.2.1
|
|
167
|
-
|
|
168
|
-
## 3.2.0
|
|
169
|
-
|
|
170
|
-
### Patch Changes
|
|
171
|
-
|
|
172
|
-
- Updated dependencies [dc9ac8a]
|
|
173
|
-
- @atomicfinance/types@3.2.0
|
|
174
|
-
- @atomicfinance/crypto@3.2.0
|
|
175
|
-
- @atomicfinance/errors@3.2.0
|
|
176
|
-
- @atomicfinance/utils@3.2.0
|
|
177
|
-
|
|
178
|
-
## 3.1.1
|
|
179
|
-
|
|
180
|
-
### Patch Changes
|
|
181
|
-
|
|
182
|
-
- @atomicfinance/crypto@3.1.1
|
|
183
|
-
- @atomicfinance/errors@3.1.1
|
|
184
|
-
- @atomicfinance/types@3.1.1
|
|
185
|
-
- @atomicfinance/utils@3.1.1
|
|
186
|
-
|
|
187
|
-
## 3.1.0
|
|
188
|
-
|
|
189
|
-
### Patch Changes
|
|
190
|
-
|
|
191
|
-
- Updated dependencies [c60033b]
|
|
192
|
-
- @atomicfinance/types@3.1.0
|
|
193
|
-
- @atomicfinance/crypto@3.1.0
|
|
194
|
-
- @atomicfinance/errors@3.1.0
|
|
195
|
-
- @atomicfinance/utils@3.1.0
|
|
196
|
-
|
|
197
|
-
## 3.0.1
|
|
198
|
-
|
|
199
|
-
### Patch Changes
|
|
200
|
-
|
|
201
|
-
- @atomicfinance/crypto@3.0.1
|
|
202
|
-
- @atomicfinance/errors@3.0.1
|
|
203
|
-
- @atomicfinance/types@3.0.1
|
|
204
|
-
- @atomicfinance/utils@3.0.1
|
|
205
|
-
|
|
206
|
-
## 3.0.0
|
|
207
|
-
|
|
208
|
-
### Major Changes
|
|
209
|
-
|
|
210
|
-
- a06082e: Create unified standalone `bitcoin-abstraction-layer` package
|
|
211
|
-
|
|
212
|
-
### Patch Changes
|
|
213
|
-
|
|
214
|
-
- Updated dependencies [a06082e]
|
|
215
|
-
- @atomicfinance/types@3.0.0
|
|
216
|
-
- @atomicfinance/crypto@3.0.0
|
|
217
|
-
- @atomicfinance/errors@3.0.0
|
|
218
|
-
- @atomicfinance/utils@3.0.0
|