@airgap/bitcoin 0.13.11-beta.1 → 0.13.11-beta.11

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.
Files changed (148) hide show
  1. package/index.d.ts +1 -0
  2. package/index.js +18 -0
  3. package/index.js.map +1 -0
  4. package/package.json +1 -5
  5. package/v0/index.d.ts +14 -0
  6. package/v0/index.js +34 -0
  7. package/v0/index.js.map +1 -0
  8. package/v0/protocol/BitcoinAddress.d.ts +9 -0
  9. package/v0/protocol/BitcoinAddress.js +23 -0
  10. package/v0/protocol/BitcoinAddress.js.map +1 -0
  11. package/v0/protocol/BitcoinCryptoClient.d.ts +11 -0
  12. package/v0/protocol/BitcoinCryptoClient.js +91 -0
  13. package/v0/protocol/BitcoinCryptoClient.js.map +1 -0
  14. package/v0/protocol/BitcoinProtocol.d.ts +167 -0
  15. package/v0/protocol/BitcoinProtocol.js +1063 -0
  16. package/v0/protocol/BitcoinProtocol.js.map +1 -0
  17. package/v0/protocol/BitcoinProtocolOptions.d.ts +26 -0
  18. package/v0/protocol/BitcoinProtocolOptions.js +148 -0
  19. package/v0/protocol/BitcoinProtocolOptions.js.map +1 -0
  20. package/v0/protocol/BitcoinSegwitAddress.d.ts +7 -0
  21. package/v0/protocol/BitcoinSegwitAddress.js +41 -0
  22. package/v0/protocol/BitcoinSegwitAddress.js.map +1 -0
  23. package/v0/protocol/BitcoinSegwitProtocol.d.ts +28 -0
  24. package/v0/protocol/BitcoinSegwitProtocol.js +541 -0
  25. package/v0/protocol/BitcoinSegwitProtocol.js.map +1 -0
  26. package/v0/protocol/BitcoinTestnetProtocol.d.ts +7 -0
  27. package/v0/protocol/BitcoinTestnetProtocol.js +58 -0
  28. package/v0/protocol/BitcoinTestnetProtocol.js.map +1 -0
  29. package/v0/protocol/BitcoinTypes.d.ts +21 -0
  30. package/v0/protocol/BitcoinTypes.js +3 -0
  31. package/v0/protocol/BitcoinTypes.js.map +1 -0
  32. package/v0/serializer/schemas/v2/transaction-sign-request-bitcoin-segwit.json +0 -0
  33. package/v0/serializer/schemas/v2/transaction-sign-request-bitcoin.json +73 -0
  34. package/v0/serializer/schemas/v2/transaction-sign-response-bitcoin-segwit.json +0 -0
  35. package/v0/serializer/schemas/v2/transaction-sign-response-bitcoin.json +37 -0
  36. package/v0/serializer/schemas/v3/transaction-sign-request-bitcoin-segwit.json +29 -0
  37. package/v0/serializer/schemas/v3/transaction-sign-request-bitcoin.json +73 -0
  38. package/v0/serializer/schemas/v3/transaction-sign-response-bitcoin-segwit.json +19 -0
  39. package/v0/serializer/schemas/v3/transaction-sign-response-bitcoin.json +37 -0
  40. package/v0/serializer/validators/transaction-validator.d.ts +15 -0
  41. package/v0/serializer/validators/transaction-validator.js +81 -0
  42. package/v0/serializer/validators/transaction-validator.js.map +1 -0
  43. package/v0/serializer/validators/validators.d.ts +1 -0
  44. package/v0/serializer/validators/validators.js +151 -0
  45. package/v0/serializer/validators/validators.js.map +1 -0
  46. package/v0/types/signed-transaction-bitcoin-segwit.d.ts +5 -0
  47. package/v0/types/signed-transaction-bitcoin-segwit.js +3 -0
  48. package/v0/types/signed-transaction-bitcoin-segwit.js.map +1 -0
  49. package/v0/types/signed-transaction-bitcoin.d.ts +9 -0
  50. package/v0/types/signed-transaction-bitcoin.js +3 -0
  51. package/v0/types/signed-transaction-bitcoin.js.map +1 -0
  52. package/v0/types/transaction-bitcoin.d.ts +20 -0
  53. package/v0/types/transaction-bitcoin.js +3 -0
  54. package/v0/types/transaction-bitcoin.js.map +1 -0
  55. package/v0/types/unsigned-transaction-bitcoin-segwit.d.ts +7 -0
  56. package/v0/types/unsigned-transaction-bitcoin-segwit.js +3 -0
  57. package/v0/types/unsigned-transaction-bitcoin-segwit.js.map +1 -0
  58. package/v0/types/unsigned-transaction-bitcoin.d.ts +22 -0
  59. package/v0/types/unsigned-transaction-bitcoin.js +3 -0
  60. package/v0/types/unsigned-transaction-bitcoin.js.map +1 -0
  61. package/v1/block-explorer/BlockCypherBlockExplorer.d.ts +9 -0
  62. package/v1/block-explorer/BlockCypherBlockExplorer.js +74 -0
  63. package/v1/block-explorer/BlockCypherBlockExplorer.js.map +1 -0
  64. package/v1/data/BitcoinAddress.d.ts +7 -0
  65. package/v1/data/BitcoinAddress.js +20 -0
  66. package/v1/data/BitcoinAddress.js.map +1 -0
  67. package/v1/data/BitcoinSegwitAddress.d.ts +8 -0
  68. package/v1/data/BitcoinSegwitAddress.js +25 -0
  69. package/v1/data/BitcoinSegwitAddress.js.map +1 -0
  70. package/v1/index.d.ts +20 -0
  71. package/v1/index.js +24 -0
  72. package/v1/index.js.map +1 -0
  73. package/v1/module/BitcoinModule.d.ts +16 -0
  74. package/v1/module/BitcoinModule.js +112 -0
  75. package/v1/module/BitcoinModule.js.map +1 -0
  76. package/v1/module.d.ts +3 -0
  77. package/v1/module.js +24 -0
  78. package/v1/module.js.map +1 -0
  79. package/v1/protocol/BitcoinCryptoClient.d.ts +12 -0
  80. package/v1/protocol/BitcoinCryptoClient.js +96 -0
  81. package/v1/protocol/BitcoinCryptoClient.js.map +1 -0
  82. package/v1/protocol/BitcoinProtocol.d.ts +72 -0
  83. package/v1/protocol/BitcoinProtocol.js +1193 -0
  84. package/v1/protocol/BitcoinProtocol.js.map +1 -0
  85. package/v1/protocol/BitcoinSegwitProtocol.d.ts +52 -0
  86. package/v1/protocol/BitcoinSegwitProtocol.js +720 -0
  87. package/v1/protocol/BitcoinSegwitProtocol.js.map +1 -0
  88. package/v1/protocol/BitcoinTestnetProtocol.d.ts +12 -0
  89. package/v1/protocol/BitcoinTestnetProtocol.js +73 -0
  90. package/v1/protocol/BitcoinTestnetProtocol.js.map +1 -0
  91. package/v1/serializer/v3/schemas/converter/transaction-converter.d.ts +13 -0
  92. package/v1/serializer/v3/schemas/converter/transaction-converter.js +75 -0
  93. package/v1/serializer/v3/schemas/converter/transaction-converter.js.map +1 -0
  94. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-segwit.d.ts +4 -0
  95. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-segwit.js +3 -0
  96. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin-segwit.js.map +1 -0
  97. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin.d.ts +4 -0
  98. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin.js +3 -0
  99. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-bitcoin.js.map +1 -0
  100. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-segwit.d.ts +3 -0
  101. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-segwit.js +3 -0
  102. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin-segwit.js.map +1 -0
  103. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin.d.ts +7 -0
  104. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin.js +3 -0
  105. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-bitcoin.js.map +1 -0
  106. package/v1/serializer/v3/schemas/generated/transaction-sign-request-bitcoin-segwit.json +29 -0
  107. package/v1/serializer/v3/schemas/generated/transaction-sign-request-bitcoin.json +79 -0
  108. package/v1/serializer/v3/schemas/generated/transaction-sign-response-bitcoin-segwit.json +19 -0
  109. package/v1/serializer/v3/schemas/generated/transaction-sign-response-bitcoin.json +37 -0
  110. package/v1/serializer/v3/serializer-companion.d.ts +14 -0
  111. package/v1/serializer/v3/serializer-companion.js +197 -0
  112. package/v1/serializer/v3/serializer-companion.js.map +1 -0
  113. package/v1/serializer/v3/validators/transaction-validator.d.ts +7 -0
  114. package/v1/serializer/v3/validators/transaction-validator.js +56 -0
  115. package/v1/serializer/v3/validators/transaction-validator.js.map +1 -0
  116. package/v1/serializer/v3/validators/validators.d.ts +7 -0
  117. package/v1/serializer/v3/validators/validators.js +238 -0
  118. package/v1/serializer/v3/validators/validators.js.map +1 -0
  119. package/v1/types/bitcoinjs.d.ts +14 -0
  120. package/v1/types/bitcoinjs.js +3 -0
  121. package/v1/types/bitcoinjs.js.map +1 -0
  122. package/v1/types/crypto.d.ts +2 -0
  123. package/v1/types/crypto.js +3 -0
  124. package/v1/types/crypto.js.map +1 -0
  125. package/v1/types/indexer.d.ts +81 -0
  126. package/v1/types/indexer.js +3 -0
  127. package/v1/types/indexer.js.map +1 -0
  128. package/v1/types/key.d.ts +6 -0
  129. package/v1/types/key.js +3 -0
  130. package/v1/types/key.js.map +1 -0
  131. package/v1/types/protocol.d.ts +17 -0
  132. package/v1/types/protocol.js +3 -0
  133. package/v1/types/protocol.js.map +1 -0
  134. package/v1/types/transaction.d.ts +39 -0
  135. package/v1/types/transaction.js +3 -0
  136. package/v1/types/transaction.js.map +1 -0
  137. package/v1/utils/common.d.ts +2 -0
  138. package/v1/utils/common.js +28 -0
  139. package/v1/utils/common.js.map +1 -0
  140. package/v1/utils/key.d.ts +34 -0
  141. package/v1/utils/key.js +190 -0
  142. package/v1/utils/key.js.map +1 -0
  143. package/v1/utils/network.d.ts +2 -0
  144. package/v1/utils/network.js +22 -0
  145. package/v1/utils/network.js.map +1 -0
  146. package/v1/utils/signature.d.ts +2 -0
  147. package/v1/utils/signature.js +34 -0
  148. package/v1/utils/signature.js.map +1 -0
