@zerc20/wallet-sdk 0.0.0-stage → 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/LICENSE +24 -0
- package/README.md +26 -2
- package/dist/burnWorker.d.ts +1 -0
- package/dist/burnWorker.js +21 -0
- package/dist/burnWorker.js.map +1 -0
- package/dist/chain.d.ts +359 -0
- package/dist/chain.js +155 -0
- package/dist/chain.js.map +1 -0
- package/dist/context.d.ts +48 -0
- package/dist/context.js +40 -0
- package/dist/context.js.map +1 -0
- package/dist/core.d.ts +43 -0
- package/dist/core.js +106 -0
- package/dist/core.js.map +1 -0
- package/dist/errors.d.ts +38 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/network.d.ts +66 -0
- package/dist/network.js +55 -0
- package/dist/network.js.map +1 -0
- package/dist/pos.d.ts +93 -0
- package/dist/pos.js +302 -0
- package/dist/pos.js.map +1 -0
- package/dist/prove.d.ts +13 -0
- package/dist/prove.js +53 -0
- package/dist/prove.js.map +1 -0
- package/dist/rageExit.d.ts +5 -0
- package/dist/rageExit.js +146 -0
- package/dist/rageExit.js.map +1 -0
- package/dist/scan.d.ts +17 -0
- package/dist/scan.js +47 -0
- package/dist/scan.js.map +1 -0
- package/dist/seed.d.ts +8 -0
- package/dist/seed.js +35 -0
- package/dist/seed.js.map +1 -0
- package/dist/servers.d.ts +60 -0
- package/dist/servers.js +117 -0
- package/dist/servers.js.map +1 -0
- package/dist/services.d.ts +62 -0
- package/dist/services.js +131 -0
- package/dist/services.js.map +1 -0
- package/dist/spend.d.ts +151 -0
- package/dist/spend.js +745 -0
- package/dist/spend.js.map +1 -0
- package/dist/state.d.ts +174 -0
- package/dist/state.js +45 -0
- package/dist/state.js.map +1 -0
- package/dist/sync.d.ts +84 -0
- package/dist/sync.js +615 -0
- package/dist/sync.js.map +1 -0
- package/dist/tree.d.ts +19 -0
- package/dist/tree.js +63 -0
- package/dist/tree.js.map +1 -0
- package/dist/wallet.d.ts +303 -0
- package/dist/wallet.js +1002 -0
- package/dist/wallet.js.map +1 -0
- package/package.json +60 -4
- package/src/burnWorker.ts +25 -0
- package/src/chain.ts +228 -0
- package/src/context.ts +84 -0
- package/src/core.ts +147 -0
- package/src/errors.ts +63 -0
- package/src/index.ts +41 -0
- package/src/network.ts +94 -0
- package/src/pos.ts +415 -0
- package/src/prove.ts +67 -0
- package/src/rageExit.ts +168 -0
- package/src/scan.ts +62 -0
- package/src/seed.ts +46 -0
- package/src/servers.ts +172 -0
- package/src/services.ts +195 -0
- package/src/snarkjs.d.ts +11 -0
- package/src/spend.ts +912 -0
- package/src/state.ts +211 -0
- package/src/sync.ts +698 -0
- package/src/tree.ts +108 -0
- package/src/wallet.ts +1316 -0
- package/wasm/zerc20_wallet_core.d.ts +176 -0
- package/wasm/zerc20_wallet_core.js +783 -0
- package/wasm/zerc20_wallet_core_bg.wasm +0 -0
- package/wasm/zerc20_wallet_core_bg.wasm.d.ts +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerc20/wallet-sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "A zERC20 wallet for browsers and Node: deposits, private payments, withdrawals and rage exits.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Unlicense",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/kbizikav/zerc20-v2-new.git",
|
|
10
|
+
"directory": "wallet/sdk"
|
|
11
|
+
},
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"src",
|
|
23
|
+
"wasm"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"wasm": "wasm-pack build ../core --target web --out-dir ../sdk/wasm --no-pack --release && rm -f wasm/.gitignore",
|
|
27
|
+
"build": "npm run wasm && tsc -p tsconfig.json",
|
|
28
|
+
"prepack": "npm run build",
|
|
29
|
+
"typecheck": "tsc --noEmit -p tsconfig.json && tsc -p demo",
|
|
30
|
+
"test": "vitest run --config vitest.config.ts",
|
|
31
|
+
"test:e2e": "scripts/e2e.sh",
|
|
32
|
+
"demo": "vite demo"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@noble/ciphers": "^2.3.0",
|
|
36
|
+
"@noble/curves": "^2.3.0",
|
|
37
|
+
"@noble/hashes": "^2.3.0",
|
|
38
|
+
"@zerc20/storage-sdk": "^0.2.0",
|
|
39
|
+
"snarkjs": "0.7.6"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"viem": "^2.57.7"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@dfinity/pic": "0.25.0",
|
|
46
|
+
"@icp-sdk/core": "^6.1.1",
|
|
47
|
+
"@types/node": "24.19.2",
|
|
48
|
+
"typescript": "6.0.3",
|
|
49
|
+
"viem": "2.57.7",
|
|
50
|
+
"vite": "8.3.4",
|
|
51
|
+
"vitest": "4.1.11"
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=22.12"
|
|
55
|
+
},
|
|
56
|
+
"overrides": {
|
|
57
|
+
"underscore": "1.13.8"
|
|
58
|
+
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Searches a burn address off the main thread: core.ts starts one per search, a Web Worker in a browser and a worker
|
|
2
|
+
// thread in Node.
|
|
3
|
+
|
|
4
|
+
import { type BurnAnswer, type BurnSearch, initCore, searchHere } from './core.js';
|
|
5
|
+
|
|
6
|
+
async function answer(s: BurnSearch): Promise<BurnAnswer> {
|
|
7
|
+
try {
|
|
8
|
+
await initCore();
|
|
9
|
+
return { burn: searchHere(s) };
|
|
10
|
+
} catch (e) {
|
|
11
|
+
return { error: e instanceof Error ? e.message : String(e) };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (typeof self !== 'undefined') {
|
|
16
|
+
self.onmessage = async ({ data }: MessageEvent<BurnSearch>) => postMessage(await answer(data));
|
|
17
|
+
} else {
|
|
18
|
+
// a variable, so that bundlers for the browser leave Node's module alone
|
|
19
|
+
const threads = 'node:worker_threads';
|
|
20
|
+
type Port = { postMessage(a: BurnAnswer): void };
|
|
21
|
+
void import(/* @vite-ignore */ threads).then(
|
|
22
|
+
async ({ parentPort, workerData }: { parentPort: Port; workerData: BurnSearch }) =>
|
|
23
|
+
parentPort.postMessage(await answer(workerData)),
|
|
24
|
+
);
|
|
25
|
+
}
|
package/src/chain.ts
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// What a wallet reads from the chain itself, through its own RPC: roots are taken from here, never from a server.
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type Address,
|
|
5
|
+
type Hex,
|
|
6
|
+
type PublicClient,
|
|
7
|
+
createPublicClient,
|
|
8
|
+
decodeAbiParameters,
|
|
9
|
+
http,
|
|
10
|
+
keccak256,
|
|
11
|
+
numberToHex,
|
|
12
|
+
parseAbi,
|
|
13
|
+
size,
|
|
14
|
+
slice,
|
|
15
|
+
toHex,
|
|
16
|
+
zeroAddress,
|
|
17
|
+
} from 'viem';
|
|
18
|
+
import type { ChainConfig } from './network.js';
|
|
19
|
+
|
|
20
|
+
export const verifierAbi = parseAbi([
|
|
21
|
+
'function ledger() view returns (address)',
|
|
22
|
+
'function factory() view returns (address)',
|
|
23
|
+
'function latestAspRoot() view returns (uint256)',
|
|
24
|
+
'function withdrawFee(uint32 tokenId, uint256 amount) view returns (uint256)',
|
|
25
|
+
'struct Groth16Proof { uint256[2] pA; uint256[2][2] pB; uint256[2] pC; }',
|
|
26
|
+
'struct TransactSignals { uint256 tokenId; uint256 chainId; uint256 commitmentRoot; uint256 aspRoot; uint256 nullifier0; uint256 nullifier1; uint256 withdrawRecipient; uint256 withdrawAmount; uint256 withdrawIntent; uint256 noteHash1; uint256 noteHash2; }',
|
|
27
|
+
'struct RageExitRequest { uint64 checkpointIndex; uint256 prevHashChain; uint256[4][] commitments; uint256 nullifier; Groth16Proof proof; }',
|
|
28
|
+
'function rageExit(RageExitRequest request)',
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
export const ledgerAbi = parseAbi([
|
|
32
|
+
'function provedRoots(uint64 index, uint256 root) view returns (bool)',
|
|
33
|
+
'function bound() view returns (uint64)',
|
|
34
|
+
'function hashChainAt(uint64 index) view returns (uint256, bool)',
|
|
35
|
+
'function reserveHashChain() returns (uint64 index, uint256 checkpoint)',
|
|
36
|
+
'function verifySegment(uint64 end, uint256 prev, uint256[4][] commits) view returns (uint64 start)',
|
|
37
|
+
'function checkpointBefore(uint64 end, uint256 prev, uint256[4][] commits) returns (uint64 start)',
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
export const factoryAbi = parseAbi([
|
|
41
|
+
'function tokenCount() view returns (uint32)',
|
|
42
|
+
'function tokenById(uint32 tokenId) view returns (address)',
|
|
43
|
+
]);
|
|
44
|
+
|
|
45
|
+
export const tokenAbi = parseAbi([
|
|
46
|
+
'function symbol() view returns (string)',
|
|
47
|
+
'function decimals() view returns (uint8)',
|
|
48
|
+
'function underlyingAsset() view returns (address)',
|
|
49
|
+
'function wrap(uint256 amount, address receiver) payable',
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
export const erc20Abi = parseAbi([
|
|
53
|
+
'function balanceOf(address owner) view returns (uint256)',
|
|
54
|
+
'function allowance(address owner, address spender) view returns (uint256)',
|
|
55
|
+
'function approve(address spender, uint256 amount) returns (bool)',
|
|
56
|
+
'function transfer(address to, uint256 amount) returns (bool)',
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
export const depositFactoryAbi = parseAbi([
|
|
60
|
+
'function predict(address token, address burnAddress, address refundAddress, address feeRecipient, uint256 fee, address referrer, uint16 referralBps) view returns (address)',
|
|
61
|
+
]);
|
|
62
|
+
|
|
63
|
+
/** The factory's `MAX_REFERRAL_BPS`: the most of a deposit, after the relayer's fee, that a referrer can take. */
|
|
64
|
+
export const MAX_REFERRAL_BPS = 300;
|
|
65
|
+
|
|
66
|
+
/** An app that hands out deposit addresses and takes `bps` of each payment to them, of what is left after the relayer's
|
|
67
|
+
* fee. `address` is paid, and also names the app on chain. */
|
|
68
|
+
export interface Referrer {
|
|
69
|
+
address: Address;
|
|
70
|
+
bps: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const depositAddressAbi = parseAbi(['function refund(address asset)']);
|
|
74
|
+
|
|
75
|
+
/** The native asset's stand-in for `underlyingAsset`. */
|
|
76
|
+
export const NATIVE: Address = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
|
|
77
|
+
|
|
78
|
+
/** `Protocol.UNWRAP_INTENT`: the `withdrawIntent` that pays a withdrawal out as the underlying asset. The EIP-712 struct
|
|
79
|
+
* hash of `Unwrap()`, reduced into the BN254 field. */
|
|
80
|
+
export const UNWRAP_INTENT =
|
|
81
|
+
BigInt(keccak256(keccak256(toHex('Unwrap()')))) %
|
|
82
|
+
21888242871839275222246405745257275088548364400416034343698204186575808495617n;
|
|
83
|
+
|
|
84
|
+
/** A zERC20 token on one chain. Amounts are in its base units, the same as its underlying asset's. */
|
|
85
|
+
export interface Token {
|
|
86
|
+
chainId: bigint;
|
|
87
|
+
tokenId: number;
|
|
88
|
+
/** The zERC20 token: what a public withdrawal pays out (unless it unwraps), and what `unwrap` turns back into
|
|
89
|
+
* `underlying`. */
|
|
90
|
+
address: Address;
|
|
91
|
+
underlying: Address;
|
|
92
|
+
symbol: string;
|
|
93
|
+
decimals: number;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export class Chain {
|
|
97
|
+
readonly client: PublicClient;
|
|
98
|
+
#ledger?: Promise<Address>;
|
|
99
|
+
#tokens?: Token[];
|
|
100
|
+
|
|
101
|
+
constructor(readonly config: ChainConfig) {
|
|
102
|
+
this.client = createPublicClient({ transport: http(config.rpcUrl) });
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
get chainId(): bigint {
|
|
106
|
+
return this.config.chainId;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
ledger(): Promise<Address> {
|
|
110
|
+
this.#ledger ??= this.client.readContract({
|
|
111
|
+
address: this.config.verifier,
|
|
112
|
+
abi: verifierAbi,
|
|
113
|
+
functionName: 'ledger',
|
|
114
|
+
});
|
|
115
|
+
return this.#ledger;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** The deposit address the factory deploys for `token`, `burnAddress` and `refundAddress`, whose flush pays `fee`
|
|
119
|
+
* to `feeRecipient` and `referralBps` of the rest to `referrer`. */
|
|
120
|
+
predictDepositAddress(
|
|
121
|
+
token: Address,
|
|
122
|
+
burnAddress: Hex,
|
|
123
|
+
refundAddress: Address,
|
|
124
|
+
feeRecipient: Address,
|
|
125
|
+
fee: bigint,
|
|
126
|
+
referrer: Address,
|
|
127
|
+
referralBps: number,
|
|
128
|
+
): Promise<Address> {
|
|
129
|
+
return this.client.readContract({
|
|
130
|
+
address: this.config.depositAddressFactory,
|
|
131
|
+
abi: depositFactoryAbi,
|
|
132
|
+
functionName: 'predict',
|
|
133
|
+
args: [token, burnAddress, refundAddress, feeRecipient, fee, referrer, referralBps],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** The refund address of `address` if it is a deployed deposit address for `token` and `burnAddress`, whatever its
|
|
138
|
+
* refund address, fee and referral; null if it is not one. A clone's code ends with its immutable args,
|
|
139
|
+
* `abi.encode(token, burnAddress, refundAddress, feeRecipient, fee, referrer, referralBps)`; the factory's address
|
|
140
|
+
* for them confirms it, so code made to look like one does not pass. */
|
|
141
|
+
async depositAddressRefund(address: Address, token: Address, burnAddress: Hex): Promise<Address | null> {
|
|
142
|
+
const code = await this.client.getCode({ address });
|
|
143
|
+
if (!code || size(code) < 224) return null;
|
|
144
|
+
// the uint16 read as a whole word, so code made to look like a clone cannot make the decoding throw
|
|
145
|
+
const [refundAddress, feeRecipient, fee, referrer, referralBps] = decodeAbiParameters(
|
|
146
|
+
[{ type: 'address' }, { type: 'address' }, { type: 'uint256' }, { type: 'address' }, { type: 'uint256' }],
|
|
147
|
+
slice(code, size(code) - 160),
|
|
148
|
+
);
|
|
149
|
+
// predict would revert
|
|
150
|
+
if (refundAddress === zeroAddress || feeRecipient === zeroAddress) return null;
|
|
151
|
+
if (referralBps > MAX_REFERRAL_BPS || (referrer === zeroAddress && referralBps !== 0n)) return null;
|
|
152
|
+
const expected = await this.predictDepositAddress(
|
|
153
|
+
token,
|
|
154
|
+
burnAddress,
|
|
155
|
+
refundAddress,
|
|
156
|
+
feeRecipient,
|
|
157
|
+
fee,
|
|
158
|
+
referrer,
|
|
159
|
+
Number(referralBps),
|
|
160
|
+
);
|
|
161
|
+
return expected.toLowerCase() === address.toLowerCase() ? refundAddress : null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Whether the ledger accepts `root` as the tree at `size` leaves. */
|
|
165
|
+
async provedRoot(size: number, root: Hex): Promise<boolean> {
|
|
166
|
+
return this.client.readContract({
|
|
167
|
+
address: await this.ledger(),
|
|
168
|
+
abi: ledgerAbi,
|
|
169
|
+
functionName: 'provedRoots',
|
|
170
|
+
args: [BigInt(size), BigInt(root)],
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** `2^64 - 1`, unless the ledger is in an emergency: then it accepts no root above it, and proves none. */
|
|
175
|
+
async bound(): Promise<bigint> {
|
|
176
|
+
return this.client.readContract({ address: await this.ledger(), abi: ledgerAbi, functionName: 'bound' });
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async latestAspRoot(): Promise<Hex> {
|
|
180
|
+
const root = await this.client.readContract({
|
|
181
|
+
address: this.config.verifier,
|
|
182
|
+
abi: verifierAbi,
|
|
183
|
+
functionName: 'latestAspRoot',
|
|
184
|
+
});
|
|
185
|
+
return numberToHex(root, { size: 32 });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
withdrawFee(tokenId: number, amount: bigint): Promise<bigint> {
|
|
189
|
+
return this.client.readContract({
|
|
190
|
+
address: this.config.verifier,
|
|
191
|
+
abi: verifierAbi,
|
|
192
|
+
functionName: 'withdrawFee',
|
|
193
|
+
args: [tokenId, amount],
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Every token the factory has registered, read once and then only the new ones. */
|
|
198
|
+
async tokens(): Promise<Token[]> {
|
|
199
|
+
const factory = await this.client.readContract({
|
|
200
|
+
address: this.config.verifier,
|
|
201
|
+
abi: verifierAbi,
|
|
202
|
+
functionName: 'factory',
|
|
203
|
+
});
|
|
204
|
+
const count = await this.client.readContract({ address: factory, abi: factoryAbi, functionName: 'tokenCount' });
|
|
205
|
+
const known = this.#tokens ?? [];
|
|
206
|
+
const fresh = await Promise.all(
|
|
207
|
+
Array.from({ length: count - known.length }, async (_, i) => {
|
|
208
|
+
const tokenId = known.length + i + 1;
|
|
209
|
+
const address = await this.client.readContract({
|
|
210
|
+
address: factory,
|
|
211
|
+
abi: factoryAbi,
|
|
212
|
+
functionName: 'tokenById',
|
|
213
|
+
args: [tokenId],
|
|
214
|
+
});
|
|
215
|
+
const read = <F extends 'symbol' | 'decimals' | 'underlyingAsset'>(functionName: F) =>
|
|
216
|
+
this.client.readContract({ address, abi: tokenAbi, functionName });
|
|
217
|
+
const [symbol, decimals, underlying] = await Promise.all([
|
|
218
|
+
read('symbol'),
|
|
219
|
+
read('decimals'),
|
|
220
|
+
read('underlyingAsset'),
|
|
221
|
+
]);
|
|
222
|
+
return { chainId: this.chainId, tokenId, address, underlying, symbol, decimals };
|
|
223
|
+
}),
|
|
224
|
+
);
|
|
225
|
+
this.#tokens = [...known, ...fresh];
|
|
226
|
+
return this.#tokens;
|
|
227
|
+
}
|
|
228
|
+
}
|
package/src/context.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Everything an open wallet works with, shared by sync and the operations.
|
|
2
|
+
|
|
3
|
+
import type { CanisterClient, ViewKey } from '@zerc20/storage-sdk';
|
|
4
|
+
import { type Hex, type WalletClient, publicActions } from 'viem';
|
|
5
|
+
import type { Chain } from './chain.js';
|
|
6
|
+
import { core } from './core.js';
|
|
7
|
+
import type { ChainConfig, Network } from './network.js';
|
|
8
|
+
import type { Asp, Indexer } from './servers.js';
|
|
9
|
+
import type { ChainState, WalletState } from './state.js';
|
|
10
|
+
|
|
11
|
+
export interface ChainCtx {
|
|
12
|
+
config: ChainConfig;
|
|
13
|
+
chain: Chain;
|
|
14
|
+
indexer: Indexer;
|
|
15
|
+
asp: Asp;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface SpendKey {
|
|
19
|
+
/** The circuits' `private_key`: only this wallet's own proofs take it. */
|
|
20
|
+
secret: Hex;
|
|
21
|
+
/** The hash of the key that signs this key's spends, which the circuits take with `secret`. */
|
|
22
|
+
authKeyHash: Hex;
|
|
23
|
+
publicKey: Hex;
|
|
24
|
+
nullifyingKey: Hex;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface Ctx {
|
|
28
|
+
network: Network;
|
|
29
|
+
seed: Uint8Array;
|
|
30
|
+
address: Hex;
|
|
31
|
+
walletClient: WalletClient;
|
|
32
|
+
storage: CanisterClient;
|
|
33
|
+
view: ViewKey;
|
|
34
|
+
chains: ChainCtx[];
|
|
35
|
+
state: WalletState;
|
|
36
|
+
save(): Promise<void>;
|
|
37
|
+
/** When storage was last read in full rather than through its log (in memory: the first sync does it). */
|
|
38
|
+
lastFullRefreshMs: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const keys = new WeakMap<Uint8Array, Map<string, SpendKey>>();
|
|
42
|
+
|
|
43
|
+
/** A receive code of this seed's: its chain, token and index (the burn index the code shares). */
|
|
44
|
+
export interface CodeId {
|
|
45
|
+
chainId: bigint;
|
|
46
|
+
tokenId: number;
|
|
47
|
+
index: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** The key that owns this seed's notes and deposits on every chain and token, or with `code`, the notes paid to that
|
|
51
|
+
* receive code. */
|
|
52
|
+
export function spendKey(ctx: Ctx, code?: CodeId): SpendKey {
|
|
53
|
+
let bySeed = keys.get(ctx.seed);
|
|
54
|
+
if (!bySeed) keys.set(ctx.seed, (bySeed = new Map<string, SpendKey>()));
|
|
55
|
+
const id = code ? `${code.chainId}:${code.tokenId}:${code.index}` : '';
|
|
56
|
+
let key = bySeed.get(id);
|
|
57
|
+
if (!key) {
|
|
58
|
+
key = (code ? core.codeKey(ctx.seed, code.chainId, code.tokenId, code.index) : core.spendKey(ctx.seed)) as SpendKey;
|
|
59
|
+
bySeed.set(id, key);
|
|
60
|
+
}
|
|
61
|
+
return key;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function chainCtx(ctx: Ctx, chainId: bigint): ChainCtx {
|
|
65
|
+
const c = ctx.chains.find((c) => c.config.chainId === chainId);
|
|
66
|
+
if (!c) throw new Error(`chain ${chainId} is not in this network`);
|
|
67
|
+
return c;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function chainState(ctx: Ctx, chainId: bigint): ChainState {
|
|
71
|
+
let s = ctx.state.chains.find((c) => c.chainId === chainId);
|
|
72
|
+
if (!s) ctx.state.chains.push((s = { chainId, samples: [], burnNext: {} }));
|
|
73
|
+
return s;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Waits until the wallet's own node has a transaction mined on ours too: the wallet simulates the next one there, and
|
|
77
|
+
* where blocks are fast that node lags ours now and then, so the next one would show as reverting. A wallet that does
|
|
78
|
+
* not answer is not waited on. */
|
|
79
|
+
export async function walletSees(wc: WalletClient, hash: Hex): Promise<void> {
|
|
80
|
+
await wc
|
|
81
|
+
.extend(publicActions)
|
|
82
|
+
.waitForTransactionReceipt({ hash, pollingInterval: 1_000, timeout: 30_000 })
|
|
83
|
+
.catch(() => {});
|
|
84
|
+
}
|
package/src/core.ts
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// The wallet's protocol computations (wallet/core: the Rust the circuits, the attester and the backend share,
|
|
2
|
+
// compiled to wasm). `initCore` loads it once; everything else here waits for it.
|
|
3
|
+
|
|
4
|
+
import { type Address, type Hex, bytesToHex } from 'viem';
|
|
5
|
+
import init, * as wasm from '../wasm/zerc20_wallet_core.js';
|
|
6
|
+
|
|
7
|
+
let ready: Promise<unknown> | undefined;
|
|
8
|
+
|
|
9
|
+
/** Loads the wasm. A browser (or a bundler) fetches the file next to this module; Node reads it from disk. */
|
|
10
|
+
export function initCore(): Promise<void> {
|
|
11
|
+
ready ??= (async () => {
|
|
12
|
+
const url = new URL('../wasm/zerc20_wallet_core_bg.wasm', import.meta.url);
|
|
13
|
+
if (url.protocol !== 'file:') return init({ module_or_path: url });
|
|
14
|
+
// a variable, so that bundlers for the browser leave Node's module alone
|
|
15
|
+
const fs = 'node:fs/promises';
|
|
16
|
+
const { readFile } = (await import(/* @vite-ignore */ fs)) as { readFile: (path: URL) => Promise<Uint8Array> };
|
|
17
|
+
return init({ module_or_path: await readFile(url) });
|
|
18
|
+
})();
|
|
19
|
+
return ready.then(() => undefined);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const core = wasm;
|
|
23
|
+
|
|
24
|
+
export interface Burn {
|
|
25
|
+
salt: Hex;
|
|
26
|
+
address: Address;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A seed's `index`-th burn address of a token, with its salt: about 2^16 hashes, up to tens of seconds on a phone.
|
|
30
|
+
* Searched off the main thread (a Web Worker in a browser, a worker thread in Node), so that the app stays
|
|
31
|
+
* responsive; `signal` stops the search. */
|
|
32
|
+
export const burnAddress = (
|
|
33
|
+
seed: Uint8Array,
|
|
34
|
+
chainId: bigint,
|
|
35
|
+
tokenId: number,
|
|
36
|
+
index: number,
|
|
37
|
+
signal?: AbortSignal,
|
|
38
|
+
): Promise<Burn> => search({ seed, chainId, tokenId, index }, signal);
|
|
39
|
+
|
|
40
|
+
/** The `k`-th burn address a point of sale holding `laneKey` makes for its owner's `publicKey` on a chain and token
|
|
41
|
+
* (`keys::pos_burn`), with its salt: about 2^16 hashes too, searched the same way. */
|
|
42
|
+
export const posBurnAddress = (
|
|
43
|
+
laneKey: Uint8Array,
|
|
44
|
+
chainId: bigint,
|
|
45
|
+
tokenId: number,
|
|
46
|
+
k: number,
|
|
47
|
+
publicKey: Hex,
|
|
48
|
+
signal?: AbortSignal,
|
|
49
|
+
): Promise<Burn> => search({ laneKey, chainId, tokenId, k, publicKey }, signal);
|
|
50
|
+
|
|
51
|
+
/** A burn address of someone else's `publicKey` (one they published to be paid), with a random salt that has the proof
|
|
52
|
+
* of work: about 2^16 hashes too, searched the same way. Only who holds the salt finds it: the payer, and the owner once
|
|
53
|
+
* told (`planSend` with `burn`). */
|
|
54
|
+
export const burnAddressFor = (chainId: bigint, publicKey: Hex, signal?: AbortSignal): Promise<Burn> =>
|
|
55
|
+
search({ chainId, publicKey }, signal);
|
|
56
|
+
|
|
57
|
+
export type BurnSearch =
|
|
58
|
+
| { seed: Uint8Array; chainId: bigint; tokenId: number; index: number }
|
|
59
|
+
| { laneKey: Uint8Array; chainId: bigint; tokenId: number; k: number; publicKey: Hex }
|
|
60
|
+
| { chainId: bigint; publicKey: Hex };
|
|
61
|
+
|
|
62
|
+
/** A search, where it runs: a seed's index, or a point of sale's counter, derives its salts; someone else's key takes
|
|
63
|
+
* random ones. */
|
|
64
|
+
export function searchHere(s: BurnSearch): Burn {
|
|
65
|
+
if ('seed' in s) return core.burnAddress(s.seed, s.chainId, s.tokenId, s.index) as Burn;
|
|
66
|
+
if ('laneKey' in s) return core.posBurnAddress(s.laneKey, s.chainId, s.tokenId, s.k, s.publicKey) as Burn;
|
|
67
|
+
for (;;) {
|
|
68
|
+
const bytes = crypto.getRandomValues(new Uint8Array(32));
|
|
69
|
+
bytes[0] = bytes[0] & 0x1f; // below 2^253: a canonical field element
|
|
70
|
+
const salt = bytesToHex(bytes);
|
|
71
|
+
const address = core.burnAddressOf(s.chainId, s.publicKey, salt) as Address | undefined;
|
|
72
|
+
if (address) return { salt, address };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export type BurnAnswer = { burn: Burn } | { error: string };
|
|
77
|
+
|
|
78
|
+
/** What this module takes from Node's worker threads, typed here so that the package needs no Node types. */
|
|
79
|
+
type NodeThread = new (
|
|
80
|
+
url: URL,
|
|
81
|
+
opts: { workerData: BurnSearch },
|
|
82
|
+
) => {
|
|
83
|
+
once(event: 'message', f: (a: BurnAnswer) => void): void;
|
|
84
|
+
once(event: 'error', f: () => void): void;
|
|
85
|
+
terminate(): Promise<number>;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/** Starts `s` in a worker, which hands `done` its answer, or null if it did not run; returns how to stop it, or null
|
|
89
|
+
* where no worker starts. */
|
|
90
|
+
// ponytail: a worker per search, each compiling the wasm; a pool of availableParallelism() workers if a server makes many
|
|
91
|
+
async function spawn(s: BurnSearch, done: (a: BurnAnswer | null) => void): Promise<(() => void) | null> {
|
|
92
|
+
if (typeof Worker !== 'undefined') {
|
|
93
|
+
const worker = new Worker(new URL('./burnWorker.js', import.meta.url), { type: 'module' });
|
|
94
|
+
worker.onmessage = ({ data }: MessageEvent<BurnAnswer>) => done(data);
|
|
95
|
+
// a worker that does not start (a bundler that left it out) costs responsiveness only
|
|
96
|
+
worker.onerror = (e) => {
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
done(null);
|
|
99
|
+
};
|
|
100
|
+
worker.postMessage(s);
|
|
101
|
+
return () => worker.terminate();
|
|
102
|
+
}
|
|
103
|
+
// variables, so that bundlers for the browser leave Node's module and a second copy of the worker alone
|
|
104
|
+
const [threads, file] = ['node:worker_threads', './burnWorker.js'];
|
|
105
|
+
const { Worker: Thread } = (await import(/* @vite-ignore */ threads).catch(() => ({}))) as { Worker?: NodeThread };
|
|
106
|
+
if (!Thread) return null;
|
|
107
|
+
const thread = new Thread(new URL(file, import.meta.url), { workerData: s });
|
|
108
|
+
thread.once('message', done);
|
|
109
|
+
thread.once('error', () => done(null)); // run from source, as tests are, there is no burnWorker.js
|
|
110
|
+
return () => void thread.terminate();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async function search(s: BurnSearch, signal?: AbortSignal): Promise<Burn> {
|
|
114
|
+
signal?.throwIfAborted();
|
|
115
|
+
await initCore();
|
|
116
|
+
return new Promise((resolve, reject) => {
|
|
117
|
+
let stop: (() => void) | null = null;
|
|
118
|
+
let settled = false;
|
|
119
|
+
const settle = (f: () => void) => {
|
|
120
|
+
if (settled) return;
|
|
121
|
+
settled = true;
|
|
122
|
+
stop?.();
|
|
123
|
+
signal?.removeEventListener('abort', abort);
|
|
124
|
+
f();
|
|
125
|
+
};
|
|
126
|
+
const here = () =>
|
|
127
|
+
settle(() => {
|
|
128
|
+
try {
|
|
129
|
+
resolve(searchHere(s));
|
|
130
|
+
} catch (err) {
|
|
131
|
+
reject(err);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
const abort = () => settle(() => reject(signal!.reason));
|
|
135
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
136
|
+
spawn(s, (a) =>
|
|
137
|
+
a === null ? here() : settle(() => ('burn' in a ? resolve(a.burn) : reject(new Error(a.error)))),
|
|
138
|
+
).then(
|
|
139
|
+
(stopIt) => {
|
|
140
|
+
if (!stopIt) here();
|
|
141
|
+
else if (settled) stopIt();
|
|
142
|
+
else stop = stopIt;
|
|
143
|
+
},
|
|
144
|
+
here, // a page whose CSP forbids workers
|
|
145
|
+
);
|
|
146
|
+
});
|
|
147
|
+
}
|