@dexterai/vault 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -40
- package/assets/dexter-wordmark.svg +30 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/Dexter-DAO/dexter-vault-sdk/main/assets/dexter-wordmark.svg" alt="Dexter" width="360">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">@dexterai/vault</h1>
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>The off-chain mirror of the dexter-vault Anchor program. Byte-precise instruction builders, message encoders, account decoders, and signer abstractions for the unruggable passkey vault.</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/@dexterai/vault"><img src="https://img.shields.io/npm/v/@dexterai/vault.svg" alt="npm"></a>
|
|
13
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E=18-brightgreen.svg" alt="Node"></a>
|
|
14
|
+
<a href="https://github.com/Dexter-DAO/dexter-vault-sdk"><img src="https://img.shields.io/badge/program-Hg3wRayd…2fhc-blueviolet" alt="Vault program"></a>
|
|
15
|
+
<a href="https://solscan.io/tx/4VLDNUDtY8Q3ucwFyuCEz7BsBFqYzUo2ANQv4KU2TDnrUEcn9tS7KmyqHGkZjM6AqEf9uZuS1W5CTQ1RKL47QU89"><img src="https://img.shields.io/badge/first_settle-on_mainnet-success" alt="First mainnet settle"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="https://dexter.cash"><strong>See it on dexter.cash →</strong></a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## What is `@dexterai/vault`?
|
|
25
|
+
|
|
26
|
+
The `dexter-vault` Solana program is a non-custodial passkey-rooted vault: WebAuthn signs every spend, a programmatic Swig role makes the unruggable streaming channel possible, and the entire spend path goes through the vault program — no master key, no escrow, no trust.
|
|
27
|
+
|
|
28
|
+
This package is the TypeScript that talks to it. Every byte the on-chain program checks — instruction discriminators, the 180-byte session-registration message, the 128-byte revocation message, the 44-byte voucher payload, the vault account layout — lives here, in exactly one file each. Three repos used to hand-roll these primitives and one of them missed a role; that bug is now structurally impossible.
|
|
29
|
+
|
|
30
|
+
If you are about to hand-roll a vault instruction builder, a precompile message, a Swig role list, or a vault account decoder, **stop and import from here instead**.
|
|
31
|
+
|
|
32
|
+
---
|
|
9
33
|
|
|
10
34
|
## Install
|
|
11
35
|
|
|
@@ -13,49 +37,216 @@ or a vault account decoder, stop and import from here instead.
|
|
|
13
37
|
npm install @dexterai/vault
|
|
14
38
|
```
|
|
15
39
|
|
|
16
|
-
|
|
40
|
+
Compatible with `dexter-vault` program version 2 (12 Anchor discriminators including `prove_passkey`, `settle_tab_voucher`, and the session-key register/revoke pair).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
### Build the canonical 4-role Swig (server-side enrollment)
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { buildSwigCreationBundle } from '@dexterai/vault/instructions';
|
|
50
|
+
import { Transaction } from '@solana/web3.js';
|
|
51
|
+
|
|
52
|
+
// Fee-payer-signed; this bundle creates the Swig and registers all four roles
|
|
53
|
+
// in one transaction (CreateV1 with role 0 bootstrap + role 1/2/3 chained).
|
|
54
|
+
const bundle = await buildSwigCreationBundle({
|
|
55
|
+
feePayer: feePayerKeypair.publicKey.toBase58(),
|
|
56
|
+
dexterMasterPubkey: sessionMaster.publicKey.toBase58(),
|
|
57
|
+
identitySeed: userHandleBytes, // per-user, stable, ≤32 bytes
|
|
58
|
+
hmacKey: serverSecret.subarray(0, 32), // 32-byte HMAC key
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// `bundle.instructions` is the atomic create+grant×3 sequence.
|
|
62
|
+
// `bundle.swigAddress` is the deterministic Swig PDA for this user.
|
|
63
|
+
const tx = new Transaction().add(...bundle.instructions);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The 4-role design — role 0 bootstrap, role 1 `ProgramExec(finalize_withdrawal)`, role 2 session master, role 3 `ProgramExec(settle_tab_voucher)` — lives in exactly one function. Tests in this repo lock the role list against the on-chain Anchor discriminators.
|
|
67
|
+
|
|
68
|
+
### Settle a Tab voucher on chain (facilitator-side)
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { buildSettleTabVoucherInstruction } from '@dexterai/vault/instructions';
|
|
72
|
+
import { buildEd25519VerifyInstruction } from '@dexterai/vault/precompile';
|
|
73
|
+
import { buildVoucherMessage } from '@dexterai/vault/messages';
|
|
74
|
+
import { readVaultFull } from '@dexterai/vault/reader';
|
|
75
|
+
|
|
76
|
+
const vaultState = await readVaultFull(connection, vaultPda);
|
|
77
|
+
const voucherMessage = buildVoucherMessage(channelId, cumulativeAmount, sequenceNumber);
|
|
78
|
+
|
|
79
|
+
const tx = new Transaction().add(
|
|
80
|
+
// Ed25519 precompile verifies the session key signed the voucher bytes.
|
|
81
|
+
buildEd25519VerifyInstruction(sessionPubkey, sessionSignature, voucherMessage),
|
|
82
|
+
// settle_tab_voucher consumes the verified voucher; Swig role 3 drives the SPL transfer.
|
|
83
|
+
buildSettleTabVoucherInstruction({
|
|
84
|
+
vaultPda,
|
|
85
|
+
swigAddress: new PublicKey(vaultState.swigAddress!),
|
|
86
|
+
dexterAuthority: sessionMaster.publicKey,
|
|
87
|
+
channelId,
|
|
88
|
+
cumulativeAmount,
|
|
89
|
+
sequenceNumber,
|
|
90
|
+
}),
|
|
91
|
+
);
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The first mainnet settle: [`4VLDNUDt…RKL47QU89`](https://solscan.io/tx/4VLDNUDtY8Q3ucwFyuCEz7BsBFqYzUo2ANQv4KU2TDnrUEcn9tS7KmyqHGkZjM6AqEf9uZuS1W5CTQ1RKL47QU89).
|
|
95
|
+
|
|
96
|
+
### Read live vault state
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { readVaultOnchain, readVaultFull } from '@dexterai/vault/reader';
|
|
100
|
+
|
|
101
|
+
// Slim shape: { exists, pendingVoucherCount, pendingWithdrawal }.
|
|
102
|
+
const slim = await readVaultOnchain(connection, vaultPda);
|
|
103
|
+
|
|
104
|
+
// Full shape adds: { version, swigAddress, dexterAuthority, activeSession }.
|
|
105
|
+
const full = await readVaultFull(connection, vaultPda);
|
|
106
|
+
if (full.activeSession) {
|
|
107
|
+
console.log(`tab open: ${full.activeSession.spent} / ${full.activeSession.maxAmount}`);
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Derive the counterfactual Swig address
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { deriveCounterfactualAddresses } from '@dexterai/vault/counterfactual';
|
|
115
|
+
|
|
116
|
+
// Returns both the state PDA (program-owned) and the wallet-address PDA
|
|
117
|
+
// (system-owned, the asset holder). Useful for showing users a deposit
|
|
118
|
+
// address before the Swig is on chain.
|
|
119
|
+
const { swigStateAddress, swigWalletAddress } = await deriveCounterfactualAddresses({
|
|
120
|
+
identitySeed: userHandleBytes,
|
|
121
|
+
hmacKey: serverSecret.subarray(0, 32),
|
|
122
|
+
});
|
|
123
|
+
```
|
|
17
124
|
|
|
18
|
-
|
|
19
|
-
This package is the structural fix: there is exactly one TypeScript file
|
|
20
|
-
that knows how to build each instruction, encode each message, decode
|
|
21
|
-
the vault account, and provision the canonical 4-role Swig.
|
|
125
|
+
### Sign with an Ed25519 signer (server)
|
|
22
126
|
|
|
23
|
-
|
|
127
|
+
```typescript
|
|
128
|
+
import { NodeEd25519Signer } from '@dexterai/vault/signers/node';
|
|
24
129
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
in CHANGELOG.
|
|
130
|
+
const signer = new NodeEd25519Signer(secretKey); // 32-byte seed OR 64-byte secret key
|
|
131
|
+
const sig = await signer.sign(messageBytes); // 64-byte detached signature
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
31
135
|
|
|
32
136
|
## Subpath exports
|
|
33
137
|
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
138
|
+
Each subpath is a tree-shakeable entry point. Pull only what you need.
|
|
139
|
+
|
|
140
|
+
| Subpath | Contents |
|
|
141
|
+
|---|---|
|
|
142
|
+
| `@dexterai/vault` | Re-exports `types` + `counterfactual` for convenience |
|
|
143
|
+
| `@dexterai/vault/types` | `VaultState`, `VaultStateFull`, `ActiveSession`, `PendingWithdrawal`, `SessionKey`, `SessionScope`, `SignedVoucher`, `VoucherPayload`, `AtomicAmount`, `HumanAmount`, `TabNetworkId` |
|
|
144
|
+
| `@dexterai/vault/constants` | `DEXTER_VAULT_PROGRAM_ID`, `SWIG_PROGRAM_ID`, `USDC_MAINNET`/`USDC_DEVNET`, all 12 `DISCRIMINATORS`, `OTS_SESSION_REGISTER_V1_DOMAIN`, `OTS_SESSION_REVOKE_V1_DOMAIN` |
|
|
145
|
+
| `@dexterai/vault/instructions` | Every builder: `buildInitializeVaultInstruction`, `buildSetSwigInstruction`, `buildRegisterSessionKeyInstruction`, `buildRevokeSessionKeyInstruction`, `buildSettleVoucherInstruction`, `buildSettleTabVoucherInstruction`, `buildRequestWithdrawalInstruction`, `buildFinalizeWithdrawalInstruction`, `buildForceReleaseInstruction`, `buildRotatePasskeyInstruction`, `buildRotateDexterAuthorityInstruction`, `buildProvePasskeyInstruction`, and the canonical `buildSwigCreationBundle` + `expectedSwigAddressFor` + `verifySwigIsOurs` |
|
|
146
|
+
| `@dexterai/vault/messages` | `sessionRegisterMessage` (180 bytes), `sessionRevokeMessage` (128 bytes), `voucherPayloadMessage` / `buildVoucherMessage` (44 bytes), `buildSetSwigOperationMessage` |
|
|
147
|
+
| `@dexterai/vault/reader` | `readVaultOnchain` (slim), `readVaultFull` (with active session) |
|
|
148
|
+
| `@dexterai/vault/precompile` | `buildSecp256r1VerifyInstruction`, `buildPrecompileMessage`, `buildEd25519VerifyInstruction` |
|
|
149
|
+
| `@dexterai/vault/counterfactual` | `deriveCounterfactualAddresses` |
|
|
150
|
+
| `@dexterai/vault/signers` | `Ed25519Signer`, `PasskeySigner` interfaces |
|
|
151
|
+
| `@dexterai/vault/signers/node` | `NodeEd25519Signer` (tweetnacl-backed) |
|
|
152
|
+
|
|
153
|
+
---
|
|
43
154
|
|
|
44
|
-
##
|
|
155
|
+
## Why this package exists
|
|
156
|
+
|
|
157
|
+
Three places used to hand-roll the same protocol: `dexter-api/src/vault/`, `dexter-facilitator/src/vault/`, and `dexter-vault/tests/`. One of them added role 3 (`ProgramExec` for `settle_tab_voucher`); two didn't. The end-to-end Tab settle smoke kept failing with `Role not found for ID: 3` and it ate hours of debugging on 2026-06-02 before anyone noticed the drift.
|
|
45
158
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
+ `dexter-fe/app/lib/passkey-anon.ts`. AAGUID/UA capture must survive
|
|
50
|
-
the lift.
|
|
159
|
+
This package is the structural fix. The canonical 4-role Swig provisioner, every instruction builder, every byte-precise message encoder, the vault account decoder, the precompile helpers — they live in exactly one file each. Consumers (`dexter-api`, `dexter-facilitator`, `dexter-vault` tests, `@dexterai/x402/tab`) import from here. The drift bug class is gone.
|
|
160
|
+
|
|
161
|
+
---
|
|
51
162
|
|
|
52
163
|
## Byte-parity guarantee
|
|
53
164
|
|
|
54
|
-
`tests/byte-parity.test.ts`
|
|
55
|
-
|
|
56
|
-
- All
|
|
57
|
-
-
|
|
58
|
-
-
|
|
165
|
+
`tests/byte-parity.test.ts`, `tests/precompile.test.ts`, `tests/swigBundle.test.ts`, `tests/counterfactual.test.ts`, and `tests/reader.test.ts` together snapshot:
|
|
166
|
+
|
|
167
|
+
- All **12 instruction discriminators** (10 vault + 2 session-key) as exact byte arrays.
|
|
168
|
+
- All **3 message layouts** — 180-byte session registration, 128-byte revocation, 44-byte voucher payload — byte-by-byte.
|
|
169
|
+
- Both **precompile builders** — secp256r1 (SIMD-0075) and Ed25519 — including the 14-byte offsets table.
|
|
170
|
+
- The **vault account decoder** for every Anchor v2 layout combination (with/without pending withdrawal, with/without active session).
|
|
171
|
+
- The **`buildSwigCreationBundle` structural lock**: ≥4 instructions, idempotent for the same `(identitySeed, hmacKey)`, distinct outputs for different inputs, the `settle_tab_voucher` Swig exec marker bytes match the on-chain discriminator.
|
|
172
|
+
- The **counterfactual derivation** for a known seed.
|
|
173
|
+
|
|
174
|
+
If a future change drifts any of these by a single byte, the snapshot tests fail. The on-chain `dexter-vault` program is the ultimate referee, but these tests are the gate that catches the drift before it ships.
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npm test
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Architecture
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
┌─────────────────────────────────┐
|
|
186
|
+
│ dexter-vault (Anchor program) │ ← source of truth
|
|
187
|
+
│ 12 discriminators, 3 layouts │
|
|
188
|
+
└────────────────┬────────────────┘
|
|
189
|
+
│ defines bytes
|
|
190
|
+
▼
|
|
191
|
+
┌─────────────────────────────────┐
|
|
192
|
+
│ @dexterai/vault (this package) │ ← off-chain mirror
|
|
193
|
+
│ byte-parity locked by tests │
|
|
194
|
+
└────────┬────┬──────────┬────────┘
|
|
195
|
+
│ │ │
|
|
196
|
+
┌─────────────────┘ │ └──────────────────┐
|
|
197
|
+
▼ ▼ ▼
|
|
198
|
+
┌──────────────┐ ┌──────────────────┐ ┌───────────────────┐
|
|
199
|
+
│ dexter-api │ │ dexter-facilitator│ │ dexter-vault tests│
|
|
200
|
+
│ (DB + glue) │ │ (Tab settle path) │ │ (anchor smokes) │
|
|
201
|
+
└──────────────┘ └──────────────────┘ └───────────────────┘
|
|
202
|
+
|
|
203
|
+
▲ ▲
|
|
204
|
+
│ │
|
|
205
|
+
└────────── @dexterai/x402/tab imports message ───────┘
|
|
206
|
+
helpers from @dexterai/vault; keeps
|
|
207
|
+
HTTP/SSE wrapping
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Signer abstraction
|
|
213
|
+
|
|
214
|
+
The package defines two interfaces in `@dexterai/vault/signers`:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
interface Ed25519Signer {
|
|
218
|
+
readonly publicKey: Uint8Array; // 32 bytes
|
|
219
|
+
sign(message: Uint8Array): Promise<Uint8Array>; // 64-byte signature
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
interface PasskeySigner {
|
|
223
|
+
readonly credentialId: Uint8Array;
|
|
224
|
+
sign(challenge: Uint8Array): Promise<{
|
|
225
|
+
signature: Uint8Array;
|
|
226
|
+
clientDataJSON: Uint8Array;
|
|
227
|
+
authenticatorData: Uint8Array;
|
|
228
|
+
}>;
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
`NodeEd25519Signer` ships at `@dexterai/vault/signers/node`. `BrowserPasskeySigner` is the v0.2 work — lifted from `dexter-fe`'s existing WebAuthn ceremony, it unlocks browser-buyer flows on dexter.cash and anywhere else a user pays through their passkey vault.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Versioning
|
|
237
|
+
|
|
238
|
+
`@dexterai/vault@0.1.x` is compatible with `dexter-vault` program version 2 (12 Anchor instructions; role 3 `ProgramExec` for `settle_tab_voucher` registered on every new Swig).
|
|
239
|
+
|
|
240
|
+
Future program versions will bump the SDK major or document the delta in the CHANGELOG. The byte-parity tests are the structural lock — any layout change requires an explicit snapshot update.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## License
|
|
245
|
+
|
|
246
|
+
MIT. © 2026 Dexter.
|
|
247
|
+
|
|
248
|
+
---
|
|
59
249
|
|
|
60
|
-
|
|
61
|
-
|
|
250
|
+
<p align="center">
|
|
251
|
+
Part of the <a href="https://github.com/Dexter-DAO">Dexter-DAO</a> open source family.
|
|
252
|
+
</p>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="720" height="200" viewBox="0 0 720 200" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Dexter wordmark">
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient id="dexterGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
5
|
+
<stop offset="0%" stop-color="#d13f00" />
|
|
6
|
+
<stop offset="42%" stop-color="#ff6b00" />
|
|
7
|
+
<stop offset="100%" stop-color="#ffb42c" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<filter id="dexterShadow" x="-20%" y="-20%" width="140%" height="160%" color-interpolation-filters="sRGB">
|
|
10
|
+
<feDropShadow dx="0" dy="14" stdDeviation="18" flood-color="#0c0503" flood-opacity="0.28" />
|
|
11
|
+
</filter>
|
|
12
|
+
<style><![CDATA[
|
|
13
|
+
@font-face {
|
|
14
|
+
font-family: 'DexterOrbitron';
|
|
15
|
+
font-style: normal;
|
|
16
|
+
font-weight: 800;
|
|
17
|
+
src: url(data:font/truetype;base64,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) format('truetype');
|
|
18
|
+
}
|
|
19
|
+
text {
|
|
20
|
+
font-family: 'DexterOrbitron', 'Orbitron', sans-serif;
|
|
21
|
+
font-weight: 800;
|
|
22
|
+
letter-spacing: 0.01em;
|
|
23
|
+
text-transform: uppercase;
|
|
24
|
+
}
|
|
25
|
+
]]></style>
|
|
26
|
+
</defs>
|
|
27
|
+
<g filter="url(#dexterShadow)">
|
|
28
|
+
<text x="50%" y="62%" text-anchor="middle" dominant-baseline="middle" font-size="118" fill="url(#dexterGradient)">DEXTER</text>
|
|
29
|
+
</g>
|
|
30
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dexterai/vault",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Canonical off-chain mirror of the dexter-vault Solana Anchor program — Solana instruction builders, byte-precise message encoders, account decoders, secp256r1/Ed25519 precompile helpers, counterfactual Swig derivation, and signer interfaces. The single source of truth for any TypeScript code that produces bytes the on-chain program will verify.",
|
|
5
5
|
"author": "Dexter",
|
|
6
6
|
"license": "MIT",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./signers": { "types": "./dist/signers/types.d.ts", "import": "./dist/signers/types.js", "require": "./dist/signers/types.cjs" },
|
|
18
18
|
"./signers/node": { "types": "./dist/signers/node/index.d.ts", "import": "./dist/signers/node/index.js", "require": "./dist/signers/node/index.cjs" }
|
|
19
19
|
},
|
|
20
|
-
"files": ["dist", "README.md", "LICENSE"],
|
|
20
|
+
"files": ["dist", "README.md", "LICENSE", "assets"],
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsup",
|
|
23
23
|
"dev": "tsup --watch",
|