@yaswap/bitcoin 2.0.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/lib/chain/BitcoinBaseChainProvider.d.ts +11 -0
  3. package/dist/lib/chain/BitcoinBaseChainProvider.js +7 -0
  4. package/dist/lib/chain/BitcoinBaseChainProvider.js.map +1 -0
  5. package/dist/lib/chain/esplora/BitcoinEsploraApiProvider.d.ts +20 -0
  6. package/dist/lib/chain/esplora/BitcoinEsploraApiProvider.js +151 -0
  7. package/dist/lib/chain/esplora/BitcoinEsploraApiProvider.js.map +1 -0
  8. package/dist/lib/chain/esplora/BitcoinEsploraBaseProvider.d.ts +19 -0
  9. package/dist/lib/chain/esplora/BitcoinEsploraBaseProvider.js +96 -0
  10. package/dist/lib/chain/esplora/BitcoinEsploraBaseProvider.js.map +1 -0
  11. package/dist/lib/chain/esplora/BitcoinEsploraBatchBaseProvider.d.ts +12 -0
  12. package/dist/lib/chain/esplora/BitcoinEsploraBatchBaseProvider.js +48 -0
  13. package/dist/lib/chain/esplora/BitcoinEsploraBatchBaseProvider.js.map +1 -0
  14. package/dist/lib/chain/esplora/types.d.ts +93 -0
  15. package/dist/lib/chain/esplora/types.js +3 -0
  16. package/dist/lib/chain/esplora/types.js.map +1 -0
  17. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.d.ts +17 -0
  18. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.js +83 -0
  19. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcBaseProvider.js.map +1 -0
  20. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcProvider.d.ts +20 -0
  21. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcProvider.js +181 -0
  22. package/dist/lib/chain/jsonRpc/BitcoinJsonRpcProvider.js.map +1 -0
  23. package/dist/lib/chain/jsonRpc/types.d.ts +85 -0
  24. package/dist/lib/chain/jsonRpc/types.js +3 -0
  25. package/dist/lib/chain/jsonRpc/types.js.map +1 -0
  26. package/dist/lib/fee/BitcoinFeeApiProvider.d.ts +7 -0
  27. package/dist/lib/fee/BitcoinFeeApiProvider.js +40 -0
  28. package/dist/lib/fee/BitcoinFeeApiProvider.js.map +1 -0
  29. package/dist/lib/index.d.ts +16 -0
  30. package/dist/lib/index.js +57 -0
  31. package/dist/lib/index.js.map +1 -0
  32. package/dist/lib/networks.d.ts +7 -0
  33. package/dist/lib/networks.js +14 -0
  34. package/dist/lib/networks.js.map +1 -0
  35. package/dist/lib/swap/BitcoinSwapBaseProvider.d.ts +50 -0
  36. package/dist/lib/swap/BitcoinSwapBaseProvider.js +365 -0
  37. package/dist/lib/swap/BitcoinSwapBaseProvider.js.map +1 -0
  38. package/dist/lib/swap/BitcoinSwapEsploraProvider.d.ts +11 -0
  39. package/dist/lib/swap/BitcoinSwapEsploraProvider.js +50 -0
  40. package/dist/lib/swap/BitcoinSwapEsploraProvider.js.map +1 -0
  41. package/dist/lib/swap/BitcoinSwapRpcProvider.d.ts +10 -0
  42. package/dist/lib/swap/BitcoinSwapRpcProvider.js +28 -0
  43. package/dist/lib/swap/BitcoinSwapRpcProvider.js.map +1 -0
  44. package/dist/lib/swap/types.d.ts +14 -0
  45. package/dist/lib/swap/types.js +4 -0
  46. package/dist/lib/swap/types.js.map +1 -0
  47. package/dist/lib/types.d.ts +89 -0
  48. package/dist/lib/types.js +45 -0
  49. package/dist/lib/types.js.map +1 -0
  50. package/dist/lib/utils.d.ts +31 -0
  51. package/dist/lib/utils.js +214 -0
  52. package/dist/lib/utils.js.map +1 -0
  53. package/dist/lib/wallet/BitcoinBaseWallet.d.ts +67 -0
  54. package/dist/lib/wallet/BitcoinBaseWallet.js +408 -0
  55. package/dist/lib/wallet/BitcoinBaseWallet.js.map +1 -0
  56. package/dist/lib/wallet/BitcoinHDWallet.d.ts +42 -0
  57. package/dist/lib/wallet/BitcoinHDWallet.js +215 -0
  58. package/dist/lib/wallet/BitcoinHDWallet.js.map +1 -0
  59. package/dist/lib/wallet/BitcoinNodeWallet.d.ts +41 -0
  60. package/dist/lib/wallet/BitcoinNodeWallet.js +237 -0
  61. package/dist/lib/wallet/BitcoinNodeWallet.js.map +1 -0
  62. package/dist/lib/wallet/IBitcoinWallet.d.ts +10 -0
  63. package/dist/lib/wallet/IBitcoinWallet.js +3 -0
  64. package/dist/lib/wallet/IBitcoinWallet.js.map +1 -0
  65. package/package.json +36 -0
