@yaswap/bitcoin 2.6.6 → 2.6.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.
- package/CHANGELOG.md +6 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +3 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/types.d.ts +3 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/wallet/BitcoinSingleWallet.d.ts +61 -0
- package/dist/lib/wallet/BitcoinSingleWallet.js +410 -0
- package/dist/lib/wallet/BitcoinSingleWallet.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/lib/index.d.ts
CHANGED
|
@@ -14,3 +14,4 @@ export * as BitcoinUtils from './utils';
|
|
|
14
14
|
export { BitcoinBaseWalletProvider } from './wallet/BitcoinBaseWallet';
|
|
15
15
|
export { BitcoinHDWalletProvider } from './wallet/BitcoinHDWallet';
|
|
16
16
|
export { BitcoinNodeWalletProvider } from './wallet/BitcoinNodeWallet';
|
|
17
|
+
export { BitcoinSingleWallet } from './wallet/BitcoinSingleWallet';
|
package/dist/lib/index.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.BitcoinNodeWalletProvider = exports.BitcoinHDWalletProvider = exports.BitcoinBaseWalletProvider = exports.BitcoinUtils = exports.BitcoinTypes = exports.BitcoinSwapRpcProvider = exports.BitcoinSwapEsploraProvider = exports.BitcoinSwapBaseProvider = exports.BitcoinNetworks = exports.BitcoinFeeApiProvider = exports.BitcoinJsonRpcProvider = exports.BitcoinJsonRpcBaseProvider = exports.BitcoinEsploraBatchBaseProvider = exports.BitcoinEsploraBaseProvider = exports.BitcoinEsploraApiProvider = exports.BitcoinBaseChainProvider = void 0;
|
|
26
|
+
exports.BitcoinSingleWallet = exports.BitcoinNodeWalletProvider = exports.BitcoinHDWalletProvider = exports.BitcoinBaseWalletProvider = exports.BitcoinUtils = exports.BitcoinTypes = exports.BitcoinSwapRpcProvider = exports.BitcoinSwapEsploraProvider = exports.BitcoinSwapBaseProvider = exports.BitcoinNetworks = exports.BitcoinFeeApiProvider = exports.BitcoinJsonRpcProvider = exports.BitcoinJsonRpcBaseProvider = exports.BitcoinEsploraBatchBaseProvider = exports.BitcoinEsploraBaseProvider = exports.BitcoinEsploraApiProvider = exports.BitcoinBaseChainProvider = void 0;
|
|
27
27
|
var BitcoinBaseChainProvider_1 = require("./chain/BitcoinBaseChainProvider");
|
|
28
28
|
Object.defineProperty(exports, "BitcoinBaseChainProvider", { enumerable: true, get: function () { return BitcoinBaseChainProvider_1.BitcoinBaseChainProvider; } });
|
|
29
29
|
var BitcoinEsploraApiProvider_1 = require("./chain/esplora/BitcoinEsploraApiProvider");
|
|
@@ -54,4 +54,6 @@ var BitcoinHDWallet_1 = require("./wallet/BitcoinHDWallet");
|
|
|
54
54
|
Object.defineProperty(exports, "BitcoinHDWalletProvider", { enumerable: true, get: function () { return BitcoinHDWallet_1.BitcoinHDWalletProvider; } });
|
|
55
55
|
var BitcoinNodeWallet_1 = require("./wallet/BitcoinNodeWallet");
|
|
56
56
|
Object.defineProperty(exports, "BitcoinNodeWalletProvider", { enumerable: true, get: function () { return BitcoinNodeWallet_1.BitcoinNodeWalletProvider; } });
|
|
57
|
+
var BitcoinSingleWallet_1 = require("./wallet/BitcoinSingleWallet");
|
|
58
|
+
Object.defineProperty(exports, "BitcoinSingleWallet", { enumerable: true, get: function () { return BitcoinSingleWallet_1.BitcoinSingleWallet; } });
|
|
57
59
|
//# sourceMappingURL=index.js.map
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAA4E;AAAnE,oIAAA,wBAAwB,OAAA;AACjC,uFAAsF;AAA7E,sIAAA,yBAAyB,OAAA;AAClC,yFAAwF;AAA/E,wIAAA,0BAA0B,OAAA;AACnC,mGAAkG;AAAzF,kJAAA,+BAA+B,OAAA;AACxC,yFAAwF;AAA/E,wIAAA,0BAA0B,OAAA;AACnC,iFAAgF;AAAvE,gIAAA,sBAAsB,OAAA;AAC/B,qEAAoE;AAA3D,8HAAA,qBAAqB,OAAA;AAC9B,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,0EAAyE;AAAhE,kIAAA,uBAAuB,OAAA;AAChC,gFAA+E;AAAtE,wIAAA,0BAA0B,OAAA;AACnC,wEAAuE;AAA9D,gIAAA,sBAAsB,OAAA;AAC/B,wDAAwC;AACxC,wDAAwC;AACxC,gEAAuE;AAA9D,8HAAA,yBAAyB,OAAA;AAClC,4DAAmE;AAA1D,0HAAA,uBAAuB,OAAA;AAChC,gEAAuE;AAA9D,8HAAA,yBAAyB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6EAA4E;AAAnE,oIAAA,wBAAwB,OAAA;AACjC,uFAAsF;AAA7E,sIAAA,yBAAyB,OAAA;AAClC,yFAAwF;AAA/E,wIAAA,0BAA0B,OAAA;AACnC,mGAAkG;AAAzF,kJAAA,+BAA+B,OAAA;AACxC,yFAAwF;AAA/E,wIAAA,0BAA0B,OAAA;AACnC,iFAAgF;AAAvE,gIAAA,sBAAsB,OAAA;AAC/B,qEAAoE;AAA3D,8HAAA,qBAAqB,OAAA;AAC9B,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,0EAAyE;AAAhE,kIAAA,uBAAuB,OAAA;AAChC,gFAA+E;AAAtE,wIAAA,0BAA0B,OAAA;AACnC,wEAAuE;AAA9D,gIAAA,sBAAsB,OAAA;AAC/B,wDAAwC;AACxC,wDAAwC;AACxC,gEAAuE;AAA9D,8HAAA,yBAAyB,OAAA;AAClC,4DAAmE;AAA1D,0HAAA,uBAAuB,OAAA;AAChC,gEAAuE;AAA9D,8HAAA,yBAAyB,OAAA;AAClC,oEAAmE;AAA1D,0HAAA,mBAAmB,OAAA"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -10,6 +10,9 @@ export interface BitcoinNodeWalletOptions {
|
|
|
10
10
|
addressType?: AddressType;
|
|
11
11
|
network?: BitcoinNetwork;
|
|
12
12
|
}
|
|
13
|
+
export interface BitcoinSingleWalletOptions extends BitcoinNodeWalletOptions {
|
|
14
|
+
privateKey: string;
|
|
15
|
+
}
|
|
13
16
|
export interface BitcoinWalletProviderOptions extends BitcoinNodeWalletOptions {
|
|
14
17
|
baseDerivationPath: string;
|
|
15
18
|
}
|
package/dist/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,6EAA6D;AAC7D,6EAA6D;AAC7D,+CAA6B;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,6EAA6D;AAC7D,6EAA6D;AAC7D,+CAA6B;AA2E7B,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,gCAAiB,CAAA;IACjB,0CAA2B,CAAA;IAC3B,gCAAiB,CAAA;AACrB,CAAC,EAJW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAItB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,sCAA0B,CAAA;IAC1B,2BAAe,CAAA;AACnB,CAAC,EAJW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAInB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Chain, Wallet } from '@yaswap/client';
|
|
3
|
+
import { Address, AddressType, Asset, BigNumber, Network, Transaction, TransactionRequest, CreateTokenTransaction } from '@yaswap/types';
|
|
4
|
+
import { payments } from 'bitcoinjs-lib';
|
|
5
|
+
import { BitcoinBaseChainProvider } from '../chain/BitcoinBaseChainProvider';
|
|
6
|
+
import { PsbtInputTarget, Transaction as BtcTransaction, OutputTarget, Input, UTXO, BitcoinSingleWalletOptions } from '../types';
|
|
7
|
+
import { CoinSelectTarget } from '../utils';
|
|
8
|
+
import { IBitcoinWallet } from './IBitcoinWallet';
|
|
9
|
+
export declare class BitcoinSingleWallet extends Wallet<any, any> implements IBitcoinWallet<BitcoinBaseChainProvider> {
|
|
10
|
+
private _addressType;
|
|
11
|
+
private _network;
|
|
12
|
+
private _ecpair;
|
|
13
|
+
constructor(options: BitcoinSingleWalletOptions, chainProvider?: Chain<BitcoinBaseChainProvider>);
|
|
14
|
+
getUnusedAddress(): Promise<Address>;
|
|
15
|
+
getUsedAddresses(): Promise<Address[]>;
|
|
16
|
+
getAddresses(): Promise<Address[]>;
|
|
17
|
+
createToken(txRequest: CreateTokenTransaction): Promise<null>;
|
|
18
|
+
sendTransaction(options: TransactionRequest): Promise<Transaction<BtcTransaction>>;
|
|
19
|
+
sendBatchTransaction(transactions: TransactionRequest[]): Promise<Transaction<BtcTransaction>[]>;
|
|
20
|
+
sendSweepTransaction(externalChangeAddress: AddressType, _asset: Asset, feePerByte: number): Promise<Transaction<BtcTransaction>>;
|
|
21
|
+
updateTransactionFee(tx: Transaction<BtcTransaction> | string, newFeePerByte: number): Promise<Transaction<BtcTransaction>>;
|
|
22
|
+
getConnectedNetwork(): Promise<Network>;
|
|
23
|
+
getSigner(): Promise<null>;
|
|
24
|
+
getAddress(): Promise<AddressType>;
|
|
25
|
+
signMessage(message: string): Promise<string>;
|
|
26
|
+
getBalance(assets: Asset[]): Promise<BigNumber[]>;
|
|
27
|
+
exportPrivateKey(): Promise<string>;
|
|
28
|
+
isWalletAvailable(): Promise<boolean>;
|
|
29
|
+
canUpdateFee(): boolean;
|
|
30
|
+
signPSBT(data: string, inputs: PsbtInputTarget[]): Promise<string>;
|
|
31
|
+
signBatchP2SHTransaction(inputs: [{
|
|
32
|
+
inputTxHex: string;
|
|
33
|
+
index: number;
|
|
34
|
+
vout: any;
|
|
35
|
+
outputScript: Buffer;
|
|
36
|
+
}], addresses: string, tx: any, locktime: number, segwit?: boolean): Promise<Buffer[]>;
|
|
37
|
+
getWalletAddress(): Promise<Address>;
|
|
38
|
+
getTotalFees(transactions: TransactionRequest[], max: boolean): Promise<any>;
|
|
39
|
+
protected getAddressFromPublicKey(publicKey: Buffer): string;
|
|
40
|
+
protected getPaymentVariantFromPublicKey(publicKey: Buffer): payments.Payment;
|
|
41
|
+
protected withCachedUtxos(func: () => any): Promise<any>;
|
|
42
|
+
protected getTotalFee(opts: TransactionRequest, max: boolean): Promise<number>;
|
|
43
|
+
protected sendOptionsToOutputs(transactions: TransactionRequest[]): OutputTarget[];
|
|
44
|
+
protected getInputsForAmount(_targets: OutputTarget[], feePerByte?: number, fixedInputs?: Input[], sweep?: boolean): Promise<{
|
|
45
|
+
inputs: UTXO[];
|
|
46
|
+
change: CoinSelectTarget;
|
|
47
|
+
outputs: CoinSelectTarget[];
|
|
48
|
+
fee: number;
|
|
49
|
+
}>;
|
|
50
|
+
protected onChainProviderUpdate(chainProvider: Chain<BitcoinBaseChainProvider>): void;
|
|
51
|
+
private dumpPrivKey;
|
|
52
|
+
protected _sendTransaction(transactions: OutputTarget[], feePerByte?: number): Promise<Transaction<BtcTransaction>>;
|
|
53
|
+
protected buildTransaction(targets: OutputTarget[], feePerByte?: number, fixedInputs?: Input[]): Promise<{
|
|
54
|
+
hex: string;
|
|
55
|
+
fee: number;
|
|
56
|
+
}>;
|
|
57
|
+
protected buildSweepTransaction(externalChangeAddress: string, feePerByte: number): Promise<{
|
|
58
|
+
hex: string;
|
|
59
|
+
fee: number;
|
|
60
|
+
}>;
|
|
61
|
+
}
|
|
@@ -0,0 +1,410 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.BitcoinSingleWallet = void 0;
|
|
16
|
+
const client_1 = require("@yaswap/client");
|
|
17
|
+
const errors_1 = require("@yaswap/errors");
|
|
18
|
+
const types_1 = require("@yaswap/types");
|
|
19
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
20
|
+
const bitcoinjs_message_1 = require("bitcoinjs-message");
|
|
21
|
+
const types_2 = require("../types");
|
|
22
|
+
const utils_1 = require("../utils");
|
|
23
|
+
const memoizee_1 = __importDefault(require("memoizee"));
|
|
24
|
+
class BitcoinSingleWallet extends client_1.Wallet {
|
|
25
|
+
constructor(options, chainProvider) {
|
|
26
|
+
super(chainProvider);
|
|
27
|
+
this._addressType = (options === null || options === void 0 ? void 0 : options.addressType) || types_2.AddressType.BECH32;
|
|
28
|
+
this._network = chainProvider ? chainProvider.getNetwork() : options.network;
|
|
29
|
+
this._ecpair = bitcoinjs_lib_1.ECPair.fromWIF(options.privateKey, this._network);
|
|
30
|
+
}
|
|
31
|
+
getUnusedAddress() {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
const address = this.getAddressFromPublicKey(this._ecpair.publicKey);
|
|
34
|
+
const addressObject = new types_1.Address({
|
|
35
|
+
address,
|
|
36
|
+
publicKey: this._ecpair.publicKey.toString('hex'),
|
|
37
|
+
});
|
|
38
|
+
return addressObject;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
getUsedAddresses() {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const address = yield this.getUnusedAddress();
|
|
44
|
+
return [address];
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getAddresses() {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
return this.getUsedAddresses();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
createToken(txRequest) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
return null;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
sendTransaction(options) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
return this._sendTransaction(this.sendOptionsToOutputs([options]), options.fee);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
sendBatchTransaction(transactions) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
return [yield this._sendTransaction(this.sendOptionsToOutputs(transactions))];
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
sendSweepTransaction(externalChangeAddress, _asset, feePerByte) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const { hex, fee } = yield this.buildSweepTransaction(externalChangeAddress.toString(), feePerByte);
|
|
70
|
+
yield this.chainProvider.sendRawTransaction(hex);
|
|
71
|
+
return (0, utils_1.normalizeTransactionObject)((0, utils_1.decodeRawTransaction)(hex, this._network), fee);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
updateTransactionFee(tx, newFeePerByte) {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
const txHash = typeof tx === 'string' ? tx : tx.hash;
|
|
77
|
+
const transaction = (yield this.chainProvider.getTransactionByHash(txHash))._raw;
|
|
78
|
+
const fixedInputs = [transaction.vin[0]]; // TODO: should this pick more than 1 input? RBF doesn't mandate it
|
|
79
|
+
const changeAddress = yield this.getWalletAddress();
|
|
80
|
+
const changeOutput = transaction.vout.find((vout) => vout.scriptPubKey.addresses[0] === changeAddress.address);
|
|
81
|
+
let outputs = transaction.vout;
|
|
82
|
+
if (changeOutput) {
|
|
83
|
+
outputs = outputs.filter((vout) => vout.scriptPubKey.addresses[0] !== changeOutput.scriptPubKey.addresses[0]);
|
|
84
|
+
}
|
|
85
|
+
// TODO more checks?
|
|
86
|
+
const transactions = outputs.map((output) => ({
|
|
87
|
+
address: output.scriptPubKey.addresses[0],
|
|
88
|
+
value: new types_1.BigNumber(output.value).times(1e8).toNumber(),
|
|
89
|
+
}));
|
|
90
|
+
const { hex, fee } = yield this.buildTransaction(transactions, newFeePerByte, fixedInputs);
|
|
91
|
+
yield this.chainProvider.sendRawTransaction(hex);
|
|
92
|
+
return (0, utils_1.normalizeTransactionObject)((0, utils_1.decodeRawTransaction)(hex, this._network), fee);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
getConnectedNetwork() {
|
|
96
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
return this._network;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
getSigner() {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
return null;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
getAddress() {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
const addresses = yield this.getAddresses();
|
|
108
|
+
return addresses[0];
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
signMessage(message) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const signature = yield (0, bitcoinjs_message_1.signAsync)(message, this._ecpair.privateKey, this._ecpair.compressed);
|
|
114
|
+
return signature.toString('hex');
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
getBalance(assets) {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const addresses = yield this.getAddresses();
|
|
120
|
+
return yield this.chainProvider.getBalance(addresses, assets);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
exportPrivateKey() {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
return this._ecpair.toWIF();
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
isWalletAvailable() {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
return true;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
canUpdateFee() {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
signPSBT(data, inputs) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
// TODO: This doesn't work at the moment, need to implement later
|
|
139
|
+
const psbt = bitcoinjs_lib_1.Psbt.fromBase64(data, { network: this._network });
|
|
140
|
+
for (const input of inputs) {
|
|
141
|
+
const usedAddresses = yield this.getUsedAddresses();
|
|
142
|
+
const address = usedAddresses.find((address) => address.derivationPath === input.derivationPath);
|
|
143
|
+
const wif = yield this.dumpPrivKey(address.address);
|
|
144
|
+
const keyPair = bitcoinjs_lib_1.ECPair.fromWIF(wif, this._network);
|
|
145
|
+
psbt.signInput(input.index, keyPair);
|
|
146
|
+
}
|
|
147
|
+
return psbt.toBase64();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
signBatchP2SHTransaction(inputs, addresses, tx, locktime, segwit = false) {
|
|
151
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
152
|
+
// TODO: This doesn't work at the moment, need to implement later
|
|
153
|
+
const wallets = [];
|
|
154
|
+
for (const address of addresses) {
|
|
155
|
+
const wif = yield this.dumpPrivKey(address);
|
|
156
|
+
const wallet = bitcoinjs_lib_1.ECPair.fromWIF(wif, this._network);
|
|
157
|
+
wallets.push(wallet);
|
|
158
|
+
}
|
|
159
|
+
const sigs = [];
|
|
160
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
161
|
+
let sigHash;
|
|
162
|
+
if (segwit) {
|
|
163
|
+
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
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
sigHash = tx.hashForSignature(inputs[i].index, inputs[i].outputScript, bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
|
|
167
|
+
}
|
|
168
|
+
const sig = bitcoinjs_lib_1.script.signature.encode(wallets[i].sign(sigHash), bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
|
|
169
|
+
sigs.push(sig);
|
|
170
|
+
}
|
|
171
|
+
return sigs;
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
getWalletAddress() {
|
|
175
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
176
|
+
return yield this.getUnusedAddress();
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
getTotalFees(transactions, max) {
|
|
180
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
181
|
+
const fees = yield this.withCachedUtxos(() => __awaiter(this, void 0, void 0, function* () {
|
|
182
|
+
const fees = {};
|
|
183
|
+
for (const tx of transactions) {
|
|
184
|
+
const fee = yield this.getTotalFee(tx, max);
|
|
185
|
+
fees[tx.fee] = new types_1.BigNumber(fee);
|
|
186
|
+
}
|
|
187
|
+
return fees;
|
|
188
|
+
}));
|
|
189
|
+
return fees;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
getAddressFromPublicKey(publicKey) {
|
|
193
|
+
return this.getPaymentVariantFromPublicKey(publicKey).address;
|
|
194
|
+
}
|
|
195
|
+
getPaymentVariantFromPublicKey(publicKey) {
|
|
196
|
+
if (this._addressType === types_2.AddressType.LEGACY) {
|
|
197
|
+
return bitcoinjs_lib_1.payments.p2pkh({ pubkey: publicKey, network: this._network });
|
|
198
|
+
}
|
|
199
|
+
else if (this._addressType === types_2.AddressType.P2SH_SEGWIT) {
|
|
200
|
+
return bitcoinjs_lib_1.payments.p2sh({
|
|
201
|
+
redeem: bitcoinjs_lib_1.payments.p2wpkh({ pubkey: publicKey, network: this._network }),
|
|
202
|
+
network: this._network,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
else if (this._addressType === types_2.AddressType.BECH32) {
|
|
206
|
+
return bitcoinjs_lib_1.payments.p2wpkh({ pubkey: publicKey, network: this._network });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
withCachedUtxos(func) {
|
|
210
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
211
|
+
const originalProvider = this.chainProvider.getProvider();
|
|
212
|
+
const memoizedGetFeePerByte = (0, memoizee_1.default)(originalProvider.getFeePerByte, { primitive: true });
|
|
213
|
+
const memoizedGetUnspentTransactions = (0, memoizee_1.default)(originalProvider.getUnspentTransactions, { primitive: true });
|
|
214
|
+
const memoizedGetAddressTransactionCounts = (0, memoizee_1.default)(originalProvider.getAddressTransactionCounts, {
|
|
215
|
+
primitive: true,
|
|
216
|
+
});
|
|
217
|
+
const newProvider = originalProvider;
|
|
218
|
+
newProvider.getFeePerByte = memoizedGetFeePerByte;
|
|
219
|
+
newProvider.getUnspentTransactions = memoizedGetUnspentTransactions;
|
|
220
|
+
newProvider.getAddressTransactionCounts = memoizedGetAddressTransactionCounts;
|
|
221
|
+
this.chainProvider.setProvider(newProvider);
|
|
222
|
+
const result = yield func.bind(this)();
|
|
223
|
+
this.chainProvider.setProvider(originalProvider);
|
|
224
|
+
return result;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
getTotalFee(opts, max) {
|
|
228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
const targets = this.sendOptionsToOutputs([opts]);
|
|
230
|
+
if (!max) {
|
|
231
|
+
const { fee } = yield this.getInputsForAmount(targets, opts.fee);
|
|
232
|
+
return fee;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
const { fee } = yield this.getInputsForAmount(targets.filter((t) => !t.value), opts.fee, [], true);
|
|
236
|
+
return fee;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
sendOptionsToOutputs(transactions) {
|
|
241
|
+
const targets = [];
|
|
242
|
+
transactions.forEach((tx) => {
|
|
243
|
+
if (tx.to && tx.value && tx.value.gt(0)) {
|
|
244
|
+
targets.push({
|
|
245
|
+
address: tx.to.toString(),
|
|
246
|
+
value: tx.value.toNumber(),
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
if (tx.data) {
|
|
250
|
+
const scriptBuffer = bitcoinjs_lib_1.script.compile([bitcoinjs_lib_1.script.OPS.OP_RETURN, Buffer.from(tx.data, 'hex')]);
|
|
251
|
+
targets.push({
|
|
252
|
+
value: 0,
|
|
253
|
+
script: scriptBuffer,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
return targets;
|
|
258
|
+
}
|
|
259
|
+
getInputsForAmount(_targets, feePerByte, fixedInputs = [], sweep = false) {
|
|
260
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
261
|
+
const feePerBytePromise = this.chainProvider.getProvider().getFeePerByte();
|
|
262
|
+
let utxos = [];
|
|
263
|
+
const addresses = yield this.getUsedAddresses();
|
|
264
|
+
const fixedUtxos = [];
|
|
265
|
+
if (fixedInputs.length > 0) {
|
|
266
|
+
for (const input of fixedInputs) {
|
|
267
|
+
const txHex = yield this.chainProvider.getProvider().getRawTransactionByHash(input.txid);
|
|
268
|
+
const tx = (0, utils_1.decodeRawTransaction)(txHex, this._network);
|
|
269
|
+
const value = new types_1.BigNumber(tx.vout[input.vout].value).times(1e8).toNumber();
|
|
270
|
+
const address = tx.vout[input.vout].scriptPubKey.addresses[0];
|
|
271
|
+
const utxo = Object.assign(Object.assign({}, input), { value, address });
|
|
272
|
+
fixedUtxos.push(utxo);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (!sweep || fixedUtxos.length === 0) {
|
|
276
|
+
const _utxos = yield this.chainProvider.getProvider().getUnspentTransactions(addresses);
|
|
277
|
+
utxos.push(..._utxos.map((utxo) => {
|
|
278
|
+
return Object.assign({}, utxo);
|
|
279
|
+
}));
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
utxos = fixedUtxos;
|
|
283
|
+
}
|
|
284
|
+
const utxoBalance = utxos.reduce((a, b) => a + (b.value || 0), 0);
|
|
285
|
+
if (!feePerByte)
|
|
286
|
+
feePerByte = yield feePerBytePromise;
|
|
287
|
+
const minRelayFee = yield this.chainProvider.getProvider().getMinRelayFee();
|
|
288
|
+
if (feePerByte < minRelayFee) {
|
|
289
|
+
throw new Error(`Fee supplied (${feePerByte} sat/b) too low. Minimum relay fee is ${minRelayFee} sat/b`);
|
|
290
|
+
}
|
|
291
|
+
let targets;
|
|
292
|
+
if (sweep) {
|
|
293
|
+
const outputBalance = _targets.reduce((a, b) => a + (b['value'] || 0), 0);
|
|
294
|
+
const sweepOutputSize = 39;
|
|
295
|
+
const paymentOutputSize = _targets.filter((t) => t.value && t.address).length * 39;
|
|
296
|
+
const scriptOutputSize = _targets
|
|
297
|
+
.filter((t) => !t.value && t.script)
|
|
298
|
+
.reduce((size, t) => size + 39 + t.script.byteLength, 0);
|
|
299
|
+
const outputSize = sweepOutputSize + paymentOutputSize + scriptOutputSize;
|
|
300
|
+
const inputSize = utxos.length * 153;
|
|
301
|
+
const sweepFee = feePerByte * (inputSize + outputSize);
|
|
302
|
+
const amountToSend = new types_1.BigNumber(utxoBalance).minus(sweepFee);
|
|
303
|
+
targets = _targets.map((target) => ({ id: 'main', value: target.value, script: target.script }));
|
|
304
|
+
targets.push({ id: 'main', value: amountToSend.minus(outputBalance).toNumber() });
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
targets = _targets.map((target) => ({ id: 'main', value: target.value, script: target.script }));
|
|
308
|
+
}
|
|
309
|
+
const { inputs, outputs, change, fee } = (0, utils_1.selectCoins)(utxos, targets, Math.ceil(feePerByte), fixedUtxos);
|
|
310
|
+
if (inputs && outputs) {
|
|
311
|
+
return {
|
|
312
|
+
inputs,
|
|
313
|
+
change,
|
|
314
|
+
outputs,
|
|
315
|
+
fee,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
throw new errors_1.InsufficientBalanceError('Not enough balance');
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
onChainProviderUpdate(chainProvider) {
|
|
322
|
+
this._network = chainProvider.getNetwork();
|
|
323
|
+
}
|
|
324
|
+
dumpPrivKey(address) {
|
|
325
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
326
|
+
return this.chainProvider.sendRpcRequest('dumpprivkey', [address]);
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
_sendTransaction(transactions, feePerByte) {
|
|
330
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
331
|
+
const { hex, fee } = yield this.buildTransaction(transactions, feePerByte);
|
|
332
|
+
yield this.chainProvider.sendRawTransaction(hex);
|
|
333
|
+
return (0, utils_1.normalizeTransactionObject)((0, utils_1.decodeRawTransaction)(hex, this._network), fee);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
buildTransaction(targets, feePerByte, fixedInputs) {
|
|
337
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
338
|
+
const network = this._network;
|
|
339
|
+
const unusedAddress = yield this.getWalletAddress();
|
|
340
|
+
const { inputs, change, fee } = yield this.getInputsForAmount(targets, feePerByte, fixedInputs);
|
|
341
|
+
if (change) {
|
|
342
|
+
targets.push({
|
|
343
|
+
address: unusedAddress.address,
|
|
344
|
+
value: change.value,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
const psbt = new bitcoinjs_lib_1.Psbt({ network });
|
|
348
|
+
const needsWitness = [types_2.AddressType.BECH32, types_2.AddressType.P2SH_SEGWIT].includes(this._addressType);
|
|
349
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
350
|
+
const paymentVariant = this.getPaymentVariantFromPublicKey(this._ecpair.publicKey);
|
|
351
|
+
const psbtInput = {
|
|
352
|
+
hash: inputs[i].txid,
|
|
353
|
+
index: inputs[i].vout,
|
|
354
|
+
sequence: 0,
|
|
355
|
+
};
|
|
356
|
+
if (needsWitness) {
|
|
357
|
+
psbtInput.witnessUtxo = {
|
|
358
|
+
script: paymentVariant.output,
|
|
359
|
+
value: inputs[i].value,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
const inputTxRaw = yield this.chainProvider.getProvider().getRawTransactionByHash(inputs[i].txid);
|
|
364
|
+
psbtInput.nonWitnessUtxo = Buffer.from(inputTxRaw, 'hex');
|
|
365
|
+
}
|
|
366
|
+
if (this._addressType === types_2.AddressType.P2SH_SEGWIT) {
|
|
367
|
+
psbtInput.redeemScript = paymentVariant.redeem.output;
|
|
368
|
+
}
|
|
369
|
+
psbt.addInput(psbtInput);
|
|
370
|
+
}
|
|
371
|
+
for (const output of targets) {
|
|
372
|
+
if (output.script) {
|
|
373
|
+
psbt.addOutput({
|
|
374
|
+
value: output.value,
|
|
375
|
+
script: output.script,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
psbt.addOutput({
|
|
380
|
+
value: output.value,
|
|
381
|
+
address: output.address,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
386
|
+
psbt.signInput(i, this._ecpair);
|
|
387
|
+
psbt.validateSignaturesOfInput(i);
|
|
388
|
+
}
|
|
389
|
+
psbt.finalizeAllInputs();
|
|
390
|
+
return { hex: psbt.extractTransaction().toHex(), fee };
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
buildSweepTransaction(externalChangeAddress, feePerByte) {
|
|
394
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
395
|
+
let _feePerByte = feePerByte || null; // TODO: fix me
|
|
396
|
+
if (!_feePerByte) {
|
|
397
|
+
_feePerByte = yield this.chainProvider.getProvider().getFeePerByte();
|
|
398
|
+
}
|
|
399
|
+
const { inputs, outputs, change } = yield this.getInputsForAmount([], _feePerByte, [], true);
|
|
400
|
+
if (change) {
|
|
401
|
+
throw new Error('There should not be any change for sweeping transaction');
|
|
402
|
+
}
|
|
403
|
+
const _outputs = [{ address: externalChangeAddress, value: outputs[0].value }];
|
|
404
|
+
// TODO: fix the inherited legacy code
|
|
405
|
+
return this.buildTransaction(_outputs, feePerByte, inputs);
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
exports.BitcoinSingleWallet = BitcoinSingleWallet;
|
|
410
|
+
//# sourceMappingURL=BitcoinSingleWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BitcoinSingleWallet.js","sourceRoot":"","sources":["../../../lib/wallet/BitcoinSingleWallet.ts"],"names":[],"mappings":"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"}
|