@@ -0,0 +1,541 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
41
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
42
+ return new (P || (P = Promise))(function (resolve, reject) {
43
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
44
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
45
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
46
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
47
+ });
48
+ };
49
+ var __generator = (this && this.__generator) || function (thisArg, body) {
50
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
51
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
52
+ function verb(n) { return function (v) { return step([n, v]); }; }
53
+ function step(op) {
54
+ if (f) throw new TypeError("Generator is already executing.");
55
+ while (_) try {
56
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
57
+ if (y = 0, t) op = [op[0] & 2, t.value];
58
+ switch (op[0]) {
59
+ case 0: case 1: t = op; break;
60
+ case 4: _.label++; return { value: op[1], done: false };
61
+ case 5: _.label++; y = op[1]; op = [0]; continue;
62
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
63
+ default:
64
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
65
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
66
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
67
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
68
+ if (t[2]) _.ops.pop();
69
+ _.trys.pop(); continue;
70
+ }
71
+ op = body.call(thisArg, _);
72
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
73
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
74
+ }
75
+ };
76
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
77
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
78
+ if (ar || !(i in from)) {
79
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
80
+ ar[i] = from[i];
81
+ }
82
+ }
83
+ return to.concat(ar || Array.prototype.slice.call(from));
84
+ };
85
+ var __importDefault = (this && this.__importDefault) || function (mod) {
86
+ return (mod && mod.__esModule) ? mod : { "default": mod };
87
+ };
88
+ Object.defineProperty(exports, "__esModule", { value: true });
89
+ exports.BitcoinSegwitProtocol = void 0;
90
+ var index_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/axios-0.19.0/index"));
91
+ var bignumber_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber"));
92
+ var index_2 = require("@airgap/coinlib-core/dependencies/src/bip39-2.5.0/index");
93
+ var bs58check = __importStar(require("@airgap/coinlib-core/dependencies/src/bs58check-2.1.2"));
94
+ var ProtocolSymbols_1 = require("@airgap/coinlib-core/utils/ProtocolSymbols");
95
+ var bitcoinJS = __importStar(require("bitcoinjs-lib"));
96
+ var BitcoinProtocol_1 = require("./BitcoinProtocol");
97
+ var BitcoinProtocolOptions_1 = require("./BitcoinProtocolOptions");
98
+ var BitcoinSegwitAddress_1 = require("./BitcoinSegwitAddress");
99
+ var DUST_AMOUNT = 50;
100
+ // This function handles arrays and objects
101
+ function eachRecursive(obj) {
102
+ for (var k in obj) {
103
+ if (Buffer.isBuffer(obj[k])) {
104
+ obj[k] = obj[k].toString('hex');
105
+ }
106
+ if (typeof obj[k] === 'object' && obj[k] !== null) {
107
+ obj[k] = eachRecursive(obj[k]);
108
+ }
109
+ }
110
+ return obj;
111
+ }
112
+ // https://github.com/satoshilabs/slips/blob/master/slip-0132.md
113
+ var ExtendedPublicKey = /** @class */ (function () {
114
+ function ExtendedPublicKey(extendedPublicKey) {
115
+ this.rawKey = bs58check.decode(extendedPublicKey).slice(4);
116
+ }
117
+ ExtendedPublicKey.prototype.toXpub = function () {
118
+ return this.addPrefix('0488b21e');
119
+ };
120
+ ExtendedPublicKey.prototype.toYPub = function () {
121
+ return this.addPrefix('049d7cb2');
122
+ };
123
+ ExtendedPublicKey.prototype.toZPub = function () {
124
+ return this.addPrefix('04b24746');
125
+ };
126
+ ExtendedPublicKey.prototype.addPrefix = function (prefix) {
127
+ var data = Buffer.concat([Buffer.from(prefix, 'hex'), this.rawKey]);
128
+ return bs58check.encode(data);
129
+ };
130
+ return ExtendedPublicKey;
131
+ }());
132
+ var BitcoinSegwitProtocol = /** @class */ (function (_super) {
133
+ __extends(BitcoinSegwitProtocol, _super);
134
+ function BitcoinSegwitProtocol(options) {
135
+ if (options === void 0) { options = new BitcoinProtocolOptions_1.BitcoinProtocolOptions(); }
136
+ var _this = _super.call(this, options) || this;
137
+ _this.name = 'Bitcoin (Segwit)';
138
+ _this.identifier = ProtocolSymbols_1.MainProtocolSymbols.BTC_SEGWIT;
139
+ _this.standardDerivationPath = "m/84'/0'/0'";
140
+ _this.addressPlaceholder = 'bc1...';
141
+ return _this;
142
+ }
143
+ BitcoinSegwitProtocol.prototype.getPublicKeyFromHexSecret = function (secret, derivationPath) {
144
+ return __awaiter(this, void 0, void 0, function () {
145
+ var bitcoinNode, neutered, zpub;
146
+ return __generator(this, function (_a) {
147
+ bitcoinNode = bitcoinJS.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network);
148
+ neutered = bitcoinNode.derivePath(derivationPath).neutered();
149
+ zpub = new ExtendedPublicKey(neutered.toBase58()).toZPub();
150
+ return [2 /*return*/, zpub];
151
+ });
152
+ });
153
+ };
154
+ BitcoinSegwitProtocol.prototype.getPrivateKeyFromHexSecret = function (secret, derivationPath) {
155
+ return __awaiter(this, void 0, void 0, function () {
156
+ var bitcoinNode, privateKey;
157
+ return __generator(this, function (_a) {
158
+ if (!derivationPath) {
159
+ return [2 /*return*/, bitcoinJS.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network)];
160
+ }
161
+ bitcoinNode = bitcoinJS.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network);
162
+ privateKey = bitcoinNode.derivePath(derivationPath).privateKey;
163
+ if (!privateKey) {
164
+ throw new Error('No privatekey!');
165
+ }
166
+ return [2 /*return*/, privateKey.toString('hex')];
167
+ });
168
+ });
169
+ };
170
+ BitcoinSegwitProtocol.prototype.getExtendedPrivateKeyFromMnemonic = function (mnemonic, derivationPath, password) {
171
+ return __awaiter(this, void 0, void 0, function () {
172
+ var secret;
173
+ return __generator(this, function (_a) {
174
+ secret = (0, index_2.mnemonicToSeed)(mnemonic, password);
175
+ return [2 /*return*/, this.getExtendedPrivateKeyFromHexSecret(secret, derivationPath)];
176
+ });
177
+ });
178
+ };
179
+ BitcoinSegwitProtocol.prototype.getExtendedPrivateKeyFromHexSecret = function (secret, derivationPath) {
180
+ return __awaiter(this, void 0, void 0, function () {
181
+ var bitcoinNode;
182
+ return __generator(this, function (_a) {
183
+ bitcoinNode = bitcoinJS.bip32.fromSeed(Buffer.from(secret, 'hex'), this.options.network.extras.network);
184
+ return [2 /*return*/, bitcoinNode.derivePath(derivationPath).toBase58()];
185
+ });
186
+ });
187
+ };
188
+ BitcoinSegwitProtocol.prototype.getAddressFromPublicKey = function (publicKey, cursor) {
189
+ return __awaiter(this, void 0, void 0, function () {
190
+ var address;
191
+ return __generator(this, function (_a) {
192
+ address = BitcoinSegwitAddress_1.BitcoinSegwitAddress.fromAddress(bitcoinJS.bip32.fromBase58(publicKey, this.options.network.extras.network).toBase58());
193
+ return [2 /*return*/, {
194
+ address: address.asString(),
195
+ cursor: { hasNext: false }
196
+ }];
197
+ });
198
+ });
199
+ };
200
+ BitcoinSegwitProtocol.prototype.getAddressesFromPublicKey = function (publicKey, cursor) {
201
+ return __awaiter(this, void 0, void 0, function () {
202
+ return __generator(this, function (_a) {
203
+ switch (_a.label) {
204
+ case 0: return [4 /*yield*/, this.getAddressFromPublicKey(publicKey, cursor)];
205
+ case 1: return [2 /*return*/, [_a.sent()]];
206
+ }
207
+ });
208
+ });
209
+ };
210
+ BitcoinSegwitProtocol.prototype.getAddressFromExtendedPublicKey = function (extendedPublicKey, visibilityDerivationIndex, addressDerivationIndex) {
211
+ return __awaiter(this, void 0, void 0, function () {
212
+ var xpub, keyPair, obj, addressRaw, address;
213
+ return __generator(this, function (_a) {
214
+ xpub = new ExtendedPublicKey(extendedPublicKey).toXpub();
215
+ keyPair = bitcoinJS.bip32
216
+ .fromBase58(xpub, this.options.network.extras.network)
217
+ .derive(visibilityDerivationIndex)
218
+ .derive(addressDerivationIndex);
219
+ obj = bitcoinJS.payments.p2wpkh({ pubkey: keyPair.publicKey });
220
+ addressRaw = obj.address;
221
+ if (!addressRaw) {
222
+ throw new Error('could not generate address');
223
+ }
224
+ address = BitcoinSegwitAddress_1.BitcoinSegwitAddress.fromAddress(addressRaw);
225
+ return [2 /*return*/, {
226
+ address: address.asString(),
227
+ cursor: { hasNext: false }
228
+ }];
229
+ });
230
+ });
231
+ };
232
+ BitcoinSegwitProtocol.prototype.getAddressesFromExtendedPublicKey = function (extendedPublicKey, visibilityDerivationIndex, addressCount, offset) {
233
+ // broadcaster knows this (both broadcaster and signer)
234
+ var node = bitcoinJS.bip32.fromBase58(new ExtendedPublicKey(extendedPublicKey).toXpub(), this.options.network.extras.network);
235
+ var generatorArray = Array.from(new Array(addressCount), function (x, i) { return i + offset; });
236
+ return Promise.all(generatorArray.map(function (x) {
237
+ var keyPair = node.derive(visibilityDerivationIndex).derive(x);
238
+ var addressRaw = bitcoinJS.payments.p2wpkh({ pubkey: keyPair.publicKey }).address;
239
+ if (!addressRaw) {
240
+ throw new Error('could not generate address');
241
+ }
242
+ var address = BitcoinSegwitAddress_1.BitcoinSegwitAddress.fromAddress(addressRaw);
243
+ return {
244
+ address: address.asString(),
245
+ cursor: { hasNext: false }
246
+ };
247
+ }));
248
+ };
249
+ BitcoinSegwitProtocol.prototype.getTransactionDetails = function (unsignedTx) {
250
+ var _a, _b;
251
+ return __awaiter(this, void 0, void 0, function () {
252
+ var transaction, decodedPSBT, feeCalculator, _i, _c, txIn, _d, _e, txOut, warnings, clonedPSBT, amount;
253
+ return __generator(this, function (_f) {
254
+ transaction = unsignedTx.transaction;
255
+ decodedPSBT = bitcoinJS.Psbt.fromHex(transaction.psbt);
256
+ feeCalculator = new bignumber_1.default(0);
257
+ for (_i = 0, _c = decodedPSBT.data.inputs; _i < _c.length; _i++) {
258
+ txIn = _c[_i];
259
+ feeCalculator = feeCalculator.plus(new bignumber_1.default((_b = (_a = txIn.witnessUtxo) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 0));
260
+ }
261
+ for (_d = 0, _e = decodedPSBT.txOutputs; _d < _e.length; _d++) {
262
+ txOut = _e[_d];
263
+ feeCalculator = feeCalculator.minus(new bignumber_1.default(txOut.value));
264
+ }
265
+ warnings = [];
266
+ clonedPSBT = decodedPSBT.clone();
267
+ eachRecursive(clonedPSBT); // All buffers to hex string
268
+ amount = (function () {
269
+ // If tx has only one output, this is the amount
270
+ if (decodedPSBT.txOutputs.length === 1) {
271
+ return new bignumber_1.default(decodedPSBT.txOutputs[0].value);
272
+ }
273
+ // If we can match one output to an exact amount that we add to the PSBT, this is our amount.
274
+ {
275
+ var unknownKeyVals = decodedPSBT.data.globalMap.unknownKeyVals;
276
+ if (unknownKeyVals) {
277
+ var amountArray = unknownKeyVals.filter(function (kv) { return kv.key.equals(Buffer.from('amount')); });
278
+ if (amountArray.length > 0) {
279
+ return new bignumber_1.default(amountArray[0].value.toString()); // Buffer to number
280
+ }
281
+ }
282
+ }
283
+ // If tx has an output and we added a derivation path in the PSBT (in the wallet, prepareTransaction), we know that it is a change address and we ignore it.
284
+ var accumulated = new bignumber_1.default(0);
285
+ var useAccumulated = false;
286
+ decodedPSBT.data.outputs.forEach(function (outputKeyValues, index) {
287
+ if (outputKeyValues.unknownKeyVals) {
288
+ var derivationPaths = outputKeyValues.unknownKeyVals
289
+ .filter(function (kv) { return kv.key.equals(Buffer.from('dp')); })
290
+ .map(function (kv) { return kv.value.toString(); });
291
+ if (derivationPaths.length > 0) {
292
+ // If one of the outputs has the derivation in the custom key/value map, we can use this to determine the amount.
293
+ useAccumulated = true;
294
+ return;
295
+ }
296
+ }
297
+ var output = decodedPSBT.txOutputs[index];
298
+ accumulated = accumulated.plus(output.value);
299
+ });
300
+ if (useAccumulated) {
301
+ return accumulated;
302
+ }
303
+ // If we cannot match anything above, we need to assume that the whole amount is being sent and the user has to check the outputs.
304
+ return decodedPSBT.txOutputs
305
+ .map(function (obj) { return new bignumber_1.default(obj.value); })
306
+ .reduce(function (accumulator, currentValue) { return accumulator.plus(currentValue); });
307
+ })();
308
+ return [2 /*return*/, [
309
+ {
310
+ from: decodedPSBT.data.inputs.map(function (obj) {
311
+ var _a, _b;
312
+ return (_b = (_a = obj.bip32Derivation) === null || _a === void 0 ? void 0 : _a.map(function (el) {
313
+ return bitcoinJS.payments.p2wpkh({
314
+ pubkey: el.pubkey,
315
+ network: bitcoinJS.networks.bitcoin
316
+ }).address;
317
+ }).join(' ')) !== null && _b !== void 0 ? _b : 'INVALID';
318
+ }),
319
+ to: decodedPSBT.txOutputs.map(function (obj) {
320
+ return obj.address || "Script: ".concat(obj.script.toString('hex')) || 'unknown';
321
+ }),
322
+ amount: amount.toString(10),
323
+ fee: feeCalculator.toString(10),
324
+ protocolIdentifier: this.identifier,
325
+ network: this.options.network,
326
+ isInbound: false,
327
+ transactionDetails: {
328
+ // This is some unstructured data about the PSBT. This is shown in the UI as a JSON for advanced users.
329
+ inputTx: eachRecursive(clonedPSBT.txInputs),
330
+ outputTx: eachRecursive(clonedPSBT.txOutputs),
331
+ inputData: clonedPSBT.data.inputs,
332
+ outputData: clonedPSBT.data.outputs,
333
+ PSBTVersion: clonedPSBT.version,
334
+ PSBTLocktime: clonedPSBT.locktime,
335
+ PSBTGlobalMap: clonedPSBT.data.globalMap,
336
+ rawPSBT: unsignedTx.transaction
337
+ },
338
+ warnings: warnings
339
+ }
340
+ ]];
341
+ });
342
+ });
343
+ };
344
+ BitcoinSegwitProtocol.prototype.getTransactionDetailsFromSigned = function (signedTx) {
345
+ return __awaiter(this, void 0, void 0, function () {
346
+ return __generator(this, function (_a) {
347
+ return [2 /*return*/, this.getTransactionDetails({ publicKey: '', transaction: { psbt: signedTx.transaction } })];
348
+ });
349
+ });
350
+ };
351
+ BitcoinSegwitProtocol.prototype.prepareTransactionFromExtendedPublicKey = function (extendedPublicKey, offset, recipients, values, fee, extras) {
352
+ return __awaiter(this, void 0, void 0, function () {
353
+ var wrappedValues, wrappedFee, transaction, utxos, totalRequiredBalance, valueAccumulator, getPathIndexes, _i, utxos_1, utxo, indexes, derivedAddress, i, lastUsedInternalAddress, changeValue, changeAddressIndex, derivedAddress, psbt, keyPair, replaceByFee, tx;
354
+ var _this = this;
355
+ return __generator(this, function (_a) {
356
+ switch (_a.label) {
357
+ case 0:
358
+ if (!extras.masterFingerprint) {
359
+ throw new Error('MasterFingerprint not set!');
360
+ }
361
+ wrappedValues = values.map(function (value) { return new bignumber_1.default(value); });
362
+ wrappedFee = new bignumber_1.default(fee);
363
+ transaction = {
364
+ ins: [],
365
+ outs: []
366
+ };
367
+ if (recipients.length !== wrappedValues.length) {
368
+ throw new Error('recipients do not match values');
369
+ }
370
+ return [4 /*yield*/, index_1.default.get("".concat(this.options.network.extras.indexerApi, "/api/v2/utxo/").concat(extendedPublicKey, "?confirmed=true"), {
371
+ responseType: 'json'
372
+ })];
373
+ case 1:
374
+ utxos = (_a.sent()).data;
375
+ if (utxos.length <= 0) {
376
+ throw new Error('not enough balance'); // no transactions found on those addresses, probably won't find anything in the next ones
377
+ }
378
+ totalRequiredBalance = wrappedValues
379
+ .reduce(function (accumulator, currentValue) { return accumulator.plus(currentValue); })
380
+ .plus(wrappedFee);
381
+ valueAccumulator = new bignumber_1.default(0);
382
+ getPathIndexes = function (path) {
383
+ var result = path
384
+ .split('/')
385
+ .slice(-2)
386
+ .map(function (item) { return parseInt(item); })
387
+ .filter(function (item) { return !isNaN(item); });
388
+ if (result.length !== 2) {
389
+ throw new Error('Unexpected path format');
390
+ }
391
+ return [result[0], result[1]];
392
+ };
393
+ _i = 0, utxos_1 = utxos;
394
+ _a.label = 2;
395
+ case 2:
396
+ if (!(_i < utxos_1.length)) return [3 /*break*/, 5];
397
+ utxo = utxos_1[_i];
398
+ valueAccumulator = valueAccumulator.plus(utxo.value);
399
+ indexes = getPathIndexes(utxo.path);
400
+ return [4 /*yield*/, this.getAddressFromExtendedPublicKey(extendedPublicKey, indexes[0], indexes[1])];
401
+ case 3:
402
+ derivedAddress = (_a.sent()).address;
403
+ if (derivedAddress === utxo.address) {
404
+ transaction.ins.push({
405
+ txId: utxo.txid,
406
+ value: new bignumber_1.default(utxo.value).toString(10),
407
+ vout: utxo.vout,
408
+ address: utxo.address,
409
+ derivationPath: utxo.path
410
+ });
411
+ }
412
+ else {
413
+ throw new Error('Invalid address returned from API');
414
+ }
415
+ if (valueAccumulator.isGreaterThanOrEqualTo(totalRequiredBalance)) {
416
+ return [3 /*break*/, 5];
417
+ }
418
+ _a.label = 4;
419
+ case 4:
420
+ _i++;
421
+ return [3 /*break*/, 2];
422
+ case 5:
423
+ if (valueAccumulator.isLessThan(totalRequiredBalance)) {
424
+ throw new Error('not enough balance 2');
425
+ }
426
+ for (i = 0; i < recipients.length; i++) {
427
+ transaction.outs.push({
428
+ recipient: recipients[i],
429
+ isChange: false,
430
+ value: wrappedValues[i].toString(10)
431
+ });
432
+ valueAccumulator = valueAccumulator.minus(wrappedValues[i]);
433
+ }
434
+ lastUsedInternalAddress = Math.max.apply(Math, __spreadArray([-1], utxos
435
+ .map(function (utxo) { return getPathIndexes(utxo.path); })
436
+ .filter(function (indexes) { return indexes[0] === 1; })
437
+ .map(function (indexes) { return indexes[1]; }), false));
438
+ changeValue = valueAccumulator.minus(wrappedFee);
439
+ if (!changeValue.isGreaterThan(new bignumber_1.default(DUST_AMOUNT))) return [3 /*break*/, 7];
440
+ changeAddressIndex = lastUsedInternalAddress + 1;
441
+ return [4 /*yield*/, this.getAddressFromExtendedPublicKey(extendedPublicKey, 1, changeAddressIndex)];
442
+ case 6:
443
+ derivedAddress = (_a.sent()).address;
444
+ transaction.outs.push({
445
+ recipient: derivedAddress,
446
+ isChange: true,
447
+ value: changeValue.toString(10),
448
+ derivationPath: "1/".concat(changeAddressIndex)
449
+ });
450
+ _a.label = 7;
451
+ case 7:
452
+ psbt = new bitcoinJS.Psbt();
453
+ // We add the total amount of the transaction to the global map. This can be used to show the info in the "from-to" component after the transaction was signed.
454
+ psbt.addUnknownKeyValToGlobal({
455
+ key: Buffer.from('amount'),
456
+ value: Buffer.from(wrappedValues.reduce(function (accumulator, currentValue) { return accumulator.plus(currentValue); }).toString())
457
+ });
458
+ keyPair = bitcoinJS.bip32.fromBase58(new ExtendedPublicKey(extendedPublicKey).toXpub());
459
+ replaceByFee = extras.replaceByFee ? true : false;
460
+ transaction.ins.forEach(function (tx) {
461
+ var indexes = getPathIndexes(tx.derivationPath);
462
+ var childNode = keyPair.derivePath(indexes.join('/'));
463
+ var p2wpkh = bitcoinJS.payments.p2wpkh({ pubkey: childNode.publicKey, network: _this.options.network.extras.network });
464
+ var p2shOutput = p2wpkh.output;
465
+ if (!p2shOutput) {
466
+ throw new Error('no p2shOutput');
467
+ }
468
+ psbt.addInput({
469
+ hash: tx.txId,
470
+ index: tx.vout,
471
+ sequence: replaceByFee ? 0xfffffffd : undefined,
472
+ witnessUtxo: {
473
+ script: p2shOutput,
474
+ value: parseInt(tx.value)
475
+ },
476
+ bip32Derivation: [
477
+ {
478
+ masterFingerprint: Buffer.from(extras.masterFingerprint, 'hex'),
479
+ pubkey: childNode.publicKey,
480
+ path: tx.derivationPath
481
+ }
482
+ ]
483
+ });
484
+ });
485
+ transaction.outs.forEach(function (out, index) {
486
+ psbt.addOutput({ address: out.recipient, value: parseInt(out.value) });
487
+ if (out.derivationPath) {
488
+ // We add the derivation path of our change address to the key value map of the PSBT. This will allow us to later "filter" out this address when displaying the transaction info.
489
+ psbt.addUnknownKeyValToOutput(index, {
490
+ key: Buffer.from('dp'),
491
+ value: Buffer.from(out.derivationPath, 'utf8')
492
+ });
493
+ }
494
+ });
495
+ tx = {
496
+ psbt: psbt.toHex()
497
+ };
498
+ return [2 /*return*/, tx];
499
+ }
500
+ });
501
+ });
502
+ };
503
+ BitcoinSegwitProtocol.prototype.signWithExtendedPrivateKey = function (extendedPrivateKey, transaction /* RawBitcoinSegwitTransaction */) {
504
+ return __awaiter(this, void 0, void 0, function () {
505
+ var rawBitcoinSegwitTx, bip32PK, decodedPSBT;
506
+ return __generator(this, function (_a) {
507
+ rawBitcoinSegwitTx = transaction;
508
+ bip32PK = bitcoinJS.bip32.fromBase58(extendedPrivateKey);
509
+ decodedPSBT = bitcoinJS.Psbt.fromHex(rawBitcoinSegwitTx.psbt);
510
+ decodedPSBT.data.inputs.forEach(function (input, index) {
511
+ var _a;
512
+ (_a = input.bip32Derivation) === null || _a === void 0 ? void 0 : _a.forEach(function (deriv) {
513
+ try {
514
+ // This uses the same logic to find child key as the "findWalletByFingerprintDerivationPathAndProtocolIdentifier" method in the Vault
515
+ var cutoffFrom = deriv.path.lastIndexOf("'") || deriv.path.lastIndexOf('h');
516
+ var childPath = deriv.path.substr(cutoffFrom + 2);
517
+ decodedPSBT.signInput(index, bip32PK.derivePath(childPath));
518
+ console.log("Signed input ".concat(index, " with path ").concat(deriv.path));
519
+ }
520
+ catch (e) {
521
+ console.log("Error signing input ".concat(index), e);
522
+ }
523
+ });
524
+ });
525
+ return [2 /*return*/, decodedPSBT.toHex()];
526
+ });
527
+ });
528
+ };
529
+ BitcoinSegwitProtocol.prototype.broadcastTransaction = function (rawTransaction) {
530
+ return __awaiter(this, void 0, void 0, function () {
531
+ var hexTransaction;
532
+ return __generator(this, function (_a) {
533
+ hexTransaction = bitcoinJS.Psbt.fromHex(rawTransaction).finalizeAllInputs().extractTransaction().toHex();
534
+ return [2 /*return*/, _super.prototype.broadcastTransaction.call(this, hexTransaction)];
535
+ });
536
+ });
537
+ };
538
+ return BitcoinSegwitProtocol;
539
+ }(BitcoinProtocol_1.BitcoinProtocol));
540
+ exports.BitcoinSegwitProtocol = BitcoinSegwitProtocol;
541
+ //# sourceMappingURL=BitcoinSegwitProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinSegwitProtocol.js","sourceRoot":"","sources":["../../../src/v0/protocol/BitcoinSegwitProtocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BitcoinProtocol } from './BitcoinProtocol';
2
+ export declare class BitcoinTestnetProtocol extends BitcoinProtocol {
3
+ name: string;
4
+ standardDerivationPath: string;
5
+ addressValidationPattern: string;
6
+ constructor();
7
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.BitcoinTestnetProtocol = void 0;
42
+ var bitcoinJS = __importStar(require("@airgap/coinlib-core/dependencies/src/bitgo-utxo-lib-5d91049fd7a988382df81c8260e244ee56d57aac/src/index"));
43
+ var ProtocolNetwork_1 = require("@airgap/coinlib-core/utils/ProtocolNetwork");
44
+ var BitcoinProtocol_1 = require("./BitcoinProtocol");
45
+ var BitcoinProtocolOptions_1 = require("./BitcoinProtocolOptions");
46
+ var BitcoinTestnetProtocol = /** @class */ (function (_super) {
47
+ __extends(BitcoinTestnetProtocol, _super);
48
+ function BitcoinTestnetProtocol() {
49
+ var _this = _super.call(this, new BitcoinProtocolOptions_1.BitcoinProtocolOptions(new BitcoinProtocolOptions_1.BitcoinProtocolNetwork('Testnet', ProtocolNetwork_1.NetworkType.TESTNET, '', new BitcoinProtocolOptions_1.BlockcypherBlockExplorer('https://live.blockcypher.com/btc-testnet'), new BitcoinProtocolOptions_1.BitcoinProtocolNetworkExtras('https://bitcoin.prod.gke.papers.tech', bitcoinJS.networks.testnet)), new BitcoinProtocolOptions_1.BitcoinProtocolConfig())) || this;
50
+ _this.name = 'Bitcoin Testnet';
51
+ _this.standardDerivationPath = "m/44'/1'/0'";
52
+ _this.addressValidationPattern = '^..[13][a-km-zA-HJ-NP-Z1-9]{25,34}$';
53
+ return _this;
54
+ }
55
+ return BitcoinTestnetProtocol;
56
+ }(BitcoinProtocol_1.BitcoinProtocol));
57
+ exports.BitcoinTestnetProtocol = BitcoinTestnetProtocol;
58
+ //# sourceMappingURL=BitcoinTestnetProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinTestnetProtocol.js","sourceRoot":"","sources":["../../../src/v0/protocol/BitcoinTestnetProtocol.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iJAAoI;AACpI,8EAAwE;AAExE,qDAAmD;AACnD,mEAMiC;AAEjC;IAA4C,0CAAe;IAMzD;QAAA,YACE,kBACE,IAAI,+CAAsB,CACxB,IAAI,+CAAsB,CACxB,SAAS,EACT,6BAAW,CAAC,OAAO,EACnB,EAAE,EACF,IAAI,iDAAwB,CAAC,0CAA0C,CAAC,EACxE,IAAI,qDAA4B,CAAC,sCAAsC,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrG,EACD,IAAI,8CAAqB,EAAE,CAC5B,CACF,SACF;QAlBM,UAAI,GAAG,iBAAiB,CAAA;QAExB,4BAAsB,GAAG,aAAa,CAAA;QACtC,8BAAwB,GAAG,qCAAqC,CAAA;;IAevE,CAAC;IACH,6BAAC;AAAD,CAAC,AApBD,CAA4C,iCAAe,GAoB1D;AApBY,wDAAsB"}