@ottochain/sdk 2.4.0 → 2.6.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.
Files changed (227) hide show
  1. package/dist/cjs/apps/compute/index.js +33 -0
  2. package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
  3. package/dist/cjs/apps/compute/state-machines/index.js +9 -0
  4. package/dist/cjs/apps/contracts/index.js +1 -1
  5. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
  6. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
  7. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
  8. package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
  9. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
  10. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
  11. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
  12. package/dist/cjs/apps/governance/index.js +7 -7
  13. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
  14. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
  15. package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
  16. package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
  17. package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
  18. package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
  19. package/dist/cjs/apps/identity/constants.js +16 -24
  20. package/dist/cjs/apps/identity/index.js +1 -1
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
  23. package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
  24. package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
  25. package/dist/cjs/apps/index.js +4 -1
  26. package/dist/cjs/apps/lending/assets.js +41 -17
  27. package/dist/cjs/apps/lending/credit-scoring.js +4 -4
  28. package/dist/cjs/apps/lending/eligibility.js +9 -25
  29. package/dist/cjs/apps/lending/index.js +1 -1
  30. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
  31. package/dist/cjs/apps/markets/index.js +1 -1
  32. package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
  33. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
  34. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
  35. package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
  36. package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
  37. package/dist/cjs/apps/oracles/index.js +1 -1
  38. package/dist/cjs/apps/privacy/index.js +67 -0
  39. package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
  40. package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
  41. package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
  42. package/dist/cjs/apps/staked-pool/assets.js +103 -0
  43. package/dist/cjs/apps/staked-pool/base.js +498 -0
  44. package/dist/cjs/apps/staked-pool/consumer.js +55 -0
  45. package/dist/cjs/apps/staked-pool/index.js +83 -0
  46. package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
  47. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
  48. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
  49. package/dist/cjs/generated/google/protobuf/struct.js +1 -1
  50. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  51. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  52. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  53. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  54. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  55. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
  56. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  57. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  58. package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
  59. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  60. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  61. package/dist/cjs/index.js +21 -3
  62. package/dist/cjs/ottochain/genesis-manifest.js +6 -0
  63. package/dist/cjs/ottochain/metagraph-client.js +63 -11
  64. package/dist/cjs/ottochain/snapshot.js +2 -4
  65. package/dist/cjs/ottochain/transaction.js +10 -0
  66. package/dist/cjs/privacy/sealed-bid.js +85 -82
  67. package/dist/cjs/privacy/shield-app.js +32 -32
  68. package/dist/cjs/schema/effects.js +145 -1
  69. package/dist/cjs/schema/fiber-app.js +139 -5
  70. package/dist/cjs/schema/guard-lint.js +3 -12
  71. package/dist/cjs/schema/guards.js +38 -38
  72. package/dist/cjs/templates/asset-policy.js +190 -0
  73. package/dist/cjs/templates/index.js +86 -0
  74. package/dist/cjs/templates/machine.js +130 -0
  75. package/dist/cjs/templates/migration.js +39 -0
  76. package/dist/cjs/templates/state-shape.js +38 -0
  77. package/dist/cjs/validation.js +1 -3
  78. package/dist/esm/apps/compute/index.js +29 -0
  79. package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
  80. package/dist/esm/apps/compute/state-machines/index.js +5 -0
  81. package/dist/esm/apps/contracts/index.js +4 -4
  82. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
  83. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
  84. package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
  85. package/dist/esm/apps/corporate/index.js +2 -2
  86. package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
  87. package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
  88. package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
  89. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
  90. package/dist/esm/apps/governance/index.js +10 -10
  91. package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
  92. package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
  93. package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
  94. package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
  95. package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
  96. package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
  97. package/dist/esm/apps/identity/constants.js +18 -26
  98. package/dist/esm/apps/identity/index.js +8 -8
  99. package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
  100. package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
  101. package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
  102. package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
  103. package/dist/esm/apps/index.js +9 -6
  104. package/dist/esm/apps/lending/assets.js +41 -17
  105. package/dist/esm/apps/lending/credit-scoring.js +6 -6
  106. package/dist/esm/apps/lending/eligibility.js +10 -26
  107. package/dist/esm/apps/lending/index.js +5 -5
  108. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
  109. package/dist/esm/apps/markets/index.js +5 -5
  110. package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
  111. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
  112. package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
  113. package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
  114. package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
  115. package/dist/esm/apps/oracles/index.js +3 -3
  116. package/dist/esm/apps/privacy/index.js +56 -0
  117. package/dist/esm/apps/privacy/state-machines/index.js +6 -0
  118. package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
  119. package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
  120. package/dist/esm/apps/staked-pool/assets.js +91 -0
  121. package/dist/esm/apps/staked-pool/base.js +493 -0
  122. package/dist/esm/apps/staked-pool/consumer.js +49 -0
  123. package/dist/esm/apps/staked-pool/index.js +60 -0
  124. package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
  125. package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
  126. package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
  127. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  128. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  129. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  130. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  131. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  132. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  133. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
  134. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  135. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  136. package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
  137. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  138. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  139. package/dist/esm/index.js +10 -4
  140. package/dist/esm/ottochain/genesis-manifest.js +6 -0
  141. package/dist/esm/ottochain/metagraph-client.js +63 -11
  142. package/dist/esm/ottochain/snapshot.js +2 -4
  143. package/dist/esm/ottochain/transaction.js +8 -0
  144. package/dist/esm/privacy/index.js +2 -2
  145. package/dist/esm/privacy/sealed-bid.js +87 -84
  146. package/dist/esm/privacy/shield-app.js +33 -33
  147. package/dist/esm/schema/effects.js +137 -0
  148. package/dist/esm/schema/fiber-app.js +134 -5
  149. package/dist/esm/schema/guard-lint.js +3 -12
  150. package/dist/esm/schema/guards.js +36 -37
  151. package/dist/esm/templates/asset-policy.js +182 -0
  152. package/dist/esm/templates/index.js +41 -0
  153. package/dist/esm/templates/machine.js +125 -0
  154. package/dist/esm/templates/migration.js +34 -0
  155. package/dist/esm/templates/state-shape.js +34 -0
  156. package/dist/esm/validation.js +1 -3
  157. package/dist/esm/zk/index.js +4 -4
  158. package/dist/types/apps/compute/index.d.ts +176 -0
  159. package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
  160. package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
  161. package/dist/types/apps/contracts/index.d.ts +14 -14
  162. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
  163. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
  164. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
  165. package/dist/types/apps/corporate/index.d.ts +162 -162
  166. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
  167. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
  168. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
  169. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
  170. package/dist/types/apps/governance/index.d.ts +81 -81
  171. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
  172. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
  173. package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
  174. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
  175. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
  176. package/dist/types/apps/identity/constants.d.ts +2 -2
  177. package/dist/types/apps/identity/index.d.ts +70 -70
  178. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
  179. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
  180. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
  181. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
  182. package/dist/types/apps/index.d.ts +9 -6
  183. package/dist/types/apps/lending/assets.d.ts +2 -2
  184. package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
  185. package/dist/types/apps/lending/eligibility.d.ts +2 -2
  186. package/dist/types/apps/lending/index.d.ts +20 -12
  187. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
  188. package/dist/types/apps/markets/index.d.ts +76 -76
  189. package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
  190. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
  191. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
  192. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
  193. package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
  194. package/dist/types/apps/oracles/index.d.ts +1 -1
  195. package/dist/types/apps/privacy/index.d.ts +328 -0
  196. package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
  197. package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
  198. package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
  199. package/dist/types/apps/staked-pool/assets.d.ts +53 -0
  200. package/dist/types/apps/staked-pool/base.d.ts +80 -0
  201. package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
  202. package/dist/types/apps/staked-pool/index.d.ts +51 -0
  203. package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
  204. package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
  205. package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
  206. package/dist/types/generated/openapi.d.ts +13 -0
  207. package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
  208. package/dist/types/index.d.ts +3 -3
  209. package/dist/types/openapi.d.ts +4 -2
  210. package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
  211. package/dist/types/ottochain/index.d.ts +1 -1
  212. package/dist/types/ottochain/metagraph-client.d.ts +69 -15
  213. package/dist/types/ottochain/transaction.d.ts +9 -1
  214. package/dist/types/ottochain/types.d.ts +1 -1
  215. package/dist/types/privacy/index.d.ts +2 -2
  216. package/dist/types/privacy/sealed-bid.d.ts +9 -9
  217. package/dist/types/privacy/shield-app.d.ts +1 -1
  218. package/dist/types/schema/effects.d.ts +132 -0
  219. package/dist/types/schema/fiber-app.d.ts +281 -0
  220. package/dist/types/schema/guards.d.ts +12 -0
  221. package/dist/types/templates/asset-policy.d.ts +119 -0
  222. package/dist/types/templates/index.d.ts +26 -0
  223. package/dist/types/templates/machine.d.ts +139 -0
  224. package/dist/types/templates/migration.d.ts +34 -0
  225. package/dist/types/templates/state-shape.d.ts +30 -0
  226. package/dist/types/zk/index.d.ts +4 -4
  227. package/package.json +31 -13
