@teleportdao/bitcoin 1.4.4 → 1.4.7

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 (58) hide show
  1. package/dist/bitcoin-base.d.ts +62 -50
  2. package/dist/bitcoin-base.d.ts.map +1 -1
  3. package/dist/bitcoin-base.js +55 -28
  4. package/dist/bitcoin-base.js.map +1 -1
  5. package/dist/bitcoin-interface-utils.d.ts +12 -10
  6. package/dist/bitcoin-interface-utils.d.ts.map +1 -1
  7. package/dist/bitcoin-interface-utils.js +16 -10
  8. package/dist/bitcoin-interface-utils.js.map +1 -1
  9. package/dist/bitcoin-interface.d.ts +206 -50
  10. package/dist/bitcoin-interface.d.ts.map +1 -1
  11. package/dist/bitcoin-interface.js +42 -27
  12. package/dist/bitcoin-interface.js.map +1 -1
  13. package/dist/bitcoin-utils.d.ts +111 -41
  14. package/dist/bitcoin-utils.d.ts.map +1 -1
  15. package/dist/bitcoin-utils.js +215 -159
  16. package/dist/bitcoin-utils.js.map +1 -1
  17. package/dist/bundle.js +13 -4
  18. package/dist/index.d.ts +5 -6
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +31 -13
  21. package/dist/index.js.map +1 -1
  22. package/dist/teleport-dao-payments.d.ts +60 -92
  23. package/dist/teleport-dao-payments.d.ts.map +1 -1
  24. package/dist/teleport-dao-payments.js +12 -1
  25. package/dist/teleport-dao-payments.js.map +1 -1
  26. package/dist/transaction-builder/bitcoin-transaction-builder.d.ts +8 -4
  27. package/dist/transaction-builder/bitcoin-transaction-builder.d.ts.map +1 -1
  28. package/dist/transaction-builder/bitcoin-transaction-builder.js +3 -3
  29. package/dist/transaction-builder/bitcoin-transaction-builder.js.map +1 -1
  30. package/dist/transaction-builder/transaction-builder.d.ts +63 -13
  31. package/dist/transaction-builder/transaction-builder.d.ts.map +1 -1
  32. package/dist/transaction-builder/transaction-builder.js +72 -19
  33. package/dist/transaction-builder/transaction-builder.js.map +1 -1
  34. package/dist/utils/networks.d.ts +5 -35
  35. package/dist/utils/networks.d.ts.map +1 -1
  36. package/dist/utils/networks.js +26 -2
  37. package/dist/utils/networks.js.map +1 -1
  38. package/dist/utils/tools.d.ts +15 -9
  39. package/dist/utils/tools.d.ts.map +1 -1
  40. package/dist/utils/tools.js +14 -11
  41. package/dist/utils/tools.js.map +1 -1
  42. package/package.json +6 -6
  43. package/src/{bitcoin-base.js → bitcoin-base.ts} +97 -69
  44. package/src/{bitcoin-interface-utils.js → bitcoin-interface-utils.ts} +59 -53
  45. package/src/{bitcoin-interface.js → bitcoin-interface.ts} +115 -45
  46. package/src/{bitcoin-utils.js → bitcoin-utils.ts} +337 -216
  47. package/src/index.ts +5 -8
  48. package/src/{teleport-dao-payments.js → teleport-dao-payments.ts} +67 -6
  49. package/src/transaction-builder/bitcoin-transaction-builder.ts +8 -4
  50. package/src/transaction-builder/transaction-builder.ts +102 -25
  51. package/src/utils/{networks.js → networks.ts} +33 -31
  52. package/src/utils/{tools.js → tools.ts} +80 -72
  53. package/tsconfig.json +10 -9
  54. package/webpack.config.js +16 -0
  55. package/dist/transaction-builder/transaction-builder-common.d.ts +0 -57
  56. package/dist/transaction-builder/transaction-builder-common.d.ts.map +0 -1
  57. package/dist/transaction-builder/transaction-builder-common.js +0 -183
  58. package/dist/transaction-builder/transaction-builder-common.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ const path = require("path")
