beignet 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +284 -1
- package/dist/cli/beignet-node.js +1019 -47
- package/dist/cli/beignet-node.js.map +1 -1
- package/dist/cli/cli.js +1201 -16
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/config.js +21 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/daemon.js +342 -16
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/errors.js +2 -0
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/openapi.js +1207 -14
- package/dist/cli/openapi.js.map +1 -1
- package/dist/cli/restore.js +89 -0
- package/dist/cli/restore.js.map +1 -0
- package/dist/cli/wallet-storage.js +34 -0
- package/dist/cli/wallet-storage.js.map +1 -0
- package/dist/electrum/index.js +105 -10
- package/dist/electrum/index.js.map +1 -1
- package/dist/lightning/advisor/fee-tuner.js +42 -0
- package/dist/lightning/advisor/fee-tuner.js.map +1 -0
- package/dist/lightning/advisor/index.js +9 -1
- package/dist/lightning/advisor/index.js.map +1 -1
- package/dist/lightning/advisor/rebalance-planner.js +55 -0
- package/dist/lightning/advisor/rebalance-planner.js.map +1 -0
- package/dist/lightning/backup/index.js +18 -0
- package/dist/lightning/backup/index.js.map +1 -0
- package/dist/lightning/backup/scb.js +42 -0
- package/dist/lightning/backup/scb.js.map +1 -0
- package/dist/lightning/chain/chain-monitor.js +27 -0
- package/dist/lightning/chain/chain-monitor.js.map +1 -1
- package/dist/lightning/chain/output-resolver.js +55 -6
- package/dist/lightning/chain/output-resolver.js.map +1 -1
- package/dist/lightning/chain/types.js +1 -0
- package/dist/lightning/chain/types.js.map +1 -1
- package/dist/lightning/channel/channel-manager.js +64 -0
- package/dist/lightning/channel/channel-manager.js.map +1 -1
- package/dist/lightning/channel/channel-state.js.map +1 -1
- package/dist/lightning/channel/channel.js +124 -4
- package/dist/lightning/channel/channel.js.map +1 -1
- package/dist/lightning/channel/dual-funding.js +6 -5
- package/dist/lightning/channel/dual-funding.js.map +1 -1
- package/dist/lightning/channel/types.js +3 -1
- package/dist/lightning/channel/types.js.map +1 -1
- package/dist/lightning/channel/validation.js +3 -3
- package/dist/lightning/channel/validation.js.map +1 -1
- package/dist/lightning/crypto/index.js +1 -0
- package/dist/lightning/crypto/index.js.map +1 -1
- package/dist/lightning/crypto/message-signing.js +116 -0
- package/dist/lightning/crypto/message-signing.js.map +1 -0
- package/dist/lightning/crypto/xchacha20poly1305.js +77 -0
- package/dist/lightning/crypto/xchacha20poly1305.js.map +1 -0
- package/dist/lightning/features/flags.js +1 -0
- package/dist/lightning/features/flags.js.map +1 -1
- package/dist/lightning/gossip/messages.js +37 -1
- package/dist/lightning/gossip/messages.js.map +1 -1
- package/dist/lightning/index.js +2 -1
- package/dist/lightning/index.js.map +1 -1
- package/dist/lightning/keys/wallet-keys.js +1 -0
- package/dist/lightning/keys/wallet-keys.js.map +1 -1
- package/dist/lightning/message/index.js +1 -0
- package/dist/lightning/message/index.js.map +1 -1
- package/dist/lightning/message/peer-storage.js +43 -0
- package/dist/lightning/message/peer-storage.js.map +1 -0
- package/dist/lightning/message/types.js +2 -0
- package/dist/lightning/message/types.js.map +1 -1
- package/dist/lightning/node/lightning-node.js +1583 -235
- package/dist/lightning/node/lightning-node.js.map +1 -1
- package/dist/lightning/node/types.js +18 -1
- package/dist/lightning/node/types.js.map +1 -1
- package/dist/lightning/offer/offer-manager.js +2 -5
- package/dist/lightning/offer/offer-manager.js.map +1 -1
- package/dist/lightning/offer/tlv.js +3 -1
- package/dist/lightning/offer/tlv.js.map +1 -1
- package/dist/lightning/storage/encryption.js +67 -0
- package/dist/lightning/storage/encryption.js.map +1 -0
- package/dist/lightning/storage/index.js +1 -0
- package/dist/lightning/storage/index.js.map +1 -1
- package/dist/lightning/storage/serialization.js +6 -2
- package/dist/lightning/storage/serialization.js.map +1 -1
- package/dist/lightning/storage/sqlite-storage.js +387 -33
- package/dist/lightning/storage/sqlite-storage.js.map +1 -1
- package/dist/lightning/watchtower/blob.js +135 -0
- package/dist/lightning/watchtower/blob.js.map +1 -0
- package/dist/lightning/watchtower/index.js +55 -0
- package/dist/lightning/watchtower/index.js.map +1 -0
- package/dist/lightning/watchtower/justice.js +182 -0
- package/dist/lightning/watchtower/justice.js.map +1 -0
- package/dist/lightning/watchtower/tower-connection.js +208 -0
- package/dist/lightning/watchtower/tower-connection.js.map +1 -0
- package/dist/lightning/watchtower/types.js +3 -0
- package/dist/lightning/watchtower/types.js.map +1 -0
- package/dist/lightning/watchtower/watchtower-client.js +402 -0
- package/dist/lightning/watchtower/watchtower-client.js.map +1 -0
- package/dist/lightning/watchtower/wtwire.js +201 -0
- package/dist/lightning/watchtower/wtwire.js.map +1 -0
- package/dist/shapes/electrum.js +32 -1
- package/dist/shapes/electrum.js.map +1 -1
- package/dist/shapes/wallet.js +11 -1
- package/dist/shapes/wallet.js.map +1 -1
- package/dist/transaction/index.js +163 -15
- package/dist/transaction/index.js.map +1 -1
- package/dist/types/cli/beignet-node.d.ts +144 -3
- package/dist/types/cli/daemon.d.ts +2 -0
- package/dist/types/cli/errors.d.ts +2 -0
- package/dist/types/cli/restore.d.ts +10 -0
- package/dist/types/cli/types.d.ts +228 -1
- package/dist/types/cli/wallet-storage.d.ts +3 -0
- package/dist/types/electrum/index.d.ts +12 -0
- package/dist/types/electrum.js +1 -0
- package/dist/types/electrum.js.map +1 -1
- package/dist/types/lightning/advisor/fee-tuner.d.ts +20 -0
- package/dist/types/lightning/advisor/index.d.ts +4 -0
- package/dist/types/lightning/advisor/rebalance-planner.d.ts +12 -0
- package/dist/types/lightning/backup/index.d.ts +1 -0
- package/dist/types/lightning/backup/scb.d.ts +24 -0
- package/dist/types/lightning/chain/chain-monitor.d.ts +1 -0
- package/dist/types/lightning/chain/types.d.ts +1 -0
- package/dist/types/lightning/channel/channel-manager.d.ts +7 -0
- package/dist/types/lightning/channel/channel-state.d.ts +2 -0
- package/dist/types/lightning/channel/channel.d.ts +6 -0
- package/dist/types/lightning/channel/dual-funding.d.ts +2 -1
- package/dist/types/lightning/channel/types.d.ts +2 -0
- package/dist/types/lightning/channel/validation.d.ts +1 -1
- package/dist/types/lightning/crypto/index.d.ts +1 -0
- package/dist/types/lightning/crypto/message-signing.d.ts +9 -0
- package/dist/types/lightning/crypto/xchacha20poly1305.d.ts +3 -0
- package/dist/types/lightning/features/flags.d.ts +1 -0
- package/dist/types/lightning/gossip/messages.d.ts +4 -0
- package/dist/types/lightning/index.d.ts +1 -0
- package/dist/types/lightning/keys/wallet-keys.d.ts +2 -1
- package/dist/types/lightning/message/index.d.ts +1 -0
- package/dist/types/lightning/message/peer-storage.d.ts +9 -0
- package/dist/types/lightning/message/types.d.ts +2 -0
- package/dist/types/lightning/node/lightning-node.d.ts +116 -4
- package/dist/types/lightning/node/types.d.ts +62 -1
- package/dist/types/lightning/storage/encryption.d.ts +11 -0
- package/dist/types/lightning/storage/index.d.ts +1 -0
- package/dist/types/lightning/storage/serialization.d.ts +2 -0
- package/dist/types/lightning/storage/sqlite-storage.d.ts +43 -3
- package/dist/types/lightning/storage/types.d.ts +62 -0
- package/dist/types/lightning/watchtower/blob.d.ts +32 -0
- package/dist/types/lightning/watchtower/index.d.ts +9 -0
- package/dist/types/lightning/watchtower/justice.d.ts +29 -0
- package/dist/types/lightning/watchtower/tower-connection.d.ts +34 -0
- package/dist/types/lightning/watchtower/types.d.ts +44 -0
- package/dist/types/lightning/watchtower/watchtower-client.d.ts +67 -0
- package/dist/types/lightning/watchtower/wtwire.d.ts +90 -0
- package/dist/types/shapes/electrum.d.ts +3 -1
- package/dist/types/transaction/index.d.ts +6 -0
- package/dist/types/transaction.js.map +1 -1
- package/dist/types/types/electrum.d.ts +3 -2
- package/dist/types/types/transaction.d.ts +1 -1
- package/dist/types/types/wallet.d.ts +78 -4
- package/dist/types/utils/descriptors.d.ts +2 -0
- package/dist/types/utils/fees.d.ts +3 -0
- package/dist/types/utils/helpers.d.ts +3 -1
- package/dist/types/utils/index.d.ts +5 -0
- package/dist/types/utils/multisig.d.ts +29 -0
- package/dist/types/utils/transaction.d.ts +7 -0
- package/dist/types/utils/wallet-storage-encryption.d.ts +3 -0
- package/dist/types/utils/wallet.d.ts +1 -1
- package/dist/types/utils/watch-only.d.ts +12 -0
- package/dist/types/wallet/constants.d.ts +1 -0
- package/dist/types/wallet/index.d.ts +61 -4
- package/dist/types/wallet.js +3 -0
- package/dist/types/wallet.js.map +1 -1
- package/dist/utils/derivation-path.js +8 -7
- package/dist/utils/derivation-path.js.map +1 -1
- package/dist/utils/descriptors.js +56 -0
- package/dist/utils/descriptors.js.map +1 -0
- package/dist/utils/electrum.js +10 -2
- package/dist/utils/electrum.js.map +1 -1
- package/dist/utils/fees.js +19 -0
- package/dist/utils/fees.js.map +1 -0
- package/dist/utils/helpers.js +22 -5
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/multisig.js +90 -0
- package/dist/utils/multisig.js.map +1 -0
- package/dist/utils/transaction.js +30 -3
- package/dist/utils/transaction.js.map +1 -1
- package/dist/utils/wallet-storage-encryption.js +45 -0
- package/dist/utils/wallet-storage-encryption.js.map +1 -0
- package/dist/utils/wallet.js +3 -1
- package/dist/utils/wallet.js.map +1 -1
- package/dist/utils/watch-only.js +102 -0
- package/dist/utils/watch-only.js.map +1 -0
- package/dist/wallet/constants.js +2 -1
- package/dist/wallet/constants.js.map +1 -1
- package/dist/wallet/index.js +787 -30
- package/dist/wallet/index.js.map +1 -1
- package/docs/ROADMAP.md +292 -0
- package/package.json +1 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeDeleteSessionReply = exports.encodeDeleteSessionReply = exports.encodeDeleteSession = exports.decodeStateUpdateReply = exports.encodeStateUpdateReply = exports.decodeStateUpdate = exports.encodeStateUpdate = exports.decodeCreateSessionReply = exports.encodeCreateSessionReply = exports.decodeCreateSession = exports.encodeCreateSession = exports.decodeError = exports.encodeError = exports.decodeInit = exports.encodeInit = exports.StateUpdateCode = exports.CreateSessionCode = exports.WtErrorCode = exports.WtFeatureBit = exports.WtMessageType = void 0;
|
|
4
|
+
var WtMessageType;
|
|
5
|
+
(function (WtMessageType) {
|
|
6
|
+
WtMessageType[WtMessageType["INIT"] = 600] = "INIT";
|
|
7
|
+
WtMessageType[WtMessageType["ERROR"] = 601] = "ERROR";
|
|
8
|
+
WtMessageType[WtMessageType["CREATE_SESSION"] = 602] = "CREATE_SESSION";
|
|
9
|
+
WtMessageType[WtMessageType["CREATE_SESSION_REPLY"] = 603] = "CREATE_SESSION_REPLY";
|
|
10
|
+
WtMessageType[WtMessageType["STATE_UPDATE"] = 604] = "STATE_UPDATE";
|
|
11
|
+
WtMessageType[WtMessageType["STATE_UPDATE_REPLY"] = 605] = "STATE_UPDATE_REPLY";
|
|
12
|
+
WtMessageType[WtMessageType["DELETE_SESSION"] = 606] = "DELETE_SESSION";
|
|
13
|
+
WtMessageType[WtMessageType["DELETE_SESSION_REPLY"] = 607] = "DELETE_SESSION_REPLY";
|
|
14
|
+
})(WtMessageType = exports.WtMessageType || (exports.WtMessageType = {}));
|
|
15
|
+
var WtFeatureBit;
|
|
16
|
+
(function (WtFeatureBit) {
|
|
17
|
+
WtFeatureBit[WtFeatureBit["ALTRUIST_SESSIONS_REQUIRED"] = 0] = "ALTRUIST_SESSIONS_REQUIRED";
|
|
18
|
+
WtFeatureBit[WtFeatureBit["ALTRUIST_SESSIONS_OPTIONAL"] = 1] = "ALTRUIST_SESSIONS_OPTIONAL";
|
|
19
|
+
WtFeatureBit[WtFeatureBit["ANCHOR_COMMIT_REQUIRED"] = 2] = "ANCHOR_COMMIT_REQUIRED";
|
|
20
|
+
WtFeatureBit[WtFeatureBit["ANCHOR_COMMIT_OPTIONAL"] = 3] = "ANCHOR_COMMIT_OPTIONAL";
|
|
21
|
+
WtFeatureBit[WtFeatureBit["TAPROOT_COMMIT_REQUIRED"] = 4] = "TAPROOT_COMMIT_REQUIRED";
|
|
22
|
+
WtFeatureBit[WtFeatureBit["TAPROOT_COMMIT_OPTIONAL"] = 5] = "TAPROOT_COMMIT_OPTIONAL";
|
|
23
|
+
})(WtFeatureBit = exports.WtFeatureBit || (exports.WtFeatureBit = {}));
|
|
24
|
+
var WtErrorCode;
|
|
25
|
+
(function (WtErrorCode) {
|
|
26
|
+
WtErrorCode[WtErrorCode["OK"] = 0] = "OK";
|
|
27
|
+
WtErrorCode[WtErrorCode["TEMPORARY_FAILURE"] = 40] = "TEMPORARY_FAILURE";
|
|
28
|
+
WtErrorCode[WtErrorCode["PERMANENT_FAILURE"] = 50] = "PERMANENT_FAILURE";
|
|
29
|
+
})(WtErrorCode = exports.WtErrorCode || (exports.WtErrorCode = {}));
|
|
30
|
+
var CreateSessionCode;
|
|
31
|
+
(function (CreateSessionCode) {
|
|
32
|
+
CreateSessionCode[CreateSessionCode["OK"] = 0] = "OK";
|
|
33
|
+
CreateSessionCode[CreateSessionCode["REJECT_ALREADY_EXISTS"] = 60] = "REJECT_ALREADY_EXISTS";
|
|
34
|
+
CreateSessionCode[CreateSessionCode["REJECT_MAX_UPDATES"] = 61] = "REJECT_MAX_UPDATES";
|
|
35
|
+
CreateSessionCode[CreateSessionCode["REJECT_REWARD_RATE"] = 62] = "REJECT_REWARD_RATE";
|
|
36
|
+
CreateSessionCode[CreateSessionCode["REJECT_SWEEP_FEE_RATE"] = 63] = "REJECT_SWEEP_FEE_RATE";
|
|
37
|
+
CreateSessionCode[CreateSessionCode["REJECT_BLOB_TYPE"] = 64] = "REJECT_BLOB_TYPE";
|
|
38
|
+
})(CreateSessionCode = exports.CreateSessionCode || (exports.CreateSessionCode = {}));
|
|
39
|
+
var StateUpdateCode;
|
|
40
|
+
(function (StateUpdateCode) {
|
|
41
|
+
StateUpdateCode[StateUpdateCode["OK"] = 0] = "OK";
|
|
42
|
+
StateUpdateCode[StateUpdateCode["CLIENT_BEHIND"] = 40] = "CLIENT_BEHIND";
|
|
43
|
+
StateUpdateCode[StateUpdateCode["MAX_UPDATES_EXCEEDED"] = 41] = "MAX_UPDATES_EXCEEDED";
|
|
44
|
+
StateUpdateCode[StateUpdateCode["SEQ_NUM_OUT_OF_ORDER"] = 42] = "SEQ_NUM_OUT_OF_ORDER";
|
|
45
|
+
})(StateUpdateCode = exports.StateUpdateCode || (exports.StateUpdateCode = {}));
|
|
46
|
+
function writeVarBytes(buf) {
|
|
47
|
+
return Buffer.concat([writeVarInt(buf.length), buf]);
|
|
48
|
+
}
|
|
49
|
+
function writeVarInt(n) {
|
|
50
|
+
if (n < 0xfd) {
|
|
51
|
+
return Buffer.from([n]);
|
|
52
|
+
}
|
|
53
|
+
if (n <= 0xffff) {
|
|
54
|
+
const b = Buffer.alloc(3);
|
|
55
|
+
b[0] = 0xfd;
|
|
56
|
+
b.writeUInt16LE(n, 1);
|
|
57
|
+
return b;
|
|
58
|
+
}
|
|
59
|
+
if (n <= 0xffffffff) {
|
|
60
|
+
const b = Buffer.alloc(5);
|
|
61
|
+
b[0] = 0xfe;
|
|
62
|
+
b.writeUInt32LE(n, 1);
|
|
63
|
+
return b;
|
|
64
|
+
}
|
|
65
|
+
const b = Buffer.alloc(9);
|
|
66
|
+
b[0] = 0xff;
|
|
67
|
+
b.writeBigUInt64LE(BigInt(n), 1);
|
|
68
|
+
return b;
|
|
69
|
+
}
|
|
70
|
+
function readVarInt(buf, offset) {
|
|
71
|
+
const first = buf.readUInt8(offset);
|
|
72
|
+
if (first < 0xfd) {
|
|
73
|
+
return { value: first, next: offset + 1 };
|
|
74
|
+
}
|
|
75
|
+
if (first === 0xfd) {
|
|
76
|
+
return { value: buf.readUInt16LE(offset + 1), next: offset + 3 };
|
|
77
|
+
}
|
|
78
|
+
if (first === 0xfe) {
|
|
79
|
+
return { value: buf.readUInt32LE(offset + 1), next: offset + 5 };
|
|
80
|
+
}
|
|
81
|
+
return { value: Number(buf.readBigUInt64LE(offset + 1)), next: offset + 9 };
|
|
82
|
+
}
|
|
83
|
+
function readVarBytes(buf, offset) {
|
|
84
|
+
const { value: len, next } = readVarInt(buf, offset);
|
|
85
|
+
if (next + len > buf.length) {
|
|
86
|
+
throw new Error('wtwire: var bytes length exceeds buffer');
|
|
87
|
+
}
|
|
88
|
+
return { value: buf.subarray(next, next + len), next: next + len };
|
|
89
|
+
}
|
|
90
|
+
function encodeInit(msg) {
|
|
91
|
+
if (msg.chainHash.length !== 32) {
|
|
92
|
+
throw new Error('wtwire init: chainHash must be 32 bytes');
|
|
93
|
+
}
|
|
94
|
+
const feat = Buffer.concat([u16(msg.connFeatures.length), msg.connFeatures]);
|
|
95
|
+
return Buffer.concat([feat, msg.chainHash]);
|
|
96
|
+
}
|
|
97
|
+
exports.encodeInit = encodeInit;
|
|
98
|
+
function decodeInit(payload) {
|
|
99
|
+
const featLen = payload.readUInt16BE(0);
|
|
100
|
+
const connFeatures = payload.subarray(2, 2 + featLen);
|
|
101
|
+
const chainHash = payload.subarray(2 + featLen, 2 + featLen + 32);
|
|
102
|
+
if (chainHash.length !== 32) {
|
|
103
|
+
throw new Error('wtwire init: truncated chainHash');
|
|
104
|
+
}
|
|
105
|
+
return { connFeatures, chainHash };
|
|
106
|
+
}
|
|
107
|
+
exports.decodeInit = decodeInit;
|
|
108
|
+
function encodeError(msg) {
|
|
109
|
+
return Buffer.concat([u16(msg.code), writeVarBytes(msg.data)]);
|
|
110
|
+
}
|
|
111
|
+
exports.encodeError = encodeError;
|
|
112
|
+
function decodeError(payload) {
|
|
113
|
+
const code = payload.readUInt16BE(0);
|
|
114
|
+
const { value: data } = readVarBytes(payload, 2);
|
|
115
|
+
return { code, data };
|
|
116
|
+
}
|
|
117
|
+
exports.decodeError = decodeError;
|
|
118
|
+
function encodeCreateSession(msg) {
|
|
119
|
+
const b = Buffer.alloc(20);
|
|
120
|
+
b.writeUInt16BE(msg.blobType, 0);
|
|
121
|
+
b.writeUInt16BE(msg.maxUpdates, 2);
|
|
122
|
+
b.writeUInt32BE(msg.rewardBase, 4);
|
|
123
|
+
b.writeUInt32BE(msg.rewardRate, 8);
|
|
124
|
+
b.writeBigUInt64BE(msg.sweepFeeRate, 12);
|
|
125
|
+
return b;
|
|
126
|
+
}
|
|
127
|
+
exports.encodeCreateSession = encodeCreateSession;
|
|
128
|
+
function decodeCreateSession(payload) {
|
|
129
|
+
return {
|
|
130
|
+
blobType: payload.readUInt16BE(0),
|
|
131
|
+
maxUpdates: payload.readUInt16BE(2),
|
|
132
|
+
rewardBase: payload.readUInt32BE(4),
|
|
133
|
+
rewardRate: payload.readUInt32BE(8),
|
|
134
|
+
sweepFeeRate: payload.readBigUInt64BE(12)
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
exports.decodeCreateSession = decodeCreateSession;
|
|
138
|
+
function encodeCreateSessionReply(msg) {
|
|
139
|
+
return Buffer.concat([
|
|
140
|
+
u16(msg.code),
|
|
141
|
+
u16(msg.lastApplied),
|
|
142
|
+
writeVarBytes(msg.data)
|
|
143
|
+
]);
|
|
144
|
+
}
|
|
145
|
+
exports.encodeCreateSessionReply = encodeCreateSessionReply;
|
|
146
|
+
function decodeCreateSessionReply(payload) {
|
|
147
|
+
const code = payload.readUInt16BE(0);
|
|
148
|
+
const lastApplied = payload.readUInt16BE(2);
|
|
149
|
+
const { value: data } = readVarBytes(payload, 4);
|
|
150
|
+
return { code, lastApplied, data };
|
|
151
|
+
}
|
|
152
|
+
exports.decodeCreateSessionReply = decodeCreateSessionReply;
|
|
153
|
+
function encodeStateUpdate(msg) {
|
|
154
|
+
if (msg.hint.length !== 16) {
|
|
155
|
+
throw new Error('wtwire state_update: hint must be 16 bytes');
|
|
156
|
+
}
|
|
157
|
+
const head = Buffer.alloc(5);
|
|
158
|
+
head.writeUInt16BE(msg.seqNum, 0);
|
|
159
|
+
head.writeUInt16BE(msg.lastApplied, 2);
|
|
160
|
+
head.writeUInt8(msg.isComplete, 4);
|
|
161
|
+
return Buffer.concat([head, msg.hint, writeVarBytes(msg.encryptedBlob)]);
|
|
162
|
+
}
|
|
163
|
+
exports.encodeStateUpdate = encodeStateUpdate;
|
|
164
|
+
function decodeStateUpdate(payload) {
|
|
165
|
+
const seqNum = payload.readUInt16BE(0);
|
|
166
|
+
const lastApplied = payload.readUInt16BE(2);
|
|
167
|
+
const isComplete = payload.readUInt8(4);
|
|
168
|
+
const hint = payload.subarray(5, 21);
|
|
169
|
+
const { value: encryptedBlob } = readVarBytes(payload, 21);
|
|
170
|
+
return { seqNum, lastApplied, isComplete, hint, encryptedBlob };
|
|
171
|
+
}
|
|
172
|
+
exports.decodeStateUpdate = decodeStateUpdate;
|
|
173
|
+
function encodeStateUpdateReply(msg) {
|
|
174
|
+
return Buffer.concat([u16(msg.code), u16(msg.lastApplied)]);
|
|
175
|
+
}
|
|
176
|
+
exports.encodeStateUpdateReply = encodeStateUpdateReply;
|
|
177
|
+
function decodeStateUpdateReply(payload) {
|
|
178
|
+
return {
|
|
179
|
+
code: payload.readUInt16BE(0),
|
|
180
|
+
lastApplied: payload.readUInt16BE(2)
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
exports.decodeStateUpdateReply = decodeStateUpdateReply;
|
|
184
|
+
function encodeDeleteSession() {
|
|
185
|
+
return Buffer.alloc(0);
|
|
186
|
+
}
|
|
187
|
+
exports.encodeDeleteSession = encodeDeleteSession;
|
|
188
|
+
function encodeDeleteSessionReply(msg) {
|
|
189
|
+
return u16(msg.code);
|
|
190
|
+
}
|
|
191
|
+
exports.encodeDeleteSessionReply = encodeDeleteSessionReply;
|
|
192
|
+
function decodeDeleteSessionReply(payload) {
|
|
193
|
+
return { code: payload.readUInt16BE(0) };
|
|
194
|
+
}
|
|
195
|
+
exports.decodeDeleteSessionReply = decodeDeleteSessionReply;
|
|
196
|
+
function u16(n) {
|
|
197
|
+
const b = Buffer.alloc(2);
|
|
198
|
+
b.writeUInt16BE(n, 0);
|
|
199
|
+
return b;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=wtwire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wtwire.js","sourceRoot":"","sources":["../../../src/lightning/watchtower/wtwire.ts"],"names":[],"mappings":"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"}
|
package/dist/shapes/electrum.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.POLLING_INTERVAL = exports.onMessageKeys = void 0;
|
|
3
|
+
exports.defaultElectrumPeers = exports.ELECTRUM_SERVER_COOLDOWN_MS = exports.POLLING_INTERVAL = exports.onMessageKeys = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
4
5
|
exports.onMessageKeys = {
|
|
5
6
|
newBlock: 'newBlock',
|
|
6
7
|
transactionReceived: 'transactionReceived',
|
|
@@ -11,4 +12,34 @@ exports.onMessageKeys = {
|
|
|
11
12
|
connectedToElectrum: 'connectedToElectrum'
|
|
12
13
|
};
|
|
13
14
|
exports.POLLING_INTERVAL = 1000 * 10;
|
|
15
|
+
exports.ELECTRUM_SERVER_COOLDOWN_MS = 1000 * 60;
|
|
16
|
+
exports.defaultElectrumPeers = {
|
|
17
|
+
[types_1.EElectrumNetworks.bitcoin]: [
|
|
18
|
+
{ host: '35.187.18.233', ssl: 8900, tcp: 8911, protocol: types_1.EProtocol.ssl },
|
|
19
|
+
{
|
|
20
|
+
host: 'electrum.aantonop.com',
|
|
21
|
+
ssl: 50002,
|
|
22
|
+
tcp: 50001,
|
|
23
|
+
protocol: types_1.EProtocol.ssl
|
|
24
|
+
},
|
|
25
|
+
{ host: 'bitcoin.lu.ke', ssl: 50002, tcp: 50001, protocol: types_1.EProtocol.ssl },
|
|
26
|
+
{
|
|
27
|
+
host: 'kirsche.emzy.de',
|
|
28
|
+
ssl: 50002,
|
|
29
|
+
tcp: 50001,
|
|
30
|
+
protocol: types_1.EProtocol.ssl
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
[types_1.EElectrumNetworks.bitcoinTestnet]: [
|
|
34
|
+
{
|
|
35
|
+
host: 'testnet.aranguren.org',
|
|
36
|
+
ssl: 51002,
|
|
37
|
+
tcp: 51001,
|
|
38
|
+
protocol: types_1.EProtocol.ssl
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
[types_1.EElectrumNetworks.bitcoinSignet]: [
|
|
42
|
+
{ host: 'mempool.space', ssl: 60602, tcp: 60601, protocol: types_1.EProtocol.ssl }
|
|
43
|
+
]
|
|
44
|
+
};
|
|
14
45
|
//# sourceMappingURL=electrum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electrum.js","sourceRoot":"","sources":["../../src/shapes/electrum.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"electrum.js","sourceRoot":"","sources":["../../src/shapes/electrum.ts"],"names":[],"mappings":";;;AAAA,oCAA+E;AAElE,QAAA,aAAa,GAA+B;IACxD,QAAQ,EAAE,UAAU;IACpB,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,eAAe,EAAE,iBAAiB;IAClC,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,mBAAmB,EAAE,qBAAqB;CAC1C,CAAC;AAEW,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AAM7B,QAAA,2BAA2B,GAAG,IAAI,GAAG,EAAE,CAAC;AAQxC,QAAA,oBAAoB,GAE7B;IACH,CAAC,yBAAiB,CAAC,OAAO,CAAC,EAAE;QAC5B,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAS,CAAC,GAAG,EAAE;QACxE;YACC,IAAI,EAAE,uBAAuB;YAC7B,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,iBAAS,CAAC,GAAG;SACvB;QACD,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAS,CAAC,GAAG,EAAE;QAC1E;YACC,IAAI,EAAE,iBAAiB;YACvB,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,iBAAS,CAAC,GAAG;SACvB;KACD;IACD,CAAC,yBAAiB,CAAC,cAAc,CAAC,EAAE;QACnC;YACC,IAAI,EAAE,uBAAuB;YAC7B,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,iBAAS,CAAC,GAAG;SACvB;KACD;IACD,CAAC,yBAAiB,CAAC,aAAa,CAAC,EAAE;QAClC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAS,CAAC,GAAG,EAAE;KAC1E;CACD,CAAC"}
|
package/dist/shapes/wallet.js
CHANGED
|
@@ -39,6 +39,14 @@ exports.addressTypes = {
|
|
|
39
39
|
shortName: 'Taproot',
|
|
40
40
|
description: 'Taproot Address',
|
|
41
41
|
example: '(bc1px...)'
|
|
42
|
+
},
|
|
43
|
+
[types_1.EAddressType.p2wsh]: {
|
|
44
|
+
type: types_1.EAddressType.p2wsh,
|
|
45
|
+
path: "m/48'/0'/0'/2'/0/0",
|
|
46
|
+
name: 'Multisig Segwit P2WSH',
|
|
47
|
+
shortName: 'Multisig',
|
|
48
|
+
description: 'Pay-to-witness-script-hash sorted multisig',
|
|
49
|
+
example: '(bc1q... 62 chars)'
|
|
42
50
|
}
|
|
43
51
|
};
|
|
44
52
|
exports.defaultAddressContent = {
|
|
@@ -110,7 +118,9 @@ exports.defaultWalletData = {
|
|
|
110
118
|
slow: 3,
|
|
111
119
|
minimum: 2,
|
|
112
120
|
timestamp: 0
|
|
113
|
-
}
|
|
121
|
+
},
|
|
122
|
+
addressLabels: {},
|
|
123
|
+
birthdayHeight: 0
|
|
114
124
|
};
|
|
115
125
|
exports.defaultFeesShape = {
|
|
116
126
|
fast: 4,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/shapes/wallet.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/shapes/wallet.ts"],"names":[],"mappings":";;;;;;AAOA,wEAAyC;AACzC,oCAMkB;AAClB,oCAAkC;AAErB,QAAA,YAAY,GAA4B;IACpD,CAAC,oBAAY,CAAC,MAAM,CAAC,EAAE;QACtB,IAAI,EAAE,oBAAY,CAAC,MAAM;QACzB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,sBAAsB;QAC5B,SAAS,EAAE,eAAe;QAC1B,WAAW,EAAE,gCAAgC;QAC7C,OAAO,EAAE,WAAW;KACpB;IACD,CAAC,oBAAY,CAAC,IAAI,CAAC,EAAE;QACpB,IAAI,EAAE,oBAAY,CAAC,IAAI;QACvB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE,SAAS;KAClB;IACD,CAAC,oBAAY,CAAC,KAAK,CAAC,EAAE;QACrB,IAAI,EAAE,oBAAY,CAAC,KAAK;QACxB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE,SAAS;KAClB;IACD,CAAC,oBAAY,CAAC,IAAI,CAAC,EAAE;QACpB,IAAI,EAAE,oBAAY,CAAC,IAAI;QACvB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,YAAY;KACrB;IACD,CAAC,oBAAY,CAAC,KAAK,CAAC,EAAE;QACrB,IAAI,EAAE,oBAAY,CAAC,KAAK;QAExB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,uBAAuB;QAC7B,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE,oBAAoB;KAC7B;CACD,CAAC;AAEW,QAAA,qBAAqB,GAAuB;IACxD,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,EAAE;CACb,CAAC;AAEW,QAAA,sBAAsB,GAAqB;IACvD,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;IACV,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,CAAC;IACb,GAAG,EAAE,GAAG;IACR,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,kBAAU,CAAC,IAAI;IAC1B,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,EAAE;IACR,gBAAgB,EAAE,EAAE;IACpB,aAAa,EAAE,cAAM,CAAC,IAAI;CAC1B,CAAC;AAEK,MAAM,yBAAyB,GAAG,GAAqB,EAAE;IAC/D,OAAO,IAAA,0BAAS,EAAC,8BAAsB,CAAC,CAAC;AAC1C,CAAC,CAAC;AAFW,QAAA,yBAAyB,6BAEpC;AAEK,MAAM,qBAAqB,GAAG,CACpC,IAAO,EAC4B,EAAE;IACrC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAY,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,EAA4B,CAAC;IAE7C,eAAe,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACvC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,IAAA,0BAAS,EAAC,OAAO,CAAC,CAAC;AAC3B,CAAC,CAAC;AAXW,QAAA,qBAAqB,yBAWhC;AAEK,MAAM,gBAAgB,GAAG,GAAY,EAAE;IAC7C,OAAO,IAAA,0BAAS,EAAC;QAChB,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;KACP,CAAC,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B;AAEW,QAAA,iBAAiB,GAA0B;IACvD,EAAE,EAAE,EAAE;IACN,WAAW,EAAE,oBAAY,CAAC,MAAM;IAChC,MAAM,EAAE,IAAA,wBAAgB,GAAE;IAC1B,SAAS,EAAE,IAAA,6BAAqB,EAAa,EAAE,CAAC;IAChD,eAAe,EAAE,IAAA,6BAAqB,EAAa,EAAE,CAAC;IACtD,YAAY,EAAE,IAAA,6BAAqB,EAAW,6BAAqB,CAAC;IACpE,kBAAkB,EAAE,IAAA,6BAAqB,EAAW,6BAAqB,CAAC;IAC1E,oBAAoB,EAAE,IAAA,6BAAqB,EAAW,6BAAqB,CAAC;IAC5E,0BAA0B,EAAE,IAAA,6BAAqB,EAChD,6BAAqB,CACrB;IACD,KAAK,EAAE,EAAE;IACT,gBAAgB,EAAE,EAAE;IACpB,uBAAuB,EAAE,EAAE;IAC3B,YAAY,EAAE,EAAE;IAChB,mBAAmB,EAAE,EAAE;IACvB,WAAW,EAAE,IAAA,iCAAyB,GAAE;IACxC,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,cAAM,CAAC,MAAM;IAC5B,YAAY,EAAE;QACb,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC;KACZ;IACD,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,CAAC;CACjB,CAAC;AAEW,QAAA,gBAAgB,GAAiB;IAE7C,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC;CAC1C,CAAC;AAEK,MAAM,eAAe,GAAG,GAAmB,EAAE;IACnD,OAAO,IAAA,0BAAS,EAAC,MAAM,CAAC,MAAM,CAAC,oBAAY,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B"}
|
|
@@ -33,10 +33,10 @@ const utils_1 = require("../utils");
|
|
|
33
33
|
const utils_2 = require("../utils");
|
|
34
34
|
const constants_1 = require("../wallet/constants");
|
|
35
35
|
const utils_3 = require("../utils");
|
|
36
|
-
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
37
36
|
const secp256k1_1 = __importDefault(require("@bitcoinerlab/secp256k1"));
|
|
38
37
|
const bitcoin = __importStar(require("bitcoinjs-lib"));
|
|
39
38
|
const bitcoin_address_validation_1 = require("bitcoin-address-validation");
|
|
39
|
+
const bip371_1 = require("bitcoinjs-lib/src/psbt/bip371");
|
|
40
40
|
bitcoin.initEccLib(secp256k1_1.default);
|
|
41
41
|
class Transaction {
|
|
42
42
|
constructor({ wallet }) {
|
|
@@ -65,7 +65,7 @@ class Transaction {
|
|
|
65
65
|
if (changeAddress && !transaction.max) {
|
|
66
66
|
outputAddresses.push(changeAddress);
|
|
67
67
|
}
|
|
68
|
-
const inputParam = (0, utils_3.constructByteCountParam)(inputAddresses);
|
|
68
|
+
const inputParam = this.applyMultisigInputWeights((0, utils_3.constructByteCountParam)(inputAddresses));
|
|
69
69
|
const outputParam = (0, utils_3.constructByteCountParam)(outputAddresses);
|
|
70
70
|
if (fundingLightning) {
|
|
71
71
|
outputParam.P2WPKH = (outputParam.P2WPKH || 0) + 1;
|
|
@@ -123,7 +123,7 @@ class Transaction {
|
|
|
123
123
|
if (changeAddress && !transaction.max) {
|
|
124
124
|
outputAddresses.push(changeAddress);
|
|
125
125
|
}
|
|
126
|
-
const inputParam = (0, utils_3.constructByteCountParam)(inputAddresses);
|
|
126
|
+
const inputParam = this.applyMultisigInputWeights((0, utils_3.constructByteCountParam)(inputAddresses));
|
|
127
127
|
const outputParam = (0, utils_3.constructByteCountParam)(outputAddresses, [
|
|
128
128
|
{ addrType: this._wallet.addressType, count: increaseAddressCount }
|
|
129
129
|
]);
|
|
@@ -271,7 +271,7 @@ class Transaction {
|
|
|
271
271
|
if ((0, utils_1.isP2trPrefix)(input.address)) {
|
|
272
272
|
const tapRootAddress = (0, utils_1.getTapRootAddressFromPublicKey)({
|
|
273
273
|
publicKey: keyPair.publicKey,
|
|
274
|
-
network:
|
|
274
|
+
network: (0, utils_2.getBitcoinJsNetwork)(this._wallet.network)
|
|
275
275
|
});
|
|
276
276
|
if (tapRootAddress.isErr())
|
|
277
277
|
return (0, utils_1.err)(tapRootAddress.error.message);
|
|
@@ -299,7 +299,7 @@ class Transaction {
|
|
|
299
299
|
const outputValue = this.getTransactionOutputValue({
|
|
300
300
|
outputs
|
|
301
301
|
});
|
|
302
|
-
const network =
|
|
302
|
+
const network = (0, utils_2.getBitcoinJsNetwork)(this._wallet.network);
|
|
303
303
|
let targets = outputs.concat();
|
|
304
304
|
if (changeAddress) {
|
|
305
305
|
const changeAddressValue = balance - (outputValue + fee);
|
|
@@ -339,7 +339,7 @@ class Transaction {
|
|
|
339
339
|
});
|
|
340
340
|
targets.push({ script: embed.output, value: 0, index: targets.length });
|
|
341
341
|
}
|
|
342
|
-
if (!bip32Interface) {
|
|
342
|
+
if (!bip32Interface && !this._wallet.isWatchOnly) {
|
|
343
343
|
const bip32InterfaceRes = await this._wallet.getBip32Interface();
|
|
344
344
|
if (bip32InterfaceRes.isErr()) {
|
|
345
345
|
return (0, utils_1.err)(bip32InterfaceRes.error.message);
|
|
@@ -350,9 +350,24 @@ class Transaction {
|
|
|
350
350
|
const psbt = new bitcoin.Psbt({ network });
|
|
351
351
|
try {
|
|
352
352
|
for (const input of inputs) {
|
|
353
|
+
if (this._wallet.isMultisig) {
|
|
354
|
+
const addRes = await this.addInput({ psbt, input });
|
|
355
|
+
if (addRes.isErr())
|
|
356
|
+
return (0, utils_1.err)(addRes.error.message);
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
353
359
|
let keyPair = input?.keyPair;
|
|
354
360
|
if (!keyPair && input?.path) {
|
|
355
|
-
|
|
361
|
+
if (root) {
|
|
362
|
+
keyPair = root.derivePath(input.path);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
const publicNodeRes = this._wallet.derivePublicNode(input.path);
|
|
366
|
+
if (publicNodeRes.isErr()) {
|
|
367
|
+
return (0, utils_1.err)(publicNodeRes.error.message);
|
|
368
|
+
}
|
|
369
|
+
keyPair = publicNodeRes.value;
|
|
370
|
+
}
|
|
356
371
|
}
|
|
357
372
|
if (!keyPair) {
|
|
358
373
|
return (0, utils_1.err)('Unable to derive keyPair.');
|
|
@@ -396,9 +411,47 @@ class Transaction {
|
|
|
396
411
|
});
|
|
397
412
|
return (0, utils_1.ok)(psbt);
|
|
398
413
|
};
|
|
414
|
+
this.createUnsignedPsbt = async ({ transactionData = this.data, shuffleOutputs = true } = {}) => {
|
|
415
|
+
(0, utils_3.removeDustOutputs)(transactionData.outputs);
|
|
416
|
+
const inputValue = this.getTransactionInputValue({
|
|
417
|
+
inputs: transactionData.inputs
|
|
418
|
+
});
|
|
419
|
+
const outputValue = this.getTransactionOutputValue({
|
|
420
|
+
outputs: transactionData.outputs
|
|
421
|
+
});
|
|
422
|
+
if (inputValue === 0) {
|
|
423
|
+
return (0, utils_1.err)('No inputs to spend.');
|
|
424
|
+
}
|
|
425
|
+
const fee = inputValue - outputValue;
|
|
426
|
+
if (fee > inputValue) {
|
|
427
|
+
return (0, utils_1.err)('Fee is larger than the intended payment.');
|
|
428
|
+
}
|
|
429
|
+
const validateRes = (0, utils_1.validateTransaction)(transactionData);
|
|
430
|
+
if (validateRes.isErr())
|
|
431
|
+
return (0, utils_1.err)(validateRes.error.message);
|
|
432
|
+
try {
|
|
433
|
+
const psbtRes = await this.createPsbtFromTransactionData({
|
|
434
|
+
transactionData,
|
|
435
|
+
shuffleTargets: shuffleOutputs
|
|
436
|
+
});
|
|
437
|
+
if (psbtRes.isErr())
|
|
438
|
+
return (0, utils_1.err)(psbtRes.error);
|
|
439
|
+
const psbt = psbtRes.value;
|
|
440
|
+
const metadataRes = this.addSignerMetadata({
|
|
441
|
+
psbt,
|
|
442
|
+
inputs: transactionData.inputs
|
|
443
|
+
});
|
|
444
|
+
if (metadataRes.isErr())
|
|
445
|
+
return (0, utils_1.err)(metadataRes.error.message);
|
|
446
|
+
return (0, utils_1.ok)(psbt);
|
|
447
|
+
}
|
|
448
|
+
catch (e) {
|
|
449
|
+
return (0, utils_1.err)(e);
|
|
450
|
+
}
|
|
451
|
+
};
|
|
399
452
|
this.addInput = async ({ psbt, keyPair, input }) => {
|
|
400
453
|
try {
|
|
401
|
-
const network =
|
|
454
|
+
const network = (0, utils_2.getBitcoinJsNetwork)(this._wallet.network);
|
|
402
455
|
const { type } = (0, bitcoin_address_validation_1.getAddressInfo)(input.address);
|
|
403
456
|
if (!input.value) {
|
|
404
457
|
return (0, utils_1.err)('No input provided.');
|
|
@@ -409,6 +462,28 @@ class Transaction {
|
|
|
409
462
|
if (input?.keyPair) {
|
|
410
463
|
keyPair = input.keyPair;
|
|
411
464
|
}
|
|
465
|
+
if (type === 'p2wsh') {
|
|
466
|
+
const paymentRes = this._wallet.getMultisigPayment(input.path);
|
|
467
|
+
if (paymentRes.isErr())
|
|
468
|
+
return (0, utils_1.err)(paymentRes.error.message);
|
|
469
|
+
const { address, output, witnessScript } = paymentRes.value;
|
|
470
|
+
if (address !== input.address) {
|
|
471
|
+
return (0, utils_1.err)(`Multisig script for path ${input.path} does not produce address ${input.address}.`);
|
|
472
|
+
}
|
|
473
|
+
psbt.addInput({
|
|
474
|
+
hash: input.tx_hash,
|
|
475
|
+
index: input.tx_pos,
|
|
476
|
+
witnessUtxo: {
|
|
477
|
+
script: output,
|
|
478
|
+
value: input.value
|
|
479
|
+
},
|
|
480
|
+
witnessScript
|
|
481
|
+
});
|
|
482
|
+
return (0, utils_1.ok)('Success');
|
|
483
|
+
}
|
|
484
|
+
if (!keyPair) {
|
|
485
|
+
return (0, utils_1.err)('Unable to derive keyPair.');
|
|
486
|
+
}
|
|
412
487
|
if (type === 'p2wpkh') {
|
|
413
488
|
const p2wpkh = bitcoin.payments.p2wpkh({
|
|
414
489
|
pubkey: keyPair.publicKey,
|
|
@@ -654,15 +729,15 @@ class Transaction {
|
|
|
654
729
|
const transaction = currentWallet.transaction;
|
|
655
730
|
let inputs = [];
|
|
656
731
|
if (inputTxHashes) {
|
|
657
|
-
inputs = currentWallet.utxos.filter((utxo) => {
|
|
732
|
+
inputs = this.removeBlackListedUtxos(currentWallet.utxos.filter((utxo) => {
|
|
658
733
|
return inputTxHashes.includes(utxo.tx_hash);
|
|
659
|
-
});
|
|
734
|
+
}));
|
|
660
735
|
}
|
|
661
736
|
else if (utxos) {
|
|
662
737
|
inputs = utxos;
|
|
663
738
|
}
|
|
664
739
|
else {
|
|
665
|
-
inputs = currentWallet.utxos;
|
|
740
|
+
inputs = this.removeBlackListedUtxos(currentWallet.utxos);
|
|
666
741
|
}
|
|
667
742
|
if (!inputs.length) {
|
|
668
743
|
if (transaction.inputs.length > 0) {
|
|
@@ -747,12 +822,85 @@ class Transaction {
|
|
|
747
822
|
}
|
|
748
823
|
const blacklistedUtxos = this._wallet.data.blacklistedUtxos;
|
|
749
824
|
return utxos.filter((utxo) => {
|
|
750
|
-
return !blacklistedUtxos.find((blacklistedUtxo) => utxo.
|
|
751
|
-
utxo.height === blacklistedUtxo.height &&
|
|
752
|
-
utxo.tx_hash === blacklistedUtxo.tx_hash &&
|
|
825
|
+
return !blacklistedUtxos.find((blacklistedUtxo) => utxo.tx_hash === blacklistedUtxo.tx_hash &&
|
|
753
826
|
utxo.tx_pos === blacklistedUtxo.tx_pos);
|
|
754
827
|
});
|
|
755
828
|
}
|
|
829
|
+
applyMultisigInputWeights(param) {
|
|
830
|
+
const info = this._wallet?.multisigInfo;
|
|
831
|
+
if (!info)
|
|
832
|
+
return param;
|
|
833
|
+
const record = param;
|
|
834
|
+
const count = record.P2WSH ?? record.p2wsh ?? 0;
|
|
835
|
+
if (count > 0) {
|
|
836
|
+
delete record.P2WSH;
|
|
837
|
+
delete record.p2wsh;
|
|
838
|
+
record[`MULTISIG-P2WSH:${info.threshold}-${info.totalCosigners}`] = count;
|
|
839
|
+
}
|
|
840
|
+
return param;
|
|
841
|
+
}
|
|
842
|
+
addSignerMetadata({ psbt, inputs }) {
|
|
843
|
+
try {
|
|
844
|
+
if (this._wallet.isMultisig) {
|
|
845
|
+
inputs.forEach((input, index) => {
|
|
846
|
+
if (!input.path)
|
|
847
|
+
return;
|
|
848
|
+
const paymentRes = this._wallet.getMultisigPayment(input.path);
|
|
849
|
+
if (paymentRes.isErr())
|
|
850
|
+
throw paymentRes.error;
|
|
851
|
+
psbt.updateInput(index, {
|
|
852
|
+
bip32Derivation: paymentRes.value.derivations
|
|
853
|
+
});
|
|
854
|
+
});
|
|
855
|
+
return (0, utils_1.ok)('Signer metadata added.');
|
|
856
|
+
}
|
|
857
|
+
const masterFingerprint = this._wallet.getMasterFingerprint();
|
|
858
|
+
inputs.forEach((input, index) => {
|
|
859
|
+
if (!input.path)
|
|
860
|
+
return;
|
|
861
|
+
let pubkey;
|
|
862
|
+
if (input.publicKey) {
|
|
863
|
+
pubkey = Buffer.from(input.publicKey, 'hex');
|
|
864
|
+
}
|
|
865
|
+
else if (input.keyPair) {
|
|
866
|
+
pubkey = input.keyPair.publicKey;
|
|
867
|
+
}
|
|
868
|
+
else {
|
|
869
|
+
const publicNodeRes = this._wallet.derivePublicNode(input.path);
|
|
870
|
+
if (publicNodeRes.isErr())
|
|
871
|
+
throw publicNodeRes.error;
|
|
872
|
+
pubkey = publicNodeRes.value.publicKey;
|
|
873
|
+
}
|
|
874
|
+
if ((0, utils_1.isP2trPrefix)(input.address)) {
|
|
875
|
+
psbt.updateInput(index, {
|
|
876
|
+
tapBip32Derivation: [
|
|
877
|
+
{
|
|
878
|
+
masterFingerprint,
|
|
879
|
+
path: input.path,
|
|
880
|
+
pubkey: (0, bip371_1.toXOnly)(pubkey),
|
|
881
|
+
leafHashes: []
|
|
882
|
+
}
|
|
883
|
+
]
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
else {
|
|
887
|
+
psbt.updateInput(index, {
|
|
888
|
+
bip32Derivation: [
|
|
889
|
+
{
|
|
890
|
+
masterFingerprint,
|
|
891
|
+
path: input.path,
|
|
892
|
+
pubkey
|
|
893
|
+
}
|
|
894
|
+
]
|
|
895
|
+
});
|
|
896
|
+
}
|
|
897
|
+
});
|
|
898
|
+
return (0, utils_1.ok)('Signer metadata added.');
|
|
899
|
+
}
|
|
900
|
+
catch (e) {
|
|
901
|
+
return (0, utils_1.err)(e);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
756
904
|
addExternalInputs({ inputs, keyPair }) {
|
|
757
905
|
if (!inputs || !inputs.length)
|
|
758
906
|
return (0, utils_1.err)('No inputs provided.');
|
|
@@ -1062,7 +1210,7 @@ class Transaction {
|
|
|
1062
1210
|
addressTypes.outputs[type] = 1;
|
|
1063
1211
|
}
|
|
1064
1212
|
});
|
|
1065
|
-
let baseFee = (0, utils_3.getByteCount)(addressTypes.inputs, addressTypes.outputs, message);
|
|
1213
|
+
let baseFee = (0, utils_3.getByteCount)(this.applyMultisigInputWeights(addressTypes.inputs), addressTypes.outputs, message);
|
|
1066
1214
|
if (satsPerByte < 2) {
|
|
1067
1215
|
const minByteCount = constants_1.TRANSACTION_DEFAULTS.recommendedBaseFee;
|
|
1068
1216
|
if (baseFee < minByteCount)
|