@lendasat/lendaswap-sdk-pure 0.2.21-preview.0 → 0.2.21
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/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -1
- package/dist/api/client.js.map +1 -1
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +4 -1
- package/dist/price-feed.d.ts +0 -124
- package/dist/price-feed.d.ts.map +0 -1
- package/dist/price-feed.js +0 -178
- package/dist/price-feed.js.map +0 -1
- package/dist/src/api/client.d.ts +0 -31
- package/dist/src/api/client.d.ts.map +0 -1
- package/dist/src/api/client.js +0 -12
- package/dist/src/api/client.js.map +0 -1
- package/dist/src/arkade.d.ts +0 -36
- package/dist/src/arkade.d.ts.map +0 -1
- package/dist/src/arkade.js +0 -68
- package/dist/src/arkade.js.map +0 -1
- package/dist/src/client.d.ts +0 -760
- package/dist/src/client.d.ts.map +0 -1
- package/dist/src/client.js +0 -2169
- package/dist/src/client.js.map +0 -1
- package/dist/src/create/arkade.d.ts +0 -34
- package/dist/src/create/arkade.d.ts.map +0 -1
- package/dist/src/create/arkade.js +0 -76
- package/dist/src/create/arkade.js.map +0 -1
- package/dist/src/create/bitcoin-to-arkade.d.ts +0 -36
- package/dist/src/create/bitcoin-to-arkade.d.ts.map +0 -1
- package/dist/src/create/bitcoin-to-arkade.js +0 -69
- package/dist/src/create/bitcoin-to-arkade.js.map +0 -1
- package/dist/src/create/bitcoin.d.ts +0 -31
- package/dist/src/create/bitcoin.d.ts.map +0 -1
- package/dist/src/create/bitcoin.js +0 -67
- package/dist/src/create/bitcoin.js.map +0 -1
- package/dist/src/create/evm-to-arkade.d.ts +0 -34
- package/dist/src/create/evm-to-arkade.d.ts.map +0 -1
- package/dist/src/create/evm-to-arkade.js +0 -69
- package/dist/src/create/evm-to-arkade.js.map +0 -1
- package/dist/src/create/evm-to-bitcoin.d.ts +0 -35
- package/dist/src/create/evm-to-bitcoin.d.ts.map +0 -1
- package/dist/src/create/evm-to-bitcoin.js +0 -71
- package/dist/src/create/evm-to-bitcoin.js.map +0 -1
- package/dist/src/create/evm-to-lightning.d.ts +0 -34
- package/dist/src/create/evm-to-lightning.d.ts.map +0 -1
- package/dist/src/create/evm-to-lightning.js +0 -66
- package/dist/src/create/evm-to-lightning.js.map +0 -1
- package/dist/src/create/index.d.ts +0 -19
- package/dist/src/create/index.d.ts.map +0 -1
- package/dist/src/create/index.js +0 -18
- package/dist/src/create/index.js.map +0 -1
- package/dist/src/create/lightning.d.ts +0 -31
- package/dist/src/create/lightning.d.ts.map +0 -1
- package/dist/src/create/lightning.js +0 -72
- package/dist/src/create/lightning.js.map +0 -1
- package/dist/src/create/types.d.ts +0 -247
- package/dist/src/create/types.d.ts.map +0 -1
- package/dist/src/create/types.js +0 -5
- package/dist/src/create/types.js.map +0 -1
- package/dist/src/delegate.d.ts +0 -62
- package/dist/src/delegate.d.ts.map +0 -1
- package/dist/src/delegate.js +0 -284
- package/dist/src/delegate.js.map +0 -1
- package/dist/src/esplora.d.ts +0 -41
- package/dist/src/esplora.d.ts.map +0 -1
- package/dist/src/esplora.js +0 -47
- package/dist/src/esplora.js.map +0 -1
- package/dist/src/evm/coordinator.d.ts +0 -247
- package/dist/src/evm/coordinator.d.ts.map +0 -1
- package/dist/src/evm/coordinator.js +0 -414
- package/dist/src/evm/coordinator.js.map +0 -1
- package/dist/src/evm/htlc.d.ts +0 -238
- package/dist/src/evm/htlc.d.ts.map +0 -1
- package/dist/src/evm/htlc.js +0 -278
- package/dist/src/evm/htlc.js.map +0 -1
- package/dist/src/evm/index.d.ts +0 -9
- package/dist/src/evm/index.d.ts.map +0 -1
- package/dist/src/evm/index.js +0 -9
- package/dist/src/evm/index.js.map +0 -1
- package/dist/src/evm/signing.d.ts +0 -30
- package/dist/src/evm/signing.d.ts.map +0 -1
- package/dist/src/evm/signing.js +0 -91
- package/dist/src/evm/signing.js.map +0 -1
- package/dist/src/generated/api.d.ts +0 -2736
- package/dist/src/generated/api.d.ts.map +0 -1
- package/dist/src/generated/api.js +0 -6
- package/dist/src/generated/api.js.map +0 -1
- package/dist/src/index.d.ts +0 -18
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -24
- package/dist/src/index.js.map +0 -1
- package/dist/src/node.d.ts +0 -19
- package/dist/src/node.d.ts.map +0 -1
- package/dist/src/node.js +0 -19
- package/dist/src/node.js.map +0 -1
- package/dist/src/price-calculations.d.ts +0 -109
- package/dist/src/price-calculations.d.ts.map +0 -1
- package/dist/src/price-calculations.js +0 -135
- package/dist/src/price-calculations.js.map +0 -1
- package/dist/src/redeem/arkade.d.ts +0 -65
- package/dist/src/redeem/arkade.d.ts.map +0 -1
- package/dist/src/redeem/arkade.js +0 -217
- package/dist/src/redeem/arkade.js.map +0 -1
- package/dist/src/redeem/ethereum.d.ts +0 -52
- package/dist/src/redeem/ethereum.d.ts.map +0 -1
- package/dist/src/redeem/ethereum.js +0 -206
- package/dist/src/redeem/ethereum.js.map +0 -1
- package/dist/src/redeem/gasless.d.ts +0 -41
- package/dist/src/redeem/gasless.d.ts.map +0 -1
- package/dist/src/redeem/gasless.js +0 -71
- package/dist/src/redeem/gasless.js.map +0 -1
- package/dist/src/redeem/index.d.ts +0 -49
- package/dist/src/redeem/index.d.ts.map +0 -1
- package/dist/src/redeem/index.js +0 -189
- package/dist/src/redeem/index.js.map +0 -1
- package/dist/src/redeem/types.d.ts +0 -126
- package/dist/src/redeem/types.d.ts.map +0 -1
- package/dist/src/redeem/types.js +0 -36
- package/dist/src/redeem/types.js.map +0 -1
- package/dist/src/refund/arkade.d.ts +0 -62
- package/dist/src/refund/arkade.d.ts.map +0 -1
- package/dist/src/refund/arkade.js +0 -212
- package/dist/src/refund/arkade.js.map +0 -1
- package/dist/src/refund/index.d.ts +0 -10
- package/dist/src/refund/index.d.ts.map +0 -1
- package/dist/src/refund/index.js +0 -10
- package/dist/src/refund/index.js.map +0 -1
- package/dist/src/refund/onchain.d.ts +0 -137
- package/dist/src/refund/onchain.d.ts.map +0 -1
- package/dist/src/refund/onchain.js +0 -366
- package/dist/src/refund/onchain.js.map +0 -1
- package/dist/src/signer/index.d.ts +0 -106
- package/dist/src/signer/index.d.ts.map +0 -1
- package/dist/src/signer/index.js +0 -179
- package/dist/src/signer/index.js.map +0 -1
- package/dist/src/storage/idb.d.ts +0 -70
- package/dist/src/storage/idb.d.ts.map +0 -1
- package/dist/src/storage/idb.js +0 -236
- package/dist/src/storage/idb.js.map +0 -1
- package/dist/src/storage/index.d.ts +0 -152
- package/dist/src/storage/index.d.ts.map +0 -1
- package/dist/src/storage/index.js +0 -98
- package/dist/src/storage/index.js.map +0 -1
- package/dist/src/storage/sqlite.d.ts +0 -95
- package/dist/src/storage/sqlite.d.ts.map +0 -1
- package/dist/src/storage/sqlite.js +0 -206
- package/dist/src/storage/sqlite.js.map +0 -1
- package/dist/src/storage/types.d.ts +0 -57
- package/dist/src/storage/types.d.ts.map +0 -1
- package/dist/src/storage/types.js +0 -9
- package/dist/src/storage/types.js.map +0 -1
- package/dist/src/tokens.d.ts +0 -29
- package/dist/src/tokens.d.ts.map +0 -1
- package/dist/src/tokens.js +0 -89
- package/dist/src/tokens.js.map +0 -1
- package/dist/src/usd-price.d.ts +0 -34
- package/dist/src/usd-price.d.ts.map +0 -1
- package/dist/src/usd-price.js +0 -83
- package/dist/src/usd-price.js.map +0 -1
- package/dist/tests/api-client.test.d.ts +0 -2
- package/dist/tests/api-client.test.d.ts.map +0 -1
- package/dist/tests/api-client.test.js +0 -86
- package/dist/tests/api-client.test.js.map +0 -1
- package/dist/tests/client.test.d.ts +0 -2
- package/dist/tests/client.test.d.ts.map +0 -1
- package/dist/tests/client.test.js +0 -150
- package/dist/tests/client.test.js.map +0 -1
- package/dist/tests/index.test.d.ts +0 -2
- package/dist/tests/index.test.d.ts.map +0 -1
- package/dist/tests/index.test.js +0 -8
- package/dist/tests/index.test.js.map +0 -1
- package/dist/tests/onchain-refund.test.d.ts +0 -2
- package/dist/tests/onchain-refund.test.d.ts.map +0 -1
- package/dist/tests/onchain-refund.test.js +0 -279
- package/dist/tests/onchain-refund.test.js.map +0 -1
- package/dist/tests/signer.test.d.ts +0 -2
- package/dist/tests/signer.test.d.ts.map +0 -1
- package/dist/tests/signer.test.js +0 -92
- package/dist/tests/signer.test.js.map +0 -1
- package/dist/tests/sqlite-storage.test.d.ts +0 -2
- package/dist/tests/sqlite-storage.test.d.ts.map +0 -1
- package/dist/tests/sqlite-storage.test.js +0 -160
- package/dist/tests/sqlite-storage.test.js.map +0 -1
- package/dist/tests/storage.test.d.ts +0 -2
- package/dist/tests/storage.test.d.ts.map +0 -1
- package/dist/tests/storage.test.js +0 -184
- package/dist/tests/storage.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/usdt0-bridge/bridge.d.ts +0 -82
- package/dist/usdt0-bridge/bridge.d.ts.map +0 -1
- package/dist/usdt0-bridge/bridge.js +0 -56
- package/dist/usdt0-bridge/bridge.js.map +0 -1
- package/dist/usdt0-bridge/chains.d.ts +0 -41
- package/dist/usdt0-bridge/chains.d.ts.map +0 -1
- package/dist/usdt0-bridge/chains.js +0 -117
- package/dist/usdt0-bridge/chains.js.map +0 -1
- package/dist/usdt0-bridge/layerzero-tracker.d.ts +0 -34
- package/dist/usdt0-bridge/layerzero-tracker.d.ts.map +0 -1
- package/dist/usdt0-bridge/layerzero-tracker.js +0 -86
- package/dist/usdt0-bridge/layerzero-tracker.js.map +0 -1
- package/dist/usdt0-bridge/oft-abi.d.ts +0 -145
- package/dist/usdt0-bridge/oft-abi.d.ts.map +0 -1
- package/dist/usdt0-bridge/oft-abi.js +0 -117
- package/dist/usdt0-bridge/oft-abi.js.map +0 -1
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it } from "vitest";
|
|
2
|
-
import { Client, ClientBuilder, InMemoryWalletStorage } from "../src/index.js";
|
|
3
|
-
describe("Client", () => {
|
|
4
|
-
it("should create a client with builder", async () => {
|
|
5
|
-
const client = await Client.builder().build();
|
|
6
|
-
expect(client).toBeDefined();
|
|
7
|
-
expect(client.baseUrl).toBe("https://apilendaswap.lendasat.com/");
|
|
8
|
-
});
|
|
9
|
-
it("should expose the underlying API client", async () => {
|
|
10
|
-
const client = await Client.builder().build();
|
|
11
|
-
expect(client.api).toBeDefined();
|
|
12
|
-
expect(client.api.GET).toBeDefined();
|
|
13
|
-
expect(client.api.POST).toBeDefined();
|
|
14
|
-
});
|
|
15
|
-
it("should have convenience methods", async () => {
|
|
16
|
-
const client = await Client.builder().build();
|
|
17
|
-
expect(client.healthCheck).toBeDefined();
|
|
18
|
-
expect(client.getVersion).toBeDefined();
|
|
19
|
-
expect(client.getTokens).toBeDefined();
|
|
20
|
-
expect(client.getQuote).toBeDefined();
|
|
21
|
-
expect(client.getSwap).toBeDefined();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe("ClientBuilder", () => {
|
|
25
|
-
it("should build a client with default base URL", async () => {
|
|
26
|
-
const client = await Client.builder().build();
|
|
27
|
-
expect(client).toBeDefined();
|
|
28
|
-
expect(client.baseUrl).toBe("https://apilendaswap.lendasat.com/");
|
|
29
|
-
});
|
|
30
|
-
it("should build a client with custom base URL", async () => {
|
|
31
|
-
const client = await Client.builder()
|
|
32
|
-
.withBaseUrl("https://custom.api.com")
|
|
33
|
-
.build();
|
|
34
|
-
expect(client.baseUrl).toBe("https://custom.api.com");
|
|
35
|
-
});
|
|
36
|
-
it("should build a client with API key", async () => {
|
|
37
|
-
const client = await Client.builder().withApiKey("test-api-key").build();
|
|
38
|
-
expect(client).toBeDefined();
|
|
39
|
-
});
|
|
40
|
-
it("should support method chaining", async () => {
|
|
41
|
-
const client = await Client.builder()
|
|
42
|
-
.withBaseUrl("https://custom.api.com")
|
|
43
|
-
.withApiKey("test-api-key")
|
|
44
|
-
.build();
|
|
45
|
-
expect(client).toBeDefined();
|
|
46
|
-
expect(client.baseUrl).toBe("https://custom.api.com");
|
|
47
|
-
});
|
|
48
|
-
it("should create new builder from ClientBuilder class", async () => {
|
|
49
|
-
const builder = new ClientBuilder();
|
|
50
|
-
const client = await builder.withBaseUrl("https://test.api.com").build();
|
|
51
|
-
expect(client.baseUrl).toBe("https://test.api.com");
|
|
52
|
-
});
|
|
53
|
-
it("should build a client with signer storage", async () => {
|
|
54
|
-
const storage = new InMemoryWalletStorage();
|
|
55
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
56
|
-
expect(client).toBeDefined();
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe("Client Signer", () => {
|
|
60
|
-
let storage;
|
|
61
|
-
beforeEach(() => {
|
|
62
|
-
storage = new InMemoryWalletStorage();
|
|
63
|
-
});
|
|
64
|
-
it("should generate mnemonic on build", async () => {
|
|
65
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
66
|
-
const mnemonic = client.getMnemonic();
|
|
67
|
-
expect(mnemonic.split(" ")).toHaveLength(12);
|
|
68
|
-
});
|
|
69
|
-
it("should persist mnemonic to storage", async () => {
|
|
70
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
71
|
-
const mnemonic = client.getMnemonic();
|
|
72
|
-
const storedMnemonic = await storage.getMnemonic();
|
|
73
|
-
expect(storedMnemonic).toBe(mnemonic);
|
|
74
|
-
});
|
|
75
|
-
it("should use provided mnemonic", async () => {
|
|
76
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
77
|
-
const client = await Client.builder()
|
|
78
|
-
.withSignerStorage(storage)
|
|
79
|
-
.withMnemonic(mnemonic)
|
|
80
|
-
.build();
|
|
81
|
-
expect(client.getMnemonic()).toBe(mnemonic);
|
|
82
|
-
});
|
|
83
|
-
it("should persist provided mnemonic to storage", async () => {
|
|
84
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
85
|
-
await Client.builder()
|
|
86
|
-
.withSignerStorage(storage)
|
|
87
|
-
.withMnemonic(mnemonic)
|
|
88
|
-
.build();
|
|
89
|
-
const storedMnemonic = await storage.getMnemonic();
|
|
90
|
-
expect(storedMnemonic).toBe(mnemonic);
|
|
91
|
-
});
|
|
92
|
-
it("should load existing mnemonic from storage", async () => {
|
|
93
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
94
|
-
await storage.setMnemonic(mnemonic);
|
|
95
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
96
|
-
expect(client.getMnemonic()).toBe(mnemonic);
|
|
97
|
-
});
|
|
98
|
-
it("should derive swap params and increment key index", async () => {
|
|
99
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
100
|
-
const params1 = await client.deriveSwapParams();
|
|
101
|
-
expect(params1.keyIndex).toBe(0);
|
|
102
|
-
const params2 = await client.deriveSwapParams();
|
|
103
|
-
expect(params2.keyIndex).toBe(1);
|
|
104
|
-
const keyIndex = await client.getKeyIndex();
|
|
105
|
-
expect(keyIndex).toBe(2);
|
|
106
|
-
});
|
|
107
|
-
it("should derive swap params at specific index", async () => {
|
|
108
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
109
|
-
const params = client.deriveSwapParamsAtIndex(5);
|
|
110
|
-
expect(params.keyIndex).toBe(5);
|
|
111
|
-
// Should not affect stored key index
|
|
112
|
-
const keyIndex = await client.getKeyIndex();
|
|
113
|
-
expect(keyIndex).toBe(0);
|
|
114
|
-
});
|
|
115
|
-
it("should work without storage (stateless mode)", async () => {
|
|
116
|
-
const client = await Client.builder().build();
|
|
117
|
-
expect(client.getMnemonic().split(" ")).toHaveLength(12);
|
|
118
|
-
});
|
|
119
|
-
it("should get user ID xpub", async () => {
|
|
120
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
121
|
-
const xpub = client.getUserIdXpub();
|
|
122
|
-
// Should be a base58-encoded extended public key starting with "xpub"
|
|
123
|
-
expect(xpub).toMatch(/^xpub[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/);
|
|
124
|
-
expect(xpub).toHaveLength(111);
|
|
125
|
-
});
|
|
126
|
-
it("should set key index", async () => {
|
|
127
|
-
const client = await Client.builder().withSignerStorage(storage).build();
|
|
128
|
-
await client.setKeyIndex(10);
|
|
129
|
-
const keyIndex = await client.getKeyIndex();
|
|
130
|
-
expect(keyIndex).toBe(10);
|
|
131
|
-
});
|
|
132
|
-
it("should throw when setting key index without storage", async () => {
|
|
133
|
-
const client = await Client.builder().build();
|
|
134
|
-
await expect(client.setKeyIndex(10)).rejects.toThrow("No signer storage configured");
|
|
135
|
-
});
|
|
136
|
-
it("should throw on invalid mnemonic", async () => {
|
|
137
|
-
await expect(Client.builder().withMnemonic("invalid mnemonic").build()).rejects.toThrow("Invalid mnemonic phrase");
|
|
138
|
-
});
|
|
139
|
-
it("should derive same params for same mnemonic", async () => {
|
|
140
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
141
|
-
const client1 = await Client.builder().withMnemonic(mnemonic).build();
|
|
142
|
-
const client2 = await Client.builder().withMnemonic(mnemonic).build();
|
|
143
|
-
const params1 = client1.deriveSwapParamsAtIndex(0);
|
|
144
|
-
const params2 = client2.deriveSwapParamsAtIndex(0);
|
|
145
|
-
expect(params1.keyIndex).toBe(params2.keyIndex);
|
|
146
|
-
expect(params1.preimage).toEqual(params2.preimage);
|
|
147
|
-
expect(params1.preimageHash).toEqual(params2.preimageHash);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
//# sourceMappingURL=client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../tests/client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../tests/index.test.ts"],"names":[],"mappings":""}
|
package/dist/tests/index.test.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../tests/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onchain-refund.test.d.ts","sourceRoot":"","sources":["../../tests/onchain-refund.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
2
|
-
import { hex } from "@scure/base";
|
|
3
|
-
import { describe, expect, it } from "vitest";
|
|
4
|
-
import { buildOnchainRefundTransaction, computeHash160, verifyHtlcAddress, } from "../src/refund/onchain.js";
|
|
5
|
-
describe("On-chain refund", () => {
|
|
6
|
-
// Test keypairs (deterministic for testing)
|
|
7
|
-
const serverSecretKey = new Uint8Array(32).fill(1);
|
|
8
|
-
const userSecretKey = new Uint8Array(32).fill(2);
|
|
9
|
-
// Get x-only public keys (32 bytes, no prefix)
|
|
10
|
-
// secp256k1.getPublicKey returns compressed (33 bytes), slice to get x-only
|
|
11
|
-
const serverPubKey = hex.encode(secp256k1.getPublicKey(serverSecretKey, true).slice(1));
|
|
12
|
-
const userPubKey = hex.encode(secp256k1.getPublicKey(userSecretKey, true).slice(1));
|
|
13
|
-
const userSecretKeyHex = hex.encode(userSecretKey);
|
|
14
|
-
// Test secret and hash lock
|
|
15
|
-
const secret = new Uint8Array(32).fill(42);
|
|
16
|
-
const hashLock = hex.encode(computeHash160(secret));
|
|
17
|
-
// Test parameters
|
|
18
|
-
const refundLocktime = 1700000000; // Unix timestamp in the past
|
|
19
|
-
const fundingTxId = "0".repeat(64); // Dummy txid
|
|
20
|
-
const htlcAmount = 100000n; // 100k sats
|
|
21
|
-
describe("computeHash160", () => {
|
|
22
|
-
it("should compute RIPEMD160(SHA256(data))", () => {
|
|
23
|
-
const data = new Uint8Array(32).fill(42);
|
|
24
|
-
const hash = computeHash160(data);
|
|
25
|
-
expect(hash).toBeInstanceOf(Uint8Array);
|
|
26
|
-
expect(hash.length).toBe(20);
|
|
27
|
-
// Hash should be deterministic
|
|
28
|
-
const hash2 = computeHash160(data);
|
|
29
|
-
expect(hex.encode(hash)).toBe(hex.encode(hash2));
|
|
30
|
-
});
|
|
31
|
-
it("should produce different hashes for different inputs", () => {
|
|
32
|
-
const data1 = new Uint8Array(32).fill(1);
|
|
33
|
-
const data2 = new Uint8Array(32).fill(2);
|
|
34
|
-
const hash1 = computeHash160(data1);
|
|
35
|
-
const hash2 = computeHash160(data2);
|
|
36
|
-
expect(hex.encode(hash1)).not.toBe(hex.encode(hash2));
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
describe("verifyHtlcAddress", () => {
|
|
40
|
-
it("should return true for matching HTLC parameters", () => {
|
|
41
|
-
// Verify the HTLC address matches
|
|
42
|
-
const isValid = verifyHtlcAddress("tb1p6enqnu9nqj52wzy6tl8qqtjfsxae2un66gwwp0hjydayydez7xsqz8ycd8", "9befb12985069ca625bce37f13af8acbb66e46bb", "6c932b95705b07c4236a1abfabe283399774449914f6c4d7faeb30fd7f3c6b0e", "d149150a0c344bae35cfe0cd237e50bd41ec56fe7c2a2f5f8509911ec8c5a0e2", 1769752815, "signet");
|
|
43
|
-
expect(isValid).toBe(true);
|
|
44
|
-
});
|
|
45
|
-
it("should return true for matching HTLC parameters", () => {
|
|
46
|
-
// Build a transaction to get the HTLC address
|
|
47
|
-
const result = buildOnchainRefundTransaction({
|
|
48
|
-
fundingTxId,
|
|
49
|
-
fundingVout: 0,
|
|
50
|
-
htlcAmount,
|
|
51
|
-
hashLock,
|
|
52
|
-
serverPubKey,
|
|
53
|
-
userPubKey,
|
|
54
|
-
userSecretKey: userSecretKeyHex,
|
|
55
|
-
refundLocktime,
|
|
56
|
-
destinationAddress: "bcrt1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080",
|
|
57
|
-
feeRateSatPerVb: 1,
|
|
58
|
-
network: "regtest",
|
|
59
|
-
});
|
|
60
|
-
console.log(`verifyHtlcAddress: ${result.htlcAddress}`);
|
|
61
|
-
// Verify the HTLC address matches
|
|
62
|
-
const isValid = verifyHtlcAddress(result.htlcAddress, hashLock, serverPubKey, userPubKey, refundLocktime, "regtest");
|
|
63
|
-
expect(result.htlcAddress).toBe("bcrt1p9y8e33fmv06c9wr4rpcfkccpsankaqcu2kjkzlekjfv6lsmfhaqqplksqr");
|
|
64
|
-
expect(isValid).toBe(true);
|
|
65
|
-
});
|
|
66
|
-
it("should return false for wrong hash lock", () => {
|
|
67
|
-
const result = buildOnchainRefundTransaction({
|
|
68
|
-
fundingTxId,
|
|
69
|
-
fundingVout: 0,
|
|
70
|
-
htlcAmount,
|
|
71
|
-
hashLock,
|
|
72
|
-
serverPubKey,
|
|
73
|
-
userPubKey,
|
|
74
|
-
userSecretKey: userSecretKeyHex,
|
|
75
|
-
refundLocktime,
|
|
76
|
-
destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
77
|
-
feeRateSatPerVb: 1,
|
|
78
|
-
network: "testnet",
|
|
79
|
-
});
|
|
80
|
-
// Use a different hash lock
|
|
81
|
-
const wrongHashLock = hex.encode(computeHash160(new Uint8Array(32).fill(99)));
|
|
82
|
-
const isValid = verifyHtlcAddress(result.htlcAddress, wrongHashLock, serverPubKey, userPubKey, refundLocktime, "testnet");
|
|
83
|
-
expect(isValid).toBe(false);
|
|
84
|
-
});
|
|
85
|
-
it("should return false for wrong server pubkey", () => {
|
|
86
|
-
const result = buildOnchainRefundTransaction({
|
|
87
|
-
fundingTxId,
|
|
88
|
-
fundingVout: 0,
|
|
89
|
-
htlcAmount,
|
|
90
|
-
hashLock,
|
|
91
|
-
serverPubKey,
|
|
92
|
-
userPubKey,
|
|
93
|
-
userSecretKey: userSecretKeyHex,
|
|
94
|
-
refundLocktime,
|
|
95
|
-
destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
96
|
-
feeRateSatPerVb: 1,
|
|
97
|
-
network: "testnet",
|
|
98
|
-
});
|
|
99
|
-
// Use a different server pubkey
|
|
100
|
-
const wrongServerPubKey = hex.encode(secp256k1.getPublicKey(new Uint8Array(32).fill(99), true).slice(1));
|
|
101
|
-
const isValid = verifyHtlcAddress(result.htlcAddress, hashLock, wrongServerPubKey, userPubKey, refundLocktime, "testnet");
|
|
102
|
-
expect(isValid).toBe(false);
|
|
103
|
-
});
|
|
104
|
-
it("should return false for wrong refund locktime", () => {
|
|
105
|
-
const result = buildOnchainRefundTransaction({
|
|
106
|
-
fundingTxId,
|
|
107
|
-
fundingVout: 0,
|
|
108
|
-
htlcAmount,
|
|
109
|
-
hashLock,
|
|
110
|
-
serverPubKey,
|
|
111
|
-
userPubKey,
|
|
112
|
-
userSecretKey: userSecretKeyHex,
|
|
113
|
-
refundLocktime,
|
|
114
|
-
destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
115
|
-
feeRateSatPerVb: 1,
|
|
116
|
-
network: "testnet",
|
|
117
|
-
});
|
|
118
|
-
const isValid = verifyHtlcAddress(result.htlcAddress, hashLock, serverPubKey, userPubKey, refundLocktime + 1, // Wrong locktime
|
|
119
|
-
"testnet");
|
|
120
|
-
expect(isValid).toBe(false);
|
|
121
|
-
});
|
|
122
|
-
it("should work across different networks", () => {
|
|
123
|
-
// Build for mainnet
|
|
124
|
-
const mainnetResult = buildOnchainRefundTransaction({
|
|
125
|
-
fundingTxId,
|
|
126
|
-
fundingVout: 0,
|
|
127
|
-
htlcAmount,
|
|
128
|
-
hashLock,
|
|
129
|
-
serverPubKey,
|
|
130
|
-
userPubKey,
|
|
131
|
-
userSecretKey: userSecretKeyHex,
|
|
132
|
-
refundLocktime,
|
|
133
|
-
destinationAddress: "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4",
|
|
134
|
-
feeRateSatPerVb: 1,
|
|
135
|
-
network: "mainnet",
|
|
136
|
-
});
|
|
137
|
-
// Verify with correct network
|
|
138
|
-
expect(verifyHtlcAddress(mainnetResult.htlcAddress, hashLock, serverPubKey, userPubKey, refundLocktime, "mainnet")).toBe(true);
|
|
139
|
-
// Verify with wrong network should fail (different address encoding)
|
|
140
|
-
expect(verifyHtlcAddress(mainnetResult.htlcAddress, hashLock, serverPubKey, userPubKey, refundLocktime, "testnet")).toBe(false);
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
// describe("buildOnchainRefundTransaction", () => {
|
|
144
|
-
// it("should build a valid refund transaction", () => {
|
|
145
|
-
// const result = buildOnchainRefundTransaction({
|
|
146
|
-
// fundingTxId,
|
|
147
|
-
// fundingVout: 0,
|
|
148
|
-
// htlcAmount,
|
|
149
|
-
// hashLock,
|
|
150
|
-
// serverPubKey,
|
|
151
|
-
// userPubKey,
|
|
152
|
-
// userSecretKey: userSecretKeyHex,
|
|
153
|
-
// refundLocktime,
|
|
154
|
-
// destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
155
|
-
// feeRateSatPerVb: 1,
|
|
156
|
-
// network: "testnet",
|
|
157
|
-
// });
|
|
158
|
-
//
|
|
159
|
-
// expect(result.txHex).toBeDefined();
|
|
160
|
-
// expect(result.txHex.length).toBeGreaterThan(0);
|
|
161
|
-
// expect(result.txId).toBeDefined();
|
|
162
|
-
// expect(result.txId.length).toBe(64);
|
|
163
|
-
// expect(result.refundAmount).toBeDefined();
|
|
164
|
-
// expect(result.fee).toBeDefined();
|
|
165
|
-
// });
|
|
166
|
-
//
|
|
167
|
-
// it("should deduct fee from refund amount", () => {
|
|
168
|
-
// const feeRate = 5;
|
|
169
|
-
// const result = buildOnchainRefundTransaction({
|
|
170
|
-
// fundingTxId,
|
|
171
|
-
// fundingVout: 0,
|
|
172
|
-
// htlcAmount,
|
|
173
|
-
// hashLock,
|
|
174
|
-
// serverPubKey,
|
|
175
|
-
// userPubKey,
|
|
176
|
-
// userSecretKey: userSecretKeyHex,
|
|
177
|
-
// refundLocktime,
|
|
178
|
-
// destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
179
|
-
// feeRateSatPerVb: feeRate,
|
|
180
|
-
// network: "testnet",
|
|
181
|
-
// });
|
|
182
|
-
//
|
|
183
|
-
// expect(result.refundAmount + result.fee).toBe(htlcAmount);
|
|
184
|
-
// expect(result.fee).toBeGreaterThan(0n);
|
|
185
|
-
// });
|
|
186
|
-
//
|
|
187
|
-
// it("should throw if fee exceeds HTLC amount", () => {
|
|
188
|
-
// const smallAmount = 100n; // Very small amount
|
|
189
|
-
// const highFeeRate = 10; // Will exceed amount
|
|
190
|
-
//
|
|
191
|
-
// expect(() =>
|
|
192
|
-
// buildOnchainRefundTransaction({
|
|
193
|
-
// fundingTxId,
|
|
194
|
-
// fundingVout: 0,
|
|
195
|
-
// htlcAmount: smallAmount,
|
|
196
|
-
// hashLock,
|
|
197
|
-
// serverPubKey,
|
|
198
|
-
// userPubKey,
|
|
199
|
-
// userSecretKey: userSecretKeyHex,
|
|
200
|
-
// refundLocktime,
|
|
201
|
-
// destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
202
|
-
// feeRateSatPerVb: highFeeRate,
|
|
203
|
-
// network: "testnet",
|
|
204
|
-
// }),
|
|
205
|
-
// ).toThrow("exceeds HTLC amount");
|
|
206
|
-
// });
|
|
207
|
-
//
|
|
208
|
-
// it("should throw for invalid hash lock length", () => {
|
|
209
|
-
// expect(() =>
|
|
210
|
-
// buildOnchainRefundTransaction({
|
|
211
|
-
// fundingTxId,
|
|
212
|
-
// fundingVout: 0,
|
|
213
|
-
// htlcAmount,
|
|
214
|
-
// hashLock: "abcd", // Too short
|
|
215
|
-
// serverPubKey,
|
|
216
|
-
// userPubKey,
|
|
217
|
-
// userSecretKey: userSecretKeyHex,
|
|
218
|
-
// refundLocktime,
|
|
219
|
-
// destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
220
|
-
// feeRateSatPerVb: 1,
|
|
221
|
-
// network: "testnet",
|
|
222
|
-
// }),
|
|
223
|
-
// ).toThrow("Invalid hash lock length");
|
|
224
|
-
// });
|
|
225
|
-
//
|
|
226
|
-
// it("should throw for invalid server pubkey length", () => {
|
|
227
|
-
// expect(() =>
|
|
228
|
-
// buildOnchainRefundTransaction({
|
|
229
|
-
// fundingTxId,
|
|
230
|
-
// fundingVout: 0,
|
|
231
|
-
// htlcAmount,
|
|
232
|
-
// hashLock,
|
|
233
|
-
// serverPubKey: "abcd", // Too short
|
|
234
|
-
// userPubKey,
|
|
235
|
-
// userSecretKey: userSecretKeyHex,
|
|
236
|
-
// refundLocktime,
|
|
237
|
-
// destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
238
|
-
// feeRateSatPerVb: 1,
|
|
239
|
-
// network: "testnet",
|
|
240
|
-
// }),
|
|
241
|
-
// ).toThrow("Invalid server pubkey length");
|
|
242
|
-
// });
|
|
243
|
-
//
|
|
244
|
-
// it("should work for different networks", () => {
|
|
245
|
-
// // Mainnet
|
|
246
|
-
// const mainnetResult = buildOnchainRefundTransaction({
|
|
247
|
-
// fundingTxId,
|
|
248
|
-
// fundingVout: 0,
|
|
249
|
-
// htlcAmount,
|
|
250
|
-
// hashLock,
|
|
251
|
-
// serverPubKey,
|
|
252
|
-
// userPubKey,
|
|
253
|
-
// userSecretKey: userSecretKeyHex,
|
|
254
|
-
// refundLocktime,
|
|
255
|
-
// destinationAddress: "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4",
|
|
256
|
-
// feeRateSatPerVb: 1,
|
|
257
|
-
// network: "mainnet",
|
|
258
|
-
// });
|
|
259
|
-
// expect(mainnetResult.txHex).toBeDefined();
|
|
260
|
-
//
|
|
261
|
-
// // Signet (uses testnet addresses)
|
|
262
|
-
// const signetResult = buildOnchainRefundTransaction({
|
|
263
|
-
// fundingTxId,
|
|
264
|
-
// fundingVout: 0,
|
|
265
|
-
// htlcAmount,
|
|
266
|
-
// hashLock,
|
|
267
|
-
// serverPubKey,
|
|
268
|
-
// userPubKey,
|
|
269
|
-
// userSecretKey: userSecretKeyHex,
|
|
270
|
-
// refundLocktime,
|
|
271
|
-
// destinationAddress: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
|
|
272
|
-
// feeRateSatPerVb: 1,
|
|
273
|
-
// network: "signet",
|
|
274
|
-
// });
|
|
275
|
-
// expect(signetResult.txHex).toBeDefined();
|
|
276
|
-
// });
|
|
277
|
-
// });
|
|
278
|
-
});
|
|
279
|
-
//# sourceMappingURL=onchain-refund.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onchain-refund.test.js","sourceRoot":"","sources":["../../tests/onchain-refund.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.test.d.ts","sourceRoot":"","sources":["../../tests/signer.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { bytesToHex, Signer } from "../src/index.js";
|
|
3
|
-
describe("Signer", () => {
|
|
4
|
-
describe("generate", () => {
|
|
5
|
-
it("should generate a signer with 12 words by default", () => {
|
|
6
|
-
const signer = Signer.generate();
|
|
7
|
-
const words = signer.mnemonic.split(" ");
|
|
8
|
-
expect(words).toHaveLength(12);
|
|
9
|
-
});
|
|
10
|
-
it("should generate a signer with 24 words when specified", () => {
|
|
11
|
-
const signer = Signer.generate(24);
|
|
12
|
-
const words = signer.mnemonic.split(" ");
|
|
13
|
-
expect(words).toHaveLength(24);
|
|
14
|
-
});
|
|
15
|
-
it("should generate different mnemonics each time", () => {
|
|
16
|
-
const signer1 = Signer.generate();
|
|
17
|
-
const signer2 = Signer.generate();
|
|
18
|
-
expect(signer1.mnemonic).not.toBe(signer2.mnemonic);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe("fromMnemonic", () => {
|
|
22
|
-
it("should create a signer from a valid mnemonic", () => {
|
|
23
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
24
|
-
const signer = Signer.fromMnemonic(mnemonic);
|
|
25
|
-
expect(signer.mnemonic).toBe(mnemonic);
|
|
26
|
-
});
|
|
27
|
-
it("should normalize mnemonic (trim and lowercase)", () => {
|
|
28
|
-
const mnemonic = " ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABANDON ABOUT ";
|
|
29
|
-
const signer = Signer.fromMnemonic(mnemonic);
|
|
30
|
-
expect(signer.mnemonic).toBe("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about");
|
|
31
|
-
});
|
|
32
|
-
it("should throw on invalid mnemonic", () => {
|
|
33
|
-
expect(() => Signer.fromMnemonic("invalid mnemonic phrase")).toThrow("Invalid mnemonic phrase");
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe("deriveSwapParams", () => {
|
|
37
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
38
|
-
it("should derive swap parameters at index 0", () => {
|
|
39
|
-
const signer = Signer.fromMnemonic(mnemonic);
|
|
40
|
-
const params = signer.deriveSwapParams(0);
|
|
41
|
-
expect(params.secretKey).toHaveLength(32);
|
|
42
|
-
expect(params.publicKey).toHaveLength(33);
|
|
43
|
-
expect(params.preimage).toHaveLength(32);
|
|
44
|
-
expect(params.preimageHash).toHaveLength(32);
|
|
45
|
-
expect(params.userId).toHaveLength(33);
|
|
46
|
-
expect(params.keyIndex).toBe(0);
|
|
47
|
-
});
|
|
48
|
-
it("should derive different parameters for different indices", () => {
|
|
49
|
-
const signer = Signer.fromMnemonic(mnemonic);
|
|
50
|
-
const params0 = signer.deriveSwapParams(0);
|
|
51
|
-
const params1 = signer.deriveSwapParams(1);
|
|
52
|
-
expect(bytesToHex(params0.secretKey)).not.toBe(bytesToHex(params1.secretKey));
|
|
53
|
-
expect(bytesToHex(params0.publicKey)).not.toBe(bytesToHex(params1.publicKey));
|
|
54
|
-
expect(bytesToHex(params0.preimage)).not.toBe(bytesToHex(params1.preimage));
|
|
55
|
-
expect(bytesToHex(params0.preimageHash)).not.toBe(bytesToHex(params1.preimageHash));
|
|
56
|
-
});
|
|
57
|
-
it("should derive same parameters for same index", () => {
|
|
58
|
-
const signer = Signer.fromMnemonic(mnemonic);
|
|
59
|
-
const params1 = signer.deriveSwapParams(0);
|
|
60
|
-
const params2 = signer.deriveSwapParams(0);
|
|
61
|
-
expect(bytesToHex(params1.secretKey)).toBe(bytesToHex(params2.secretKey));
|
|
62
|
-
expect(bytesToHex(params1.publicKey)).toBe(bytesToHex(params2.publicKey));
|
|
63
|
-
expect(bytesToHex(params1.preimage)).toBe(bytesToHex(params2.preimage));
|
|
64
|
-
expect(bytesToHex(params1.preimageHash)).toBe(bytesToHex(params2.preimageHash));
|
|
65
|
-
});
|
|
66
|
-
it("should derive same parameters from same mnemonic", () => {
|
|
67
|
-
const signer1 = Signer.fromMnemonic(mnemonic);
|
|
68
|
-
const signer2 = Signer.fromMnemonic(mnemonic);
|
|
69
|
-
const params1 = signer1.deriveSwapParams(0);
|
|
70
|
-
const params2 = signer2.deriveSwapParams(0);
|
|
71
|
-
expect(bytesToHex(params1.secretKey)).toBe(bytesToHex(params2.secretKey));
|
|
72
|
-
expect(bytesToHex(params1.preimage)).toBe(bytesToHex(params2.preimage));
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe("getUserIdXpubString", () => {
|
|
76
|
-
it("should return a base58-encoded xpub", () => {
|
|
77
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
78
|
-
const signer = Signer.fromMnemonic(mnemonic);
|
|
79
|
-
const xpub = signer.getUserIdXpubString();
|
|
80
|
-
// Should be a base58-encoded extended public key starting with "xpub"
|
|
81
|
-
expect(xpub).toMatch(/^xpub[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/);
|
|
82
|
-
expect(xpub).toHaveLength(111); // Standard xpub length
|
|
83
|
-
});
|
|
84
|
-
it("should return same xpub for same mnemonic", () => {
|
|
85
|
-
const mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
86
|
-
const signer1 = Signer.fromMnemonic(mnemonic);
|
|
87
|
-
const signer2 = Signer.fromMnemonic(mnemonic);
|
|
88
|
-
expect(signer1.getUserIdXpubString()).toBe(signer2.getUserIdXpubString());
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
//# sourceMappingURL=signer.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.test.js","sourceRoot":"","sources":["../../tests/signer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-storage.test.d.ts","sourceRoot":"","sources":["../../tests/sqlite-storage.test.ts"],"names":[],"mappings":""}
|