2
+ // const webpack = require("webpack")
3
+
4
+ module.exports = {
5
+ mode: "production",
6
+ entry: "./dist/index.js",
7
+ output: {
8
+ filename: "bundle.js",
9
+ path: path.resolve(__dirname, "dist"),
10
+ libraryTarget: "umd", // Module type
11
+ globalObject: "this", // Fix for universal module definition
12
+ },
13
+ performance: {
14
+ hints: false,
15
+ },
16
+ }
@@ -1,57 +0,0 @@
1
- export = BaseBitcoinLikeTransaction;
2
- declare class BaseBitcoinLikeTransaction {
3
- static helperHandleInputsAndOutputs({ targets, extendedUtxo, feeRate, changeAddress, selectType, }: {
4
- targets: any;
5
- extendedUtxo: any;
6
- feeRate: any;
7
- changeAddress: any;
8
- selectType?: string | undefined;
9
- }): {
10
- inputs: any;
11
- fee: any;
12
- outputs: any;
13
- change: {
14
- address: any;
15
- value: any;
16
- } | undefined;
17
- };
18
- constructor({ network, testnet, feeMin, dustLimit, maximumNumberOfOutputsInTransaction, }: {
19
- network: any;
20
- testnet: any;
21
- feeMin?: number | undefined;
22
- dustLimit: any;
23
- maximumNumberOfOutputsInTransaction?: number | undefined;
24
- });
25
- testnet: any;
26
- network: any;
27
- maximumNumberOfOutputsInTransaction: number;
28
- feeMin: number;
29
- dustLimit: any;
30
- _getUtxo(userAddress: any): Promise<void>;
31
- _getTransactionHex(transactionId: any): Promise<void>;
32
- convertBaseInputsToInputs(baseInputs: any): Promise<void>;
33
- createUnsignedTransaction(baseInputs: any): Promise<void>;
34
- createAddressObject({ addressType, publicKey }: {
35
- addressType: any;
36
- publicKey: any;
37
- }): bitcoin.payments.Payment;
38
- validateAddress(address: any): boolean;
39
- getExtendedUtxo(signerInfo: any): Promise<any>;
40
- convertUtxoToInput({ extendedUtxo, targets, changeAddress, feeRate, selectType }: any): Promise<{
41
- inputs: void;
42
- outputs: any;
43
- change: {
44
- address: any;
45
- value: any;
46
- } | undefined;
47
- fee: any;
48
- feeRate: any;
49
- }>;
50
- processUnsignedTransaction({ extendedUtxo, targets, changeAddress, fullAmount, feeRate, selfTransaction, selectType, }: any): Promise<void>;
51
- getOpReturnTarget(dataHex: any): {
52
- script: Buffer | undefined;
53
- value: number;
54
- };
55
- }
56
- import bitcoin = require("bitcoinjs-lib");
57
- //# sourceMappingURL=transaction-builder-common.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction-builder-common.d.ts","sourceRoot":"","sources":["../../src/transaction-builder/transaction-builder-common.js"],"names":[],"mappings":";AA2BA;IAqEE;;;;;;;;;;;;;;MAgDC;IAnHD;;;;;;OAYC;IALC,aAAsB;IACtB,aAAsB;IACtB,4CAA8E;IAC9E,eAAoB;IACpB,eAAuE;IAIzE,0CAIC;IAGD,sDAIC;IAGD,0DAIC;IAGD,0DAIC;IAGD;;;iCAEC;IAED,uCAkBC;IAoDD,+CAUC;IAOD;;;;;;;;;OAuBC;IAOD,4IA2BC;IAED;;;MAUC;CACF"}
@@ -1,183 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- const bitcoin = require("bitcoinjs-lib");
12
- const coinselect = require("coinselect");
13
- const coinselectSplit = require("coinselect/split");
14
- const coinselectAccumulative = require("coinselect/accumulative");
15
- const { createAddressObjectByPublicKey } = require("../bitcoin-utils");
16
- const TX_EMPTY_SIZE = 4 + 1 + 1 + 4;
17
- const TX_INPUT_BASE = 32 + 4 + 1 + 4;
18
- const TX_INPUT_P2PKH = 107;
19
- const TX_INPUT_P2SH_P2PKH = 50;
20
- const TX_INPUT_P2WPKH = 47;
21
- const TX_OUTPUT_BASE = 8 + 1;
22
- const TX_OUTPUT_P2PKH = 25;
23
- const componentBytes = {
24
- bytePerInput: {
25
- p2pkh: TX_INPUT_BASE + TX_INPUT_P2PKH,
26
- p2wpkh: TX_INPUT_BASE + TX_INPUT_P2WPKH,
27
- p2shp2wpkh: TX_INPUT_BASE + TX_INPUT_P2SH_P2PKH,
28
- },
29
- baseTxBytes: TX_EMPTY_SIZE,
30
- bytePerOutput: TX_OUTPUT_BASE + TX_OUTPUT_P2PKH,
31
- };
32
- class BaseBitcoinLikeTransaction {
33
- constructor({ network, testnet, feeMin = 0, dustLimit, maximumNumberOfOutputsInTransaction = 50, }) {
34
- this.testnet = testnet;
35
- this.network = network;
36
- this.maximumNumberOfOutputsInTransaction = maximumNumberOfOutputsInTransaction;
37
- this.feeMin = feeMin;
38
- this.dustLimit = dustLimit || 1 * 2 * componentBytes.bytePerInput.p2pkh;
39
- }
40
- _getUtxo(userAddress) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- throw new Error("Do not call abstract method directly");
43
- });
44
- }
45
- _getTransactionHex(transactionId) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- throw new Error("Do not call abstract method directly");
48
- });
49
- }
50
- convertBaseInputsToInputs(baseInputs) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- throw new Error("Do not call abstract method directly");
53
- });
54
- }
55
- createUnsignedTransaction(baseInputs) {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- throw new Error("Do not call abstract method directly");
58
- });
59
- }
60
- createAddressObject({ addressType, publicKey }) {
61
- return createAddressObjectByPublicKey({ addressType, publicKey }, this.network);
62
- }
63
- validateAddress(address) {
64
- try {
65
- let isValid = false;
66
- let network = this.network;
67
- let isAddressSegwit = address.startsWith(network.bech32);
68
- if (isAddressSegwit) {
69
- bitcoin.address.fromBech32(address);
70
- isValid = true;
71
- }
72
- else {
73
- let base58Data = bitcoin.address.fromBase58Check(address);
74
- isValid =
75
- base58Data.version === Number(network.scriptHash) ||
76
- base58Data.version === Number(network.pubKeyHash);
77
- }
78
- return isValid;
79
- }
80
- catch (error) {
81
- return false;
82
- }
83
- }
84
- static helperHandleInputsAndOutputs({ targets, extendedUtxo, feeRate, changeAddress, selectType = "normal", }) {
85
- let selectResponse;
86
- switch (selectType) {
87
- case "normal":
88
- selectResponse = coinselect(extendedUtxo, targets, Math.round(feeRate));
89
- break;
90
- case "accumulative":
91
- selectResponse = coinselectAccumulative(extendedUtxo, targets, Math.round(feeRate));
92
- break;
93
- case "full":
94
- selectResponse = coinselectSplit(extendedUtxo, [{ address: targets[0].address }], Math.round(feeRate));
95
- break;
96
- default:
97
- break;
98
- }
99
- let { inputs, outputs, fee } = selectResponse;
100
- if (!inputs || !outputs) {
101
- throw new Error("not enough balance");
102
- }
103
- let changeIndex = outputs.findIndex((x) => !x.address && !x.script && x.value > 0);
104
- let change;
105
- if (changeIndex >= 0) {
106
- change = {
107
- address: changeAddress,
108
- value: outputs[changeIndex].value,
109
- };
110
- outputs.splice(changeIndex, 1);
111
- }
112
- return {
113
- inputs,
114
- fee,
115
- outputs,
116
- change,
117
- };
118
- }
119
- getExtendedUtxo(signerInfo) {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- let utxo = yield this._getUtxo(signerInfo.address);
122
- const extendedUtxo = utxo.map((input) => (Object.assign(Object.assign({}, input), { signerInfo })));
123
- if (!extendedUtxo || extendedUtxo.length === 0) {
124
- throw new Error("no utxo found");
125
- }
126
- return extendedUtxo;
127
- });
128
- }
129
- convertUtxoToInput({ extendedUtxo, targets, changeAddress, feeRate, selectType }) {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- let { inputs: filteredInputs, outputs, change, fee, } = BaseBitcoinLikeTransaction.helperHandleInputsAndOutputs({
132
- targets,
133
- extendedUtxo,
134
- feeRate,
135
- changeAddress,
136
- selectType,
137
- });
138
- let inputs = yield this.convertBaseInputsToInputs(filteredInputs);
139
- return {
140
- inputs,
141
- outputs,
142
- change,
143
- fee,
144
- feeRate,
145
- };
146
- });
147
- }
148
- processUnsignedTransaction({ extendedUtxo, targets = [], changeAddress = undefined, fullAmount = false, feeRate, selfTransaction = false, selectType = "normal", }) {
149
- return __awaiter(this, void 0, void 0, function* () {
150
- if (!selfTransaction && targets.length === 0)
151
- throw new Error("no target");
152
- const { inputs, outputs, change, fee } = yield this.convertUtxoToInput({
153
- extendedUtxo,
154
- targets,
155
- changeAddress,
156
- feeRate,
157
- selectType: fullAmount ? "full" : selectType,
158
- });
159
- let unsignedTransaction = yield this.createUnsignedTransaction({
160
- inputs,
161
- outputs,
162
- change,
163
- fee,
164
- feeRate,
165
- });
166
- return unsignedTransaction;
167
- });
168
- }
169
- getOpReturnTarget(dataHex) {
170
- if (!dataHex.length > 0)
171
- throw new Error("invalid data in hex");
172
- const embed = bitcoin.payments.embed({
173
- data: [Buffer.from(dataHex, "hex")],
174
- network: this.network,
175
- });
176
- return {
177
- script: embed.output,
178
- value: 0,
179
- };
180
- }
181
- }
182
- module.exports = BaseBitcoinLikeTransaction;
183
- //# sourceMappingURL=transaction-builder-common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction-builder-common.js","sourceRoot":"","sources":["../../src/transaction-builder/transaction-builder-common.js"],"names":[],"mappings":"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"}