@ledgerhq/live-common 21.16.1 → 21.17.0
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/lib/__tests__/families/bitcoin/wallet-btc/utils.test.js +95 -7
- package/lib/__tests__/families/bitcoin/wallet-btc/utils.test.js.map +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.js +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.js.map +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.js +2 -2
- package/lib/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.js.map +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.js +20 -10
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.js.map +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.js +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.js.map +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.js +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.js.map +1 -1
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.js +2 -2
- package/lib/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.js.map +1 -1
- package/lib/apps/polyfill.d.ts.map +1 -1
- package/lib/apps/polyfill.js +3 -0
- package/lib/apps/polyfill.js.map +1 -1
- package/lib/currencies/support.d.ts.map +1 -1
- package/lib/currencies/support.js.map +1 -1
- package/lib/families/bitcoin/bech32m.d.ts +22 -0
- package/lib/families/bitcoin/bech32m.d.ts.map +1 -0
- package/lib/families/bitcoin/bech32m.js +166 -0
- package/lib/families/bitcoin/bech32m.js.map +1 -0
- package/lib/families/bitcoin/js-buildTransaction.d.ts.map +1 -1
- package/lib/families/bitcoin/js-buildTransaction.js +1 -1
- package/lib/families/bitcoin/js-buildTransaction.js.map +1 -1
- package/lib/families/bitcoin/js-estimateMaxSpendable.d.ts.map +1 -1
- package/lib/families/bitcoin/js-estimateMaxSpendable.js +1 -1
- package/lib/families/bitcoin/js-estimateMaxSpendable.js.map +1 -1
- package/lib/families/bitcoin/js-synchronisation.d.ts.map +1 -1
- package/lib/families/bitcoin/js-synchronisation.js +3 -2
- package/lib/families/bitcoin/js-synchronisation.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js +11 -11
- package/lib/families/bitcoin/wallet-btc/crypto/bitcoin.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js +2 -1
- package/lib/families/bitcoin/wallet-btc/crypto/bitcoincash.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/digibyte.js +21 -2
- package/lib/families/bitcoin/wallet-btc/crypto/digibyte.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/litecoin.js +2 -2
- package/lib/families/bitcoin/wallet-btc/crypto/litecoin.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/zec.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/zec.js +3 -2
- package/lib/families/bitcoin/wallet-btc/crypto/zec.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts +2 -1
- package/lib/families/bitcoin/wallet-btc/crypto/zen.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/zen.js +7 -4
- package/lib/families/bitcoin/wallet-btc/crypto/zen.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.d.ts +2 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.js +16 -12
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.d.ts +2 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.js +12 -7
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.d.ts +2 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.js +12 -7
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/Merge.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.d.ts +2 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/pickingstrategies/types.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/utils.d.ts +38 -2
- package/lib/families/bitcoin/wallet-btc/utils.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/utils.js +103 -35
- package/lib/families/bitcoin/wallet-btc/utils.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/wallet.d.ts +1 -1
- package/lib/families/bitcoin/wallet-btc/wallet.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/wallet.js +9 -8
- package/lib/families/bitcoin/wallet-btc/wallet.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/xpub.js +2 -2
- package/lib/families/bitcoin/wallet-btc/xpub.js.map +1 -1
- package/lib/families/elrond/logic.js +22 -3
- package/lib/families/elrond/logic.js.map +1 -1
- package/lib/operation.js +1 -1
- package/lib/operation.js.map +1 -1
- package/package.json +16 -16
- package/src/.DS_Store +0 -0
- package/src/__tests__/__snapshots__/all.libcore.ts.snap +1188 -630
- package/src/__tests__/families/bitcoin/wallet-btc/utils.test.ts +109 -2
- package/src/__tests__/families/bitcoin/wallet-btc/wallet.estimateMaxSpendable.test.ts +3 -2
- package/src/__tests__/families/bitcoin/wallet-btc/wallet.integration.test.ts +2 -2
- package/src/__tests__/families/bitcoin/wallet-btc/xpub.pickingStrategies.integration.test.ts +35 -31
- package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.NP2WPKH.integration.test.ts +3 -2
- package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.P2WPKH.integration.test.ts +3 -2
- package/src/__tests__/families/bitcoin/wallet-btc/xpub.txs.integration.test.ts +6 -4
- package/src/apps/polyfill.ts +3 -0
- package/src/currencies/.DS_Store +0 -0
- package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +68 -1325
- package/src/currencies/support.ts +1 -0
- package/src/families/bitcoin/bech32m.ts +197 -0
- package/src/families/bitcoin/js-buildTransaction.ts +2 -1
- package/src/families/bitcoin/js-estimateMaxSpendable.ts +2 -1
- package/src/families/bitcoin/js-synchronisation.ts +4 -2
- package/src/families/bitcoin/wallet-btc/crypto/bitcoin.ts +5 -4
- package/src/families/bitcoin/wallet-btc/crypto/bitcoincash.ts +2 -1
- package/src/families/bitcoin/wallet-btc/crypto/digibyte.ts +1 -1
- package/src/families/bitcoin/wallet-btc/crypto/litecoin.ts +1 -1
- package/src/families/bitcoin/wallet-btc/crypto/zec.ts +3 -2
- package/src/families/bitcoin/wallet-btc/crypto/zen.ts +10 -4
- package/src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts +34 -22
- package/src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts +30 -9
- package/src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts +30 -9
- package/src/families/bitcoin/wallet-btc/pickingstrategies/types.ts +3 -3
- package/src/families/bitcoin/wallet-btc/utils.ts +113 -41
- package/src/families/bitcoin/wallet-btc/wallet.ts +10 -8
- package/src/families/bitcoin/wallet-btc/xpub.ts +5 -5
- package/src/families/elrond/logic.ts +1 -1
- package/src/operation.ts +1 -1
|
@@ -10,8 +10,9 @@ var address_1 = require("bitcoinjs-lib/src/address");
|
|
|
10
10
|
// @ts-ignore
|
|
11
11
|
var zcash_bitcore_lib_1 = __importDefault(require("zcash-bitcore-lib"));
|
|
12
12
|
var bs58check_1 = __importDefault(require("bs58check"));
|
|
13
|
-
var types_1 = require("../types");
|
|
14
13
|
var coininfo_1 = __importDefault(require("coininfo"));
|
|
14
|
+
var errors_1 = require("@ledgerhq/errors");
|
|
15
|
+
var types_1 = require("../types");
|
|
15
16
|
var Zen = /** @class */ (function () {
|
|
16
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
18
|
function Zen(_a) {
|
|
@@ -71,10 +72,12 @@ var Zen = /** @class */ (function () {
|
|
|
71
72
|
};
|
|
72
73
|
Zen.prototype.toOutputScript = function (address) {
|
|
73
74
|
if (!this.validateAddress(address)) {
|
|
74
|
-
throw new
|
|
75
|
+
throw new errors_1.InvalidAddress();
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
var outputScript = (0, address_1.toOutputScript)(Zen.toBitcoinAddr(address), coininfo_1["default"].bitcoin.main.toBitcoinJS());
|
|
78
|
+
// refer to https://github.com/LedgerHQ/lib-ledger-core/blob/fc9d762b83fc2b269d072b662065747a64ab2816/core/src/wallet/bitcoin/scripts/BitcoinLikeScript.cpp#L139 and https://github.com/LedgerHQ/lib-ledger-core/blob/fc9d762b83fc2b269d072b662065747a64ab2816/core/src/wallet/bitcoin/networks.cpp#L39 for bip115 Script and its network parameters
|
|
79
|
+
var bip115Script = Buffer.from("209ec9845acb02fab24e1c0368b3b517c1a4488fba97f0e3459ac053ea0100000003c01f02b4", "hex");
|
|
80
|
+
return Buffer.concat([outputScript, bip115Script]);
|
|
78
81
|
};
|
|
79
82
|
// eslint-disable-next-line class-methods-use-this
|
|
80
83
|
Zen.prototype.validateAddress = function (address) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zen.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/crypto/zen.ts"],"names":[],"mappings":";;;;;AAAA,6DAA6D;AAC7D,aAAa;AACb,qDAA2D;AAC3D,6DAA6D;AAC7D,aAAa;AACb,wEAAoC;AACpC,wDAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"zen.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/crypto/zen.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import BigNumber from "bignumber.js";
|
|
|
2
2
|
import { Output } from "../storage/types";
|
|
3
3
|
import Xpub from "../xpub";
|
|
4
4
|
import { PickingStrategy } from "./types";
|
|
5
|
+
import { OutputInfo } from "..";
|
|
5
6
|
export declare class CoinSelect extends PickingStrategy {
|
|
6
|
-
selectUnspentUtxosToUse(xpub: Xpub,
|
|
7
|
+
selectUnspentUtxosToUse(xpub: Xpub, outputs: OutputInfo[], feePerByte: number): Promise<{
|
|
7
8
|
totalValue: BigNumber;
|
|
8
9
|
unspentUtxos: Output[];
|
|
9
10
|
fee: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinSelect.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CoinSelect.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,qBAAa,UAAW,SAAQ,eAAe;IAEvC,uBAAuB,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,MAAM;;;;;;CAoMrB"}
|
|
@@ -87,9 +87,9 @@ var CoinSelect = /** @class */ (function (_super) {
|
|
|
87
87
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
88
88
|
}
|
|
89
89
|
// eslint-disable-next-line class-methods-use-this
|
|
90
|
-
CoinSelect.prototype.selectUnspentUtxosToUse = function (xpub,
|
|
90
|
+
CoinSelect.prototype.selectUnspentUtxosToUse = function (xpub, outputs, feePerByte) {
|
|
91
91
|
return __awaiter(this, void 0, void 0, function () {
|
|
92
|
-
var addresses, unspentUtxos, _a, TOTAL_TRIES, fixedSize, oneOutputSize, oneInputSize, currentAvailableValue, effectiveUtxos, i, outEffectiveValue, effectiveUtxo, notInputFees, currentValue, currentSelection, actualTarget, currentWaste, bestWaste, bestSelection, bestSelectionNeedChangeoutput, currentSelectionNeedChangeoutput, i, backtrack, nbInput, eu, eu, total, unspentUtxoSelected, i, fee, pickingStrategy;
|
|
92
|
+
var addresses, unspentUtxos, _a, TOTAL_TRIES, fixedSize, outputAddresses, oneOutputSize, oneInputSize, currentAvailableValue, effectiveUtxos, i, outEffectiveValue, effectiveUtxo, notInputFees, currentValue, currentSelection, amount, actualTarget, currentWaste, bestWaste, bestSelection, bestSelectionNeedChangeoutput, currentSelectionNeedChangeoutput, i, backtrack, nbInput, eu, eu, total, unspentUtxoSelected, i, fee, pickingStrategy;
|
|
93
93
|
var _this = this;
|
|
94
94
|
return __generator(this, function (_b) {
|
|
95
95
|
switch (_b.label) {
|
|
@@ -105,9 +105,14 @@ var CoinSelect = /** @class */ (function (_super) {
|
|
|
105
105
|
});
|
|
106
106
|
TOTAL_TRIES = 100000;
|
|
107
107
|
(0, logs_1.log)("picking strategy", "utxos", unspentUtxos);
|
|
108
|
-
fixedSize = utils.
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
fixedSize = utils.maxTxSize(0, [], false, this.crypto, this.derivationMode);
|
|
109
|
+
outputAddresses = outputs.map(function (o) { return o.address; });
|
|
110
|
+
oneOutputSize = outputAddresses.length > 0
|
|
111
|
+
? utils.maxTxSize(0, [outputAddresses[0]], false, this.crypto, this.derivationMode) - fixedSize
|
|
112
|
+
: utils.maxTxSize(0, [], true, this.crypto, this.derivationMode) -
|
|
113
|
+
fixedSize;
|
|
114
|
+
oneInputSize = utils.maxTxSize(1, [], false, this.crypto, this.derivationMode) -
|
|
115
|
+
fixedSize;
|
|
111
116
|
currentAvailableValue = 0;
|
|
112
117
|
effectiveUtxos = [];
|
|
113
118
|
for (i = 0; i < unspentUtxos.length; i += 1) {
|
|
@@ -121,9 +126,10 @@ var CoinSelect = /** @class */ (function (_super) {
|
|
|
121
126
|
currentAvailableValue += outEffectiveValue;
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
|
-
notInputFees = feePerByte * (fixedSize + oneOutputSize *
|
|
129
|
+
notInputFees = feePerByte * (fixedSize + oneOutputSize * outputs.length);
|
|
125
130
|
currentValue = 0;
|
|
126
131
|
currentSelection = [];
|
|
132
|
+
amount = outputs.reduce(function (sum, output) { return sum.plus(output.value); }, new bignumber_js_1["default"](0));
|
|
127
133
|
actualTarget = notInputFees + amount.toNumber();
|
|
128
134
|
// Insufficient funds
|
|
129
135
|
if (currentAvailableValue < actualTarget) {
|
|
@@ -146,14 +152,14 @@ var CoinSelect = /** @class */ (function (_super) {
|
|
|
146
152
|
currentSelectionNeedChangeoutput = true;
|
|
147
153
|
currentWaste =
|
|
148
154
|
feePerByte *
|
|
149
|
-
utils.
|
|
155
|
+
utils.maxTxSizeCeil(nbInput, outputAddresses, true, this.crypto, this.derivationMode);
|
|
150
156
|
}
|
|
151
157
|
else {
|
|
152
158
|
// changeoutput is not required
|
|
153
159
|
currentSelectionNeedChangeoutput = false;
|
|
154
160
|
currentWaste =
|
|
155
161
|
feePerByte *
|
|
156
|
-
utils.
|
|
162
|
+
utils.maxTxSizeCeil(nbInput, outputAddresses, false, this.crypto, this.derivationMode) +
|
|
157
163
|
currentValue -
|
|
158
164
|
actualTarget;
|
|
159
165
|
}
|
|
@@ -202,9 +208,7 @@ var CoinSelect = /** @class */ (function (_super) {
|
|
|
202
208
|
}
|
|
203
209
|
}
|
|
204
210
|
fee = feePerByte *
|
|
205
|
-
utils.
|
|
206
|
-
? nbOutputsWithoutChange + 1
|
|
207
|
-
: nbOutputsWithoutChange, this.crypto, this.derivationMode);
|
|
211
|
+
utils.maxTxSizeCeil(unspentUtxoSelected.length, outputAddresses, bestSelectionNeedChangeoutput, this.crypto, this.derivationMode);
|
|
208
212
|
return [2 /*return*/, {
|
|
209
213
|
totalValue: total,
|
|
210
214
|
unspentUtxos: unspentUtxoSelected,
|
|
@@ -213,7 +217,7 @@ var CoinSelect = /** @class */ (function (_super) {
|
|
|
213
217
|
}];
|
|
214
218
|
}
|
|
215
219
|
pickingStrategy = new DeepFirst_1.DeepFirst(this.crypto, this.derivationMode, this.excludedUTXOs);
|
|
216
|
-
return [2 /*return*/, pickingStrategy.selectUnspentUtxosToUse(xpub,
|
|
220
|
+
return [2 /*return*/, pickingStrategy.selectUnspentUtxosToUse(xpub, outputs, feePerByte)];
|
|
217
221
|
}
|
|
218
222
|
});
|
|
219
223
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoinSelect.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAqC;AACrC,iCAAyC;AACzC,2CAAoD;AAGpD,iCAA0C;AAC1C,8CAAkC;AAClC,yCAAwC;AACxC,uCAAqC;
|
|
1
|
+
{"version":3,"file":"CoinSelect.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/CoinSelect.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import BigNumber from "bignumber.js";
|
|
|
2
2
|
import { Output } from "../storage/types";
|
|
3
3
|
import Xpub from "../xpub";
|
|
4
4
|
import { PickingStrategy } from "./types";
|
|
5
|
+
import { OutputInfo } from "..";
|
|
5
6
|
export declare class DeepFirst extends PickingStrategy {
|
|
6
|
-
selectUnspentUtxosToUse(xpub: Xpub,
|
|
7
|
+
selectUnspentUtxosToUse(xpub: Xpub, outputs: OutputInfo[], feePerByte: number): Promise<{
|
|
7
8
|
totalValue: BigNumber;
|
|
8
9
|
unspentUtxos: Output[];
|
|
9
10
|
fee: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepFirst.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DeepFirst.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,qBAAa,SAAU,SAAQ,eAAe;IAEtC,uBAAuB,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,MAAM;;;;;;CAuFrB"}
|
|
@@ -86,9 +86,9 @@ var DeepFirst = /** @class */ (function (_super) {
|
|
|
86
86
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
87
87
|
}
|
|
88
88
|
// eslint-disable-next-line class-methods-use-this
|
|
89
|
-
DeepFirst.prototype.selectUnspentUtxosToUse = function (xpub,
|
|
89
|
+
DeepFirst.prototype.selectUnspentUtxosToUse = function (xpub, outputs, feePerByte) {
|
|
90
90
|
return __awaiter(this, void 0, void 0, function () {
|
|
91
|
-
var addresses, unspentUtxos, _a, txSizeNoInput, fee, sizePerInput, sizePerOutput, total, unspentUtxoSelected, i;
|
|
91
|
+
var addresses, unspentUtxos, _a, outputAddresses, txSizeNoInput, fee, emptyTxSize, sizePerInput, sizePerOutput, total, unspentUtxoSelected, amount, i;
|
|
92
92
|
var _this = this;
|
|
93
93
|
return __generator(this, function (_b) {
|
|
94
94
|
switch (_b.label) {
|
|
@@ -102,15 +102,20 @@ var DeepFirst = /** @class */ (function (_super) {
|
|
|
102
102
|
unspentUtxos = _a.apply(void 0, [_b.sent()]).filter(function (o) {
|
|
103
103
|
return !_this.excludedUTXOs.filter(function (x) { return x.hash === o.output_hash && x.outputIndex === o.output_index; }).length;
|
|
104
104
|
});
|
|
105
|
+
outputAddresses = outputs.map(function (o) { return o.address; });
|
|
105
106
|
unspentUtxos = (0, lodash_1.sortBy)(unspentUtxos, "block_height");
|
|
106
|
-
txSizeNoInput = utils.
|
|
107
|
+
txSizeNoInput = utils.maxTxSize(0, outputAddresses, false, this.crypto, this.derivationMode);
|
|
107
108
|
fee = txSizeNoInput * feePerByte;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
emptyTxSize = utils.maxTxSizeCeil(0, [], false, this.crypto, this.derivationMode);
|
|
110
|
+
sizePerInput = utils.maxTxSize(1, [], false, this.crypto, this.derivationMode) -
|
|
111
|
+
emptyTxSize;
|
|
112
|
+
sizePerOutput = (outputAddresses[0]
|
|
113
|
+
? utils.maxTxSize(0, [outputAddresses[0]], false, this.crypto, this.derivationMode)
|
|
114
|
+
: utils.maxTxSize(0, [], true, this.crypto, this.derivationMode)) -
|
|
115
|
+
emptyTxSize;
|
|
112
116
|
total = new bignumber_js_1["default"](0);
|
|
113
117
|
unspentUtxoSelected = [];
|
|
118
|
+
amount = outputs.reduce(function (sum, output) { return sum.plus(output.value); }, new bignumber_js_1["default"](0));
|
|
114
119
|
i = 0;
|
|
115
120
|
while (total.lt(amount.plus(fee))) {
|
|
116
121
|
if (!unspentUtxos[i]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepFirst.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAqC;AACrC,iCAAyC;AACzC,2CAAoD;AAGpD,iCAA0C;AAC1C,8CAAkC;AAClC,uCAAqC;
|
|
1
|
+
{"version":3,"file":"DeepFirst.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/DeepFirst.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import BigNumber from "bignumber.js";
|
|
|
2
2
|
import { Output } from "../storage/types";
|
|
3
3
|
import Xpub from "../xpub";
|
|
4
4
|
import { PickingStrategy } from "./types";
|
|
5
|
+
import { OutputInfo } from "..";
|
|
5
6
|
export declare class Merge extends PickingStrategy {
|
|
6
|
-
selectUnspentUtxosToUse(xpub: Xpub,
|
|
7
|
+
selectUnspentUtxosToUse(xpub: Xpub, outputs: OutputInfo[], feePerByte: number): Promise<{
|
|
7
8
|
totalValue: BigNumber;
|
|
8
9
|
unspentUtxos: Output[];
|
|
9
10
|
fee: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Merge.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Merge.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,qBAAa,KAAM,SAAQ,eAAe;IAElC,uBAAuB,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,MAAM;;;;;;CAuFrB"}
|
|
@@ -86,9 +86,9 @@ var Merge = /** @class */ (function (_super) {
|
|
|
86
86
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
87
87
|
}
|
|
88
88
|
// eslint-disable-next-line class-methods-use-this
|
|
89
|
-
Merge.prototype.selectUnspentUtxosToUse = function (xpub,
|
|
89
|
+
Merge.prototype.selectUnspentUtxosToUse = function (xpub, outputs, feePerByte) {
|
|
90
90
|
return __awaiter(this, void 0, void 0, function () {
|
|
91
|
-
var addresses, unspentUtxos, _a, sizePerInput, sizePerOutput, txSizeNoInput, fee, total, unspentUtxoSelected, i;
|
|
91
|
+
var addresses, unspentUtxos, _a, outputAddresses, emptyTxSize, sizePerInput, sizePerOutput, txSizeNoInput, fee, total, unspentUtxoSelected, i, amount;
|
|
92
92
|
var _this = this;
|
|
93
93
|
return __generator(this, function (_b) {
|
|
94
94
|
switch (_b.label) {
|
|
@@ -102,16 +102,21 @@ var Merge = /** @class */ (function (_super) {
|
|
|
102
102
|
unspentUtxos = _a.apply(void 0, [_b.sent()]).filter(function (o) {
|
|
103
103
|
return !_this.excludedUTXOs.filter(function (x) { return x.hash === o.output_hash && x.outputIndex === o.output_index; }).length;
|
|
104
104
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
outputAddresses = outputs.map(function (o) { return o.address; });
|
|
106
|
+
emptyTxSize = utils.maxTxSizeCeil(0, [], false, this.crypto, this.derivationMode);
|
|
107
|
+
sizePerInput = utils.maxTxSize(1, [], false, this.crypto, this.derivationMode) -
|
|
108
|
+
emptyTxSize;
|
|
109
|
+
sizePerOutput = (outputAddresses[0]
|
|
110
|
+
? utils.maxTxSize(0, [outputAddresses[0]], false, this.crypto, this.derivationMode)
|
|
111
|
+
: utils.maxTxSize(0, [], true, this.crypto, this.derivationMode)) -
|
|
112
|
+
emptyTxSize;
|
|
109
113
|
unspentUtxos = (0, lodash_1.sortBy)(unspentUtxos, function (utxo) { return parseInt(utxo.value, 10); });
|
|
110
|
-
txSizeNoInput = utils.
|
|
114
|
+
txSizeNoInput = utils.maxTxSize(0, outputAddresses, false, this.crypto, this.derivationMode);
|
|
111
115
|
fee = txSizeNoInput * feePerByte;
|
|
112
116
|
total = new bignumber_js_1["default"](0);
|
|
113
117
|
unspentUtxoSelected = [];
|
|
114
118
|
i = 0;
|
|
119
|
+
amount = outputs.reduce(function (sum, output) { return sum.plus(output.value); }, new bignumber_js_1["default"](0));
|
|
115
120
|
while (total.lt(amount.plus(fee))) {
|
|
116
121
|
if (!unspentUtxos[i]) {
|
|
117
122
|
throw new errors_1.NotEnoughBalance();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Merge.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAqC;AACrC,iCAAyC;AACzC,2CAAoD;AAGpD,iCAA0C;AAC1C,8CAAkC;AAClC,uCAAqC;
|
|
1
|
+
{"version":3,"file":"Merge.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/Merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import BigNumber from "bignumber.js";
|
|
2
|
+
import { OutputInfo } from "..";
|
|
2
3
|
import { ICrypto } from "../crypto/types";
|
|
3
4
|
import { Output } from "../storage/types";
|
|
4
5
|
import Xpub from "../xpub";
|
|
@@ -13,7 +14,7 @@ export declare abstract class PickingStrategy {
|
|
|
13
14
|
hash: string;
|
|
14
15
|
outputIndex: number;
|
|
15
16
|
}>);
|
|
16
|
-
abstract selectUnspentUtxosToUse(xpub: Xpub,
|
|
17
|
+
abstract selectUnspentUtxosToUse(xpub: Xpub, outputs: OutputInfo[], feePerByte: number): Promise<{
|
|
17
18
|
unspentUtxos: Output[];
|
|
18
19
|
totalValue: BigNumber;
|
|
19
20
|
fee: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/types.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,8BAAsB,eAAe;IACnC,MAAM,EAAE,OAAO,CAAC;IAEhB,cAAc,EAAE,MAAM,CAAC;IAGvB,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;gBAGD,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAOJ,QAAQ,CAAC,uBAAuB,CAC9B,IAAI,EAAE,IAAI,EACV,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/types.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,8BAAsB,eAAe;IACnC,MAAM,EAAE,OAAO,CAAC;IAEhB,cAAc,EAAE,MAAM,CAAC;IAGvB,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;gBAGD,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAOJ,QAAQ,CAAC,uBAAuB,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QACT,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,EAAE,SAAS,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/families/bitcoin/wallet-btc/pickingstrategies/types.ts"],"names":[],"mappings":";;;AAMA;IAWE,yBACE,MAAe,EACf,cAAsB,EACtB,aAGE;QAEF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAYH,sBAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCqB,0CAAe"}
|
|
@@ -6,8 +6,44 @@ export declare function toHexInt(number: any): string;
|
|
|
6
6
|
export declare function compressPublicKey(publicKey: any): any;
|
|
7
7
|
export declare function createXPUB(depth: any, fingerprint: any, childnum: any, chaincode: any, publicKey: any, network: any): string;
|
|
8
8
|
export declare function byteSize(count: number): 1 | 3 | 5 | 9;
|
|
9
|
-
export declare function
|
|
10
|
-
|
|
9
|
+
export declare function outputSize(currency: ICrypto, addr: string): number;
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the maximun size of an imaginary transaction in virtual bytes
|
|
12
|
+
* (vB). 1vB = 4 WU (weight units). If a cryptocurrency doesn't use segwit, then
|
|
13
|
+
* 1 byte = 1 vB. Weight units are used for segwit transactions, where certain
|
|
14
|
+
* bytes of the transaction is counted as 4 WU and some as 1 WU. The resulting
|
|
15
|
+
* size is then ceil(totalWU/4) vB.
|
|
16
|
+
*
|
|
17
|
+
* refer to https://medium.com/coinmonks/on-bitcoin-transaction-sizes-part-2-9445373d17f4
|
|
18
|
+
* and https://bitcoin.stackexchange.com/questions/96017/what-are-the-sizes-of-single-sig-and-2-of-3-multisig-taproot-inputs
|
|
19
|
+
* and https://bitcoinops.org/en/tools/calc-size/
|
|
20
|
+
*
|
|
21
|
+
* Suggested improvement: I assume that these calculations won't be exactly
|
|
22
|
+
* correct for altcoins (but I don't know). Therefore we should move this
|
|
23
|
+
* functionality into ICrypto, to make it easier to provide slightly different
|
|
24
|
+
* calculations for different cryptocurrencies.
|
|
25
|
+
*
|
|
26
|
+
* The reason for the name maxTxSize, instead of just txSize, is that the size
|
|
27
|
+
* of modern ecdsa signatures aren't know beforehand. They are either 71 or
|
|
28
|
+
* 72 bytes. This function always count with 72 byte signatures.
|
|
29
|
+
*
|
|
30
|
+
* The size of schnorr signatures is expected to be 65 bytes, since the Bitcoin
|
|
31
|
+
* hardware app appends the optional sighash type 01 at the end of the
|
|
32
|
+
* signature. If the app removes that optional byte, this functions should be
|
|
33
|
+
* updated to use 64 byte schnorr signatures, even if 65 still is an acceptable
|
|
34
|
+
* maximum.
|
|
35
|
+
*
|
|
36
|
+
* @param inputCount Number of inputs of the imaginary transaction
|
|
37
|
+
* @param outputAddrs The addresses of the outputs, excluding change.
|
|
38
|
+
* @param includeChange Indicates whether we should add a change output. The
|
|
39
|
+
* change output will have the same derivation mode as the inputs. See
|
|
40
|
+
* derivationMode parameter.
|
|
41
|
+
* @param currency The currency for which the calculation is done.
|
|
42
|
+
* @param derivationMode The derivation mode used for calculating the size of
|
|
43
|
+
* the inputs.
|
|
44
|
+
*/
|
|
45
|
+
export declare function maxTxSize(inputCount: number, outputAddrs: string[], includeChange: boolean, currency: ICrypto, derivationMode: string): number;
|
|
46
|
+
export declare function maxTxSizeCeil(inputCount: number, outputAddrs: string[], includeChange: boolean, currency: ICrypto, derivationMode: string): number;
|
|
11
47
|
export declare function computeDustAmount(currency: ICrypto, txSize: number): any;
|
|
12
48
|
export declare function isValidAddress(address: string, currency?: Currency): boolean;
|
|
13
49
|
export declare function isTaprootAddress(address: string, currency?: Currency): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/families/bitcoin/wallet-btc/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/families/bitcoin/wallet-btc/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAKnD,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,YAQtC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,UAQ3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,UAIrC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,UAWnC;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,GAAG,OAa/C;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,OAAO,EAAE,GAAG,UASb;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,iBAWrC;AA6CD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,MAAM,GACrB,MAAM,CAiBR;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,MAAM,GACrB,MAAM,CASR;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAalE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,WASlE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,WAQpE"}
|
|
@@ -22,7 +22,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
exports.__esModule = true;
|
|
25
|
-
exports.isTaprootAddress = exports.isValidAddress = exports.computeDustAmount = exports.
|
|
25
|
+
exports.isTaprootAddress = exports.isValidAddress = exports.computeDustAmount = exports.maxTxSizeCeil = exports.maxTxSize = exports.outputSize = exports.byteSize = exports.createXPUB = exports.compressPublicKey = exports.toHexInt = exports.toHexDigit = exports.encodeBase58Check = exports.parseHexString = void 0;
|
|
26
26
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
27
27
|
var bitcoin = __importStar(require("bitcoinjs-lib"));
|
|
28
28
|
var bs58_1 = __importDefault(require("bs58"));
|
|
@@ -30,6 +30,7 @@ var lodash_1 = require("lodash");
|
|
|
30
30
|
var types_1 = require("./types");
|
|
31
31
|
var factory_1 = __importDefault(require("./crypto/factory"));
|
|
32
32
|
var base_1 = require("./crypto/base");
|
|
33
|
+
var errors_1 = require("../../../errors");
|
|
33
34
|
function parseHexString(str) {
|
|
34
35
|
var result = [];
|
|
35
36
|
while (str.length >= 2) {
|
|
@@ -107,49 +108,116 @@ function byteSize(count) {
|
|
|
107
108
|
return 9;
|
|
108
109
|
}
|
|
109
110
|
exports.byteSize = byteSize;
|
|
110
|
-
|
|
111
|
-
function
|
|
112
|
-
var
|
|
113
|
-
var fixedSize = 0;
|
|
114
|
-
// Fixed size computation
|
|
115
|
-
fixedSize = 4; // Transaction version
|
|
111
|
+
var baseByte = 4;
|
|
112
|
+
function fixedWeight(currency, derivationMode) {
|
|
113
|
+
var fixedWeight = 4 * baseByte; // Transaction version
|
|
116
114
|
if (currency.network.usesTimestampedTransaction)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
fixedSize += byteSize(outputCount); // Number of outputs
|
|
120
|
-
fixedSize += 4; // Timelock
|
|
115
|
+
fixedWeight += 4 * baseByte; // Timestamp
|
|
116
|
+
fixedWeight += 4 * baseByte; // Timelock
|
|
121
117
|
if (derivationMode !== types_1.DerivationModes.LEGACY) {
|
|
122
|
-
|
|
118
|
+
fixedWeight += 2; // Segwit marker & segwit flag, 1 WU per byte
|
|
123
119
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
return fixedWeight;
|
|
121
|
+
}
|
|
122
|
+
function inputWeight(derivationMode) {
|
|
123
|
+
var inputWeight = (32 + 4 + 1 + 4) * baseByte;
|
|
127
124
|
if (derivationMode === types_1.DerivationModes.TAPROOT) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
var noWitness = fixedSize + inputSize * inputCount + 43 * outputCount; //43 is the biggest output(taproot output) size, we use the biggest one for safety
|
|
139
|
-
// Include flag and marker size (one byte each)
|
|
140
|
-
var witnessSize = noWitness + 108 * inputCount + 2;
|
|
141
|
-
txSize = (noWitness * 3 + witnessSize) / 4;
|
|
125
|
+
inputWeight += 1 + 1 + 65;
|
|
126
|
+
}
|
|
127
|
+
else if (derivationMode === types_1.DerivationModes.NATIVE_SEGWIT) {
|
|
128
|
+
inputWeight += 1 + 1 + 72 + 1 + 33;
|
|
129
|
+
}
|
|
130
|
+
else if (derivationMode === types_1.DerivationModes.SEGWIT) {
|
|
131
|
+
inputWeight += 22 * baseByte + 1 + 1 + 72 + 1 + 33;
|
|
132
|
+
}
|
|
133
|
+
else if (derivationMode === types_1.DerivationModes.LEGACY) {
|
|
134
|
+
inputWeight += 107 * baseByte;
|
|
142
135
|
}
|
|
143
136
|
else {
|
|
144
|
-
|
|
137
|
+
throw (0, errors_1.UnsupportedDerivation)("Derivation mode " + derivationMode + " unknown");
|
|
138
|
+
}
|
|
139
|
+
return inputWeight;
|
|
140
|
+
}
|
|
141
|
+
function outputWeight(derivationMode) {
|
|
142
|
+
var outputSize = 8 + 1; // amount + script size
|
|
143
|
+
if (derivationMode === types_1.DerivationModes.TAPROOT) {
|
|
144
|
+
outputSize += 34; // "1" + PUSH32 + <32 bytes>
|
|
145
|
+
}
|
|
146
|
+
else if (derivationMode === types_1.DerivationModes.NATIVE_SEGWIT) {
|
|
147
|
+
outputSize += 22; // "0" + PUSH20 + <20 bytes>
|
|
148
|
+
}
|
|
149
|
+
else if (derivationMode === types_1.DerivationModes.SEGWIT) {
|
|
150
|
+
outputSize += 23; // HASH160 + PUSH20 + <20 bytes> + EQUAL
|
|
151
|
+
}
|
|
152
|
+
else if (derivationMode === types_1.DerivationModes.LEGACY) {
|
|
153
|
+
outputSize += 25; // DUP + HASH160 + PUSH20 + <20 bytes> + EQUALVERIFY + CHECKSIG
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
throw (0, errors_1.UnsupportedDerivation)(derivationMode);
|
|
157
|
+
}
|
|
158
|
+
return outputSize * 4;
|
|
159
|
+
}
|
|
160
|
+
function outputSize(currency, addr) {
|
|
161
|
+
var scriptLen = currency.toOutputScript(addr).length;
|
|
162
|
+
return 1 + 8 + scriptLen;
|
|
163
|
+
}
|
|
164
|
+
exports.outputSize = outputSize;
|
|
165
|
+
/**
|
|
166
|
+
* Calculates the maximun size of an imaginary transaction in virtual bytes
|
|
167
|
+
* (vB). 1vB = 4 WU (weight units). If a cryptocurrency doesn't use segwit, then
|
|
168
|
+
* 1 byte = 1 vB. Weight units are used for segwit transactions, where certain
|
|
169
|
+
* bytes of the transaction is counted as 4 WU and some as 1 WU. The resulting
|
|
170
|
+
* size is then ceil(totalWU/4) vB.
|
|
171
|
+
*
|
|
172
|
+
* refer to https://medium.com/coinmonks/on-bitcoin-transaction-sizes-part-2-9445373d17f4
|
|
173
|
+
* and https://bitcoin.stackexchange.com/questions/96017/what-are-the-sizes-of-single-sig-and-2-of-3-multisig-taproot-inputs
|
|
174
|
+
* and https://bitcoinops.org/en/tools/calc-size/
|
|
175
|
+
*
|
|
176
|
+
* Suggested improvement: I assume that these calculations won't be exactly
|
|
177
|
+
* correct for altcoins (but I don't know). Therefore we should move this
|
|
178
|
+
* functionality into ICrypto, to make it easier to provide slightly different
|
|
179
|
+
* calculations for different cryptocurrencies.
|
|
180
|
+
*
|
|
181
|
+
* The reason for the name maxTxSize, instead of just txSize, is that the size
|
|
182
|
+
* of modern ecdsa signatures aren't know beforehand. They are either 71 or
|
|
183
|
+
* 72 bytes. This function always count with 72 byte signatures.
|
|
184
|
+
*
|
|
185
|
+
* The size of schnorr signatures is expected to be 65 bytes, since the Bitcoin
|
|
186
|
+
* hardware app appends the optional sighash type 01 at the end of the
|
|
187
|
+
* signature. If the app removes that optional byte, this functions should be
|
|
188
|
+
* updated to use 64 byte schnorr signatures, even if 65 still is an acceptable
|
|
189
|
+
* maximum.
|
|
190
|
+
*
|
|
191
|
+
* @param inputCount Number of inputs of the imaginary transaction
|
|
192
|
+
* @param outputAddrs The addresses of the outputs, excluding change.
|
|
193
|
+
* @param includeChange Indicates whether we should add a change output. The
|
|
194
|
+
* change output will have the same derivation mode as the inputs. See
|
|
195
|
+
* derivationMode parameter.
|
|
196
|
+
* @param currency The currency for which the calculation is done.
|
|
197
|
+
* @param derivationMode The derivation mode used for calculating the size of
|
|
198
|
+
* the inputs.
|
|
199
|
+
*/
|
|
200
|
+
function maxTxSize(inputCount, outputAddrs, includeChange, currency, derivationMode) {
|
|
201
|
+
var fixed = fixedWeight(currency, derivationMode);
|
|
202
|
+
var outputsWeight = byteSize(outputAddrs.length) * baseByte; // Number of outputs;
|
|
203
|
+
outputAddrs.forEach(function (addr) {
|
|
204
|
+
outputsWeight += outputSize(currency, addr) * baseByte;
|
|
205
|
+
});
|
|
206
|
+
if (includeChange) {
|
|
207
|
+
outputsWeight += outputWeight(derivationMode);
|
|
145
208
|
}
|
|
146
|
-
|
|
209
|
+
// Input: 32 PrevTxHash + 4 Index + 1 scriptSigLength + 4 sequence
|
|
210
|
+
var inputsWeight = byteSize(inputCount) * baseByte; // Number of inputs
|
|
211
|
+
inputsWeight += inputWeight(derivationMode) * inputCount;
|
|
212
|
+
var txWeight = fixed + inputsWeight + outputsWeight;
|
|
213
|
+
return txWeight / 4;
|
|
147
214
|
}
|
|
148
|
-
exports.
|
|
149
|
-
function
|
|
150
|
-
|
|
215
|
+
exports.maxTxSize = maxTxSize;
|
|
216
|
+
function maxTxSizeCeil(inputCount, outputAddrs, includeChange, currency, derivationMode) {
|
|
217
|
+
var s = maxTxSize(inputCount, outputAddrs, includeChange, currency, derivationMode);
|
|
218
|
+
return Math.ceil(s);
|
|
151
219
|
}
|
|
152
|
-
exports.
|
|
220
|
+
exports.maxTxSizeCeil = maxTxSizeCeil;
|
|
153
221
|
// refer to https://github.com/LedgerHQ/lib-ledger-core/blob/fc9d762b83fc2b269d072b662065747a64ab2816/core/src/wallet/bitcoin/api_impl/BitcoinLikeTransactionApi.cpp#L253
|
|
154
222
|
function computeDustAmount(currency, txSize) {
|
|
155
223
|
var dustAmount = currency.network.dustThreshold;
|