zklicensing 0.1.0-beta.2 → 0.1.0-beta.4
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 +335 -97
- package/build/appsLookup.d.ts +14 -0
- package/build/appsLookup.d.ts.map +1 -0
- package/build/appsLookup.js +12 -0
- package/build/appsLookup.js.map +1 -0
- package/build/archiveBootstrap.d.ts +15 -1
- package/build/archiveBootstrap.d.ts.map +1 -0
- package/build/archiveBootstrap.js +62 -9
- package/build/archiveBootstrap.js.map +1 -0
- package/build/bindClient.d.ts +51 -0
- package/build/bindClient.d.ts.map +1 -0
- package/build/bindClient.js +115 -0
- package/build/bindClient.js.map +1 -0
- package/build/buyClient.d.ts +10 -3
- package/build/buyClient.d.ts.map +1 -0
- package/build/buyClient.js +33 -15
- package/build/buyClient.js.map +1 -0
- package/build/contractInterface.d.ts +11 -5
- package/build/contractInterface.d.ts.map +1 -0
- package/build/contractInterface.js +82 -17
- package/build/contractInterface.js.map +1 -0
- package/build/countryStats.d.ts +6 -1
- package/build/countryStats.d.ts.map +1 -0
- package/build/countryStats.js +33 -9
- package/build/countryStats.js.map +1 -0
- package/build/deployClient.d.ts.map +1 -0
- package/build/deployClient.js +1 -1
- package/build/deployClient.js.map +1 -0
- package/build/deviceIdentity.d.ts +68 -0
- package/build/deviceIdentity.d.ts.map +1 -0
- package/build/deviceIdentity.js +209 -0
- package/build/deviceIdentity.js.map +1 -0
- package/build/freezeClient.d.ts.map +1 -0
- package/build/freezeClient.js +1 -1
- package/build/freezeClient.js.map +1 -0
- package/build/generationClient.d.ts +1 -0
- package/build/generationClient.d.ts.map +1 -0
- package/build/generationClient.js +2 -2
- package/build/generationClient.js.map +1 -0
- package/build/index.d.ts +27 -37
- package/build/index.d.ts.map +1 -0
- package/build/index.js +85 -116
- package/build/index.js.map +1 -0
- package/build/licenseLeaf.d.ts +76 -0
- package/build/licenseLeaf.d.ts.map +1 -0
- package/build/licenseLeaf.js +189 -0
- package/build/licenseLeaf.js.map +1 -0
- package/build/licenseRecord.d.ts +20 -1
- package/build/licenseRecord.d.ts.map +1 -0
- package/build/licenseRecord.js +1 -1
- package/build/licenseRecord.js.map +1 -0
- package/build/licenseStore.d.ts +17 -2
- package/build/licenseStore.d.ts.map +1 -0
- package/build/licenseStore.js +167 -7
- package/build/licenseStore.js.map +1 -0
- package/build/manifestVerify.d.ts.map +1 -0
- package/build/manifestVerify.js +8 -3
- package/build/manifestVerify.js.map +1 -0
- package/build/migrateClient.d.ts +6 -21
- package/build/migrateClient.d.ts.map +1 -0
- package/build/migrateClient.js +30 -17
- package/build/migrateClient.js.map +1 -0
- package/build/onChainRoot.d.ts +67 -0
- package/build/onChainRoot.d.ts.map +1 -0
- package/build/onChainRoot.js +87 -0
- package/build/onChainRoot.js.map +1 -0
- package/build/ownershipLicenseHash.d.ts +25 -0
- package/build/ownershipLicenseHash.d.ts.map +1 -0
- package/build/ownershipLicenseHash.js +29 -0
- package/build/ownershipLicenseHash.js.map +1 -0
- package/build/ownershipSignature.d.ts +122 -0
- package/build/ownershipSignature.d.ts.map +1 -0
- package/build/ownershipSignature.js +244 -0
- package/build/ownershipSignature.js.map +1 -0
- package/build/proveErrors.d.ts +35 -0
- package/build/proveErrors.d.ts.map +1 -0
- package/build/proveErrors.js +49 -0
- package/build/proveErrors.js.map +1 -0
- package/build/refundClient.d.ts +2 -11
- package/build/refundClient.d.ts.map +1 -0
- package/build/refundClient.js +35 -17
- package/build/refundClient.js.map +1 -0
- package/build/renewClient.d.ts +4 -1
- package/build/renewClient.d.ts.map +1 -0
- package/build/renewClient.js +11 -4
- package/build/renewClient.js.map +1 -0
- package/build/seatName.d.ts +8 -0
- package/build/seatName.d.ts.map +1 -0
- package/build/seatName.js +136 -0
- package/build/seatName.js.map +1 -0
- package/build/statsClient.d.ts +47 -4
- package/build/statsClient.d.ts.map +1 -0
- package/build/statsClient.js +44 -5
- package/build/statsClient.js.map +1 -0
- package/build/trustAnchorVerify.d.ts +48 -0
- package/build/trustAnchorVerify.d.ts.map +1 -0
- package/build/trustAnchorVerify.js +431 -0
- package/build/trustAnchorVerify.js.map +1 -0
- package/build/trustAnchorVerifyCli.d.ts +35 -0
- package/build/trustAnchorVerifyCli.d.ts.map +1 -0
- package/build/trustAnchorVerifyCli.js +177 -0
- package/build/trustAnchorVerifyCli.js.map +1 -0
- package/build/txBroadcastClient.d.ts +26 -0
- package/build/txBroadcastClient.d.ts.map +1 -0
- package/build/txBroadcastClient.js +20 -0
- package/build/txBroadcastClient.js.map +1 -0
- package/build/unbindClient.d.ts +56 -0
- package/build/unbindClient.d.ts.map +1 -0
- package/build/unbindClient.js +113 -0
- package/build/unbindClient.js.map +1 -0
- package/build/vendorAccountClient.d.ts +56 -0
- package/build/vendorAccountClient.d.ts.map +1 -0
- package/build/vendorAccountClient.js +47 -0
- package/build/vendorAccountClient.js.map +1 -0
- package/build/verifyCore.d.ts +1 -1
- package/build/verifyCore.d.ts.map +1 -0
- package/build/verifyCore.js +11 -4
- package/build/verifyCore.js.map +1 -0
- package/build/verifyOffline.d.ts +85 -0
- package/build/verifyOffline.d.ts.map +1 -0
- package/build/verifyOffline.js +139 -0
- package/build/verifyOffline.js.map +1 -0
- package/build/verifyService.d.ts.map +1 -0
- package/build/verifyService.js +582 -455
- package/build/verifyService.js.map +1 -0
- package/build/verifyWithAncestors.d.ts +18 -0
- package/build/verifyWithAncestors.d.ts.map +1 -0
- package/build/verifyWithAncestors.js +119 -0
- package/build/verifyWithAncestors.js.map +1 -0
- package/build/zipToState.d.ts +2 -0
- package/build/zipToState.d.ts.map +1 -0
- package/build/zipToState.js +94 -0
- package/build/zipToState.js.map +1 -0
- package/package.json +57 -13
- package/src/appsLookup.ts +48 -0
- package/src/archiveBootstrap.ts +342 -0
- package/src/bindClient.ts +175 -0
- package/src/buyClient.ts +304 -0
- package/src/contractInterface.d.ts +61 -0
- package/src/contractInterface.ts +313 -0
- package/src/countryStats.ts +171 -0
- package/src/deployClient.ts +388 -0
- package/src/deviceIdentity.ts +249 -0
- package/src/freezeClient.ts +117 -0
- package/src/generationClient.ts +165 -0
- package/src/index.ts +329 -0
- package/src/licenseLeaf.ts +221 -0
- package/src/licenseRecord.ts +108 -0
- package/src/licenseStore.ts +538 -0
- package/src/manifestVerify.ts +111 -0
- package/src/migrateClient.ts +84 -0
- package/src/onChainRoot.ts +107 -0
- package/src/ownershipLicenseHash.ts +31 -0
- package/src/ownershipSignature.ts +354 -0
- package/src/proveErrors.ts +70 -0
- package/src/refundClient.ts +158 -0
- package/src/renewClient.ts +214 -0
- package/src/seatName.ts +165 -0
- package/src/statsClient.ts +235 -0
- package/src/trustAnchorVerify.ts +548 -0
- package/src/trustAnchorVerifyCli.ts +179 -0
- package/src/txBroadcastClient.ts +48 -0
- package/src/unbindClient.ts +149 -0
- package/src/vendorAccountClient.ts +110 -0
- package/src/verifyCore.ts +92 -0
- package/src/verifyOffline.ts +212 -0
- package/src/verifyService.ts +969 -0
- package/src/verifyWithAncestors.ts +153 -0
- package/src/zipToState.ts +94 -0
- package/build/licenseProof.d.ts +0 -26
- package/build/licenseProof.js +0 -41
- package/build/ownership.d.ts +0 -34
- package/build/ownership.js +0 -147
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
-
//
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
3
|
/**
|
|
4
4
|
* contractInterface.ts
|
|
5
5
|
*
|
|
@@ -12,12 +12,9 @@
|
|
|
12
12
|
* about durations are published here so a public verify service can replay
|
|
13
13
|
* the archive without pulling in the contract source.
|
|
14
14
|
*
|
|
15
|
-
* `CANONICAL_VK_HASH`
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* challenge/response `ZkProgram`), respectively. Both are hand-maintained
|
|
19
|
-
* constants — bump them whenever the corresponding circuit changes and
|
|
20
|
-
* rerun the keeper's boot assertion (see zklicensing-app/src/keeperService.ts)
|
|
15
|
+
* `CANONICAL_VK_HASH` is the verification-key hash of the published
|
|
16
|
+
* `LicensingApp` circuit. Bump it whenever the on-chain zkApp changes
|
|
17
|
+
* and rerun the keeper's boot assertion (see zklicensing-app/src/keeperService.ts)
|
|
21
18
|
* / the verify service's `ensureCompiled()` check to catch drift.
|
|
22
19
|
*/
|
|
23
20
|
import { declareState, fetchAccount, Field, PublicKey, SmartContract, Struct, UInt32, UInt64, MerkleMap } from 'o1js';
|
|
@@ -33,12 +30,27 @@ import { declareState, fetchAccount, Field, PublicKey, SmartContract, Struct, UI
|
|
|
33
30
|
// The clean alternative — `export class X extends Struct({...}) {}` as the
|
|
34
31
|
// mina-fungible-token repo does — only works when o1js sits inside rootDir,
|
|
35
32
|
// which a workspace member can't guarantee.
|
|
33
|
+
// `cap` is carried so that a keeper reconstructing the license from archive
|
|
34
|
+
// events (e.g. after losing its in-memory intent map to a restart) can
|
|
35
|
+
// rehydrate the exact LicenseLeaf that was committed on-chain. Without it,
|
|
36
|
+
// leafFromRecord() would default cap to UInt32.zero and every follow-up
|
|
37
|
+
// root-mutating proof (renew, refund, bind, unbind, migrate) would fail the
|
|
38
|
+
// in-circuit hash check.
|
|
39
|
+
//
|
|
40
|
+
// `deviceSlotsRoot` / `deviceSlotsFilled` are omitted deliberately: at issue
|
|
41
|
+
// time they are always EMPTY_DEVICE_SLOTS_ROOT / 0. The keeper's rehydration
|
|
42
|
+
// uses those defaults, matching the leaf the circuit wrote.
|
|
43
|
+
//
|
|
44
|
+
// The leaf carries no separate ownerPubKeyHash — `licenseHash` IS the owner-
|
|
45
|
+
// pubkey commitment (buyLicense asserts them equal), so it doesn't need to
|
|
46
|
+
// ride in the event either.
|
|
36
47
|
export const LicenseIssuedEvent = Struct({
|
|
37
48
|
licenseHash: Field,
|
|
38
49
|
buyer: PublicKey,
|
|
39
50
|
amount: UInt64,
|
|
40
51
|
slot: UInt32,
|
|
41
52
|
expirySlot: UInt32,
|
|
53
|
+
cap: UInt32,
|
|
42
54
|
});
|
|
43
55
|
export const ExpiryUpdateEvent = Struct({
|
|
44
56
|
licenseHash: Field,
|
|
@@ -48,6 +60,7 @@ export const PriceUpdatedEvent = Struct({
|
|
|
48
60
|
priceMonthly: UInt64,
|
|
49
61
|
priceYearly: UInt64,
|
|
50
62
|
priceFiveYear: UInt64,
|
|
63
|
+
pricePerpetual: UInt64,
|
|
51
64
|
});
|
|
52
65
|
export const AppCreatedEvent = Struct({
|
|
53
66
|
vendor: PublicKey,
|
|
@@ -59,10 +72,53 @@ export const AppCreatedEvent = Struct({
|
|
|
59
72
|
// licensesRoot entry; `ancestorGen` is the generation index the migration
|
|
60
73
|
// resolved against (needed so archive replay and auditors can trace which
|
|
61
74
|
// frozen root supplied the entry — skip-generation migrations are one-hop).
|
|
75
|
+
// Migration copies the ancestor leaf verbatim, so a destination keeper that
|
|
76
|
+
// only sees `licenseMigrated` (never saw the original `licenseIssued` on the
|
|
77
|
+
// ancestor deployment) needs every leaf field to rehydrate correctly. Unlike
|
|
78
|
+
// LicenseIssuedEvent, `deviceSlotsRoot` and `deviceSlotsFilled` are included
|
|
79
|
+
// here because a migrated license may carry pre-existing bindings from its
|
|
80
|
+
// ancestor deployment.
|
|
62
81
|
export const LicenseMigratedEvent = Struct({
|
|
63
82
|
licenseHash: Field,
|
|
64
83
|
expirySlot: UInt32,
|
|
65
84
|
ancestorGen: UInt32,
|
|
85
|
+
cap: UInt32,
|
|
86
|
+
deviceSlotsRoot: Field,
|
|
87
|
+
deviceSlotsFilled: UInt32,
|
|
88
|
+
});
|
|
89
|
+
// Emitted by `bind` when the buyer's device commitment lands in a slot on
|
|
90
|
+
// their license leaf. `deviceCommitment = Poseidon(devicePubKeyHash)` — the
|
|
91
|
+
// raw pubkey is never revealed. `slotIndex` is 0-based within the license's
|
|
92
|
+
// fixed-size slot array (see DEVICE_SLOT_CAP).
|
|
93
|
+
//
|
|
94
|
+
// `boundAtSlot` carries the circuit's proof-time `globalSlotSinceGenesis` —
|
|
95
|
+
// the exact value packed into the leaf's `freedAt` via `packSlotTimes(
|
|
96
|
+
// currentSlot, 0)`. Off-chain keepers rebuilding `deviceSlotsRoot` MUST use
|
|
97
|
+
// this, not the block's globalSlot: the tx's precondition allows any block
|
|
98
|
+
// slot within TOLERANCE_WINDOW of proof time, so block-slot != proof-slot in
|
|
99
|
+
// the general case, and any mismatch flips the packed field, the leaf hash,
|
|
100
|
+
// and the aggregate `licensesRoot`. Follows the same pattern as
|
|
101
|
+
// `LicenseIssuedEvent.slot`.
|
|
102
|
+
export const DeviceBoundEvent = Struct({
|
|
103
|
+
licenseHash: Field,
|
|
104
|
+
slotIndex: UInt32,
|
|
105
|
+
deviceCommitment: Field,
|
|
106
|
+
boundAtSlot: UInt32,
|
|
107
|
+
});
|
|
108
|
+
// Emitted by `unbind` when a slot is freed. `slotIndex` stays occupied in the
|
|
109
|
+
// array (`slotFreedAt` stamp stays set) so the cooldown timer starts; the
|
|
110
|
+
// slot's `occupied` field goes to Field(0). Any device holding the license's
|
|
111
|
+
// ownership key can trigger this — remote log-off is by design.
|
|
112
|
+
//
|
|
113
|
+
// `freedAtSlot` carries the circuit's proof-time `globalSlotSinceGenesis` —
|
|
114
|
+
// the value packed into the leaf's `freedAt` via `packSlotTimes(preservedBound,
|
|
115
|
+
// currentSlot)`. Same off-chain reconstruction reason as `DeviceBoundEvent.
|
|
116
|
+
// boundAtSlot`. The preserved `boundAtSlot` is not re-emitted; keeper reads
|
|
117
|
+
// it from its own record (which still has the earlier bind's stamp).
|
|
118
|
+
export const DeviceUnboundEvent = Struct({
|
|
119
|
+
licenseHash: Field,
|
|
120
|
+
slotIndex: UInt32,
|
|
121
|
+
freedAtSlot: UInt32,
|
|
66
122
|
});
|
|
67
123
|
// ------------------------------------------------------------
|
|
68
124
|
// CONSTANTS (slot math — 90 s/slot after Mesa upgrade)
|
|
@@ -70,6 +126,7 @@ export const LicenseMigratedEvent = Struct({
|
|
|
70
126
|
export const MONTHLY_SLOTS_N = 28_800; // 30 days × 24 × 40
|
|
71
127
|
export const ONE_YEAR_SLOTS_N = 350_640; // 365.25 days × 24 × 40 (Julian year)
|
|
72
128
|
export const FIVE_YEAR_SLOTS_N = 1_753_200; // 5 × ONE_YEAR_SLOTS_N
|
|
129
|
+
export const PERPETUAL_SLOTS_N = 350_640_000; // 1000 × ONE_YEAR_SLOTS_N ("perpetual — until vendor sunset")
|
|
73
130
|
export const REFUND_WINDOW_N = 13_440;
|
|
74
131
|
export const GRACE_PERIOD_N = 6_720;
|
|
75
132
|
export const MS_PER_SLOT_N = 90_000; // Mesa slot duration in ms
|
|
@@ -87,8 +144,8 @@ export const EMPTY_ROOT = new MerkleMap().getRoot();
|
|
|
87
144
|
// ------------------------------------------------------------
|
|
88
145
|
// DURATION HELPERS
|
|
89
146
|
// ------------------------------------------------------------
|
|
90
|
-
export const DURATION_LABELS = ['1 Month', '1 Year', '5 Years'];
|
|
91
|
-
export const DURATION_INDEX = { '1 Month': 0, '1 Year': 1, '5 Years': 2 };
|
|
147
|
+
export const DURATION_LABELS = ['1 Month', '1 Year', '5 Years', 'Perpetual'];
|
|
148
|
+
export const DURATION_INDEX = { '1 Month': 0, '1 Year': 1, '5 Years': 2, 'Perpetual': 3 };
|
|
92
149
|
export function durationSlotsFromLabel(label) {
|
|
93
150
|
if (label === '1 Month')
|
|
94
151
|
return MONTHLY_SLOTS_N;
|
|
@@ -96,6 +153,8 @@ export function durationSlotsFromLabel(label) {
|
|
|
96
153
|
return ONE_YEAR_SLOTS_N;
|
|
97
154
|
if (label === '5 Years')
|
|
98
155
|
return FIVE_YEAR_SLOTS_N;
|
|
156
|
+
if (label === 'Perpetual')
|
|
157
|
+
return PERPETUAL_SLOTS_N;
|
|
99
158
|
return null;
|
|
100
159
|
}
|
|
101
160
|
export function durationIndexFromLabel(label) {
|
|
@@ -105,6 +164,8 @@ export function durationIndexFromLabel(label) {
|
|
|
105
164
|
return 1;
|
|
106
165
|
if (label === '5 Years')
|
|
107
166
|
return 2;
|
|
167
|
+
if (label === 'Perpetual')
|
|
168
|
+
return 3;
|
|
108
169
|
return null;
|
|
109
170
|
}
|
|
110
171
|
export function durationLabelFromIndex(idx) {
|
|
@@ -127,12 +188,14 @@ export class LicensingAppEventsContract extends SmartContract {
|
|
|
127
188
|
refundIssued: Field,
|
|
128
189
|
fundsReleased: Field,
|
|
129
190
|
priceUpdated: PriceUpdatedEvent,
|
|
191
|
+
deviceBound: DeviceBoundEvent,
|
|
192
|
+
deviceUnbound: DeviceUnboundEvent,
|
|
130
193
|
};
|
|
131
194
|
}
|
|
132
195
|
// State-slot layout mirrors LicensingApp's declareState(). Read-only from here
|
|
133
196
|
// — no @method bodies exist. Consumers use `.version.get()`, `.licensesRoot.get()`
|
|
134
|
-
// etc. after fetchAccount(). `pricesPacked` is a single Field with the
|
|
135
|
-
//
|
|
197
|
+
// etc. after fetchAccount(). `pricesPacked` is a single Field with the four
|
|
198
|
+
// 63-bit tier prices packed as [pM | pY<<63 | pF<<126 | pP<<189]; unpack with
|
|
136
199
|
// `unpackPrices` if you need the individual tiers off-chain.
|
|
137
200
|
declareState(LicensingAppEventsContract, {
|
|
138
201
|
licensesRoot: Field,
|
|
@@ -144,14 +207,17 @@ declareState(LicensingAppEventsContract, {
|
|
|
144
207
|
});
|
|
145
208
|
// Off-chain mirror of the in-circuit price packing (see LicensingApp.ts). Kept
|
|
146
209
|
// here so the events service can decode `pricesPacked` slots without pulling
|
|
147
|
-
// the private contract source.
|
|
210
|
+
// the private contract source. Layout: four 63-bit tiers = 252 bits, fits in
|
|
211
|
+
// the ~254-bit Field. Each tier's high bit is unused — a UInt64 written by
|
|
212
|
+
// packPrices is range-checked to 63 bits in circuit.
|
|
148
213
|
export function unpackPrices(packed) {
|
|
149
214
|
const raw = packed.toBigInt();
|
|
150
|
-
const mask = (1n <<
|
|
215
|
+
const mask = (1n << 63n) - 1n;
|
|
151
216
|
return {
|
|
152
217
|
priceMonthly: UInt64.from(raw & mask),
|
|
153
|
-
priceYearly: UInt64.from((raw >>
|
|
154
|
-
priceFiveYear: UInt64.from((raw >>
|
|
218
|
+
priceYearly: UInt64.from((raw >> 63n) & mask),
|
|
219
|
+
priceFiveYear: UInt64.from((raw >> 126n) & mask),
|
|
220
|
+
pricePerpetual: UInt64.from((raw >> 189n) & mask),
|
|
155
221
|
};
|
|
156
222
|
}
|
|
157
223
|
// ------------------------------------------------------------
|
|
@@ -204,10 +270,9 @@ export async function fetchLicensingAppVersion(zkAppAddress) {
|
|
|
204
270
|
// boot-assert are unchanged.
|
|
205
271
|
// ------------------------------------------------------------
|
|
206
272
|
export const CANONICAL_VK_HASHES = {
|
|
207
|
-
1: '
|
|
273
|
+
1: '10361895475617514346344501316555182806545828598248691756333156231763191857993',
|
|
208
274
|
// 2: '…' — append at each hardfork migration, never delete.
|
|
209
275
|
};
|
|
210
276
|
export const CURRENT_GENERATION = 1;
|
|
211
277
|
export const CANONICAL_VK_HASH = CANONICAL_VK_HASHES[CURRENT_GENERATION];
|
|
212
|
-
export const CANONICAL_LICENSE_PROOF_VK_HASH = '6592142093294558010952934797827640785154417146015648013584661926355710165692';
|
|
213
278
|
//# sourceMappingURL=contractInterface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contractInterface.js","sourceRoot":"","sources":["../src/contractInterface.ts"],"names":[],"mappings":"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"}
|
package/build/countryStats.d.ts
CHANGED
|
@@ -18,9 +18,14 @@
|
|
|
18
18
|
* Browser-safe: pure computation, no fs, no fetch.
|
|
19
19
|
*/
|
|
20
20
|
import type { LicenseRecord } from './licenseRecord.js';
|
|
21
|
+
export { zipToState } from './zipToState.js';
|
|
21
22
|
export type CountryBucket = {
|
|
22
23
|
count: number;
|
|
23
24
|
revenueMina: number;
|
|
25
|
+
states?: Record<string, {
|
|
26
|
+
count: number;
|
|
27
|
+
revenueMina: number;
|
|
28
|
+
}>;
|
|
24
29
|
};
|
|
25
30
|
export type CountryYearBreakdown = {
|
|
26
31
|
aggregate: Record<string, CountryBucket>;
|
|
@@ -33,5 +38,5 @@ export type CountryBreakdown = {
|
|
|
33
38
|
export declare function computeCountryBreakdown(apps: {
|
|
34
39
|
appId: string;
|
|
35
40
|
zkAppAddress: string;
|
|
36
|
-
}[], records: LicenseRecord[], currentSlot: number, nowMs: number): CountryBreakdown;
|
|
41
|
+
}[], records: LicenseRecord[], currentSlot: number, nowMs: number, tzOffsetMinutes?: number): CountryBreakdown;
|
|
37
42
|
//# sourceMappingURL=countryStats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countryStats.d.ts","sourceRoot":"","sources":["../src/countryStats.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAW7C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IAOpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,KAAK,EAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;CAC1D,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAG,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC9C,CAAC;AAOF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/C,OAAO,EAAE,aAAa,EAAE,EACxB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,eAAe,GAAE,MAAU,GAC1B,gBAAgB,CAsGlB"}
|
package/build/countryStats.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Copyright (c) 2025-2026 zkLicensing project developers
|
|
2
|
-
//
|
|
2
|
+
// SPDX-License-Identifier: BUSL-1.1
|
|
3
|
+
import { zipToState } from './zipToState.js';
|
|
4
|
+
export { zipToState } from './zipToState.js';
|
|
3
5
|
// LicensingApp charges a 2 % platform fee (200 basis points); the vendor
|
|
4
6
|
// receives the remaining 9 800 bps. Keep this in sync with the on-chain
|
|
5
7
|
// constant in LicensingApp.
|
|
@@ -7,10 +9,16 @@ const PLATFORM_FEE_BASIS_POINTS = 200n;
|
|
|
7
9
|
const VENDOR_BPS = 10000n - PLATFORM_FEE_BASIS_POINTS;
|
|
8
10
|
// 90 s/slot post-Mesa. Used only for slot→time fallback attribution.
|
|
9
11
|
const SLOT_DURATION_MS = 90_000;
|
|
10
|
-
|
|
12
|
+
// tzOffsetMinutes: signed minutes east of UTC (e.g. +60 for CET, -480 for PST).
|
|
13
|
+
// Purchase/renewal timestamps are shifted by this offset before extracting the
|
|
14
|
+
// calendar year, so the "tax year" cut-over aligns with the operator's local
|
|
15
|
+
// clock instead of hardcoded UTC. Defaults to 0 (UTC) for callers who don't
|
|
16
|
+
// pass it — preserves the pre-tz behavior.
|
|
17
|
+
export function computeCountryBreakdown(apps, records, currentSlot, nowMs, tzOffsetMinutes = 0) {
|
|
11
18
|
const appByAddress = new Map(apps.map(a => [a.zkAppAddress, a.appId]));
|
|
12
19
|
const byYear = {};
|
|
13
20
|
const yearSet = new Set();
|
|
21
|
+
const tzShiftMs = tzOffsetMinutes * 60_000;
|
|
14
22
|
const ensureYear = (year) => {
|
|
15
23
|
let yb = byYear[year];
|
|
16
24
|
if (!yb) {
|
|
@@ -28,7 +36,7 @@ export function computeCountryBreakdown(apps, records, currentSlot, nowMs) {
|
|
|
28
36
|
}
|
|
29
37
|
return ab;
|
|
30
38
|
};
|
|
31
|
-
const add = (bucket, code, count, revenueNano) => {
|
|
39
|
+
const add = (bucket, code, count, revenueNano, state) => {
|
|
32
40
|
let b = bucket[code];
|
|
33
41
|
if (!b) {
|
|
34
42
|
b = { count: 0, revenueMina: 0 };
|
|
@@ -36,12 +44,24 @@ export function computeCountryBreakdown(apps, records, currentSlot, nowMs) {
|
|
|
36
44
|
}
|
|
37
45
|
b.count += count;
|
|
38
46
|
b.revenueMina += Number(revenueNano) / 1e9;
|
|
47
|
+
// State sub-bucket only for US rows whose ZIP resolved to a state.
|
|
48
|
+
// Non-US or unresolvable rows just add to the country total.
|
|
49
|
+
if (code === 'US' && state) {
|
|
50
|
+
const states = b.states ?? (b.states = {});
|
|
51
|
+
let sb = states[state];
|
|
52
|
+
if (!sb) {
|
|
53
|
+
sb = { count: 0, revenueMina: 0 };
|
|
54
|
+
states[state] = sb;
|
|
55
|
+
}
|
|
56
|
+
sb.count += count;
|
|
57
|
+
sb.revenueMina += Number(revenueNano) / 1e9;
|
|
58
|
+
}
|
|
39
59
|
};
|
|
40
60
|
const slotToYear = (slot) => {
|
|
41
61
|
if (currentSlot <= 0)
|
|
42
62
|
return null;
|
|
43
63
|
const ms = nowMs - (currentSlot - slot) * SLOT_DURATION_MS;
|
|
44
|
-
const y = new Date(ms).getUTCFullYear();
|
|
64
|
+
const y = new Date(ms + tzShiftMs).getUTCFullYear();
|
|
45
65
|
return Number.isFinite(y) ? y : null;
|
|
46
66
|
};
|
|
47
67
|
for (const r of records) {
|
|
@@ -49,11 +69,15 @@ export function computeCountryBreakdown(apps, records, currentSlot, nowMs) {
|
|
|
49
69
|
if (!appId)
|
|
50
70
|
continue;
|
|
51
71
|
const country = r.buyerCountry && /^[A-Z]{2}$/.test(r.buyerCountry) ? r.buyerCountry : '??';
|
|
72
|
+
// Only US rows carry a meaningful ZIP for sales-tax purposes; derive
|
|
73
|
+
// the state jurisdiction here and let `add` roll it up. Non-US ZIPs
|
|
74
|
+
// and unresolvable prefixes fall through to country-total only.
|
|
75
|
+
const state = country === 'US' && r.buyerZip ? zipToState(r.buyerZip) : undefined;
|
|
52
76
|
// Purchase — attribute to the year of confirm-on-chain (createdAt).
|
|
53
77
|
// Fallback: slot-derived time for legacy records that lack createdAt.
|
|
54
78
|
let purchaseYear = null;
|
|
55
79
|
if (r.createdAt) {
|
|
56
|
-
const y = new Date(r.createdAt).getUTCFullYear();
|
|
80
|
+
const y = new Date(new Date(r.createdAt).getTime() + tzShiftMs).getUTCFullYear();
|
|
57
81
|
if (Number.isFinite(y))
|
|
58
82
|
purchaseYear = y;
|
|
59
83
|
}
|
|
@@ -66,8 +90,8 @@ export function computeCountryBreakdown(apps, records, currentSlot, nowMs) {
|
|
|
66
90
|
const purchaseCut = (!r.refunded && r.purchaseAmount && r.purchaseAmount !== '0')
|
|
67
91
|
? (BigInt(r.purchaseAmount) * VENDOR_BPS) / 10000n
|
|
68
92
|
: 0n;
|
|
69
|
-
add(ab, country, 1, purchaseCut);
|
|
70
|
-
add(yb.aggregate, country, 1, purchaseCut);
|
|
93
|
+
add(ab, country, 1, purchaseCut, state);
|
|
94
|
+
add(yb.aggregate, country, 1, purchaseCut, state);
|
|
71
95
|
}
|
|
72
96
|
// Renewals — revenue only (no license count), attributed to renewal year.
|
|
73
97
|
for (const rn of r.renewals ?? []) {
|
|
@@ -77,8 +101,8 @@ export function computeCountryBreakdown(apps, records, currentSlot, nowMs) {
|
|
|
77
101
|
const yb = ensureYear(y);
|
|
78
102
|
const ab = ensureAppBucket(yb, appId);
|
|
79
103
|
const cut = (BigInt(rn.amount) * VENDOR_BPS) / 10000n;
|
|
80
|
-
add(ab, country, 0, cut);
|
|
81
|
-
add(yb.aggregate, country, 0, cut);
|
|
104
|
+
add(ab, country, 0, cut, state);
|
|
105
|
+
add(yb.aggregate, country, 0, cut, state);
|
|
82
106
|
}
|
|
83
107
|
}
|
|
84
108
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countryStats.js","sourceRoot":"","sources":["../src/countryStats.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AAuBpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,yEAAyE;AACzE,wEAAwE;AACxE,4BAA4B;AAC5B,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,UAAU,GAAG,MAAO,GAAG,yBAAyB,CAAC;AAEvD,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAsBhC,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,2CAA2C;AAC3C,MAAM,UAAU,uBAAuB,CACrC,IAA+C,EAC/C,OAAwB,EACxB,WAAmB,EACnB,KAAa,EACb,kBAA0B,CAAC;IAE3B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAU,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAyC,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC;IAE3C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAwB,EAAE;QACxD,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,EAAwB,EAAE,KAAa,EAAiC,EAAE;QACjG,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,EAAE,GAAG,EAAE,CAAC;YACR,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,CACV,MAAqC,EACrC,IAAY,EACZ,KAAa,EACb,WAAmB,EACnB,KAAc,EACR,EAAE;QACR,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC;QACjB,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAC3C,mEAAmE;QACnE,6DAA6D;QAC7D,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC;YAClB,EAAE,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAiB,EAAE;QACjD,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,gBAAgB,CAAC;QAC3D,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,qEAAqE;QACrE,oEAAoE;QACpE,gEAAgE;QAChE,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElF,oEAAoE;QACpE,sEAAsE;QACtE,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;YACjF,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,YAAY,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAChD,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YACpC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,KAAK,GAAG,CAAC;gBAC/E,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,GAAG,MAAO;gBACnD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACxC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,0EAA0E;QAC1E,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,IAAI;gBAAE,SAAS;YACzB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,MAAO,CAAC;YACvD,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployClient.d.ts","sourceRoot":"","sources":["../src/deployClient.ts"],"names":[],"mappings":"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"}
|
package/build/deployClient.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployClient.js","sourceRoot":"","sources":["../src/deployClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deviceIdentity.ts
|
|
3
|
+
*
|
|
4
|
+
* Per-install Pallas Schnorr keypair used to identify a device to the
|
|
5
|
+
* non-custodial binding flow. `getOrCreateDeviceIdentity(storageKey)`
|
|
6
|
+
* returns a stable keypair for the caller's storage key: created on
|
|
7
|
+
* first call, loaded verbatim on every subsequent call.
|
|
8
|
+
*
|
|
9
|
+
* The `deviceCommitment` this module exposes matches the on-chain
|
|
10
|
+
* `occupied[i]` field shape written by `LicensingApp.bind()` — it's
|
|
11
|
+
* `Poseidon([pk.x, pk.isOdd.toField()])` over the device's Pallas
|
|
12
|
+
* pubkey (see `ownerPubKeyHash` in ./licenseLeaf.ts for the identical
|
|
13
|
+
* shape applied to the ownership pubkey). Callers pass the commitment
|
|
14
|
+
* to `proveBind` and to the ownership signature; the raw device pubkey
|
|
15
|
+
* itself never crosses the wire.
|
|
16
|
+
*
|
|
17
|
+
* Storage tradeoffs (documented up front — the plan's original
|
|
18
|
+
* assumption was WebCrypto extractable=false, which only applies to
|
|
19
|
+
* WebCrypto-native primitives):
|
|
20
|
+
*
|
|
21
|
+
* Browser path — IndexedDB.
|
|
22
|
+
* Pallas is not a WebCrypto primitive, so we cannot store the
|
|
23
|
+
* private key as a non-extractable CryptoKey. The private key is
|
|
24
|
+
* persisted as its Mina canonical base58 encoding. An adversary
|
|
25
|
+
* with access to the browser profile (malware running as the user,
|
|
26
|
+
* evil browser extension) can read it. This matches the trust
|
|
27
|
+
* model of every other browser-persisted secret today (bearer
|
|
28
|
+
* cookies, IndexedDB tokens); binding to a fresh device after
|
|
29
|
+
* compromise is a keypair regen + one on-chain bind — no funds
|
|
30
|
+
* at risk, only slot churn. Users who want stronger storage can
|
|
31
|
+
* wipe the storageKey between sessions and re-bind on demand.
|
|
32
|
+
*
|
|
33
|
+
* Node / Electron path — keytar (OS keychain).
|
|
34
|
+
* `keytar` is loaded lazily and marked as an optional peer
|
|
35
|
+
* dependency in package.json so the browser bundle isn't dragged
|
|
36
|
+
* into installing native bindings it can't use. If keytar is
|
|
37
|
+
* unavailable at runtime, the SDK throws with a clear message
|
|
38
|
+
* rather than falling back to plaintext-on-disk.
|
|
39
|
+
*
|
|
40
|
+
* The keypair is Pallas-scalar-random, NOT passphrase-derived — the
|
|
41
|
+
* device identity is meant to survive a passphrase reset (the user
|
|
42
|
+
* can re-derive their ownership key from the passphrase, then unbind
|
|
43
|
+
* / rebind existing device slots without re-installing the app).
|
|
44
|
+
*/
|
|
45
|
+
import { PrivateKey, PublicKey } from 'o1js';
|
|
46
|
+
export type DeviceIdentity = {
|
|
47
|
+
devicePrivateKey: PrivateKey;
|
|
48
|
+
devicePubKey: PublicKey;
|
|
49
|
+
deviceCommitment: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Compute the on-chain-shaped device commitment from a Pallas pubkey.
|
|
53
|
+
* Exported so tests and downstream tooling can re-derive it without
|
|
54
|
+
* re-instantiating the whole DeviceIdentity.
|
|
55
|
+
*/
|
|
56
|
+
export declare function computeDeviceCommitment(devicePubKey: PublicKey): string;
|
|
57
|
+
/**
|
|
58
|
+
* Load an existing device keypair for `storageKey`, or create + persist
|
|
59
|
+
* a fresh one on first call. Idempotent across every subsequent call
|
|
60
|
+
* for the same key on the same install.
|
|
61
|
+
*
|
|
62
|
+
* The `storageKey` should be per-app (e.g. the vendor's app short
|
|
63
|
+
* name or its `appId`), so a single browser profile / OS user account
|
|
64
|
+
* can hold distinct device identities for distinct vendors without
|
|
65
|
+
* cross-contamination.
|
|
66
|
+
*/
|
|
67
|
+
export declare function getOrCreateDeviceIdentity(storageKey: string): Promise<DeviceIdentity>;
|
|
68
|
+
//# sourceMappingURL=deviceIdentity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceIdentity.d.ts","sourceRoot":"","sources":["../src/deviceIdentity.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAY,MAAM,MAAM,CAAC;AAgBvD,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,EAAE,UAAU,CAAC;IAC7B,YAAY,EAAM,SAAS,CAAC;IAK5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,CAEvE;AAsID;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuB3F"}
|