@@ -0,0 +1,215 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BitcoinHDWalletProvider = void 0;
13
+ const bip32_1 = require("bip32");
14
+ const bip39_1 = require("bip39");
15
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
16
+ const bitcoinjs_message_1 = require("bitcoinjs-message");
17
+ const types_1 = require("../types");
18
+ const BitcoinBaseWallet_1 = require("./BitcoinBaseWallet");
19
+ class BitcoinHDWalletProvider extends BitcoinBaseWallet_1.BitcoinBaseWalletProvider {
20
+ constructor(options, chainProvider) {
21
+ const { mnemonic, baseDerivationPath, addressType = types_1.AddressType.BECH32, network } = options;
22
+ super({ baseDerivationPath, addressType, network }, chainProvider);
23
+ if (!mnemonic) {
24
+ throw new Error('Mnemonic should not be empty');
25
+ }
26
+ this._mnemonic = mnemonic;
27
+ }
28
+ canUpdateFee() {
29
+ return true;
30
+ }
31
+ getSigner() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ return null;
34
+ });
35
+ }
36
+ getAddress() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const addresses = yield this.getAddresses();
39
+ return addresses[0];
40
+ });
41
+ }
42
+ getBalance(_assets) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ const addresses = yield this.getAddresses();
45
+ return yield this.chainProvider.getBalance(addresses, _assets);
46
+ });
47
+ }
48
+ signMessage(message, from) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const address = yield this.getWalletAddress(from);
51
+ const keyPair = yield this.keyPair(address.derivationPath);
52
+ const signature = yield (0, bitcoinjs_message_1.signAsync)(message, keyPair.privateKey, keyPair.compressed);
53
+ return signature.toString('hex');
54
+ });
55
+ }
56
+ exportPrivateKey() {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ return this._toWIF(this._baseDerivationPath);
59
+ });
60
+ }
61
+ getConnectedNetwork() {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ return this._network;
64
+ });
65
+ }
66
+ isWalletAvailable() {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ return true;
69
+ });
70
+ }
71
+ baseDerivationNode() {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ if (this._baseDerivationNode) {
74
+ return this._baseDerivationNode;
75
+ }
76
+ const baseNode = yield this.seedNode();
77
+ this._baseDerivationNode = baseNode.derivePath(this._baseDerivationPath);
78
+ return this._baseDerivationNode;
79
+ });
80
+ }
81
+ buildTransaction(targets, feePerByte, fixedInputs) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ const network = this._network;
84
+ const unusedAddress = yield this.getUnusedAddress(true);
85
+ const { inputs, change, fee } = yield this.getInputsForAmount(targets, feePerByte, fixedInputs);
86
+ if (change) {
87
+ targets.push({
88
+ address: unusedAddress.address,
89
+ value: change.value,
90
+ });
91
+ }
92
+ const psbt = new bitcoinjs_lib_1.Psbt({ network });
93
+ const needsWitness = [types_1.AddressType.BECH32, types_1.AddressType.P2SH_SEGWIT].includes(this._addressType);
94
+ for (let i = 0; i < inputs.length; i++) {
95
+ const wallet = yield this.getWalletAddress(inputs[i].address);
96
+ const keyPair = yield this.keyPair(wallet.derivationPath);
97
+ const paymentVariant = this.getPaymentVariantFromPublicKey(keyPair.publicKey);
98
+ const psbtInput = {
99
+ hash: inputs[i].txid,
100
+ index: inputs[i].vout,
101
+ sequence: 0,
102
+ };
103
+ if (needsWitness) {
104
+ psbtInput.witnessUtxo = {
105
+ script: paymentVariant.output,
106
+ value: inputs[i].value,
107
+ };
108
+ }
109
+ else {
110
+ const inputTxRaw = yield this.chainProvider.getProvider().getRawTransactionByHash(inputs[i].txid);
111
+ psbtInput.nonWitnessUtxo = Buffer.from(inputTxRaw, 'hex');
112
+ }
113
+ if (this._addressType === types_1.AddressType.P2SH_SEGWIT) {
114
+ psbtInput.redeemScript = paymentVariant.redeem.output;
115
+ }
116
+ psbt.addInput(psbtInput);
117
+ }
118
+ for (const output of targets) {
119
+ if (output.script) {
120
+ psbt.addOutput({
121
+ value: output.value,
122
+ script: output.script,
123
+ });
124
+ }
125
+ else {
126
+ psbt.addOutput({
127
+ value: output.value,
128
+ address: output.address,
129
+ });
130
+ }
131
+ }
132
+ for (let i = 0; i < inputs.length; i++) {
133
+ const wallet = yield this.getWalletAddress(inputs[i].address);
134
+ const keyPair = yield this.keyPair(wallet.derivationPath);
135
+ psbt.signInput(i, keyPair);
136
+ psbt.validateSignaturesOfInput(i);
137
+ }
138
+ psbt.finalizeAllInputs();
139
+ return { hex: psbt.extractTransaction().toHex(), fee };
140
+ });
141
+ }
142
+ buildSweepTransaction(externalChangeAddress, feePerByte) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ let _feePerByte = feePerByte || null; // TODO: fix me
145
+ if (!_feePerByte) {
146
+ _feePerByte = yield this.chainProvider.getProvider().getFeePerByte();
147
+ }
148
+ const { inputs, outputs, change } = yield this.getInputsForAmount([], _feePerByte, [], 100, true);
149
+ if (change) {
150
+ throw new Error('There should not be any change for sweeping transaction');
151
+ }
152
+ const _outputs = [{ address: externalChangeAddress, value: outputs[0].value }];
153
+ // TODO: fix the inherited legacy code
154
+ return this.buildTransaction(_outputs, feePerByte, inputs);
155
+ });
156
+ }
157
+ signPSBT(data, inputs) {
158
+ return __awaiter(this, void 0, void 0, function* () {
159
+ const psbt = bitcoinjs_lib_1.Psbt.fromBase64(data, { network: this._network });
160
+ for (const input of inputs) {
161
+ const keyPair = yield this.keyPair(input.derivationPath);
162
+ psbt.signInput(input.index, keyPair);
163
+ }
164
+ return psbt.toBase64();
165
+ });
166
+ }
167
+ signBatchP2SHTransaction(inputs, addresses, tx, lockTime, segwit) {
168
+ return __awaiter(this, void 0, void 0, function* () {
169
+ const keyPairs = [];
170
+ for (const address of addresses) {
171
+ const wallet = yield this.getWalletAddress(address);
172
+ const keyPair = yield this.keyPair(wallet.derivationPath);
173
+ keyPairs.push(keyPair);
174
+ }
175
+ const sigs = [];
176
+ for (let i = 0; i < inputs.length; i++) {
177
+ const index = inputs[i].txInputIndex ? inputs[i].txInputIndex : inputs[i].index;
178
+ let sigHash;
179
+ if (segwit) {
180
+ sigHash = tx.hashForWitnessV0(index, inputs[i].outputScript, inputs[i].vout.vSat, bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
181
+ }
182
+ else {
183
+ sigHash = tx.hashForSignature(index, inputs[i].outputScript, bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
184
+ }
185
+ const sig = bitcoinjs_lib_1.script.signature.encode(keyPairs[i].sign(sigHash), bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
186
+ sigs.push(sig);
187
+ }
188
+ return sigs;
189
+ });
190
+ }
191
+ keyPair(derivationPath) {
192
+ return __awaiter(this, void 0, void 0, function* () {
193
+ const wif = yield this._toWIF(derivationPath);
194
+ return bitcoinjs_lib_1.ECPair.fromWIF(wif, this._network);
195
+ });
196
+ }
197
+ _toWIF(derivationPath) {
198
+ return __awaiter(this, void 0, void 0, function* () {
199
+ const node = yield this.seedNode();
200
+ return node.derivePath(derivationPath).toWIF();
201
+ });
202
+ }
203
+ seedNode() {
204
+ return __awaiter(this, void 0, void 0, function* () {
205
+ if (this._seedNode) {
206
+ return this._seedNode;
207
+ }
208
+ const seed = yield (0, bip39_1.mnemonicToSeed)(this._mnemonic);
209
+ this._seedNode = (0, bip32_1.fromSeed)(seed, this._network);
210
+ return this._seedNode;
211
+ });
212
+ }
213
+ }
214
+ exports.BitcoinHDWalletProvider = BitcoinHDWalletProvider;
215
+ //# sourceMappingURL=BitcoinHDWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinHDWallet.js","sourceRoot":"","sources":["../../../lib/wallet/BitcoinHDWallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /// <reference types="node" />
2
+ import { Chain, Wallet } from '@yaswap/client';
3
+ import { Address, AddressType, Asset, BigNumber, FeeType, Network, Transaction, TransactionRequest } from '@yaswap/types';
4
+ import { BitcoinBaseChainProvider } from '../chain/BitcoinBaseChainProvider';
5
+ import { BitcoinNodeWalletOptions, PsbtInputTarget, Transaction as BitcoinTransaction } from '../types';
6
+ import { IBitcoinWallet } from './IBitcoinWallet';
7
+ export declare class BitcoinNodeWalletProvider extends Wallet<any, any> implements IBitcoinWallet<BitcoinBaseChainProvider> {
8
+ private _addressType;
9
+ private _network;
10
+ private _addressInfoCache;
11
+ constructor(options?: BitcoinNodeWalletOptions, chainProvider?: Chain<BitcoinBaseChainProvider>);
12
+ getUnusedAddress(): Promise<Address>;
13
+ getUsedAddresses(): Promise<Address[]>;
14
+ getAddresses(): Promise<Address[]>;
15
+ sendTransaction(txRequest: TransactionRequest): Promise<Transaction<BitcoinTransaction>>;
16
+ sendBatchTransaction(transactions: TransactionRequest[]): Promise<Transaction<BitcoinTransaction>[]>;
17
+ sendSweepTransaction(_address: AddressType, _asset: Asset, _fee?: FeeType): Promise<Transaction<any>>;
18
+ updateTransactionFee(tx: string | Transaction<any>, newFee: number): Promise<Transaction<any>>;
19
+ getConnectedNetwork(): Promise<Network>;
20
+ getSigner(): Promise<null>;
21
+ getAddress(): Promise<AddressType>;
22
+ signMessage(message: string, from: string): Promise<string>;
23
+ getBalance(assets: Asset[]): Promise<BigNumber[]>;
24
+ exportPrivateKey(): Promise<string>;
25
+ isWalletAvailable(): Promise<boolean>;
26
+ canUpdateFee(): boolean;
27
+ signPSBT(data: string, inputs: PsbtInputTarget[]): Promise<string>;
28
+ signBatchP2SHTransaction(inputs: [{
29
+ inputTxHex: string;
30
+ index: number;
31
+ vout: any;
32
+ outputScript: Buffer;
33
+ }], addresses: string, tx: any, locktime: number, segwit?: boolean): Promise<Buffer[]>;
34
+ getWalletAddress(address: string): Promise<Address>;
35
+ protected onChainProviderUpdate(chainProvider: Chain<BitcoinBaseChainProvider>): void;
36
+ private dumpPrivKey;
37
+ private getNewAddress;
38
+ private getAddressInfo;
39
+ private withTxFee;
40
+ private _sendTransaction;
41
+ }
@@ -0,0 +1,237 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BitcoinNodeWalletProvider = void 0;
13
+ const client_1 = require("@yaswap/client");
14
+ const errors_1 = require("@yaswap/errors");
15
+ const types_1 = require("@yaswap/types");
16
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
17
+ const lodash_1 = require("lodash");
18
+ const networks_1 = require("../networks");
19
+ const types_2 = require("../types");
20
+ const utils_1 = require("../utils");
21
+ const BIP70_CHAIN_TO_NETWORK = {
22
+ main: networks_1.BitcoinNetworks.bitcoin,
23
+ test: networks_1.BitcoinNetworks.bitcoin_testnet,
24
+ regtest: networks_1.BitcoinNetworks.bitcoin_regtest,
25
+ };
26
+ class BitcoinNodeWalletProvider extends client_1.Wallet {
27
+ constructor(options, chainProvider) {
28
+ super(chainProvider);
29
+ this._addressType = (options === null || options === void 0 ? void 0 : options.addressType) || types_2.AddressType.BECH32;
30
+ this._network = chainProvider ? chainProvider.getNetwork() : options === null || options === void 0 ? void 0 : options.network;
31
+ this._addressInfoCache = {};
32
+ }
33
+ getUnusedAddress() {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ return this.getNewAddress(this._addressType);
36
+ });
37
+ }
38
+ getUsedAddresses() {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ const usedAddresses = yield this.chainProvider.sendRpcRequest('listaddressgroupings', []);
41
+ const emptyAddresses = yield this.chainProvider.sendRpcRequest('listreceivedbyaddress', [0, true, false]);
42
+ const addrs = (0, lodash_1.uniq)([...(0, lodash_1.flatten)(usedAddresses).map((addr) => addr[0]), ...emptyAddresses.map((a) => a.address)]);
43
+ const addressObjects = yield Promise.all(addrs.map((address) => this.getAddressInfo(address)));
44
+ return addressObjects;
45
+ });
46
+ }
47
+ getAddresses() {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ return this.getUsedAddresses();
50
+ });
51
+ }
52
+ sendTransaction(txRequest) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ return txRequest.fee
55
+ ? this.withTxFee(() => __awaiter(this, void 0, void 0, function* () { return this._sendTransaction(txRequest); }), txRequest.fee)
56
+ : this._sendTransaction(txRequest);
57
+ });
58
+ }
59
+ sendBatchTransaction(transactions) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const outputs = {};
62
+ for (const tx of transactions) {
63
+ outputs[tx.to.toString()] = new types_1.BigNumber(tx.value).dividedBy(1e8).toNumber();
64
+ }
65
+ const rawTxOutputs = yield this.chainProvider.sendRpcRequest('createrawtransaction', [[], outputs]);
66
+ const rawTxFunded = yield this.chainProvider.sendRpcRequest('fundrawtransaction', [rawTxOutputs]);
67
+ const rawTxSigned = yield this.chainProvider.sendRpcRequest('signrawtransactionwithwallet', [rawTxFunded.hex]);
68
+ const fee = new types_1.BigNumber(rawTxFunded.fee).times(1e8).toNumber();
69
+ yield this.chainProvider.sendRawTransaction(rawTxSigned.hex);
70
+ return [(0, utils_1.normalizeTransactionObject)((0, utils_1.decodeRawTransaction)(rawTxSigned.hex, this._network), fee)];
71
+ });
72
+ }
73
+ sendSweepTransaction(_address, _asset, _fee) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ throw new errors_1.UnimplementedMethodError('Method not implemented.');
76
+ });
77
+ }
78
+ updateTransactionFee(tx, newFee) {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ const txHash = (0, lodash_1.isString)(tx) ? tx : tx.hash;
81
+ return this.withTxFee(() => __awaiter(this, void 0, void 0, function* () {
82
+ const result = yield this.chainProvider.sendRpcRequest('bumpfee', [txHash]);
83
+ const transaction = yield this.chainProvider.sendRpcRequest('gettransaction', [result.txid, true]);
84
+ const fee = new types_1.BigNumber(transaction.fee).abs().times(1e8).toNumber();
85
+ return (0, utils_1.normalizeTransactionObject)((0, utils_1.decodeRawTransaction)(transaction.hex, this._network), fee);
86
+ }), newFee);
87
+ });
88
+ }
89
+ getConnectedNetwork() {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const blockchainInfo = yield this.chainProvider.sendRpcRequest('getblockchaininfo', []);
92
+ const chain = blockchainInfo.chain;
93
+ return BIP70_CHAIN_TO_NETWORK[chain];
94
+ });
95
+ }
96
+ getSigner() {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ return null;
99
+ });
100
+ }
101
+ getAddress() {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ const addresses = yield this.getAddresses();
104
+ return addresses[0];
105
+ });
106
+ }
107
+ signMessage(message, from) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ return this.chainProvider
110
+ .sendRpcRequest('signmessage', [from.toString(), message])
111
+ .then((result) => Buffer.from(result, 'base64').toString('hex'));
112
+ });
113
+ }
114
+ getBalance(assets) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ const addresses = yield this.getAddresses();
117
+ return this.chainProvider.getBalance(addresses, assets);
118
+ });
119
+ }
120
+ exportPrivateKey() {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const address = yield this.getAddress();
123
+ return yield this.dumpPrivKey(address.toString());
124
+ });
125
+ }
126
+ isWalletAvailable() {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ try {
129
+ yield this.chainProvider.sendRpcRequest('getwalletinfo', []);
130
+ return true;
131
+ }
132
+ catch (e) {
133
+ return false;
134
+ }
135
+ });
136
+ }
137
+ canUpdateFee() {
138
+ return true;
139
+ }
140
+ signPSBT(data, inputs) {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ const psbt = bitcoinjs_lib_1.Psbt.fromBase64(data, { network: this._network });
143
+ for (const input of inputs) {
144
+ const usedAddresses = yield this.getUsedAddresses();
145
+ const address = usedAddresses.find((address) => address.derivationPath === input.derivationPath);
146
+ const wif = yield this.dumpPrivKey(address.address);
147
+ const keyPair = bitcoinjs_lib_1.ECPair.fromWIF(wif, this._network);
148
+ psbt.signInput(input.index, keyPair);
149
+ }
150
+ return psbt.toBase64();
151
+ });
152
+ }
153
+ signBatchP2SHTransaction(inputs, addresses, tx, locktime, segwit = false) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const wallets = [];
156
+ for (const address of addresses) {
157
+ const wif = yield this.dumpPrivKey(address);
158
+ const wallet = bitcoinjs_lib_1.ECPair.fromWIF(wif, this._network);
159
+ wallets.push(wallet);
160
+ }
161
+ const sigs = [];
162
+ for (let i = 0; i < inputs.length; i++) {
163
+ let sigHash;
164
+ if (segwit) {
165
+ sigHash = tx.hashForWitnessV0(inputs[i].index, inputs[i].outputScript, inputs[i].vout.vSat, bitcoinjs_lib_1.Transaction.SIGHASH_ALL); // AMOUNT NEEDS TO BE PREVOUT AMOUNT
166
+ }
167
+ else {
168
+ sigHash = tx.hashForSignature(inputs[i].index, inputs[i].outputScript, bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
169
+ }
170
+ const sig = bitcoinjs_lib_1.script.signature.encode(wallets[i].sign(sigHash), bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
171
+ sigs.push(sig);
172
+ }
173
+ return sigs;
174
+ });
175
+ }
176
+ getWalletAddress(address) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ return this.getAddressInfo(address);
179
+ });
180
+ }
181
+ onChainProviderUpdate(chainProvider) {
182
+ this._network = chainProvider.getNetwork();
183
+ }
184
+ dumpPrivKey(address) {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ return this.chainProvider.sendRpcRequest('dumpprivkey', [address]);
187
+ });
188
+ }
189
+ getNewAddress(addressType, label = '') {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ const params = addressType ? [label, addressType] : [label];
192
+ const newAddress = yield this.chainProvider.sendRpcRequest('getnewaddress', params);
193
+ if (!newAddress) {
194
+ return null;
195
+ }
196
+ return this.getAddressInfo(newAddress);
197
+ });
198
+ }
199
+ getAddressInfo(address) {
200
+ return __awaiter(this, void 0, void 0, function* () {
201
+ if (address in this._addressInfoCache) {
202
+ return this._addressInfoCache[address];
203
+ }
204
+ const addressInfo = yield this.chainProvider.sendRpcRequest('getaddressinfo', [address]);
205
+ let publicKey, derivationPath;
206
+ if (!addressInfo.iswatchonly) {
207
+ publicKey = addressInfo.pubkey;
208
+ derivationPath = addressInfo.hdkeypath;
209
+ }
210
+ const addressObject = new types_1.Address({ address, publicKey, derivationPath });
211
+ this._addressInfoCache[address] = addressObject;
212
+ return addressObject;
213
+ });
214
+ }
215
+ withTxFee(func, feePerByte) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const feePerKB = new types_1.BigNumber(feePerByte).div(1e8).times(1000).toNumber();
218
+ const originalTxFee = (yield this.chainProvider.sendRpcRequest('getwalletinfo', [])).paytxfee;
219
+ yield this.chainProvider.sendRpcRequest('settxfee', [feePerKB]);
220
+ const result = yield func();
221
+ yield this.chainProvider.sendRpcRequest('settxfee', [originalTxFee]);
222
+ return result;
223
+ });
224
+ }
225
+ _sendTransaction(txRequest) {
226
+ var _a;
227
+ return __awaiter(this, void 0, void 0, function* () {
228
+ const value = new types_1.BigNumber(txRequest.value.toString()).dividedBy(1e8).toNumber();
229
+ const hash = yield this.chainProvider.sendRpcRequest('sendtoaddress', [(_a = txRequest.to) === null || _a === void 0 ? void 0 : _a.toString(), value, '', '', false, true]);
230
+ const transaction = yield this.chainProvider.sendRpcRequest('gettransaction', [hash, true]);
231
+ const fee = new types_1.BigNumber(transaction.fee).abs().times(1e8).toNumber();
232
+ return (0, utils_1.normalizeTransactionObject)((0, utils_1.decodeRawTransaction)(transaction.hex, this._network), fee);
233
+ });
234
+ }
235
+ }
236
+ exports.BitcoinNodeWalletProvider = BitcoinNodeWalletProvider;
237
+ //# sourceMappingURL=BitcoinNodeWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinNodeWallet.js","sourceRoot":"","sources":["../../../lib/wallet/BitcoinNodeWallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Chain, Wallet } from '@yaswap/client';
2
+ import { Address, FeeType, Transaction, TransactionRequest } from '@yaswap/types';
3
+ import { PsbtInputTarget } from '../types';
4
+ export interface IBitcoinWallet<T, S = any> extends Wallet<T, S> {
5
+ getChainProvider(): Chain<T>;
6
+ sendTransaction(txRequest: TransactionRequest): Promise<Transaction>;
7
+ updateTransactionFee(tx: string | Transaction, newFee: FeeType): Promise<Transaction>;
8
+ getWalletAddress(address: string): Promise<Address>;
9
+ signPSBT(data: string, inputs: PsbtInputTarget[]): Promise<string>;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBitcoinWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBitcoinWallet.js","sourceRoot":"","sources":["../../../lib/wallet/IBitcoinWallet.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@yaswap/bitcoin",
3
+ "version": "2.0.0",
4
+ "description": "",
5
+ "author": "yaswap",
6
+ "homepage": "",
7
+ "license": "ISC",
8
+ "main": "./dist/lib/index.js",
9
+ "types": "./dist/lib/index.d.ts",
10
+ "files": [
11
+ "dist/**"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "clean": "rm -rf node_modules .turbo dist"
16
+ },
17
+ "dependencies": {
18
+ "@types/bip32": "^2.0.0",
19
+ "@types/bip39": "^3.0.0",
20
+ "@types/bitcoinjs-lib": "^5.0.0",
21
+ "@types/lodash": "^4.14.178",
22
+ "@types/memoizee": "^0.4.7",
23
+ "@yaswap/client": "2.0.0",
24
+ "@yaswap/errors": "2.0.0",
25
+ "@yaswap/types": "2.0.0",
26
+ "@yaswap/utils": "2.0.0",
27
+ "bip174": "^2.0.1",
28
+ "bip32": "2.0.6",
29
+ "bip39": "^3.0.4",
30
+ "bitcoinjs-lib": "5.2.0",
31
+ "bitcoinjs-message": "2.2.0",
32
+ "coinselect": "^3.1.12",
33
+ "lodash": "4.17.21",
34
+ "memoizee": "^0.4.15"
35
+ }
36
+ }