@@ -0,0 +1,328 @@
1
+ /**
2
+ * Privacy Application — note-layer privacy primitives.
3
+ *
4
+ * Σ-protocol / ZK-backed fibers that carry real privacy on the OttoChain note
5
+ * layer. The flagship is `sigma-mixer`, a CDS OR-of-`dhtuple` ring mixer whose
6
+ * anonymity comes from a `sigma_verify` ring proof and whose double-spend safety
7
+ * comes from a witness-bound nullifier (`Nf = x_j·H`, `H` a NUMS base of unknown
8
+ * dlog w.r.t. `G`).
9
+ *
10
+ * The std-lib UTXO primitive is `shielded-note-pool` ({@link notePoolDef}): a
11
+ * fixed-denomination Tornado-style private asset pool over the `zk-shielded`
12
+ * Groth16 circuit. ⚠ UNAUDITED / TEST-ASSETS-ONLY (BN254 ~100-bit, single trusted
13
+ * relayer for root advancement) — see note-pool.ts.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { getPrivacyDefinition, PRIVACY_DEFINITIONS, sigmaDdhRingOf, notePoolDef } from '@ottochain/sdk/apps/privacy';
18
+ *
19
+ * const mixerDef = getPrivacyDefinition('sigma-mixer');
20
+ * // Build a custom n-member OR-of-dhtuple proposition for an audited H:
21
+ * const prop = sigmaDdhRingOf('state.points', 'event.nullifier', G_HEX, H_HEX, 8);
22
+ * // Instantiate a shielded note-pool (pin the circuit vkey + denomination + relayer):
23
+ * const pool = notePoolDef({ vkey, depth: 8, denom: 100, poolPolicyRef, feeAsset, relayer });
24
+ * ```
25
+ *
26
+ * @packageDocumentation
27
+ */
28
+ import { mixerDdhRingDef, sigmaDdhRingOf, notePoolDef, NOTE_POOL_STATE, PV_LAYOUT, ZERO_WORD, pvField, pmtMembership, type NotePoolOptions, type ShieldedSpendPayload, type TransferPayload, type UnshieldPayload, type NoteMintedPayload } from './state-machines/index.js';
29
+ import type { FiberAppDefinition } from '../../schema/fiber-app.js';
30
+ export { mixerDdhRingDef, sigmaDdhRingOf, notePoolDef, NOTE_POOL_STATE, PV_LAYOUT, ZERO_WORD, pvField, pmtMembership, type NotePoolOptions, type ShieldedSpendPayload, type TransferPayload, type UnshieldPayload, type NoteMintedPayload, };
31
+ /**
32
+ * A documented DEFAULT shielded-note-pool instance for the registry/lint surface, with PLACEHOLDER
33
+ * pin values (the real vkey comes from the SP1 `zk-shielded` toolchain; relayer/policy are
34
+ * deployment-specific). Downstream callers should build their own via {@link notePoolDef}; this
35
+ * instance exists so the privacy app group exposes a concrete `shielded-note-pool` definition.
36
+ * ⚠ UNAUDITED / TEST-ASSETS-ONLY.
37
+ */
38
+ export declare const shieldedNotePoolDef: FiberAppDefinition<string, string>;
39
+ /** All privacy (note-layer) state machine definitions. */
40
+ export declare const PRIVACY_DEFINITIONS: {
41
+ readonly 'sigma-mixer': {
42
+ metadata: {
43
+ name: string;
44
+ app: string;
45
+ type: string;
46
+ version: string;
47
+ description: string;
48
+ };
49
+ createSchema: {
50
+ required: readonly ["mixerId", "denomination", "anonymityTarget"];
51
+ properties: {
52
+ mixerId: {
53
+ type: "string";
54
+ immutable: true;
55
+ description: string;
56
+ };
57
+ denomination: {
58
+ type: "integer";
59
+ immutable: true;
60
+ description: string;
61
+ };
62
+ nullifierBaseH: {
63
+ type: "string";
64
+ immutable: true;
65
+ description: string;
66
+ };
67
+ anonymityTarget: {
68
+ type: "integer";
69
+ immutable: true;
70
+ description: string;
71
+ };
72
+ points: {
73
+ type: "array";
74
+ items: {
75
+ type: "string";
76
+ };
77
+ default: never[];
78
+ description: string;
79
+ };
80
+ spentNullifiers: {
81
+ type: "object";
82
+ default: {};
83
+ description: string;
84
+ };
85
+ depositCount: {
86
+ type: "integer";
87
+ default: number;
88
+ };
89
+ withdrawCount: {
90
+ type: "integer";
91
+ default: number;
92
+ };
93
+ status: {
94
+ type: "string";
95
+ default: string;
96
+ description: string;
97
+ };
98
+ };
99
+ };
100
+ stateSchema: {
101
+ properties: {
102
+ mixerId: {
103
+ type: "string";
104
+ immutable: true;
105
+ };
106
+ denomination: {
107
+ type: "integer";
108
+ immutable: true;
109
+ };
110
+ nullifierBaseH: {
111
+ type: "string";
112
+ immutable: true;
113
+ };
114
+ anonymityTarget: {
115
+ type: "integer";
116
+ immutable: true;
117
+ };
118
+ points: {
119
+ type: "array";
120
+ items: {
121
+ type: "string";
122
+ };
123
+ computed: true;
124
+ };
125
+ spentNullifiers: {
126
+ type: "object";
127
+ computed: true;
128
+ };
129
+ depositCount: {
130
+ type: "integer";
131
+ computed: true;
132
+ };
133
+ withdrawCount: {
134
+ type: "integer";
135
+ computed: true;
136
+ };
137
+ status: {
138
+ type: "string";
139
+ computed: true;
140
+ };
141
+ };
142
+ };
143
+ eventSchemas: {
144
+ deposit: {
145
+ description: string;
146
+ };
147
+ withdraw: {
148
+ description: string;
149
+ };
150
+ };
151
+ states: {
152
+ filling: {
153
+ id: string;
154
+ isFinal: false;
155
+ metadata: {
156
+ label: string;
157
+ description: string;
158
+ category: "active";
159
+ };
160
+ };
161
+ open: {
162
+ id: string;
163
+ isFinal: false;
164
+ metadata: {
165
+ label: string;
166
+ description: string;
167
+ category: "active";
168
+ };
169
+ };
170
+ drained: {
171
+ id: string;
172
+ isFinal: true;
173
+ metadata: {
174
+ label: string;
175
+ description: string;
176
+ category: "terminal";
177
+ };
178
+ };
179
+ };
180
+ initialState: "filling";
181
+ transitions: ({
182
+ from: "filling";
183
+ to: "open";
184
+ eventName: "deposit";
185
+ guard: {
186
+ and: ({
187
+ '===': ({
188
+ '+': (number | {
189
+ var: string;
190
+ })[];
191
+ var?: undefined;
192
+ } | {
193
+ var: string;
194
+ '+'?: undefined;
195
+ })[];
196
+ '!!'?: undefined;
197
+ none?: undefined;
198
+ } | {
199
+ '!!': {
200
+ var: string;
201
+ }[];
202
+ '==='?: undefined;
203
+ none?: undefined;
204
+ } | {
205
+ none: ({
206
+ var: string;
207
+ '==='?: undefined;
208
+ } | {
209
+ '===': {
210
+ var: string;
211
+ }[];
212
+ var?: undefined;
213
+ })[];
214
+ '==='?: undefined;
215
+ '!!'?: undefined;
216
+ })[];
217
+ };
218
+ effect: {
219
+ merge: ({
220
+ var: string;
221
+ points?: undefined;
222
+ depositCount?: undefined;
223
+ status?: undefined;
224
+ } | {
225
+ points: {
226
+ merge: ({
227
+ var: string;
228
+ } | {
229
+ var: string;
230
+ }[])[];
231
+ };
232
+ depositCount: {
233
+ '+': (number | {
234
+ var: string;
235
+ })[];
236
+ };
237
+ status: string;
238
+ var?: undefined;
239
+ })[];
240
+ };
241
+ dependencies: never[];
242
+ } | {
243
+ from: "filling";
244
+ to: "filling";
245
+ eventName: "deposit";
246
+ guard: {
247
+ and: ({
248
+ '<': ({
249
+ '+': (number | {
250
+ var: string;
251
+ })[];
252
+ var?: undefined;
253
+ } | {
254
+ var: string;
255
+ '+'?: undefined;
256
+ })[];
257
+ '!!'?: undefined;
258
+ none?: undefined;
259
+ } | {
260
+ '!!': {
261
+ var: string;
262
+ }[];
263
+ '<'?: undefined;
264
+ none?: undefined;
265
+ } | {
266
+ none: ({
267
+ var: string;
268
+ '==='?: undefined;
269
+ } | {
270
+ '===': {
271
+ var: string;
272
+ }[];
273
+ var?: undefined;
274
+ })[];
275
+ '<'?: undefined;
276
+ '!!'?: undefined;
277
+ })[];
278
+ };
279
+ effect: {
280
+ merge: ({
281
+ var: string;
282
+ points?: undefined;
283
+ depositCount?: undefined;
284
+ } | {
285
+ points: {
286
+ merge: ({
287
+ var: string;
288
+ } | {
289
+ var: string;
290
+ }[])[];
291
+ };
292
+ depositCount: {
293
+ '+': (number | {
294
+ var: string;
295
+ })[];
296
+ };
297
+ var?: undefined;
298
+ })[];
299
+ };
300
+ dependencies: never[];
301
+ } | {
302
+ from: "open";
303
+ to: "drained";
304
+ eventName: "withdraw";
305
+ guard: {
306
+ and: import("../../schema/fiber-app.js").JsonLogicRule[];
307
+ };
308
+ effect: import("../../schema/fiber-app.js").JsonLogicRule;
309
+ dependencies: never[];
310
+ } | {
311
+ from: "open";
312
+ to: "open";
313
+ eventName: "withdraw";
314
+ guard: {
315
+ and: import("../../schema/fiber-app.js").JsonLogicRule[];
316
+ };
317
+ effect: import("../../schema/fiber-app.js").JsonLogicRule;
318
+ dependencies: never[];
319
+ })[];
320
+ };
321
+ readonly 'shielded-note-pool': FiberAppDefinition<string, string>;
322
+ };
323
+ export type PrivacyDefType = keyof typeof PRIVACY_DEFINITIONS;
324
+ /**
325
+ * Get a privacy state machine definition by type.
326
+ * @param type - 'sigma-mixer' (default) | 'shielded-note-pool'.
327
+ */
328
+ export declare function getPrivacyDefinition(type?: PrivacyDefType): FiberAppDefinition;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Privacy (note-layer) state machine definitions.
3
+ * Re-exports from TypeScript definition files.
4
+ */
5
+ export { mixerDdhRingDef, sigmaDdhRingOf } from './mixer-ddhRing.js';
6
+ export { notePoolDef, NOTE_POOL_STATE, PV_LAYOUT, ZERO_WORD, pvField, pmtMembership, type NotePoolOptions, type ShieldedSpendPayload, type TransferPayload, type UnshieldPayload, type NoteMintedPayload, } from './note-pool.js';
@@ -0,0 +1,337 @@
1
+ import type { JsonLogicRule } from '../../../schema/fiber-app.js';
2
+ /**
3
+ * sigma-mixer — a CDS OR-of-`dhtuple` Σ-protocol ring mixer.
4
+ *
5
+ * Anonymity comes from a Cramer–Damgård–Schoenmakers OR-proof over the deposited
6
+ * ring, verified by the `sigma_verify` JLVM opcode; double-spend safety comes
7
+ * from a WITNESS-BOUND nullifier carried as the shared DDH point of an
8
+ * OR-of-`dhtuple` proposition.
9
+ *
10
+ * Each ring branch is a DDH tuple `dhtuple(G, H, P_i, Nf)`. A satisfied dhtuple
11
+ * proves knowledge of one `x` with `P_i = x·G` AND `Nf = x·H` (the verifier uses
12
+ * a SINGLE shared response `z` for both coordinate reconstructions
13
+ * `a1 = z·G − e·P_i`, `a2 = z·H − e·Nf`). The OR uses the SAME
14
+ * `v = event.nullifier` in every branch, so it hides which branch while forcing
15
+ * `event.nullifier = x_j·H` for the one real branch `j`. With `H` a NUMS base of
16
+ * unknown dlog w.r.t. `G`, the map `x ↦ x·H` is injective, so the nullifier is
17
+ * cryptographically bound to the proven secret — closing the
18
+ * witness-unbound-nullifier double-spend hole an OR-of-`dlog` ring leaves open.
19
+ *
20
+ * Verified against `@constellation-network/metagraph-sdk-jlvm@1.8.0-rc.5`: the
21
+ * `sigma_verify` dhtuple operands are exactly `["type","g","h","u","v"]` (each a
22
+ * 64-byte G1 hex), the OR child challenges XOR to the node challenge, and the
23
+ * strong-FS root challenge folds the bound message. Array append uses `merge`
24
+ * (`merge([arr,[item]])` flattens one level == append). All operators used
25
+ * (`sigma_verify`, `has`, `set`, `none`, `cat`, `substr`, `merge`) are in
26
+ * KNOWN_OPERATORS.
27
+ *
28
+ * SCOPE: this base definition is CRYPTO + LIFECYCLE. Production custody
29
+ * (`_transferAsset` in on deposit / out on withdraw), a signer-bound deposit-auth
30
+ * clause, and a `mixerId`-prefixed bound message are layered on by a downstream
31
+ * specialization (see the §8 production-hardening note in the design doc).
32
+ */
33
+ /**
34
+ * Emit the `or`-of-`dhtuple` proposition for an `n`-member ring, unrolling
35
+ * `{"var":"<pointsVar>.k"}` for `k in 0..n-1` as the `u` (commitment) of each
36
+ * branch, with `g = gHex`, `h = hHex` (literal 64-byte G1 hex) and a shared
37
+ * `v = {"var":"<nullifierVar>"}` across ALL branches.
38
+ *
39
+ * `n` is FIXED at definition time (the proposition shape is closed). `u` and `v`
40
+ * are `{"var":...}` map-node values that the evaluator resolves element-wise.
41
+ *
42
+ * @param pointsVar state var holding the ordered ring points, e.g. `"state.points"`.
43
+ * @param nullifierVar event var holding the revealed nullifier, e.g. `"event.nullifier"`.
44
+ * @param gHex the verifier generator `G=(1,2)` as 64-byte `0x` hex.
45
+ * @param hHex the NUMS second base `H` as 64-byte `0x` hex (unknown dlog wrt G).
46
+ * @param n ring size (number of unrolled branches).
47
+ */
48
+ export declare function sigmaDdhRingOf(pointsVar: string, nullifierVar: string, gHex: string, hHex: string, n: number): JsonLogicRule;
49
+ /**
50
+ * sigma-mixer fiber definition (pinned-ring v1, n=4).
51
+ *
52
+ * Trust model: PUBLIC. Anyone may deposit a ring point or submit a withdrawal.
53
+ * Privacy = a CDS OR-proof hides which of the n branches is being spent;
54
+ * anonymity set = exactly n (the ring size is public). Double-spend safety =
55
+ * the witness-bound nullifier + spent-set. Replay/front-run safety = the
56
+ * message-bound recipient.
57
+ */
58
+ export declare const mixerDdhRingDef: {
59
+ metadata: {
60
+ name: string;
61
+ app: string;
62
+ type: string;
63
+ version: string;
64
+ description: string;
65
+ };
66
+ createSchema: {
67
+ required: readonly ["mixerId", "denomination", "anonymityTarget"];
68
+ properties: {
69
+ mixerId: {
70
+ type: "string";
71
+ immutable: true;
72
+ description: string;
73
+ };
74
+ denomination: {
75
+ type: "integer";
76
+ immutable: true;
77
+ description: string;
78
+ };
79
+ nullifierBaseH: {
80
+ type: "string";
81
+ immutable: true;
82
+ description: string;
83
+ };
84
+ anonymityTarget: {
85
+ type: "integer";
86
+ immutable: true;
87
+ description: string;
88
+ };
89
+ points: {
90
+ type: "array";
91
+ items: {
92
+ type: "string";
93
+ };
94
+ default: never[];
95
+ description: string;
96
+ };
97
+ spentNullifiers: {
98
+ type: "object";
99
+ default: {};
100
+ description: string;
101
+ };
102
+ depositCount: {
103
+ type: "integer";
104
+ default: number;
105
+ };
106
+ withdrawCount: {
107
+ type: "integer";
108
+ default: number;
109
+ };
110
+ status: {
111
+ type: "string";
112
+ default: string;
113
+ description: string;
114
+ };
115
+ };
116
+ };
117
+ stateSchema: {
118
+ properties: {
119
+ mixerId: {
120
+ type: "string";
121
+ immutable: true;
122
+ };
123
+ denomination: {
124
+ type: "integer";
125
+ immutable: true;
126
+ };
127
+ nullifierBaseH: {
128
+ type: "string";
129
+ immutable: true;
130
+ };
131
+ anonymityTarget: {
132
+ type: "integer";
133
+ immutable: true;
134
+ };
135
+ points: {
136
+ type: "array";
137
+ items: {
138
+ type: "string";
139
+ };
140
+ computed: true;
141
+ };
142
+ spentNullifiers: {
143
+ type: "object";
144
+ computed: true;
145
+ };
146
+ depositCount: {
147
+ type: "integer";
148
+ computed: true;
149
+ };
150
+ withdrawCount: {
151
+ type: "integer";
152
+ computed: true;
153
+ };
154
+ status: {
155
+ type: "string";
156
+ computed: true;
157
+ };
158
+ };
159
+ };
160
+ eventSchemas: {
161
+ deposit: {
162
+ description: string;
163
+ };
164
+ withdraw: {
165
+ description: string;
166
+ };
167
+ };
168
+ states: {
169
+ filling: {
170
+ id: string;
171
+ isFinal: false;
172
+ metadata: {
173
+ label: string;
174
+ description: string;
175
+ category: "active";
176
+ };
177
+ };
178
+ open: {
179
+ id: string;
180
+ isFinal: false;
181
+ metadata: {
182
+ label: string;
183
+ description: string;
184
+ category: "active";
185
+ };
186
+ };
187
+ drained: {
188
+ id: string;
189
+ isFinal: true;
190
+ metadata: {
191
+ label: string;
192
+ description: string;
193
+ category: "terminal";
194
+ };
195
+ };
196
+ };
197
+ initialState: "filling";
198
+ transitions: ({
199
+ from: "filling";
200
+ to: "open";
201
+ eventName: "deposit";
202
+ guard: {
203
+ and: ({
204
+ '===': ({
205
+ '+': (number | {
206
+ var: string;
207
+ })[];
208
+ var?: undefined;
209
+ } | {
210
+ var: string;
211
+ '+'?: undefined;
212
+ })[];
213
+ '!!'?: undefined;
214
+ none?: undefined;
215
+ } | {
216
+ '!!': {
217
+ var: string;
218
+ }[];
219
+ '==='?: undefined;
220
+ none?: undefined;
221
+ } | {
222
+ none: ({
223
+ var: string;
224
+ '==='?: undefined;
225
+ } | {
226
+ '===': {
227
+ var: string;
228
+ }[];
229
+ var?: undefined;
230
+ })[];
231
+ '==='?: undefined;
232
+ '!!'?: undefined;
233
+ })[];
234
+ };
235
+ effect: {
236
+ merge: ({
237
+ var: string;
238
+ points?: undefined;
239
+ depositCount?: undefined;
240
+ status?: undefined;
241
+ } | {
242
+ points: {
243
+ merge: ({
244
+ var: string;
245
+ } | {
246
+ var: string;
247
+ }[])[];
248
+ };
249
+ depositCount: {
250
+ '+': (number | {
251
+ var: string;
252
+ })[];
253
+ };
254
+ status: string;
255
+ var?: undefined;
256
+ })[];
257
+ };
258
+ dependencies: never[];
259
+ } | {
260
+ from: "filling";
261
+ to: "filling";
262
+ eventName: "deposit";
263
+ guard: {
264
+ and: ({
265
+ '<': ({
266
+ '+': (number | {
267
+ var: string;
268
+ })[];
269
+ var?: undefined;
270
+ } | {
271
+ var: string;
272
+ '+'?: undefined;
273
+ })[];
274
+ '!!'?: undefined;
275
+ none?: undefined;
276
+ } | {
277
+ '!!': {
278
+ var: string;
279
+ }[];
280
+ '<'?: undefined;
281
+ none?: undefined;
282
+ } | {
283
+ none: ({
284
+ var: string;
285
+ '==='?: undefined;
286
+ } | {
287
+ '===': {
288
+ var: string;
289
+ }[];
290
+ var?: undefined;
291
+ })[];
292
+ '<'?: undefined;
293
+ '!!'?: undefined;
294
+ })[];
295
+ };
296
+ effect: {
297
+ merge: ({
298
+ var: string;
299
+ points?: undefined;
300
+ depositCount?: undefined;
301
+ } | {
302
+ points: {
303
+ merge: ({
304
+ var: string;
305
+ } | {
306
+ var: string;
307
+ }[])[];
308
+ };
309
+ depositCount: {
310
+ '+': (number | {
311
+ var: string;
312
+ })[];
313
+ };
314
+ var?: undefined;
315
+ })[];
316
+ };
317
+ dependencies: never[];
318
+ } | {
319
+ from: "open";
320
+ to: "drained";
321
+ eventName: "withdraw";
322
+ guard: {
323
+ and: JsonLogicRule[];
324
+ };
325
+ effect: JsonLogicRule;
326
+ dependencies: never[];
327
+ } | {
328
+ from: "open";
329
+ to: "open";
330
+ eventName: "withdraw";
331
+ guard: {
332
+ and: JsonLogicRule[];
333
+ };
334
+ effect: JsonLogicRule;
335
+ dependencies: never[];
336
+ })[];
337
+ };