@buildonspark/spark-sdk 0.1.46 → 0.2.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/CHANGELOG.md +26 -0
- package/dist/{chunk-BGGEVUJK.js → chunk-2ENZX6LT.js} +241 -7
- package/dist/{chunk-LHRD2WT6.js → chunk-4JD4HIAN.js} +23 -3
- package/dist/{chunk-I54FARY2.js → chunk-CDLETEDT.js} +11 -3
- package/dist/{chunk-OBFKIEMP.js → chunk-TM6CHQXC.js} +1 -1
- package/dist/chunk-UDK3EBE5.js +13514 -0
- package/dist/chunk-XYTKKLCV.js +7 -0
- package/dist/{RequestLightningSendInput-2cSh_In4.d.cts → client-DKbwpcnl.d.ts} +434 -212
- package/dist/{RequestLightningSendInput-CN6BNg_g.d.ts → client-Drs5Lapg.d.cts} +434 -212
- package/dist/{services/config.cjs → debug.cjs} +31007 -1003
- package/dist/debug.d.cts +126 -0
- package/dist/debug.d.ts +126 -0
- package/dist/debug.js +21 -0
- package/dist/graphql/objects/index.d.cts +4 -11
- package/dist/graphql/objects/index.d.ts +4 -11
- package/dist/graphql/objects/index.js +2 -4
- package/dist/index.cjs +18219 -20818
- package/dist/index.d.cts +15 -768
- package/dist/index.d.ts +15 -768
- package/dist/index.js +82 -76
- package/dist/index.node.cjs +23831 -26538
- package/dist/index.node.d.cts +191 -33
- package/dist/index.node.d.ts +191 -33
- package/dist/index.node.js +87 -181
- package/dist/native/index.cjs +17835 -20519
- package/dist/native/index.d.cts +1466 -1546
- package/dist/native/index.d.ts +1466 -1546
- package/dist/native/index.js +22605 -25286
- package/dist/proto/lrc20.d.cts +2 -2
- package/dist/proto/lrc20.d.ts +2 -2
- package/dist/proto/lrc20.js +3098 -46
- package/dist/proto/spark.cjs +241 -7
- package/dist/proto/spark.d.cts +1 -1
- package/dist/proto/spark.d.ts +1 -1
- package/dist/proto/spark.js +5 -1
- package/dist/proto/spark_token.cjs +22 -2
- package/dist/proto/spark_token.d.cts +8 -1
- package/dist/proto/spark_token.d.ts +8 -1
- package/dist/proto/spark_token.js +2 -2
- package/dist/{sdk-types-CKBsylfW.d.ts → sdk-types-DCIVdKUT.d.ts} +1 -1
- package/dist/{sdk-types-Ct8xmN7l.d.cts → sdk-types-DJ2ve9YY.d.cts} +1 -1
- package/dist/{spark-DbzGfse6.d.ts → spark-BUOx3U7Q.d.cts} +103 -5
- package/dist/{spark-DbzGfse6.d.cts → spark-BUOx3U7Q.d.ts} +103 -5
- package/dist/spark-wallet-CF8Oxjqs.d.ts +935 -0
- package/dist/spark-wallet-DOLSa3oF.d.cts +935 -0
- package/dist/spark_bindings/native/index.d.cts +1 -1
- package/dist/spark_bindings/native/index.d.ts +1 -1
- package/dist/spark_bindings/wasm/index.d.cts +1 -1
- package/dist/spark_bindings/wasm/index.d.ts +1 -1
- package/dist/{services/index.cjs → tests/test-utils.cjs} +9788 -10263
- package/dist/tests/test-utils.d.cts +79 -0
- package/dist/tests/test-utils.d.ts +79 -0
- package/dist/tests/test-utils.js +93 -0
- package/dist/types/index.cjs +239 -7
- package/dist/types/index.d.cts +5 -9
- package/dist/types/index.d.ts +5 -9
- package/dist/types/index.js +4 -6
- package/dist/{types-C-Rp0Oo7.d.ts → types-BADxR3bm.d.cts} +1 -1
- package/dist/{types-C-Rp0Oo7.d.cts → types-BADxR3bm.d.ts} +1 -1
- package/dist/{index-COm59SPw.d.ts → xchain-address-C2xMs9nz.d.cts} +6 -94
- package/dist/{index-CKL5DodV.d.cts → xchain-address-Ckto9oEz.d.ts} +6 -94
- package/package.json +9 -33
- package/src/debug.ts +13 -0
- package/src/graphql/client.ts +59 -20
- package/src/index.node.ts +28 -2
- package/src/index.ts +31 -1
- package/src/native/index.ts +16 -2
- package/src/proto/mock.ts +76 -0
- package/src/proto/spark.ts +354 -6
- package/src/proto/spark_token.ts +34 -2
- package/src/services/config.ts +4 -6
- package/src/services/connection.ts +131 -64
- package/src/services/coop-exit.ts +6 -3
- package/src/services/deposit.ts +9 -8
- package/src/services/lightning.ts +4 -3
- package/src/services/signing.ts +10 -6
- package/src/services/token-transactions.ts +100 -85
- package/src/services/transfer.ts +88 -60
- package/src/services/tree-creation.ts +17 -9
- package/src/services/wallet-config.ts +17 -9
- package/src/signer/signer.react-native.ts +5 -10
- package/src/signer/signer.ts +269 -339
- package/src/signer/types.ts +63 -0
- package/src/spark-wallet/spark-wallet.ts +226 -149
- package/src/spark-wallet/types.ts +22 -8
- package/src/tests/integration/adaptor-signature.test.ts +8 -9
- package/src/tests/integration/coop-exit.test.ts +214 -202
- package/src/tests/integration/lightning.test.ts +128 -103
- package/src/tests/integration/swap.test.ts +116 -84
- package/src/tests/integration/transfer.test.ts +291 -214
- package/src/tests/integration/tree-creation.test.ts +0 -5
- package/src/tests/integration/wallet.test.ts +1 -0
- package/src/tests/isHermeticTest.ts +3 -24
- package/src/tests/{test-util.ts → test-utils.ts} +13 -11
- package/src/tests/token-identifier.test.ts +6 -6
- package/src/tests/wrapWithOtelSpan.test.ts +1 -1
- package/src/{address → utils}/address.ts +1 -1
- package/src/utils/crypto.ts +19 -9
- package/src/utils/index.ts +2 -0
- package/src/utils/network.ts +17 -0
- package/src/utils/secret-sharing.ts +1 -2
- package/src/utils/signing.ts +1 -1
- package/src/utils/token-identifier.ts +27 -21
- package/src/utils/token-transaction-validation.ts +34 -0
- package/src/utils/token-transactions.ts +12 -8
- package/src/utils/unilateral-exit.ts +32 -0
- package/src/utils/xchain-address.ts +1 -1
- package/dist/BitcoinNetwork-TnABML0T.d.cts +0 -18
- package/dist/BitcoinNetwork-TnABML0T.d.ts +0 -18
- package/dist/LightningSendFeeEstimateInput-BgOhEAI-.d.cts +0 -10
- package/dist/LightningSendFeeEstimateInput-BgOhEAI-.d.ts +0 -10
- package/dist/address/index.cjs +0 -458
- package/dist/address/index.d.cts +0 -32
- package/dist/address/index.d.ts +0 -32
- package/dist/address/index.js +0 -17
- package/dist/chunk-4EMV7HHW.js +0 -277
- package/dist/chunk-C2S227QR.js +0 -2336
- package/dist/chunk-DXR2PXJU.js +0 -1122
- package/dist/chunk-GSI4OLXZ.js +0 -117
- package/dist/chunk-HHNQ3ZHC.js +0 -170
- package/dist/chunk-HMLOC6TE.js +0 -14
- package/dist/chunk-HSCLBJEL.js +0 -113
- package/dist/chunk-HWJWKEIU.js +0 -75
- package/dist/chunk-JB64OQES.js +0 -7095
- package/dist/chunk-KMUMFYFX.js +0 -137
- package/dist/chunk-N5VZVCGJ.js +0 -622
- package/dist/chunk-NSJF5F5O.js +0 -325
- package/dist/chunk-NTFKFRQ2.js +0 -3146
- package/dist/chunk-OFCJFZ4I.js +0 -24
- package/dist/chunk-QNNSEJ4P.js +0 -232
- package/dist/chunk-UXDODSDT.js +0 -838
- package/dist/chunk-VTUGIIWI.js +0 -0
- package/dist/chunk-Z5HIAYFT.js +0 -84
- package/dist/network-Css46DAz.d.cts +0 -46
- package/dist/network-hynb7iTZ.d.ts +0 -46
- package/dist/services/config.d.cts +0 -42
- package/dist/services/config.d.ts +0 -42
- package/dist/services/config.js +0 -17
- package/dist/services/connection.cjs +0 -17691
- package/dist/services/connection.d.cts +0 -95
- package/dist/services/connection.d.ts +0 -95
- package/dist/services/connection.js +0 -11
- package/dist/services/index.d.cts +0 -21
- package/dist/services/index.d.ts +0 -21
- package/dist/services/index.js +0 -58
- package/dist/services/lrc-connection.cjs +0 -4713
- package/dist/services/lrc-connection.d.cts +0 -34
- package/dist/services/lrc-connection.d.ts +0 -34
- package/dist/services/lrc-connection.js +0 -11
- package/dist/services/token-transactions.cjs +0 -2877
- package/dist/services/token-transactions.d.cts +0 -75
- package/dist/services/token-transactions.d.ts +0 -75
- package/dist/services/token-transactions.js +0 -15
- package/dist/services/wallet-config.cjs +0 -340
- package/dist/services/wallet-config.d.cts +0 -56
- package/dist/services/wallet-config.d.ts +0 -56
- package/dist/services/wallet-config.js +0 -33
- package/dist/signer/signer.cjs +0 -2004
- package/dist/signer/signer.d.cts +0 -10
- package/dist/signer/signer.d.ts +0 -10
- package/dist/signer/signer.js +0 -24
- package/dist/signer-BP6F__oR.d.cts +0 -187
- package/dist/signer-BVZJXcq7.d.ts +0 -187
- package/dist/utils/index.cjs +0 -2947
- package/dist/utils/index.d.cts +0 -18
- package/dist/utils/index.d.ts +0 -18
- package/dist/utils/index.js +0 -157
- package/ios/spark_frost.kt +0 -1900
- package/src/address/index.ts +0 -1
- package/src/services/lrc-connection.ts +0 -215
- /package/dist/{chunk-L3EHBOUX.js → chunk-BYXBJQAS.js} +0 -0
|
@@ -4,9 +4,11 @@ import {
|
|
|
4
4
|
equalBytes,
|
|
5
5
|
hexToBytes,
|
|
6
6
|
} from "@noble/curves/abstract/utils";
|
|
7
|
-
import { sha256 } from "@noble/hashes/sha2";
|
|
8
7
|
import { generateMnemonic } from "@scure/bip39";
|
|
9
8
|
import { wordlist } from "@scure/bip39/wordlists/english";
|
|
9
|
+
import { uuidv7 } from "uuidv7";
|
|
10
|
+
import { RPCError } from "../../errors/types.js";
|
|
11
|
+
import { KeyDerivation, KeyDerivationType } from "../../index.js";
|
|
10
12
|
import { TransferStatus } from "../../proto/spark.js";
|
|
11
13
|
import { WalletConfigService } from "../../services/config.js";
|
|
12
14
|
import { ConnectionManager } from "../../services/connection.js";
|
|
@@ -16,123 +18,128 @@ import { TransferService } from "../../services/transfer.js";
|
|
|
16
18
|
import {
|
|
17
19
|
ConfigOptions,
|
|
18
20
|
getLocalSigningOperators,
|
|
19
|
-
|
|
21
|
+
WalletConfig,
|
|
20
22
|
} from "../../services/wallet-config.js";
|
|
21
|
-
import { createNewTree } from "../../tests/test-util.js";
|
|
22
23
|
import { NetworkType } from "../../utils/network.js";
|
|
24
|
+
import { createNewTree } from "../test-utils.js";
|
|
23
25
|
import { SparkWalletTesting } from "../utils/spark-testing-wallet.js";
|
|
24
26
|
import { BitcoinFaucet } from "../utils/test-faucet.js";
|
|
25
|
-
import { RPCError } from "../../errors/types.js";
|
|
26
27
|
|
|
27
28
|
const testLocalOnly = process.env.GITHUB_ACTIONS ? it.skip : it;
|
|
28
29
|
|
|
29
30
|
describe("Transfer", () => {
|
|
30
31
|
jest.setTimeout(15_000);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
async () => {
|
|
34
|
-
const faucet = BitcoinFaucet.getInstance();
|
|
35
|
-
|
|
36
|
-
const options: ConfigOptions = {
|
|
37
|
-
network: "LOCAL",
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const { wallet: senderWallet } = await SparkWalletTesting.initialize({
|
|
41
|
-
options,
|
|
42
|
-
});
|
|
32
|
+
it("test transfer", async () => {
|
|
33
|
+
const faucet = BitcoinFaucet.getInstance();
|
|
43
34
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
);
|
|
48
|
-
const senderConnectionManager = new ConnectionManager(
|
|
49
|
-
senderConfigService,
|
|
50
|
-
);
|
|
51
|
-
const signingService = new SigningService(senderConfigService);
|
|
52
|
-
const senderTransferService = new TransferService(
|
|
53
|
-
senderConfigService,
|
|
54
|
-
senderConnectionManager,
|
|
55
|
-
signingService,
|
|
56
|
-
);
|
|
35
|
+
const options: ConfigOptions = {
|
|
36
|
+
network: "LOCAL",
|
|
37
|
+
};
|
|
57
38
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
leafPubKey,
|
|
62
|
-
faucet,
|
|
63
|
-
1000n,
|
|
64
|
-
);
|
|
39
|
+
const { wallet: senderWallet } = await SparkWalletTesting.initialize({
|
|
40
|
+
options,
|
|
41
|
+
});
|
|
65
42
|
|
|
66
|
-
|
|
43
|
+
const senderConfigService = new WalletConfigService(
|
|
44
|
+
options,
|
|
45
|
+
senderWallet.getSigner(),
|
|
46
|
+
);
|
|
47
|
+
const senderConnectionManager = new ConnectionManager(senderConfigService);
|
|
48
|
+
const signingService = new SigningService(senderConfigService);
|
|
49
|
+
const senderTransferService = new TransferService(
|
|
50
|
+
senderConfigService,
|
|
51
|
+
senderConnectionManager,
|
|
52
|
+
signingService,
|
|
53
|
+
);
|
|
67
54
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
});
|
|
71
|
-
const receiverPubkey = await receiverWallet.getIdentityPublicKey();
|
|
55
|
+
const leafId = uuidv7();
|
|
56
|
+
const rootNode = await createNewTree(senderWallet, leafId, faucet, 1000n);
|
|
72
57
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const receiverConnectionManager = new ConnectionManager(
|
|
78
|
-
receiverConfigService,
|
|
79
|
-
);
|
|
80
|
-
const receiverSigningService = new SigningService(receiverConfigService);
|
|
58
|
+
const newLeafDerivationPath: KeyDerivation = {
|
|
59
|
+
type: KeyDerivationType.LEAF,
|
|
60
|
+
path: uuidv7(),
|
|
61
|
+
};
|
|
81
62
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
);
|
|
63
|
+
const { wallet: receiverWallet } = await SparkWalletTesting.initialize({
|
|
64
|
+
options,
|
|
65
|
+
});
|
|
66
|
+
const receiverPubkey = await receiverWallet.getIdentityPublicKey();
|
|
87
67
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
68
|
+
const receiverConfigService = new WalletConfigService(
|
|
69
|
+
options,
|
|
70
|
+
receiverWallet.getSigner(),
|
|
71
|
+
);
|
|
72
|
+
const receiverConnectionManager = new ConnectionManager(
|
|
73
|
+
receiverConfigService,
|
|
74
|
+
);
|
|
75
|
+
const receiverSigningService = new SigningService(receiverConfigService);
|
|
93
76
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
77
|
+
const receiverTransferService = new TransferService(
|
|
78
|
+
receiverConfigService,
|
|
79
|
+
receiverConnectionManager,
|
|
80
|
+
receiverSigningService,
|
|
81
|
+
);
|
|
98
82
|
|
|
99
|
-
|
|
83
|
+
const transferNode: LeafKeyTweak = {
|
|
84
|
+
leaf: rootNode,
|
|
85
|
+
keyDerivation: {
|
|
86
|
+
type: KeyDerivationType.LEAF,
|
|
87
|
+
path: leafId,
|
|
88
|
+
},
|
|
89
|
+
newKeyDerivation: newLeafDerivationPath,
|
|
90
|
+
};
|
|
100
91
|
|
|
101
|
-
|
|
92
|
+
const senderTransfer = await senderTransferService.sendTransfer(
|
|
93
|
+
[transferNode],
|
|
94
|
+
hexToBytes(receiverPubkey),
|
|
95
|
+
);
|
|
102
96
|
|
|
103
|
-
|
|
97
|
+
const pendingTransfer = await receiverWallet.queryPendingTransfers();
|
|
104
98
|
|
|
105
|
-
|
|
99
|
+
expect(pendingTransfer.transfers.length).toBe(1);
|
|
106
100
|
|
|
107
|
-
|
|
108
|
-
receiverTransfer!,
|
|
109
|
-
);
|
|
101
|
+
const receiverTransfer = pendingTransfer.transfers[0];
|
|
110
102
|
|
|
111
|
-
|
|
103
|
+
expect(receiverTransfer!.id).toBe(senderTransfer.id);
|
|
112
104
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
105
|
+
const leafPrivKeyMap = await receiverWallet.verifyPendingTransfer(
|
|
106
|
+
receiverTransfer!,
|
|
107
|
+
);
|
|
116
108
|
|
|
117
|
-
|
|
118
|
-
.getSigner()
|
|
119
|
-
.generatePublicKey(sha256(rootNode.id));
|
|
109
|
+
expect(leafPrivKeyMap.size).toBe(1);
|
|
120
110
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
111
|
+
const leafPrivKeyMapBytes = leafPrivKeyMap.get(rootNode.id);
|
|
112
|
+
expect(leafPrivKeyMapBytes).toBeDefined();
|
|
113
|
+
expect(bytesToHex(leafPrivKeyMapBytes!)).toBe(
|
|
114
|
+
bytesToHex(
|
|
115
|
+
await senderWallet
|
|
116
|
+
.getSigner()
|
|
117
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
118
|
+
),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const claimingNodes: LeafKeyTweak[] = receiverTransfer!.leaves.map(
|
|
122
|
+
(leaf) => ({
|
|
123
|
+
leaf: leaf.leaf!,
|
|
124
|
+
keyDerivation: {
|
|
125
|
+
type: KeyDerivationType.ECIES,
|
|
126
|
+
path: leaf.secretCipher,
|
|
127
|
+
},
|
|
128
|
+
newKeyDerivation: {
|
|
129
|
+
type: KeyDerivationType.LEAF,
|
|
130
|
+
path: leaf.leaf!.id,
|
|
131
|
+
},
|
|
132
|
+
}),
|
|
133
|
+
);
|
|
126
134
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
135
|
+
await receiverTransferService.claimTransfer(
|
|
136
|
+
receiverTransfer!,
|
|
137
|
+
claimingNodes,
|
|
138
|
+
);
|
|
130
139
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
30000,
|
|
135
|
-
);
|
|
140
|
+
const balance = await receiverWallet.getBalance();
|
|
141
|
+
expect(balance.balance).toBe(1000n);
|
|
142
|
+
}, 30000);
|
|
136
143
|
|
|
137
144
|
testLocalOnly("test transfer with separate", async () => {
|
|
138
145
|
const faucet = BitcoinFaucet.getInstance();
|
|
@@ -177,21 +184,26 @@ describe("Transfer", () => {
|
|
|
177
184
|
receiverSigningService,
|
|
178
185
|
);
|
|
179
186
|
|
|
180
|
-
const
|
|
181
|
-
|
|
187
|
+
const leafId = uuidv7();
|
|
182
188
|
const rootNode = await createNewTree(
|
|
183
189
|
senderWallet,
|
|
184
|
-
|
|
190
|
+
leafId,
|
|
185
191
|
faucet,
|
|
186
192
|
100_000n,
|
|
187
193
|
);
|
|
188
194
|
|
|
189
|
-
const
|
|
195
|
+
const newLeafDerivationPath: KeyDerivation = {
|
|
196
|
+
type: KeyDerivationType.LEAF,
|
|
197
|
+
path: uuidv7(),
|
|
198
|
+
};
|
|
190
199
|
|
|
191
200
|
const transferNode: LeafKeyTweak = {
|
|
192
201
|
leaf: rootNode,
|
|
193
|
-
|
|
194
|
-
|
|
202
|
+
keyDerivation: {
|
|
203
|
+
type: KeyDerivationType.LEAF,
|
|
204
|
+
path: leafId,
|
|
205
|
+
},
|
|
206
|
+
newKeyDerivation: newLeafDerivationPath,
|
|
195
207
|
};
|
|
196
208
|
|
|
197
209
|
const leavesToTransfer = [transferNode];
|
|
@@ -218,17 +230,28 @@ describe("Transfer", () => {
|
|
|
218
230
|
|
|
219
231
|
const leafPrivKeyMapBytes = leafPrivKeyMap.get(rootNode.id);
|
|
220
232
|
expect(leafPrivKeyMapBytes).toBeDefined();
|
|
221
|
-
expect(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
233
|
+
expect(
|
|
234
|
+
equalBytes(
|
|
235
|
+
leafPrivKeyMapBytes!,
|
|
236
|
+
await senderWallet
|
|
237
|
+
.getSigner()
|
|
238
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
239
|
+
),
|
|
240
|
+
).toBe(true);
|
|
241
|
+
|
|
242
|
+
const claimingNodes: LeafKeyTweak[] = receiverTransfer!.leaves.map(
|
|
243
|
+
(leaf) => ({
|
|
244
|
+
leaf: leaf.leaf!,
|
|
245
|
+
keyDerivation: {
|
|
246
|
+
type: KeyDerivationType.ECIES,
|
|
247
|
+
path: leaf.secretCipher,
|
|
248
|
+
},
|
|
249
|
+
newKeyDerivation: {
|
|
250
|
+
type: KeyDerivationType.LEAF,
|
|
251
|
+
path: leaf.leaf!.id,
|
|
252
|
+
},
|
|
253
|
+
}),
|
|
254
|
+
);
|
|
232
255
|
|
|
233
256
|
const transferService = new TransferService(
|
|
234
257
|
receiverConfigService,
|
|
@@ -236,9 +259,10 @@ describe("Transfer", () => {
|
|
|
236
259
|
new SigningService(receiverConfigService),
|
|
237
260
|
);
|
|
238
261
|
|
|
239
|
-
await transferService.claimTransferTweakKeys(
|
|
240
|
-
|
|
241
|
-
|
|
262
|
+
await transferService.claimTransferTweakKeys(
|
|
263
|
+
receiverTransfer!,
|
|
264
|
+
claimingNodes,
|
|
265
|
+
);
|
|
242
266
|
|
|
243
267
|
const newPendingTransfer = await receiverWallet.queryPendingTransfers();
|
|
244
268
|
|
|
@@ -255,18 +279,25 @@ describe("Transfer", () => {
|
|
|
255
279
|
|
|
256
280
|
const newLeafPubKeyMapBytes = newLeafPubKeyMap.get(rootNode.id);
|
|
257
281
|
expect(newLeafPubKeyMapBytes).toBeDefined();
|
|
258
|
-
expect(bytesToHex(newLeafPubKeyMapBytes!)).toBe(
|
|
282
|
+
expect(bytesToHex(newLeafPubKeyMapBytes!)).toBe(
|
|
283
|
+
bytesToHex(
|
|
284
|
+
await senderWallet
|
|
285
|
+
.getSigner()
|
|
286
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
287
|
+
),
|
|
288
|
+
);
|
|
259
289
|
|
|
260
|
-
await transferService.claimTransferSignRefunds(
|
|
261
|
-
|
|
262
|
-
|
|
290
|
+
await transferService.claimTransferSignRefunds(
|
|
291
|
+
newReceiverTransfer!,
|
|
292
|
+
claimingNodes,
|
|
293
|
+
);
|
|
263
294
|
|
|
264
295
|
const newNewPendingTransfer = await receiverWallet.queryPendingTransfers();
|
|
265
296
|
expect(newNewPendingTransfer.transfers.length).toBe(1);
|
|
266
297
|
|
|
267
298
|
await receiverTransferService.claimTransfer(
|
|
268
299
|
newNewPendingTransfer.transfers[0]!,
|
|
269
|
-
|
|
300
|
+
claimingNodes,
|
|
270
301
|
);
|
|
271
302
|
});
|
|
272
303
|
|
|
@@ -301,20 +332,26 @@ describe("Transfer", () => {
|
|
|
301
332
|
receiverSigningService,
|
|
302
333
|
);
|
|
303
334
|
|
|
304
|
-
const
|
|
335
|
+
const leafId = uuidv7();
|
|
305
336
|
const rootNode = await createNewTree(
|
|
306
337
|
senderWallet,
|
|
307
|
-
|
|
338
|
+
leafId,
|
|
308
339
|
faucet,
|
|
309
340
|
100_000n,
|
|
310
341
|
);
|
|
311
342
|
|
|
312
|
-
const
|
|
343
|
+
const newLeafDerivationPath: KeyDerivation = {
|
|
344
|
+
type: KeyDerivationType.LEAF,
|
|
345
|
+
path: uuidv7(),
|
|
346
|
+
};
|
|
313
347
|
|
|
314
348
|
const transferNode: LeafKeyTweak = {
|
|
315
349
|
leaf: rootNode,
|
|
316
|
-
|
|
317
|
-
|
|
350
|
+
keyDerivation: {
|
|
351
|
+
type: KeyDerivationType.LEAF,
|
|
352
|
+
path: leafId,
|
|
353
|
+
},
|
|
354
|
+
newKeyDerivation: newLeafDerivationPath,
|
|
318
355
|
};
|
|
319
356
|
|
|
320
357
|
const senderConfigService = new WalletConfigService(
|
|
@@ -360,21 +397,33 @@ describe("Transfer", () => {
|
|
|
360
397
|
|
|
361
398
|
const leafPubKeyMapBytes = leafPubKeyMap.get(rootNode.id);
|
|
362
399
|
expect(leafPubKeyMapBytes).toBeDefined();
|
|
363
|
-
expect(
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
400
|
+
expect(
|
|
401
|
+
equalBytes(
|
|
402
|
+
leafPubKeyMapBytes!,
|
|
403
|
+
await senderWallet
|
|
404
|
+
.getSigner()
|
|
405
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
406
|
+
),
|
|
407
|
+
).toBe(true);
|
|
408
|
+
|
|
409
|
+
const claimingNodes: LeafKeyTweak[] = receiverTransfer!.leaves.map(
|
|
410
|
+
(leaf) => ({
|
|
411
|
+
leaf: receiverTransfer!.leaves[0]!.leaf!,
|
|
412
|
+
keyDerivation: {
|
|
413
|
+
type: KeyDerivationType.ECIES,
|
|
414
|
+
path: leaf.secretCipher,
|
|
415
|
+
},
|
|
416
|
+
newKeyDerivation: {
|
|
417
|
+
type: KeyDerivationType.LEAF,
|
|
418
|
+
path: leaf.leaf!.id,
|
|
419
|
+
},
|
|
420
|
+
}),
|
|
421
|
+
);
|
|
374
422
|
|
|
375
|
-
await receiverTransferService.claimTransfer(
|
|
376
|
-
|
|
377
|
-
|
|
423
|
+
await receiverTransferService.claimTransfer(
|
|
424
|
+
receiverTransfer!,
|
|
425
|
+
claimingNodes,
|
|
426
|
+
);
|
|
378
427
|
});
|
|
379
428
|
|
|
380
429
|
testLocalOnly(
|
|
@@ -404,15 +453,13 @@ describe("Transfer", () => {
|
|
|
404
453
|
senderSigningService,
|
|
405
454
|
);
|
|
406
455
|
|
|
407
|
-
const
|
|
408
|
-
const rootNode = await createNewTree(
|
|
409
|
-
senderWallet,
|
|
410
|
-
leafPubKey,
|
|
411
|
-
faucet,
|
|
412
|
-
1000n,
|
|
413
|
-
);
|
|
456
|
+
const leafId = uuidv7();
|
|
457
|
+
const rootNode = await createNewTree(senderWallet, leafId, faucet, 1000n);
|
|
414
458
|
|
|
415
|
-
const
|
|
459
|
+
const newLeafDerivationPath: KeyDerivation = {
|
|
460
|
+
type: KeyDerivationType.LEAF,
|
|
461
|
+
path: uuidv7(),
|
|
462
|
+
};
|
|
416
463
|
|
|
417
464
|
const soToRemove =
|
|
418
465
|
"0000000000000000000000000000000000000000000000000000000000000005";
|
|
@@ -423,7 +470,7 @@ describe("Transfer", () => {
|
|
|
423
470
|
),
|
|
424
471
|
);
|
|
425
472
|
const missingOperatorOptions = {
|
|
426
|
-
...
|
|
473
|
+
...WalletConfig.LOCAL,
|
|
427
474
|
signingOperators,
|
|
428
475
|
};
|
|
429
476
|
const mnemonic = generateMnemonic(wordlist);
|
|
@@ -448,10 +495,13 @@ describe("Transfer", () => {
|
|
|
448
495
|
receiverSigningService,
|
|
449
496
|
);
|
|
450
497
|
|
|
451
|
-
const transferNode = {
|
|
498
|
+
const transferNode: LeafKeyTweak = {
|
|
452
499
|
leaf: rootNode,
|
|
453
|
-
|
|
454
|
-
|
|
500
|
+
keyDerivation: {
|
|
501
|
+
type: KeyDerivationType.LEAF,
|
|
502
|
+
path: leafId,
|
|
503
|
+
},
|
|
504
|
+
newKeyDerivation: newLeafDerivationPath,
|
|
455
505
|
};
|
|
456
506
|
|
|
457
507
|
const senderTransfer = await senderTransferService.sendTransfer(
|
|
@@ -475,25 +525,36 @@ describe("Transfer", () => {
|
|
|
475
525
|
|
|
476
526
|
const leafPrivKeyMapBytes = leafPrivKeyMap.get(rootNode.id);
|
|
477
527
|
expect(leafPrivKeyMapBytes).toBeDefined();
|
|
478
|
-
expect(bytesToHex(leafPrivKeyMapBytes!)).toBe(
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
528
|
+
expect(bytesToHex(leafPrivKeyMapBytes!)).toBe(
|
|
529
|
+
bytesToHex(
|
|
530
|
+
await senderWallet
|
|
531
|
+
.getSigner()
|
|
532
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
533
|
+
),
|
|
534
|
+
);
|
|
483
535
|
|
|
484
|
-
const
|
|
485
|
-
leaf
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
536
|
+
const claimingNodes: LeafKeyTweak[] = receiverTransfer!.leaves.map(
|
|
537
|
+
(leaf) => ({
|
|
538
|
+
leaf: rootNode,
|
|
539
|
+
keyDerivation: {
|
|
540
|
+
type: KeyDerivationType.ECIES,
|
|
541
|
+
path: receiverTransfer!.leaves[0]!.secretCipher,
|
|
542
|
+
},
|
|
543
|
+
newKeyDerivation: {
|
|
544
|
+
type: KeyDerivationType.LEAF,
|
|
545
|
+
path: leaf.leaf!.id,
|
|
546
|
+
},
|
|
547
|
+
}),
|
|
548
|
+
);
|
|
489
549
|
|
|
490
550
|
// Tweak the key with only 4 out of the 5 operators
|
|
491
|
-
await receiverTransferService.claimTransferTweakKeys(
|
|
492
|
-
|
|
493
|
-
|
|
551
|
+
await receiverTransferService.claimTransferTweakKeys(
|
|
552
|
+
receiverTransfer!,
|
|
553
|
+
claimingNodes,
|
|
554
|
+
);
|
|
494
555
|
|
|
495
556
|
const receiverOptions = {
|
|
496
|
-
...
|
|
557
|
+
...WalletConfig.LOCAL,
|
|
497
558
|
};
|
|
498
559
|
|
|
499
560
|
const { wallet: receiverWalletWithAllOperators } =
|
|
@@ -521,7 +582,7 @@ describe("Transfer", () => {
|
|
|
521
582
|
const { wallet: receiverWalletWithMissingOperatorAsCoordinator } =
|
|
522
583
|
await SparkWalletTesting.initialize({
|
|
523
584
|
options: {
|
|
524
|
-
...
|
|
585
|
+
...WalletConfig.LOCAL,
|
|
525
586
|
coodinatorIdentifier: soToRemove,
|
|
526
587
|
},
|
|
527
588
|
mnemonicOrSeed: mnemonic,
|
|
@@ -561,20 +622,20 @@ describe("Transfer", () => {
|
|
|
561
622
|
leafPrivKeyMapWithAllOperators.get(rootNode.id);
|
|
562
623
|
expect(leafPrivKeyMapBytesWithAllOperators).toBeDefined();
|
|
563
624
|
expect(bytesToHex(leafPrivKeyMapBytesWithAllOperators!)).toBe(
|
|
564
|
-
bytesToHex(
|
|
625
|
+
bytesToHex(
|
|
626
|
+
await senderWallet
|
|
627
|
+
.getSigner()
|
|
628
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
629
|
+
),
|
|
565
630
|
);
|
|
566
631
|
|
|
567
|
-
await receiverWalletWithAllOperators
|
|
568
|
-
.getSigner()
|
|
569
|
-
.restoreSigningKeysFromLeafs([claimingNode.leaf]);
|
|
570
|
-
|
|
571
632
|
await receiverWalletWithAllOperators.verifyPendingTransfer(
|
|
572
633
|
receiverTransfer!,
|
|
573
634
|
);
|
|
574
635
|
|
|
575
636
|
await receiverTransferServiceWithAllOperators.claimTransfer(
|
|
576
637
|
receiverTransfer!,
|
|
577
|
-
|
|
638
|
+
claimingNodes,
|
|
578
639
|
);
|
|
579
640
|
},
|
|
580
641
|
);
|
|
@@ -765,15 +826,13 @@ describe("transfer v2", () => {
|
|
|
765
826
|
signingService,
|
|
766
827
|
);
|
|
767
828
|
|
|
768
|
-
const
|
|
769
|
-
const rootNode = await createNewTree(
|
|
770
|
-
senderWallet,
|
|
771
|
-
leafPubKey,
|
|
772
|
-
faucet,
|
|
773
|
-
1000n,
|
|
774
|
-
);
|
|
829
|
+
const leafId = uuidv7();
|
|
830
|
+
const rootNode = await createNewTree(senderWallet, leafId, faucet, 1000n);
|
|
775
831
|
|
|
776
|
-
const
|
|
832
|
+
const newLeafDerivationPath: KeyDerivation = {
|
|
833
|
+
type: KeyDerivationType.LEAF,
|
|
834
|
+
path: uuidv7(),
|
|
835
|
+
};
|
|
777
836
|
|
|
778
837
|
const { wallet: receiverWallet } = await SparkWalletTesting.initialize({
|
|
779
838
|
options,
|
|
@@ -795,10 +854,13 @@ describe("transfer v2", () => {
|
|
|
795
854
|
receiverSigningService,
|
|
796
855
|
);
|
|
797
856
|
|
|
798
|
-
const transferNode = {
|
|
857
|
+
const transferNode: LeafKeyTweak = {
|
|
799
858
|
leaf: rootNode,
|
|
800
|
-
|
|
801
|
-
|
|
859
|
+
keyDerivation: {
|
|
860
|
+
type: KeyDerivationType.LEAF,
|
|
861
|
+
path: leafId,
|
|
862
|
+
},
|
|
863
|
+
newKeyDerivation: newLeafDerivationPath,
|
|
802
864
|
};
|
|
803
865
|
|
|
804
866
|
const senderTransfer =
|
|
@@ -826,21 +888,32 @@ describe("transfer v2", () => {
|
|
|
826
888
|
|
|
827
889
|
const leafPrivKeyMapBytes = leafPrivKeyMap.get(rootNode.id);
|
|
828
890
|
expect(leafPrivKeyMapBytes).toBeDefined();
|
|
829
|
-
expect(bytesToHex(leafPrivKeyMapBytes!)).toBe(
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
891
|
+
expect(bytesToHex(leafPrivKeyMapBytes!)).toBe(
|
|
892
|
+
bytesToHex(
|
|
893
|
+
await senderWallet
|
|
894
|
+
.getSigner()
|
|
895
|
+
.getPublicKeyFromDerivation(newLeafDerivationPath),
|
|
896
|
+
),
|
|
897
|
+
);
|
|
898
|
+
|
|
899
|
+
const claimingNodes: LeafKeyTweak[] = receiverTransfer!.leaves.map(
|
|
900
|
+
(leaf) => ({
|
|
901
|
+
leaf: leaf.leaf!,
|
|
902
|
+
keyDerivation: {
|
|
903
|
+
type: KeyDerivationType.ECIES,
|
|
904
|
+
path: leaf.secretCipher,
|
|
905
|
+
},
|
|
906
|
+
newKeyDerivation: {
|
|
907
|
+
type: KeyDerivationType.LEAF,
|
|
908
|
+
path: leaf.leaf!.id,
|
|
909
|
+
},
|
|
910
|
+
}),
|
|
911
|
+
);
|
|
840
912
|
|
|
841
|
-
await receiverTransferService.claimTransfer(
|
|
842
|
-
|
|
843
|
-
|
|
913
|
+
await receiverTransferService.claimTransfer(
|
|
914
|
+
receiverTransfer!,
|
|
915
|
+
claimingNodes,
|
|
916
|
+
);
|
|
844
917
|
|
|
845
918
|
const balance = await receiverWallet.getBalance();
|
|
846
919
|
expect(balance.balance).toBe(1000n);
|
|
@@ -865,19 +938,20 @@ describe("transfer v2", () => {
|
|
|
865
938
|
senderConnectionManager,
|
|
866
939
|
senderSigningService,
|
|
867
940
|
);
|
|
868
|
-
const
|
|
869
|
-
const rootNode = await createNewTree(
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
);
|
|
875
|
-
const newLeafPubKey = await senderWallet.getSigner().generatePublicKey();
|
|
941
|
+
const leafId = uuidv7();
|
|
942
|
+
const rootNode = await createNewTree(senderWallet, leafId, faucet, 1000n);
|
|
943
|
+
const newLeafDerivationPath: KeyDerivation = {
|
|
944
|
+
type: KeyDerivationType.LEAF,
|
|
945
|
+
path: uuidv7(),
|
|
946
|
+
};
|
|
876
947
|
const receiverPubkey = await senderWallet.getIdentityPublicKey();
|
|
877
|
-
const transferNode = {
|
|
948
|
+
const transferNode: LeafKeyTweak = {
|
|
878
949
|
leaf: rootNode,
|
|
879
|
-
|
|
880
|
-
|
|
950
|
+
keyDerivation: {
|
|
951
|
+
type: KeyDerivationType.LEAF,
|
|
952
|
+
path: leafId,
|
|
953
|
+
},
|
|
954
|
+
newKeyDerivation: newLeafDerivationPath,
|
|
881
955
|
};
|
|
882
956
|
const senderTransfer =
|
|
883
957
|
await senderTransferService.sendTransferWithKeyTweaks(
|
|
@@ -892,17 +966,20 @@ describe("transfer v2", () => {
|
|
|
892
966
|
Date.now(),
|
|
893
967
|
);
|
|
894
968
|
|
|
895
|
-
const
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
969
|
+
const claimingNodes: LeafKeyTweak[] = receiverTransfer!.leaves.map(
|
|
970
|
+
(leaf) => ({
|
|
971
|
+
leaf: rootNode,
|
|
972
|
+
keyDerivation: {
|
|
973
|
+
type: KeyDerivationType.ECIES,
|
|
974
|
+
path: receiverTransfer!.leaves[0]!.secretCipher,
|
|
975
|
+
},
|
|
976
|
+
newKeyDerivation: {
|
|
977
|
+
type: KeyDerivationType.LEAF,
|
|
978
|
+
path: leaf.leaf!.id,
|
|
979
|
+
},
|
|
980
|
+
}),
|
|
981
|
+
);
|
|
982
|
+
await senderTransferService.claimTransfer(receiverTransfer!, claimingNodes);
|
|
906
983
|
|
|
907
984
|
const balance = await senderWallet.getBalance();
|
|
908
985
|
expect(balance.balance).toBe(1000n);
|