@wopr-network/crypto-plugins 1.0.1
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/.github/workflows/ci.yml +33 -0
- package/.github/workflows/publish.yml +12 -0
- package/biome.json +23 -0
- package/dist/__tests__/bitcoin-encoder.test.d.ts +2 -0
- package/dist/__tests__/bitcoin-encoder.test.d.ts.map +1 -0
- package/dist/__tests__/bitcoin-encoder.test.js +97 -0
- package/dist/__tests__/bitcoin-encoder.test.js.map +1 -0
- package/dist/__tests__/dogecoin-encoder.test.d.ts +2 -0
- package/dist/__tests__/dogecoin-encoder.test.d.ts.map +1 -0
- package/dist/__tests__/dogecoin-encoder.test.js +57 -0
- package/dist/__tests__/dogecoin-encoder.test.js.map +1 -0
- package/dist/__tests__/litecoin-encoder.test.d.ts +2 -0
- package/dist/__tests__/litecoin-encoder.test.d.ts.map +1 -0
- package/dist/__tests__/litecoin-encoder.test.js +44 -0
- package/dist/__tests__/litecoin-encoder.test.js.map +1 -0
- package/dist/__tests__/registry.test.d.ts +2 -0
- package/dist/__tests__/registry.test.d.ts.map +1 -0
- package/dist/__tests__/registry.test.js +75 -0
- package/dist/__tests__/registry.test.js.map +1 -0
- package/dist/__tests__/rpc.test.d.ts +2 -0
- package/dist/__tests__/rpc.test.d.ts.map +1 -0
- package/dist/__tests__/rpc.test.js +31 -0
- package/dist/__tests__/rpc.test.js.map +1 -0
- package/dist/__tests__/solana-encoder.test.d.ts +2 -0
- package/dist/__tests__/solana-encoder.test.d.ts.map +1 -0
- package/dist/__tests__/solana-encoder.test.js +85 -0
- package/dist/__tests__/solana-encoder.test.js.map +1 -0
- package/dist/__tests__/solana-watcher.test.d.ts +2 -0
- package/dist/__tests__/solana-watcher.test.d.ts.map +1 -0
- package/dist/__tests__/solana-watcher.test.js +281 -0
- package/dist/__tests__/solana-watcher.test.js.map +1 -0
- package/dist/__tests__/sweep-key-parity.test.d.ts +2 -0
- package/dist/__tests__/sweep-key-parity.test.d.ts.map +1 -0
- package/dist/__tests__/sweep-key-parity.test.js +236 -0
- package/dist/__tests__/sweep-key-parity.test.js.map +1 -0
- package/dist/__tests__/tron-encoder.test.d.ts +2 -0
- package/dist/__tests__/tron-encoder.test.d.ts.map +1 -0
- package/dist/__tests__/tron-encoder.test.js +93 -0
- package/dist/__tests__/tron-encoder.test.js.map +1 -0
- package/dist/__tests__/utxo-watcher.test.d.ts +2 -0
- package/dist/__tests__/utxo-watcher.test.d.ts.map +1 -0
- package/dist/__tests__/utxo-watcher.test.js +218 -0
- package/dist/__tests__/utxo-watcher.test.js.map +1 -0
- package/dist/bitcoin/encoder.d.ts +15 -0
- package/dist/bitcoin/encoder.d.ts.map +1 -0
- package/dist/bitcoin/encoder.js +286 -0
- package/dist/bitcoin/encoder.js.map +1 -0
- package/dist/bitcoin/index.d.ts +4 -0
- package/dist/bitcoin/index.d.ts.map +1 -0
- package/dist/bitcoin/index.js +20 -0
- package/dist/bitcoin/index.js.map +1 -0
- package/dist/dogecoin/encoder.d.ts +19 -0
- package/dist/dogecoin/encoder.d.ts.map +1 -0
- package/dist/dogecoin/encoder.js +145 -0
- package/dist/dogecoin/encoder.js.map +1 -0
- package/dist/dogecoin/index.d.ts +4 -0
- package/dist/dogecoin/index.d.ts.map +1 -0
- package/dist/dogecoin/index.js +20 -0
- package/dist/dogecoin/index.js.map +1 -0
- package/dist/evm/encoder.d.ts +7 -0
- package/dist/evm/encoder.d.ts.map +1 -0
- package/dist/evm/encoder.js +43 -0
- package/dist/evm/encoder.js.map +1 -0
- package/dist/evm/eth-watcher.d.ts +38 -0
- package/dist/evm/eth-watcher.d.ts.map +1 -0
- package/dist/evm/eth-watcher.js +138 -0
- package/dist/evm/eth-watcher.js.map +1 -0
- package/dist/evm/index.d.ts +16 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +34 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/types.d.ts +43 -0
- package/dist/evm/types.d.ts.map +1 -0
- package/dist/evm/types.js +101 -0
- package/dist/evm/types.js.map +1 -0
- package/dist/evm/watcher.d.ts +42 -0
- package/dist/evm/watcher.d.ts.map +1 -0
- package/dist/evm/watcher.js +162 -0
- package/dist/evm/watcher.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/litecoin/encoder.d.ts +8 -0
- package/dist/litecoin/encoder.d.ts.map +1 -0
- package/dist/litecoin/encoder.js +16 -0
- package/dist/litecoin/encoder.js.map +1 -0
- package/dist/litecoin/index.d.ts +4 -0
- package/dist/litecoin/index.d.ts.map +1 -0
- package/dist/litecoin/index.js +20 -0
- package/dist/litecoin/index.js.map +1 -0
- package/dist/shared/test-helpers/index.d.ts +9 -0
- package/dist/shared/test-helpers/index.d.ts.map +1 -0
- package/dist/shared/test-helpers/index.js +30 -0
- package/dist/shared/test-helpers/index.js.map +1 -0
- package/dist/shared/utxo/index.d.ts +5 -0
- package/dist/shared/utxo/index.d.ts.map +1 -0
- package/dist/shared/utxo/index.js +3 -0
- package/dist/shared/utxo/index.js.map +1 -0
- package/dist/shared/utxo/rpc.d.ts +24 -0
- package/dist/shared/utxo/rpc.d.ts.map +1 -0
- package/dist/shared/utxo/rpc.js +75 -0
- package/dist/shared/utxo/rpc.js.map +1 -0
- package/dist/shared/utxo/types.d.ts +40 -0
- package/dist/shared/utxo/types.d.ts.map +1 -0
- package/dist/shared/utxo/types.js +2 -0
- package/dist/shared/utxo/types.js.map +1 -0
- package/dist/shared/utxo/watcher.d.ts +55 -0
- package/dist/shared/utxo/watcher.d.ts.map +1 -0
- package/dist/shared/utxo/watcher.js +150 -0
- package/dist/shared/utxo/watcher.js.map +1 -0
- package/dist/solana/encoder.d.ts +13 -0
- package/dist/solana/encoder.d.ts.map +1 -0
- package/dist/solana/encoder.js +62 -0
- package/dist/solana/encoder.js.map +1 -0
- package/dist/solana/index.d.ts +17 -0
- package/dist/solana/index.d.ts.map +1 -0
- package/dist/solana/index.js +32 -0
- package/dist/solana/index.js.map +1 -0
- package/dist/solana/sweeper.d.ts +47 -0
- package/dist/solana/sweeper.d.ts.map +1 -0
- package/dist/solana/sweeper.js +151 -0
- package/dist/solana/sweeper.js.map +1 -0
- package/dist/solana/types.d.ts +49 -0
- package/dist/solana/types.d.ts.map +1 -0
- package/dist/solana/types.js +2 -0
- package/dist/solana/types.js.map +1 -0
- package/dist/solana/watcher.d.ts +59 -0
- package/dist/solana/watcher.d.ts.map +1 -0
- package/dist/solana/watcher.js +251 -0
- package/dist/solana/watcher.js.map +1 -0
- package/dist/sweep/evm-sweeper.d.ts +31 -0
- package/dist/sweep/evm-sweeper.d.ts.map +1 -0
- package/dist/sweep/evm-sweeper.js +229 -0
- package/dist/sweep/evm-sweeper.js.map +1 -0
- package/dist/sweep/index.d.ts +22 -0
- package/dist/sweep/index.d.ts.map +1 -0
- package/dist/sweep/index.js +290 -0
- package/dist/sweep/index.js.map +1 -0
- package/dist/sweep/tron-sweeper.d.ts +40 -0
- package/dist/sweep/tron-sweeper.d.ts.map +1 -0
- package/dist/sweep/tron-sweeper.js +363 -0
- package/dist/sweep/tron-sweeper.js.map +1 -0
- package/dist/sweep/utxo-sweeper.d.ts +14 -0
- package/dist/sweep/utxo-sweeper.d.ts.map +1 -0
- package/dist/sweep/utxo-sweeper.js +13 -0
- package/dist/sweep/utxo-sweeper.js.map +1 -0
- package/dist/tron/address-convert.d.ts +15 -0
- package/dist/tron/address-convert.d.ts.map +1 -0
- package/dist/tron/address-convert.js +95 -0
- package/dist/tron/address-convert.js.map +1 -0
- package/dist/tron/encoder.d.ts +20 -0
- package/dist/tron/encoder.d.ts.map +1 -0
- package/dist/tron/encoder.js +67 -0
- package/dist/tron/encoder.js.map +1 -0
- package/dist/tron/index.d.ts +6 -0
- package/dist/tron/index.d.ts.map +1 -0
- package/dist/tron/index.js +20 -0
- package/dist/tron/index.js.map +1 -0
- package/dist/tron/sha256.d.ts +6 -0
- package/dist/tron/sha256.d.ts.map +1 -0
- package/dist/tron/sha256.js +90 -0
- package/dist/tron/sha256.js.map +1 -0
- package/dist/tron/watcher.d.ts +42 -0
- package/dist/tron/watcher.d.ts.map +1 -0
- package/dist/tron/watcher.js +168 -0
- package/dist/tron/watcher.js.map +1 -0
- package/package.json +47 -0
- package/src/__tests__/bitcoin-encoder.test.ts +115 -0
- package/src/__tests__/dogecoin-encoder.test.ts +66 -0
- package/src/__tests__/litecoin-encoder.test.ts +51 -0
- package/src/__tests__/registry.test.ts +91 -0
- package/src/__tests__/rpc.test.ts +36 -0
- package/src/__tests__/solana-encoder.test.ts +103 -0
- package/src/__tests__/solana-watcher.test.ts +316 -0
- package/src/__tests__/sweep-key-parity.test.ts +302 -0
- package/src/__tests__/tron-encoder.test.ts +108 -0
- package/src/__tests__/utxo-watcher.test.ts +252 -0
- package/src/bitcoin/encoder.ts +320 -0
- package/src/bitcoin/index.ts +23 -0
- package/src/dogecoin/encoder.ts +161 -0
- package/src/dogecoin/index.ts +23 -0
- package/src/evm/encoder.ts +49 -0
- package/src/evm/eth-watcher.ts +168 -0
- package/src/evm/index.ts +46 -0
- package/src/evm/types.ts +146 -0
- package/src/evm/watcher.ts +189 -0
- package/src/index.ts +21 -0
- package/src/litecoin/encoder.ts +18 -0
- package/src/litecoin/index.ts +23 -0
- package/src/shared/test-helpers/index.ts +36 -0
- package/src/shared/utxo/index.ts +12 -0
- package/src/shared/utxo/rpc.ts +80 -0
- package/src/shared/utxo/types.ts +43 -0
- package/src/shared/utxo/watcher.ts +195 -0
- package/src/solana/encoder.ts +72 -0
- package/src/solana/index.ts +36 -0
- package/src/solana/sweeper.ts +196 -0
- package/src/solana/types.ts +52 -0
- package/src/solana/watcher.ts +282 -0
- package/src/sweep/evm-sweeper.ts +296 -0
- package/src/sweep/index.ts +353 -0
- package/src/sweep/tron-sweeper.ts +467 -0
- package/src/sweep/utxo-sweeper.ts +23 -0
- package/src/tron/address-convert.ts +91 -0
- package/src/tron/encoder.ts +74 -0
- package/src/tron/index.ts +23 -0
- package/src/tron/sha256.ts +100 -0
- package/src/tron/watcher.ts +208 -0
- package/tsconfig.json +17 -0
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tron-encoder.test.js","sourceRoot":"","sources":["../../src/__tests__/tron-encoder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utxo-watcher.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utxo-watcher.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { createMockCursorStore, createMockOracle } from "../shared/test-helpers/index.js";
|
|
3
|
+
import { UtxoWatcher } from "../shared/utxo/watcher.js";
|
|
4
|
+
function createTestWatcher(rpc, opts) {
|
|
5
|
+
const cursorStore = createMockCursorStore();
|
|
6
|
+
const oracle = createMockOracle();
|
|
7
|
+
const watcher = new UtxoWatcher({
|
|
8
|
+
rpc,
|
|
9
|
+
token: opts?.token ?? "BTC",
|
|
10
|
+
chain: opts?.chain ?? "bitcoin",
|
|
11
|
+
decimals: 8,
|
|
12
|
+
confirmations: opts?.confirmations ?? 3,
|
|
13
|
+
oracle,
|
|
14
|
+
cursorStore,
|
|
15
|
+
});
|
|
16
|
+
return { watcher, cursorStore, oracle };
|
|
17
|
+
}
|
|
18
|
+
describe("UtxoWatcher", () => {
|
|
19
|
+
it("returns empty array when no addresses are watched", async () => {
|
|
20
|
+
const rpc = vi.fn();
|
|
21
|
+
const { watcher } = createTestWatcher(rpc);
|
|
22
|
+
const events = await watcher.poll();
|
|
23
|
+
expect(events).toEqual([]);
|
|
24
|
+
expect(rpc).not.toHaveBeenCalled();
|
|
25
|
+
});
|
|
26
|
+
it("detects a payment with confirmations", async () => {
|
|
27
|
+
const rpc = vi.fn().mockImplementation(async (method, _params) => {
|
|
28
|
+
if (method === "listreceivedbyaddress") {
|
|
29
|
+
return [{ address: "bc1qtest", amount: 0.001, confirmations: 3, txids: ["tx1"] }];
|
|
30
|
+
}
|
|
31
|
+
if (method === "gettransaction") {
|
|
32
|
+
return {
|
|
33
|
+
details: [{ address: "bc1qtest", amount: 0.001, category: "receive" }],
|
|
34
|
+
confirmations: 3,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
});
|
|
39
|
+
const { watcher } = createTestWatcher(rpc, { confirmations: 3 });
|
|
40
|
+
watcher.setWatchedAddresses(["bc1qtest"]);
|
|
41
|
+
const events = await watcher.poll();
|
|
42
|
+
expect(events).toHaveLength(1);
|
|
43
|
+
expect(events[0].chain).toBe("bitcoin");
|
|
44
|
+
expect(events[0].token).toBe("BTC");
|
|
45
|
+
expect(events[0].to).toBe("bc1qtest");
|
|
46
|
+
expect(events[0].txHash).toBe("tx1");
|
|
47
|
+
expect(events[0].confirmations).toBe(3);
|
|
48
|
+
expect(events[0].confirmationsRequired).toBe(3);
|
|
49
|
+
// 0.001 BTC = 100,000 sats. priceMicros=100_000_000_000 (=$100,000).
|
|
50
|
+
// nativeToCents(100000, 100000000000, 8) = (100000 * 100000000000) / (10000 * 10^8) = 10000000000000000 / 1000000000000 = 10000
|
|
51
|
+
expect(events[0].rawAmount).toBe("100000");
|
|
52
|
+
expect(events[0].amountUsdCents).toBe(10000); // $100.00
|
|
53
|
+
});
|
|
54
|
+
it("skips addresses not in the watch set", async () => {
|
|
55
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
56
|
+
if (method === "listreceivedbyaddress") {
|
|
57
|
+
return [{ address: "bc1qother", amount: 1.0, confirmations: 6, txids: ["tx2"] }];
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
});
|
|
61
|
+
const { watcher } = createTestWatcher(rpc);
|
|
62
|
+
watcher.setWatchedAddresses(["bc1qmine"]);
|
|
63
|
+
const events = await watcher.poll();
|
|
64
|
+
expect(events).toEqual([]);
|
|
65
|
+
});
|
|
66
|
+
it("skips txs that have not gained new confirmations", async () => {
|
|
67
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
68
|
+
if (method === "listreceivedbyaddress") {
|
|
69
|
+
return [{ address: "bc1qtest", amount: 0.5, confirmations: 2, txids: ["tx3"] }];
|
|
70
|
+
}
|
|
71
|
+
if (method === "gettransaction") {
|
|
72
|
+
return {
|
|
73
|
+
details: [{ address: "bc1qtest", amount: 0.5, category: "receive" }],
|
|
74
|
+
confirmations: 2,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
});
|
|
79
|
+
const { watcher } = createTestWatcher(rpc, { confirmations: 6 });
|
|
80
|
+
watcher.setWatchedAddresses(["bc1qtest"]);
|
|
81
|
+
// First poll: should return event
|
|
82
|
+
const first = await watcher.poll();
|
|
83
|
+
expect(first).toHaveLength(1);
|
|
84
|
+
// Second poll with same confirmations: should skip
|
|
85
|
+
const second = await watcher.poll();
|
|
86
|
+
expect(second).toEqual([]);
|
|
87
|
+
});
|
|
88
|
+
it("emits new event when confirmations increase", async () => {
|
|
89
|
+
let confirmations = 1;
|
|
90
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
91
|
+
if (method === "listreceivedbyaddress") {
|
|
92
|
+
return [{ address: "bc1qtest", amount: 0.1, confirmations, txids: ["tx4"] }];
|
|
93
|
+
}
|
|
94
|
+
if (method === "gettransaction") {
|
|
95
|
+
return {
|
|
96
|
+
details: [{ address: "bc1qtest", amount: 0.1, category: "receive" }],
|
|
97
|
+
confirmations,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
});
|
|
102
|
+
const { watcher } = createTestWatcher(rpc, { confirmations: 3 });
|
|
103
|
+
watcher.setWatchedAddresses(["bc1qtest"]);
|
|
104
|
+
const first = await watcher.poll();
|
|
105
|
+
expect(first).toHaveLength(1);
|
|
106
|
+
expect(first[0].confirmations).toBe(1);
|
|
107
|
+
confirmations = 2;
|
|
108
|
+
const second = await watcher.poll();
|
|
109
|
+
expect(second).toHaveLength(1);
|
|
110
|
+
expect(second[0].confirmations).toBe(2);
|
|
111
|
+
confirmations = 3;
|
|
112
|
+
const third = await watcher.poll();
|
|
113
|
+
expect(third).toHaveLength(1);
|
|
114
|
+
expect(third[0].confirmations).toBe(3);
|
|
115
|
+
});
|
|
116
|
+
it("does not emit events after stop()", async () => {
|
|
117
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
118
|
+
if (method === "listreceivedbyaddress") {
|
|
119
|
+
return [{ address: "bc1qtest", amount: 1.0, confirmations: 6, txids: ["tx5"] }];
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
});
|
|
123
|
+
const { watcher } = createTestWatcher(rpc);
|
|
124
|
+
watcher.setWatchedAddresses(["bc1qtest"]);
|
|
125
|
+
watcher.stop();
|
|
126
|
+
const events = await watcher.poll();
|
|
127
|
+
expect(events).toEqual([]);
|
|
128
|
+
expect(rpc).not.toHaveBeenCalled();
|
|
129
|
+
});
|
|
130
|
+
it("importAddress adds to watch set and calls RPC", async () => {
|
|
131
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
132
|
+
if (method === "getdescriptorinfo") {
|
|
133
|
+
return { descriptor: "addr(bc1qnew)#checksum" };
|
|
134
|
+
}
|
|
135
|
+
if (method === "importdescriptors") {
|
|
136
|
+
return [{ success: true }];
|
|
137
|
+
}
|
|
138
|
+
if (method === "listreceivedbyaddress") {
|
|
139
|
+
return [{ address: "bc1qnew", amount: 0.01, confirmations: 1, txids: ["tx6"] }];
|
|
140
|
+
}
|
|
141
|
+
if (method === "gettransaction") {
|
|
142
|
+
return {
|
|
143
|
+
details: [{ address: "bc1qnew", amount: 0.01, category: "receive" }],
|
|
144
|
+
confirmations: 1,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
});
|
|
149
|
+
const { watcher } = createTestWatcher(rpc);
|
|
150
|
+
await watcher.importAddress("bc1qnew");
|
|
151
|
+
const events = await watcher.poll();
|
|
152
|
+
expect(events).toHaveLength(1);
|
|
153
|
+
expect(events[0].to).toBe("bc1qnew");
|
|
154
|
+
});
|
|
155
|
+
it("importAddress falls back to legacy importaddress on error", async () => {
|
|
156
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
157
|
+
if (method === "getdescriptorinfo") {
|
|
158
|
+
throw new Error("Method not found");
|
|
159
|
+
}
|
|
160
|
+
if (method === "importaddress") {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
if (method === "listreceivedbyaddress") {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
});
|
|
168
|
+
const { watcher } = createTestWatcher(rpc);
|
|
169
|
+
await watcher.importAddress("bc1qlegacy");
|
|
170
|
+
expect(rpc).toHaveBeenCalledWith("importaddress", ["bc1qlegacy", "", false]);
|
|
171
|
+
});
|
|
172
|
+
it("works with different chain configs (LTC, DOGE)", async () => {
|
|
173
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
174
|
+
if (method === "listreceivedbyaddress") {
|
|
175
|
+
return [{ address: "ltc1qtest", amount: 0.5, confirmations: 6, txids: ["ltctx1"] }];
|
|
176
|
+
}
|
|
177
|
+
if (method === "gettransaction") {
|
|
178
|
+
return {
|
|
179
|
+
details: [{ address: "ltc1qtest", amount: 0.5, category: "receive" }],
|
|
180
|
+
confirmations: 6,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
});
|
|
185
|
+
const { watcher } = createTestWatcher(rpc, { token: "LTC", chain: "litecoin", confirmations: 6 });
|
|
186
|
+
watcher.setWatchedAddresses(["ltc1qtest"]);
|
|
187
|
+
const events = await watcher.poll();
|
|
188
|
+
expect(events).toHaveLength(1);
|
|
189
|
+
expect(events[0].chain).toBe("litecoin");
|
|
190
|
+
expect(events[0].token).toBe("LTC");
|
|
191
|
+
});
|
|
192
|
+
it("skips entries without a receive category detail", async () => {
|
|
193
|
+
const rpc = vi.fn().mockImplementation(async (method) => {
|
|
194
|
+
if (method === "listreceivedbyaddress") {
|
|
195
|
+
return [{ address: "bc1qtest", amount: 1.0, confirmations: 6, txids: ["tx7"] }];
|
|
196
|
+
}
|
|
197
|
+
if (method === "gettransaction") {
|
|
198
|
+
return {
|
|
199
|
+
details: [{ address: "bc1qtest", amount: 1.0, category: "send" }],
|
|
200
|
+
confirmations: 6,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
});
|
|
205
|
+
const { watcher } = createTestWatcher(rpc);
|
|
206
|
+
watcher.setWatchedAddresses(["bc1qtest"]);
|
|
207
|
+
const events = await watcher.poll();
|
|
208
|
+
expect(events).toEqual([]);
|
|
209
|
+
});
|
|
210
|
+
it("init loads cursor from store", async () => {
|
|
211
|
+
const rpc = vi.fn();
|
|
212
|
+
const { watcher, cursorStore } = createTestWatcher(rpc);
|
|
213
|
+
cursorStore._cursors.set("bitcoin:BTC", 42);
|
|
214
|
+
await watcher.init();
|
|
215
|
+
expect(watcher.getCursor()).toBe(42);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
//# sourceMappingURL=utxo-watcher.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utxo-watcher.test.js","sourceRoot":"","sources":["../../src/__tests__/utxo-watcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IAddressEncoder } from "@wopr-network/platform-core/crypto-plugin";
|
|
2
|
+
/** HASH160 = RIPEMD-160(SHA-256(data)). Standard Bitcoin address hash. */
|
|
3
|
+
export declare function hash160(data: Uint8Array): Uint8Array;
|
|
4
|
+
/**
|
|
5
|
+
* Encode a compressed public key as a bech32 (SegWit v0) address.
|
|
6
|
+
* Used for BTC (hrp="bc"), LTC (hrp="ltc"), etc.
|
|
7
|
+
*/
|
|
8
|
+
export declare function encodeBech32Address(publicKey: Uint8Array, hrp: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Bitcoin bech32 address encoder.
|
|
11
|
+
* Implements IAddressEncoder for the bitcoin plugin.
|
|
12
|
+
* Default HRP is "bc" (mainnet). Override with params.hrp for testnet ("tb").
|
|
13
|
+
*/
|
|
14
|
+
export declare const bech32Encoder: IAddressEncoder;
|
|
15
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/bitcoin/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAkSjG,0EAA0E;AAC1E,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,eAQ3B,CAAC"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
// ---------- bech32 encoding (pure implementation, no external deps) ----------
|
|
2
|
+
const BECH32_CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
|
3
|
+
const BECH32_GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
|
|
4
|
+
function bech32Polymod(values) {
|
|
5
|
+
let chk = 1;
|
|
6
|
+
for (const v of values) {
|
|
7
|
+
const top = chk >> 25;
|
|
8
|
+
chk = ((chk & 0x1ffffff) << 5) ^ v;
|
|
9
|
+
for (let i = 0; i < 5; i++) {
|
|
10
|
+
if ((top >> i) & 1) {
|
|
11
|
+
chk ^= BECH32_GENERATOR[i];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return chk;
|
|
16
|
+
}
|
|
17
|
+
function bech32HrpExpand(hrp) {
|
|
18
|
+
const result = [];
|
|
19
|
+
for (let i = 0; i < hrp.length; i++) {
|
|
20
|
+
result.push(hrp.charCodeAt(i) >> 5);
|
|
21
|
+
}
|
|
22
|
+
result.push(0);
|
|
23
|
+
for (let i = 0; i < hrp.length; i++) {
|
|
24
|
+
result.push(hrp.charCodeAt(i) & 31);
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
function bech32CreateChecksum(hrp, data) {
|
|
29
|
+
const values = [...bech32HrpExpand(hrp), ...data, 0, 0, 0, 0, 0, 0];
|
|
30
|
+
const polymod = bech32Polymod(values) ^ 1;
|
|
31
|
+
const checksum = [];
|
|
32
|
+
for (let i = 0; i < 6; i++) {
|
|
33
|
+
checksum.push((polymod >> (5 * (5 - i))) & 31);
|
|
34
|
+
}
|
|
35
|
+
return checksum;
|
|
36
|
+
}
|
|
37
|
+
function bech32Encode(hrp, data) {
|
|
38
|
+
const combined = [...data, ...bech32CreateChecksum(hrp, data)];
|
|
39
|
+
let result = `${hrp}1`;
|
|
40
|
+
for (const d of combined) {
|
|
41
|
+
result += BECH32_CHARSET[d];
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
/** Convert a byte array to 5-bit words (bech32 encoding). */
|
|
46
|
+
function toWords(bytes) {
|
|
47
|
+
let value = 0;
|
|
48
|
+
let bits = 0;
|
|
49
|
+
const words = [];
|
|
50
|
+
for (const byte of bytes) {
|
|
51
|
+
value = (value << 8) | byte;
|
|
52
|
+
bits += 8;
|
|
53
|
+
while (bits >= 5) {
|
|
54
|
+
bits -= 5;
|
|
55
|
+
words.push((value >> bits) & 31);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (bits > 0) {
|
|
59
|
+
words.push((value << (5 - bits)) & 31);
|
|
60
|
+
}
|
|
61
|
+
return words;
|
|
62
|
+
}
|
|
63
|
+
// ---------- hash160 (SHA-256 + RIPEMD-160) pure implementation ----------
|
|
64
|
+
/**
|
|
65
|
+
* SHA-256 implementation (pure TypeScript).
|
|
66
|
+
* Used for hash160 in address derivation.
|
|
67
|
+
*/
|
|
68
|
+
function sha256(data) {
|
|
69
|
+
const K = [
|
|
70
|
+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,
|
|
71
|
+
0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
|
|
72
|
+
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,
|
|
73
|
+
0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
|
74
|
+
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
|
|
75
|
+
0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
|
|
76
|
+
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,
|
|
77
|
+
0xc67178f2,
|
|
78
|
+
];
|
|
79
|
+
// Pre-processing: padding
|
|
80
|
+
const msgLen = data.length;
|
|
81
|
+
const bitLen = msgLen * 8;
|
|
82
|
+
// Padding: 1 bit, then zeros, then 64-bit length
|
|
83
|
+
const padLen = ((msgLen + 9 + 63) & ~63) - msgLen;
|
|
84
|
+
const padded = new Uint8Array(msgLen + padLen);
|
|
85
|
+
padded.set(data);
|
|
86
|
+
padded[msgLen] = 0x80;
|
|
87
|
+
// Write bit length as big-endian 64-bit at the end
|
|
88
|
+
const view = new DataView(padded.buffer);
|
|
89
|
+
view.setUint32(padded.length - 4, bitLen, false);
|
|
90
|
+
let h0 = 0x6a09e667;
|
|
91
|
+
let h1 = 0xbb67ae85;
|
|
92
|
+
let h2 = 0x3c6ef372;
|
|
93
|
+
let h3 = 0xa54ff53a;
|
|
94
|
+
let h4 = 0x510e527f;
|
|
95
|
+
let h5 = 0x9b05688c;
|
|
96
|
+
let h6 = 0x1f83d9ab;
|
|
97
|
+
let h7 = 0x5be0cd19;
|
|
98
|
+
const w = new Int32Array(64);
|
|
99
|
+
for (let offset = 0; offset < padded.length; offset += 64) {
|
|
100
|
+
for (let i = 0; i < 16; i++) {
|
|
101
|
+
w[i] = view.getInt32(offset + i * 4, false);
|
|
102
|
+
}
|
|
103
|
+
for (let i = 16; i < 64; i++) {
|
|
104
|
+
const s0 = (ror32(w[i - 15], 7) ^ ror32(w[i - 15], 18) ^ (w[i - 15] >>> 3)) | 0;
|
|
105
|
+
const s1 = (ror32(w[i - 2], 17) ^ ror32(w[i - 2], 19) ^ (w[i - 2] >>> 10)) | 0;
|
|
106
|
+
w[i] = (w[i - 16] + s0 + w[i - 7] + s1) | 0;
|
|
107
|
+
}
|
|
108
|
+
let a = h0;
|
|
109
|
+
let b = h1;
|
|
110
|
+
let c = h2;
|
|
111
|
+
let d = h3;
|
|
112
|
+
let e = h4;
|
|
113
|
+
let f = h5;
|
|
114
|
+
let g = h6;
|
|
115
|
+
let h = h7;
|
|
116
|
+
for (let i = 0; i < 64; i++) {
|
|
117
|
+
const S1 = (ror32(e, 6) ^ ror32(e, 11) ^ ror32(e, 25)) | 0;
|
|
118
|
+
const ch = ((e & f) ^ (~e & g)) | 0;
|
|
119
|
+
const temp1 = (h + S1 + ch + K[i] + w[i]) | 0;
|
|
120
|
+
const S0 = (ror32(a, 2) ^ ror32(a, 13) ^ ror32(a, 22)) | 0;
|
|
121
|
+
const maj = ((a & b) ^ (a & c) ^ (b & c)) | 0;
|
|
122
|
+
const temp2 = (S0 + maj) | 0;
|
|
123
|
+
h = g;
|
|
124
|
+
g = f;
|
|
125
|
+
f = e;
|
|
126
|
+
e = (d + temp1) | 0;
|
|
127
|
+
d = c;
|
|
128
|
+
c = b;
|
|
129
|
+
b = a;
|
|
130
|
+
a = (temp1 + temp2) | 0;
|
|
131
|
+
}
|
|
132
|
+
h0 = (h0 + a) | 0;
|
|
133
|
+
h1 = (h1 + b) | 0;
|
|
134
|
+
h2 = (h2 + c) | 0;
|
|
135
|
+
h3 = (h3 + d) | 0;
|
|
136
|
+
h4 = (h4 + e) | 0;
|
|
137
|
+
h5 = (h5 + f) | 0;
|
|
138
|
+
h6 = (h6 + g) | 0;
|
|
139
|
+
h7 = (h7 + h) | 0;
|
|
140
|
+
}
|
|
141
|
+
const result = new Uint8Array(32);
|
|
142
|
+
const rv = new DataView(result.buffer);
|
|
143
|
+
rv.setInt32(0, h0, false);
|
|
144
|
+
rv.setInt32(4, h1, false);
|
|
145
|
+
rv.setInt32(8, h2, false);
|
|
146
|
+
rv.setInt32(12, h3, false);
|
|
147
|
+
rv.setInt32(16, h4, false);
|
|
148
|
+
rv.setInt32(20, h5, false);
|
|
149
|
+
rv.setInt32(24, h6, false);
|
|
150
|
+
rv.setInt32(28, h7, false);
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
function ror32(x, n) {
|
|
154
|
+
return (x >>> n) | (x << (32 - n));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* RIPEMD-160 implementation (pure TypeScript).
|
|
158
|
+
* Used for hash160 in address derivation.
|
|
159
|
+
*/
|
|
160
|
+
function ripemd160(data) {
|
|
161
|
+
const msgLen = data.length;
|
|
162
|
+
const bitLen = msgLen * 8;
|
|
163
|
+
const padLen = ((msgLen + 9 + 63) & ~63) - msgLen;
|
|
164
|
+
const padded = new Uint8Array(msgLen + padLen);
|
|
165
|
+
padded.set(data);
|
|
166
|
+
padded[msgLen] = 0x80;
|
|
167
|
+
const view = new DataView(padded.buffer);
|
|
168
|
+
view.setUint32(padded.length - 8, bitLen, true); // little-endian for RIPEMD
|
|
169
|
+
let h0 = 0x67452301;
|
|
170
|
+
let h1 = 0xefcdab89;
|
|
171
|
+
let h2 = 0x98badcfe;
|
|
172
|
+
let h3 = 0x10325476;
|
|
173
|
+
let h4 = 0xc3d2e1f0;
|
|
174
|
+
const RL = [
|
|
175
|
+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10,
|
|
176
|
+
14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7,
|
|
177
|
+
12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13,
|
|
178
|
+
];
|
|
179
|
+
const RR = [
|
|
180
|
+
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5,
|
|
181
|
+
1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4,
|
|
182
|
+
1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11,
|
|
183
|
+
];
|
|
184
|
+
const SL = [
|
|
185
|
+
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11,
|
|
186
|
+
13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15,
|
|
187
|
+
5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6,
|
|
188
|
+
];
|
|
189
|
+
const SR = [
|
|
190
|
+
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9,
|
|
191
|
+
7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5,
|
|
192
|
+
12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11,
|
|
193
|
+
];
|
|
194
|
+
const KL = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e];
|
|
195
|
+
const KR = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000];
|
|
196
|
+
function f(j, x, y, z) {
|
|
197
|
+
if (j < 16)
|
|
198
|
+
return x ^ y ^ z;
|
|
199
|
+
if (j < 32)
|
|
200
|
+
return (x & y) | (~x & z);
|
|
201
|
+
if (j < 48)
|
|
202
|
+
return (x | ~y) ^ z;
|
|
203
|
+
if (j < 64)
|
|
204
|
+
return (x & z) | (y & ~z);
|
|
205
|
+
return x ^ (y | ~z);
|
|
206
|
+
}
|
|
207
|
+
function rol32(x, n) {
|
|
208
|
+
return (x << n) | (x >>> (32 - n));
|
|
209
|
+
}
|
|
210
|
+
for (let offset = 0; offset < padded.length; offset += 64) {
|
|
211
|
+
const x = [];
|
|
212
|
+
for (let i = 0; i < 16; i++) {
|
|
213
|
+
x.push(view.getInt32(offset + i * 4, true)); // little-endian
|
|
214
|
+
}
|
|
215
|
+
let al = h0;
|
|
216
|
+
let bl = h1;
|
|
217
|
+
let cl = h2;
|
|
218
|
+
let dl = h3;
|
|
219
|
+
let el = h4;
|
|
220
|
+
let ar = h0;
|
|
221
|
+
let br = h1;
|
|
222
|
+
let cr = h2;
|
|
223
|
+
let dr = h3;
|
|
224
|
+
let er = h4;
|
|
225
|
+
for (let j = 0; j < 80; j++) {
|
|
226
|
+
const round = j >> 4;
|
|
227
|
+
let t = (al + f(j, bl, cl, dl) + x[RL[j]] + KL[round]) | 0;
|
|
228
|
+
t = (rol32(t, SL[j]) + el) | 0;
|
|
229
|
+
al = el;
|
|
230
|
+
el = dl;
|
|
231
|
+
dl = rol32(cl, 10);
|
|
232
|
+
cl = bl;
|
|
233
|
+
bl = t;
|
|
234
|
+
t = (ar + f(79 - j, br, cr, dr) + x[RR[j]] + KR[round]) | 0;
|
|
235
|
+
t = (rol32(t, SR[j]) + er) | 0;
|
|
236
|
+
ar = er;
|
|
237
|
+
er = dr;
|
|
238
|
+
dr = rol32(cr, 10);
|
|
239
|
+
cr = br;
|
|
240
|
+
br = t;
|
|
241
|
+
}
|
|
242
|
+
const t = (h1 + cl + dr) | 0;
|
|
243
|
+
h1 = (h2 + dl + er) | 0;
|
|
244
|
+
h2 = (h3 + el + ar) | 0;
|
|
245
|
+
h3 = (h4 + al + br) | 0;
|
|
246
|
+
h4 = (h0 + bl + cr) | 0;
|
|
247
|
+
h0 = t;
|
|
248
|
+
}
|
|
249
|
+
const result = new Uint8Array(20);
|
|
250
|
+
const rv = new DataView(result.buffer);
|
|
251
|
+
rv.setInt32(0, h0, true);
|
|
252
|
+
rv.setInt32(4, h1, true);
|
|
253
|
+
rv.setInt32(8, h2, true);
|
|
254
|
+
rv.setInt32(12, h3, true);
|
|
255
|
+
rv.setInt32(16, h4, true);
|
|
256
|
+
return result;
|
|
257
|
+
}
|
|
258
|
+
/** HASH160 = RIPEMD-160(SHA-256(data)). Standard Bitcoin address hash. */
|
|
259
|
+
export function hash160(data) {
|
|
260
|
+
return ripemd160(sha256(data));
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Encode a compressed public key as a bech32 (SegWit v0) address.
|
|
264
|
+
* Used for BTC (hrp="bc"), LTC (hrp="ltc"), etc.
|
|
265
|
+
*/
|
|
266
|
+
export function encodeBech32Address(publicKey, hrp) {
|
|
267
|
+
const h = hash160(publicKey);
|
|
268
|
+
const words = toWords(h);
|
|
269
|
+
// witness version 0 prefix
|
|
270
|
+
return bech32Encode(hrp, [0, ...words]);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Bitcoin bech32 address encoder.
|
|
274
|
+
* Implements IAddressEncoder for the bitcoin plugin.
|
|
275
|
+
* Default HRP is "bc" (mainnet). Override with params.hrp for testnet ("tb").
|
|
276
|
+
*/
|
|
277
|
+
export const bech32Encoder = {
|
|
278
|
+
encode(publicKey, params) {
|
|
279
|
+
const hrp = params.hrp ?? "bc";
|
|
280
|
+
return encodeBech32Address(publicKey, hrp);
|
|
281
|
+
},
|
|
282
|
+
encodingType() {
|
|
283
|
+
return "bech32";
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
//# sourceMappingURL=encoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/bitcoin/encoder.ts"],"names":[],"mappings":"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AAC,EAAE,EAAE;QACjH,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAClH,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;KACrC,CAAC;IAEF,MAAM,EAAE,GAAG;QACV,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACjH,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAClH,CAAC,E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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bitcoin/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,2CAA2C,CAAC;AAM3F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE3E,eAAO,MAAM,aAAa,EAAE,YAc3B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createRpcFromOpts } from "../shared/utxo/index.js";
|
|
2
|
+
import { createUtxoWatcher } from "../shared/utxo/watcher.js";
|
|
3
|
+
import { bech32Encoder } from "./encoder.js";
|
|
4
|
+
export { bech32Encoder, encodeBech32Address, hash160 } from "./encoder.js";
|
|
5
|
+
export const bitcoinPlugin = {
|
|
6
|
+
pluginId: "bitcoin",
|
|
7
|
+
supportedCurve: "secp256k1",
|
|
8
|
+
encoders: {
|
|
9
|
+
bech32: bech32Encoder,
|
|
10
|
+
},
|
|
11
|
+
createWatcher(opts) {
|
|
12
|
+
const rpc = createRpcFromOpts(opts.rpcUrl, opts.rpcHeaders);
|
|
13
|
+
return createUtxoWatcher(opts, rpc);
|
|
14
|
+
},
|
|
15
|
+
createSweeper() {
|
|
16
|
+
throw new Error("Not implemented");
|
|
17
|
+
},
|
|
18
|
+
version: 1,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bitcoin/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,CAAC,MAAM,aAAa,GAAiB;IAC1C,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,WAAW;IAC3B,QAAQ,EAAE;QACT,MAAM,EAAE,aAAa;KACrB;IACD,aAAa,CAAC,IAAiB;QAC9B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,OAAO,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,aAAa;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,CAAC;CACV,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IAddressEncoder } from "@wopr-network/platform-core/crypto-plugin";
|
|
2
|
+
/**
|
|
3
|
+
* Encode a compressed public key as a P2PKH (Base58Check) address.
|
|
4
|
+
* Used for DOGE (version 0x1e), etc.
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. HASH160(pubkey) = RIPEMD-160(SHA-256(pubkey))
|
|
8
|
+
* 2. Prepend version byte
|
|
9
|
+
* 3. Append double-SHA-256 checksum (first 4 bytes)
|
|
10
|
+
* 4. Base58 encode
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodeP2pkhAddress(publicKey: Uint8Array, versionByte: number): string;
|
|
13
|
+
/**
|
|
14
|
+
* Dogecoin P2PKH address encoder.
|
|
15
|
+
* Implements IAddressEncoder for the dogecoin plugin.
|
|
16
|
+
* Default version byte is 0x1e (30) for mainnet. Override with params.version.
|
|
17
|
+
*/
|
|
18
|
+
export declare const p2pkhEncoder: IAddressEncoder;
|
|
19
|
+
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/dogecoin/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,2CAA2C,CAAC;AA6HjG;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAUrF;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,eAQ1B,CAAC"}
|