@ottochain/sdk 2.2.5 → 2.4.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 (222) hide show
  1. package/dist/cjs/apps/contracts/index.js +15 -8
  2. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +89 -46
  3. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +152 -45
  4. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +40 -8
  5. package/dist/cjs/apps/corporate/index.js +2 -2
  6. package/dist/cjs/apps/corporate/state-machines/corp-board.js +169 -59
  7. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +245 -47
  8. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +407 -99
  9. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +151 -37
  10. package/dist/cjs/apps/governance/index.js +14 -14
  11. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +85 -43
  12. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +73 -43
  13. package/dist/cjs/apps/governance/state-machines/dao-single.js +55 -14
  14. package/dist/cjs/apps/governance/state-machines/dao-token.js +103 -45
  15. package/dist/cjs/apps/governance/state-machines/governance-simple.js +129 -65
  16. package/dist/cjs/apps/governance/state-machines/governance-universal.js +29 -5
  17. package/dist/cjs/apps/identity/constants.js +55 -14
  18. package/dist/cjs/apps/identity/index.js +27 -11
  19. package/dist/cjs/apps/identity/state-machines/identity-agent.js +57 -9
  20. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +70 -27
  21. package/dist/cjs/apps/identity/state-machines/identity-registry.js +288 -0
  22. package/dist/cjs/apps/identity/state-machines/identity-universal.js +30 -6
  23. package/dist/cjs/apps/identity/state-machines/index.js +3 -1
  24. package/dist/cjs/apps/index.js +19 -8
  25. package/dist/cjs/apps/lending/assets.js +223 -0
  26. package/dist/cjs/apps/lending/credit-scoring.js +87 -0
  27. package/dist/cjs/apps/lending/eligibility.js +121 -0
  28. package/dist/cjs/apps/lending/index.js +91 -0
  29. package/dist/cjs/apps/lending/state-machines/index.js +9 -0
  30. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +412 -0
  31. package/dist/cjs/apps/markets/index.js +21 -11
  32. package/dist/cjs/apps/markets/state-machines/market-auction.js +44 -19
  33. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +54 -29
  34. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +53 -31
  35. package/dist/cjs/apps/markets/state-machines/market-prediction.js +120 -61
  36. package/dist/cjs/apps/markets/state-machines/market-universal.js +50 -10
  37. package/dist/cjs/apps/oracles/index.js +2 -2
  38. package/dist/cjs/errors.js +3 -3
  39. package/dist/cjs/generated/google/protobuf/struct.js +4 -4
  40. package/dist/cjs/generated/index.js +11 -7
  41. package/dist/cjs/generated/openapi.js +6 -0
  42. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +50 -50
  43. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +19 -20
  44. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +13 -13
  45. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +4 -4
  46. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +124 -130
  47. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +107 -107
  48. package/dist/cjs/generated/ottochain/v1/common.js +1722 -1
  49. package/dist/cjs/generated/ottochain/v1/fiber.js +355 -5
  50. package/dist/cjs/generated/ottochain/v1/messages.js +775 -3
  51. package/dist/cjs/generated/ottochain/v1/records.js +350 -3
  52. package/dist/cjs/index.js +45 -7
  53. package/dist/cjs/openapi.js +2 -0
  54. package/dist/cjs/ottochain/drop-nulls.js +1 -2
  55. package/dist/cjs/ottochain/genesis-manifest.js +193 -0
  56. package/dist/cjs/ottochain/index.js +27 -13
  57. package/dist/cjs/ottochain/metagraph-client.js +65 -8
  58. package/dist/cjs/ottochain/snapshot.js +11 -12
  59. package/dist/cjs/ottochain/transaction.js +57 -14
  60. package/dist/cjs/ottochain/types.js +19 -1
  61. package/dist/cjs/privacy/index.js +14 -0
  62. package/dist/cjs/privacy/sealed-bid.js +210 -0
  63. package/dist/cjs/privacy/shield-app.js +131 -0
  64. package/dist/cjs/schema/effects.js +40 -0
  65. package/dist/cjs/schema/fiber-app.js +19 -13
  66. package/dist/cjs/schema/guard-lint.js +352 -0
  67. package/dist/cjs/schema/guards.js +246 -0
  68. package/dist/cjs/signing.js +80 -0
  69. package/dist/cjs/types.js +2 -3
  70. package/dist/cjs/validation.js +8 -8
  71. package/dist/cjs/verify.js +9 -4
  72. package/dist/cjs/zk/commit.js +53 -0
  73. package/dist/cjs/zk/guard.js +107 -0
  74. package/dist/cjs/zk/index.js +48 -0
  75. package/dist/cjs/zk/preimage.js +37 -0
  76. package/dist/cjs/zk/prover.js +87 -0
  77. package/dist/cjs/zk/registry.js +62 -0
  78. package/dist/cjs/zk/types.js +28 -0
  79. package/dist/cjs/zk/witness.js +19 -0
  80. package/dist/esm/apps/contracts/index.js +7 -3
  81. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +89 -46
  82. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +152 -45
  83. package/dist/esm/apps/contracts/state-machines/contract-universal.js +40 -8
  84. package/dist/esm/apps/corporate/state-machines/corp-board.js +169 -59
  85. package/dist/esm/apps/corporate/state-machines/corp-entity.js +245 -47
  86. package/dist/esm/apps/corporate/state-machines/corp-securities.js +407 -99
  87. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +151 -37
  88. package/dist/esm/apps/governance/state-machines/dao-multisig.js +85 -43
  89. package/dist/esm/apps/governance/state-machines/dao-reputation.js +73 -43
  90. package/dist/esm/apps/governance/state-machines/dao-single.js +55 -14
  91. package/dist/esm/apps/governance/state-machines/dao-token.js +103 -45
  92. package/dist/esm/apps/governance/state-machines/governance-simple.js +129 -65
  93. package/dist/esm/apps/governance/state-machines/governance-universal.js +29 -5
  94. package/dist/esm/apps/identity/constants.js +51 -12
  95. package/dist/esm/apps/identity/index.js +12 -7
  96. package/dist/esm/apps/identity/state-machines/identity-agent.js +57 -9
  97. package/dist/esm/apps/identity/state-machines/identity-oracle.js +70 -27
  98. package/dist/esm/apps/identity/state-machines/identity-registry.js +285 -0
  99. package/dist/esm/apps/identity/state-machines/identity-universal.js +30 -6
  100. package/dist/esm/apps/identity/state-machines/index.js +1 -0
  101. package/dist/esm/apps/index.js +1 -0
  102. package/dist/esm/apps/lending/assets.js +207 -0
  103. package/dist/esm/apps/lending/credit-scoring.js +81 -0
  104. package/dist/esm/apps/lending/eligibility.js +115 -0
  105. package/dist/esm/apps/lending/index.js +69 -0
  106. package/dist/esm/apps/lending/state-machines/index.js +5 -0
  107. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +409 -0
  108. package/dist/esm/apps/markets/index.js +8 -4
  109. package/dist/esm/apps/markets/state-machines/market-auction.js +44 -19
  110. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +54 -29
  111. package/dist/esm/apps/markets/state-machines/market-group-buy.js +53 -31
  112. package/dist/esm/apps/markets/state-machines/market-prediction.js +120 -61
  113. package/dist/esm/apps/markets/state-machines/market-universal.js +50 -10
  114. package/dist/esm/generated/index.js +9 -5
  115. package/dist/esm/generated/openapi.js +5 -0
  116. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +46 -46
  117. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +114 -120
  118. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +100 -100
  119. package/dist/esm/generated/ottochain/v1/common.js +1718 -0
  120. package/dist/esm/generated/ottochain/v1/fiber.js +351 -1
  121. package/dist/esm/generated/ottochain/v1/messages.js +774 -2
  122. package/dist/esm/generated/ottochain/v1/records.js +349 -2
  123. package/dist/esm/index.js +23 -2
  124. package/dist/esm/openapi.js +1 -0
  125. package/dist/esm/ottochain/genesis-manifest.js +189 -0
  126. package/dist/esm/ottochain/index.js +4 -3
  127. package/dist/esm/ottochain/metagraph-client.js +65 -8
  128. package/dist/esm/ottochain/snapshot.js +4 -4
  129. package/dist/esm/ottochain/transaction.js +43 -3
  130. package/dist/esm/ottochain/types.js +18 -0
  131. package/dist/esm/privacy/index.js +6 -0
  132. package/dist/esm/privacy/sealed-bid.js +206 -0
  133. package/dist/esm/privacy/shield-app.js +127 -0
  134. package/dist/esm/schema/effects.js +35 -0
  135. package/dist/esm/schema/fiber-app.js +13 -6
  136. package/dist/esm/schema/guard-lint.js +346 -0
  137. package/dist/esm/schema/guards.js +229 -0
  138. package/dist/esm/signing.js +74 -0
  139. package/dist/esm/verify.js +8 -2
  140. package/dist/esm/zk/commit.js +44 -0
  141. package/dist/esm/zk/guard.js +99 -0
  142. package/dist/esm/zk/index.js +19 -0
  143. package/dist/esm/zk/preimage.js +30 -0
  144. package/dist/esm/zk/prover.js +82 -0
  145. package/dist/esm/zk/registry.js +55 -0
  146. package/dist/esm/zk/types.js +25 -0
  147. package/dist/esm/zk/witness.js +15 -0
  148. package/dist/types/apps/contracts/index.d.ts +159 -227
  149. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +50 -101
  150. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +86 -120
  151. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +20 -4
  152. package/dist/types/apps/corporate/index.d.ts +1040 -304
  153. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +188 -52
  154. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +267 -62
  155. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +355 -131
  156. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +225 -53
  157. package/dist/types/apps/governance/index.d.ts +396 -417
  158. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +92 -95
  159. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +57 -69
  160. package/dist/types/apps/governance/state-machines/dao-single.d.ts +40 -50
  161. package/dist/types/apps/governance/state-machines/dao-token.d.ts +80 -53
  162. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +107 -121
  163. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +17 -5
  164. package/dist/types/apps/identity/constants.d.ts +32 -4
  165. package/dist/types/apps/identity/index.d.ts +449 -100
  166. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +30 -0
  167. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +41 -87
  168. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
  169. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +15 -0
  170. package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
  171. package/dist/types/apps/index.d.ts +1 -0
  172. package/dist/types/apps/lending/assets.d.ts +258 -0
  173. package/dist/types/apps/lending/credit-scoring.d.ts +80 -0
  174. package/dist/types/apps/lending/eligibility.d.ts +83 -0
  175. package/dist/types/apps/lending/index.d.ts +548 -0
  176. package/dist/types/apps/lending/state-machines/index.d.ts +5 -0
  177. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +528 -0
  178. package/dist/types/apps/markets/index.d.ts +184 -204
  179. package/dist/types/apps/markets/state-machines/market-auction.d.ts +25 -37
  180. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +26 -34
  181. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +31 -43
  182. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +67 -72
  183. package/dist/types/apps/markets/state-machines/market-universal.d.ts +30 -10
  184. package/dist/types/generated/index.d.ts +5 -5
  185. package/dist/types/generated/openapi.d.ts +1257 -0
  186. package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +5 -5
  187. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +12 -12
  188. package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +11 -11
  189. package/dist/types/generated/ottochain/v1/common.d.ts +228 -0
  190. package/dist/types/generated/ottochain/v1/fiber.d.ts +32 -1
  191. package/dist/types/generated/ottochain/v1/messages.d.ts +84 -0
  192. package/dist/types/generated/ottochain/v1/records.d.ts +34 -0
  193. package/dist/types/index.d.ts +8 -2
  194. package/dist/types/openapi.d.ts +22 -0
  195. package/dist/types/ottochain/genesis-manifest.d.ts +130 -0
  196. package/dist/types/ottochain/index.d.ts +6 -5
  197. package/dist/types/ottochain/metagraph-client.d.ts +49 -7
  198. package/dist/types/ottochain/snapshot.d.ts +6 -6
  199. package/dist/types/ottochain/transaction.d.ts +33 -1
  200. package/dist/types/ottochain/types.d.ts +602 -11
  201. package/dist/types/privacy/index.d.ts +6 -0
  202. package/dist/types/privacy/sealed-bid.d.ts +348 -0
  203. package/dist/types/privacy/shield-app.d.ts +48 -0
  204. package/dist/types/schema/effects.d.ts +34 -0
  205. package/dist/types/schema/fiber-app.d.ts +41 -3
  206. package/dist/types/schema/guard-lint.d.ts +111 -0
  207. package/dist/types/schema/guards.d.ts +134 -0
  208. package/dist/types/signing.d.ts +45 -0
  209. package/dist/types/validation.d.ts +22 -217
  210. package/dist/types/verify.d.ts +4 -0
  211. package/dist/types/zk/commit.d.ts +28 -0
  212. package/dist/types/zk/guard.d.ts +46 -0
  213. package/dist/types/zk/index.d.ts +19 -0
  214. package/dist/types/zk/preimage.d.ts +10 -0
  215. package/dist/types/zk/prover.d.ts +34 -0
  216. package/dist/types/zk/registry.d.ts +34 -0
  217. package/dist/types/zk/types.d.ts +33 -0
  218. package/dist/types/zk/witness.d.ts +40 -0
  219. package/package.json +52 -35
  220. package/dist/cjs/ottochain/normalize.js +0 -186
  221. package/dist/esm/ottochain/normalize.js +0 -179
  222. package/dist/types/ottochain/normalize.d.ts +0 -79
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.govSimpleDef = void 0;
4
4
  const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ const guards_js_1 = require("../../../schema/guards.js");
5
6
  /**
6
7
  * Simple org governance: manage members, update rules, resolve disputes.
7
8
  */
@@ -92,11 +93,8 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
92
93
  },
93
94
  },
94
95
  finalize: {
95
- description: "Finalize the voting period",
96
- required: ["forCount"],
97
- properties: {
98
- forCount: { type: "number" },
99
- },
96
+ description: "Finalize the voting period (for-count derived from recorded ballots)",
97
+ properties: {},
100
98
  },
101
99
  file_dispute: {
102
100
  description: "File a dispute against a member",
@@ -125,18 +123,47 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
125
123
  },
126
124
  },
127
125
  dissolve: {
128
- description: "Dissolve the organization (requires 90% approval)",
129
- required: ["approvalCount"],
130
- properties: {
131
- approvalCount: { type: "number" },
132
- },
126
+ description: "Dissolve the organization (requires every member to sign this op — verified unanimity)",
127
+ properties: {},
133
128
  },
134
129
  },
135
130
  states: {
136
- ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
137
- VOTING: { id: "VOTING", isFinal: false, metadata: null },
138
- DISPUTE: { id: "DISPUTE", isFinal: false, metadata: null },
139
- DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
131
+ ACTIVE: {
132
+ id: "ACTIVE",
133
+ isFinal: false,
134
+ metadata: {
135
+ label: "Active",
136
+ description: "Governance is idle and ready to accept a proposal",
137
+ category: "initial",
138
+ },
139
+ },
140
+ VOTING: {
141
+ id: "VOTING",
142
+ isFinal: false,
143
+ metadata: {
144
+ label: "Voting",
145
+ description: "A proposal is open for voting",
146
+ category: "pending",
147
+ },
148
+ },
149
+ DISPUTE: {
150
+ id: "DISPUTE",
151
+ isFinal: false,
152
+ metadata: {
153
+ label: "Dispute",
154
+ description: "A proposal outcome is being disputed",
155
+ category: "pending",
156
+ },
157
+ },
158
+ DISSOLVED: {
159
+ id: "DISSOLVED",
160
+ isFinal: true,
161
+ metadata: {
162
+ label: "Dissolved",
163
+ description: "Governance entity dissolved (terminal)",
164
+ category: "terminal",
165
+ },
166
+ },
140
167
  },
141
168
  initialState: "ACTIVE",
142
169
  transitions: [
@@ -145,16 +172,16 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
145
172
  from: "ACTIVE",
146
173
  to: "ACTIVE",
147
174
  eventName: "add_member",
148
- guard: { in: [{ var: "event.agent" }, { var: "state.admins" }] },
175
+ guard: (0, guards_js_1.signerInSet)("state.admins"),
149
176
  effect: {
150
177
  merge: [
151
178
  { var: "state" },
152
179
  {
153
180
  members: {
154
- setKey: [
181
+ set: [
155
182
  { var: "state.members" },
156
183
  { var: "event.member" },
157
- { role: { var: "event.role" }, addedAt: { var: "$timestamp" } },
184
+ { role: { var: "event.role" }, addedAt: { var: "$ordinal" } },
158
185
  ],
159
186
  },
160
187
  },
@@ -167,13 +194,13 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
167
194
  from: "ACTIVE",
168
195
  to: "ACTIVE",
169
196
  eventName: "remove_member",
170
- guard: { in: [{ var: "event.agent" }, { var: "state.admins" }] },
197
+ guard: (0, guards_js_1.signerInSet)("state.admins"),
171
198
  effect: {
172
199
  merge: [
173
200
  { var: "state" },
174
201
  {
175
202
  members: {
176
- deleteKey: [{ var: "state.members" }, { var: "event.member" }],
203
+ unset: [{ var: "state.members" }, { var: "event.member" }],
177
204
  },
178
205
  },
179
206
  ],
@@ -185,7 +212,9 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
185
212
  from: "ACTIVE",
186
213
  to: "VOTING",
187
214
  eventName: "propose",
188
- guard: { getKey: [{ var: "state.members" }, { var: "event.agent" }] },
215
+ // S1/A2 coupled fix: a CHAIN-VERIFIED signer must be a member (getKey is not a
216
+ // JLVM opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
217
+ guard: (0, guards_js_1.signerHasEntry)("state.members"),
189
218
  effect: {
190
219
  merge: [
191
220
  { var: "state" },
@@ -195,9 +224,9 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
195
224
  type: { var: "event.type" },
196
225
  changes: { var: "event.changes" },
197
226
  proposer: { var: "event.agent" },
198
- proposedAt: { var: "$timestamp" },
227
+ proposedAt: { var: "$ordinal" },
199
228
  deadline: {
200
- "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
229
+ "+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
201
230
  },
202
231
  },
203
232
  votes: {},
@@ -211,12 +240,14 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
211
240
  from: "VOTING",
212
241
  to: "VOTING",
213
242
  eventName: "vote",
243
+ // S1/A2 coupled fix: bind event.agent to a verified signer who is a member (actorHasEntry),
244
+ // and block a re-vote by that SAME bound actor — so the ballot is recorded under, and deduped
245
+ // on, the chain-verified voter. Without the binding, signerHasEntry only proves SOME signer is a
246
+ // member, letting one member stuff votes under arbitrary keys (set is the rc.5 map-write opcode).
214
247
  guard: {
215
248
  and: [
216
- { getKey: [{ var: "state.members" }, { var: "event.agent" }] },
217
- {
218
- "!": [{ getKey: [{ var: "state.votes" }, { var: "event.agent" }] }],
219
- },
249
+ (0, guards_js_1.actorHasEntry)("state.members"),
250
+ { "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
220
251
  ],
221
252
  },
222
253
  effect: {
@@ -224,10 +255,10 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
224
255
  { var: "state" },
225
256
  {
226
257
  votes: {
227
- setKey: [
258
+ set: [
228
259
  { var: "state.votes" },
229
260
  { var: "event.agent" },
230
- { vote: { var: "event.vote" }, votedAt: { var: "$timestamp" } },
261
+ { vote: { var: "event.vote" }, votedAt: { var: "$ordinal" } },
231
262
  ],
232
263
  },
233
264
  },
@@ -240,12 +271,24 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
240
271
  from: "VOTING",
241
272
  to: "ACTIVE",
242
273
  eventName: "finalize",
274
+ // S2/A2 coupled fix: the for-count is DERIVED from recorded ballots in
275
+ // state.votes (length of the "for" entries), never read from the attacker's
276
+ // event.forCount. members is a Map so its count is length(keys(members)).
243
277
  guard: {
244
278
  ">=": [
245
- { var: "event.forCount" },
279
+ {
280
+ length: [
281
+ {
282
+ filter: [
283
+ { values: [{ var: "state.votes" }] },
284
+ { "===": [{ var: "vote" }, "for"] },
285
+ ],
286
+ },
287
+ ],
288
+ },
246
289
  {
247
290
  "*": [
248
- { size: { var: "state.members" } },
291
+ { length: [{ keys: [{ var: "state.members" }] }] },
249
292
  { var: "state.passingThreshold" },
250
293
  ],
251
294
  },
@@ -269,7 +312,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
269
312
  type: "rule_change",
270
313
  proposal: { var: "state.proposal" },
271
314
  outcome: "passed",
272
- finalizedAt: { var: "$timestamp" },
315
+ finalizedAt: { var: "$ordinal" },
273
316
  },
274
317
  ],
275
318
  ],
@@ -286,12 +329,23 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
286
329
  from: "VOTING",
287
330
  to: "ACTIVE",
288
331
  eventName: "finalize",
332
+ // S2/A2 coupled fix (failed arm): derive the for-count from recorded ballots in
333
+ // state.votes; never from event.forCount. members count = length(keys(members)).
289
334
  guard: {
290
335
  "<": [
291
- { var: "event.forCount" },
336
+ {
337
+ length: [
338
+ {
339
+ filter: [
340
+ { values: [{ var: "state.votes" }] },
341
+ { "===": [{ var: "vote" }, "for"] },
342
+ ],
343
+ },
344
+ ],
345
+ },
292
346
  {
293
347
  "*": [
294
- { size: { var: "state.members" } },
348
+ { length: [{ keys: [{ var: "state.members" }] }] },
295
349
  { var: "state.passingThreshold" },
296
350
  ],
297
351
  },
@@ -309,7 +363,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
309
363
  type: "rule_change",
310
364
  proposal: { var: "state.proposal" },
311
365
  outcome: "failed",
312
- finalizedAt: { var: "$timestamp" },
366
+ finalizedAt: { var: "$ordinal" },
313
367
  },
314
368
  ],
315
369
  ],
@@ -326,7 +380,9 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
326
380
  from: "ACTIVE",
327
381
  to: "DISPUTE",
328
382
  eventName: "file_dispute",
329
- guard: { getKey: [{ var: "state.members" }, { var: "event.agent" }] },
383
+ // S1/A2 coupled fix: only a CHAIN-VERIFIED member may file (getKey is not a JLVM
384
+ // opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
385
+ guard: (0, guards_js_1.signerHasEntry)("state.members"),
330
386
  effect: {
331
387
  merge: [
332
388
  { var: "state" },
@@ -336,7 +392,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
336
392
  plaintiff: { var: "event.agent" },
337
393
  defendant: { var: "event.defendant" },
338
394
  claim: { var: "event.claim" },
339
- filedAt: { var: "$timestamp" },
395
+ filedAt: { var: "$ordinal" },
340
396
  evidence: [],
341
397
  },
342
398
  votes: {},
@@ -350,16 +406,10 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
350
406
  from: "DISPUTE",
351
407
  to: "DISPUTE",
352
408
  eventName: "submit_evidence",
353
- guard: {
354
- or: [
355
- {
356
- "===": [{ var: "event.agent" }, { var: "state.dispute.plaintiff" }],
357
- },
358
- {
359
- "===": [{ var: "event.agent" }, { var: "state.dispute.defendant" }],
360
- },
361
- ],
362
- },
409
+ guard: (0, guards_js_1.signerIsAnyParty)([
410
+ "state.dispute.plaintiff",
411
+ "state.dispute.defendant",
412
+ ]),
363
413
  effect: {
364
414
  merge: [
365
415
  { var: "state" },
@@ -375,7 +425,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
375
425
  {
376
426
  from: { var: "event.agent" },
377
427
  content: { var: "event.content" },
378
- at: { var: "$timestamp" },
428
+ at: { var: "$ordinal" },
379
429
  },
380
430
  ],
381
431
  ],
@@ -393,18 +443,16 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
393
443
  from: "DISPUTE",
394
444
  to: "DISPUTE",
395
445
  eventName: "vote",
446
+ // S1/A2 coupled fix: bind event.agent to a verified member (actorHasEntry), exclude the parties,
447
+ // and block a re-vote by that SAME bound actor — so the dispute ballot is recorded under, and
448
+ // deduped on, the chain-verified voter (set is the rc.5 map-write opcode; signerIsNotParty still
449
+ // excludes any signer who is a party, which covers the bound actor).
396
450
  guard: {
397
451
  and: [
398
- { getKey: [{ var: "state.members" }, { var: "event.agent" }] },
399
- {
400
- "!==": [{ var: "event.agent" }, { var: "state.dispute.plaintiff" }],
401
- },
402
- {
403
- "!==": [{ var: "event.agent" }, { var: "state.dispute.defendant" }],
404
- },
405
- {
406
- "!": [{ getKey: [{ var: "state.votes" }, { var: "event.agent" }] }],
407
- },
452
+ (0, guards_js_1.actorHasEntry)("state.members"),
453
+ (0, guards_js_1.signerIsNotParty)("state.dispute.plaintiff"),
454
+ (0, guards_js_1.signerIsNotParty)("state.dispute.defendant"),
455
+ { "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
408
456
  ],
409
457
  },
410
458
  effect: {
@@ -412,12 +460,12 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
412
460
  { var: "state" },
413
461
  {
414
462
  votes: {
415
- setKey: [
463
+ set: [
416
464
  { var: "state.votes" },
417
465
  { var: "event.agent" },
418
466
  {
419
467
  ruling: { var: "event.ruling" },
420
- votedAt: { var: "$timestamp" },
468
+ votedAt: { var: "$ordinal" },
421
469
  },
422
470
  ],
423
471
  },
@@ -431,9 +479,11 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
431
479
  from: "DISPUTE",
432
480
  to: "ACTIVE",
433
481
  eventName: "resolve",
482
+ // A2 fix: count recorded ballots. votes is a Map, and `length` rejects Maps, so
483
+ // count its keys: length(keys(state.votes)). (size is not a JLVM opcode.)
434
484
  guard: {
435
485
  ">=": [
436
- { size: { var: "state.votes" } },
486
+ { length: [{ keys: [{ var: "state.votes" }] }] },
437
487
  { var: "state.disputeQuorum" },
438
488
  ],
439
489
  },
@@ -450,7 +500,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
450
500
  dispute: { var: "state.dispute" },
451
501
  ruling: { var: "event.ruling" },
452
502
  remedy: { var: "event.remedy" },
453
- resolvedAt: { var: "$timestamp" },
503
+ resolvedAt: { var: "$ordinal" },
454
504
  },
455
505
  ],
456
506
  ],
@@ -467,14 +517,28 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
467
517
  from: "ACTIVE",
468
518
  to: "DISSOLVED",
469
519
  eventName: "dissolve",
520
+ // S2/A2 coupled fix: dissolution must not trust an attacker-supplied
521
+ // approvalCount. Derive consent from the CHAIN-VERIFIED signers — every member
522
+ // (a key in state.members) must be among proofs[].address, with a non-empty
523
+ // belt. members is a Map, so iterate keys(members); size is not a JLVM opcode.
470
524
  guard: {
471
- ">=": [
472
- { var: "event.approvalCount" },
473
- { "*": [{ size: { var: "state.members" } }, 0.9] },
525
+ and: [
526
+ { ">": [{ length: [{ keys: [{ var: "state.members" }] }] }, 0] },
527
+ {
528
+ all: [
529
+ { keys: [{ var: "state.members" }] },
530
+ {
531
+ in: [
532
+ { var: "" },
533
+ { map: [{ var: "proofs" }, { var: "address" }] },
534
+ ],
535
+ },
536
+ ],
537
+ },
474
538
  ],
475
539
  },
476
540
  effect: {
477
- merge: [{ var: "state" }, { dissolvedAt: { var: "$timestamp" } }],
541
+ merge: [{ var: "state" }, { dissolvedAt: { var: "$ordinal" } }],
478
542
  },
479
543
  dependencies: [],
480
544
  },
@@ -52,9 +52,33 @@ exports.govUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
52
52
  },
53
53
  },
54
54
  states: {
55
- ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
56
- VOTING: { id: "VOTING", isFinal: false, metadata: null },
57
- DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
55
+ ACTIVE: {
56
+ id: "ACTIVE",
57
+ isFinal: false,
58
+ metadata: {
59
+ label: "Active",
60
+ description: "Governance is idle and ready to accept a proposal",
61
+ category: "initial",
62
+ },
63
+ },
64
+ VOTING: {
65
+ id: "VOTING",
66
+ isFinal: false,
67
+ metadata: {
68
+ label: "Voting",
69
+ description: "A proposal is open for voting",
70
+ category: "pending",
71
+ },
72
+ },
73
+ DISSOLVED: {
74
+ id: "DISSOLVED",
75
+ isFinal: true,
76
+ metadata: {
77
+ label: "Dissolved",
78
+ description: "Governance entity dissolved (terminal)",
79
+ category: "terminal",
80
+ },
81
+ },
58
82
  },
59
83
  initialState: "ACTIVE",
60
84
  transitions: [
@@ -69,7 +93,7 @@ exports.govUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
69
93
  {
70
94
  status: "VOTING",
71
95
  proposal: { var: "event.proposal" },
72
- proposedAt: { var: "$timestamp" },
96
+ proposedAt: { var: "$ordinal" },
73
97
  votes: {},
74
98
  },
75
99
  ],
@@ -128,7 +152,7 @@ exports.govUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
128
152
  { var: "state" },
129
153
  {
130
154
  status: "DISSOLVED",
131
- dissolvedAt: { var: "$timestamp" },
155
+ dissolvedAt: { var: "$ordinal" },
132
156
  },
133
157
  ],
134
158
  },
@@ -7,7 +7,11 @@
7
7
  * @packageDocumentation
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.getReputationDelta = exports.canTransition = exports.ATTESTATION_DELTAS = exports.AGENT_TRANSITIONS = exports.IDENTITY_TRANSITIONS = void 0;
10
+ exports.REGISTRY_ROLE_MAP = exports.REGISTRY_ROLES = exports.ATTESTATION_DELTAS = exports.AGENT_TRANSITIONS = exports.IDENTITY_TRANSITIONS = void 0;
11
+ exports.registryRolePath = registryRolePath;
12
+ exports.registryReputationPath = registryReputationPath;
13
+ exports.canTransition = canTransition;
14
+ exports.getReputationDelta = getReputationDelta;
11
15
  const identity_js_1 = require("../../generated/ottochain/apps/identity/v1/identity.js");
12
16
  const attestation_js_1 = require("../../generated/ottochain/apps/identity/v1/attestation.js");
13
17
  // ---------------------------------------------------------------------------
@@ -19,25 +23,25 @@ const attestation_js_1 = require("../../generated/ottochain/apps/identity/v1/att
19
23
  * Note: Some transitions are type-specific (agent vs oracle)
20
24
  */
21
25
  exports.IDENTITY_TRANSITIONS = {
22
- [identity_js_1.IdentityState.IDENTITY_STATE_UNSPECIFIED]: [],
23
- [identity_js_1.IdentityState.IDENTITY_STATE_UNREGISTERED]: ["register"],
24
- [identity_js_1.IdentityState.IDENTITY_STATE_REGISTERED]: ["activate", "withdraw"],
25
- [identity_js_1.IdentityState.IDENTITY_STATE_ACTIVE]: [
26
+ [identity_js_1.State.IDENTITY_STATE_UNSPECIFIED]: [],
27
+ [identity_js_1.State.IDENTITY_STATE_UNREGISTERED]: ["register"],
28
+ [identity_js_1.State.IDENTITY_STATE_REGISTERED]: ["activate", "withdraw"],
29
+ [identity_js_1.State.IDENTITY_STATE_ACTIVE]: [
26
30
  "challenge",
27
31
  "slash",
28
32
  "deactivate",
29
33
  "withdraw",
30
34
  ],
31
- [identity_js_1.IdentityState.IDENTITY_STATE_CHALLENGED]: [
35
+ [identity_js_1.State.IDENTITY_STATE_CHALLENGED]: [
32
36
  "uphold_challenge",
33
37
  "dismiss_challenge",
34
38
  ],
35
- [identity_js_1.IdentityState.IDENTITY_STATE_SUSPENDED]: ["begin_probation"],
36
- [identity_js_1.IdentityState.IDENTITY_STATE_PROBATION]: ["complete_probation"],
37
- [identity_js_1.IdentityState.IDENTITY_STATE_SLASHED]: ["reactivate", "withdraw"],
38
- [identity_js_1.IdentityState.IDENTITY_STATE_INACTIVE]: ["activate", "withdraw"],
39
- [identity_js_1.IdentityState.IDENTITY_STATE_WITHDRAWN]: [], // Terminal state
40
- [identity_js_1.IdentityState.UNRECOGNIZED]: [],
39
+ [identity_js_1.State.IDENTITY_STATE_SUSPENDED]: ["begin_probation"],
40
+ [identity_js_1.State.IDENTITY_STATE_PROBATION]: ["complete_probation"],
41
+ [identity_js_1.State.IDENTITY_STATE_SLASHED]: ["reactivate", "withdraw"],
42
+ [identity_js_1.State.IDENTITY_STATE_INACTIVE]: ["activate", "withdraw"],
43
+ [identity_js_1.State.IDENTITY_STATE_WITHDRAWN]: [], // Terminal state
44
+ [identity_js_1.State.UNRECOGNIZED]: [],
41
45
  };
42
46
  // Legacy alias
43
47
  exports.AGENT_TRANSITIONS = exports.IDENTITY_TRANSITIONS;
@@ -56,17 +60,54 @@ exports.ATTESTATION_DELTAS = {
56
60
  [attestation_js_1.AttestationType.ATTESTATION_TYPE_BEHAVIORAL]: 3,
57
61
  [attestation_js_1.AttestationType.UNRECOGNIZED]: 0,
58
62
  };
63
+ // ---------------------------------------------------------------------------
64
+ // Identity Registry — role attestations
65
+ // ---------------------------------------------------------------------------
66
+ /**
67
+ * Role-attestation types issued by the identity registry (identity-registry fiber).
68
+ * These are the ecosystem-wide authority roles consumer apps gate on via the registry
69
+ * dependency + `signerHasRole` (see docs/design/app-hardening-identity-integration.md §4.2).
70
+ */
71
+ exports.REGISTRY_ROLES = {
72
+ ARBITER: "ARBITER",
73
+ SLASHER: "SLASHER",
74
+ ISSUER: "ISSUER",
75
+ BOARD_MEMBER: "BOARD_MEMBER",
76
+ };
77
+ /**
78
+ * Maps each role to the registry's flat per-role state-map field. A consumer app reads
79
+ * `machines.<registryDep>.state.<field>` (a `{ <address>: true }` map) and binds membership to a
80
+ * verified signer with `signerHasRole`. Kept in lock-step with the identity-registry stateSchema.
81
+ */
82
+ exports.REGISTRY_ROLE_MAP = {
83
+ ARBITER: "arbiters",
84
+ SLASHER: "slashers",
85
+ ISSUER: "issuers",
86
+ BOARD_MEMBER: "boardMembers",
87
+ };
88
+ /**
89
+ * Build the `machines.<registryDep>.state.<roleMap>` var path a consumer guard reads to check a role,
90
+ * e.g. `registryRolePath("reg-uuid", "ARBITER")` → `"machines.reg-uuid.state.arbiters"`.
91
+ */
92
+ function registryRolePath(registryDep, role) {
93
+ return `machines.${registryDep}.state.${exports.REGISTRY_ROLE_MAP[role]}`;
94
+ }
95
+ /**
96
+ * Build the `machines.<registryDep>.state.reputations` var path a consumer guard reads for a
97
+ * reputation gate (`signerHasReputation`).
98
+ */
99
+ function registryReputationPath(registryDep) {
100
+ return `machines.${registryDep}.state.reputations`;
101
+ }
59
102
  /**
60
103
  * Check if a transition is valid for the given state.
61
104
  */
62
105
  function canTransition(state, event) {
63
106
  return exports.IDENTITY_TRANSITIONS[state]?.includes(event) ?? false;
64
107
  }
65
- exports.canTransition = canTransition;
66
108
  /**
67
109
  * Get reputation delta for an attestation type.
68
110
  */
69
111
  function getReputationDelta(type) {
70
112
  return exports.ATTESTATION_DELTAS[type] ?? 0;
71
113
  }
72
- exports.getReputationDelta = getReputationDelta;
@@ -18,11 +18,14 @@
18
18
  * @packageDocumentation
19
19
  */
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.getIdentityDefinition = exports.IDENTITY_DEFINITIONS = exports.identityOracleDef = exports.identityAgentDef = exports.identityUniversalDef = exports.DEFAULT_REPUTATION_CONFIG = exports.getReputationDelta = exports.canTransition = exports.ATTESTATION_DELTAS = exports.AGENT_TRANSITIONS = exports.IDENTITY_TRANSITIONS = exports.attestationTypeToJSON = exports.attestationTypeFromJSON = exports.ReputationConfig = exports.ChallengeRequest = exports.VouchRequest = exports.Attestation = exports.ReputationDelta = exports.AttestationType = exports.AgentState = exports.platformToJSON = exports.platformFromJSON = exports.identityStateToJSON = exports.identityStateFromJSON = exports.identityTypeToJSON = exports.identityTypeFromJSON = exports.IdentityDefinition = exports.WithdrawIdentityRequest = exports.AddStakeRequest = exports.ChallengeIdentityRequest = exports.LinkPlatformRequest = exports.ActivateIdentityRequest = exports.RegisterIdentityRequest = exports.Identity = exports.PenaltyEvent = exports.Reputation = exports.PlatformLink = exports.Platform = exports.IdentityState = exports.IdentityType = void 0;
22
- // Re-export generated protobuf types (source of truth)
21
+ exports.IDENTITY_DEFINITIONS = exports.identityRegistryDef = exports.identityOracleDef = exports.identityAgentDef = exports.identityUniversalDef = exports.DEFAULT_REPUTATION_CONFIG = exports.getReputationDelta = exports.canTransition = exports.registryReputationPath = exports.registryRolePath = exports.REGISTRY_ROLE_MAP = exports.REGISTRY_ROLES = exports.ATTESTATION_DELTAS = exports.AGENT_TRANSITIONS = exports.IDENTITY_TRANSITIONS = exports.attestationTypeToJSON = exports.attestationTypeFromJSON = exports.ReputationConfig = exports.ChallengeRequest = exports.VouchRequest = exports.Attestation = exports.ReputationDelta = exports.AttestationType = exports.identityStateToJSON = exports.identityStateFromJSON = exports.identityTypeToJSON = exports.identityTypeFromJSON = exports.IdentityState = exports.IdentityType = exports.AgentState = exports.platformToJSON = exports.platformFromJSON = exports.stateToJSON = exports.stateFromJSON = exports.typeToJSON = exports.typeFromJSON = exports.IdentityDefinition = exports.WithdrawIdentityRequest = exports.AddStakeRequest = exports.ChallengeIdentityRequest = exports.LinkPlatformRequest = exports.ActivateIdentityRequest = exports.RegisterIdentityRequest = exports.Identity = exports.PenaltyEvent = exports.Reputation = exports.PlatformLink = exports.Platform = exports.State = exports.Type = void 0;
22
+ exports.getIdentityDefinition = getIdentityDefinition;
23
+ // Re-export generated protobuf types (source of truth).
24
+ // The nested lifecycle/kind enums dropped their app prefix in the proto; under
25
+ // this app-scoped entrypoint they are unambiguously Type / State.
23
26
  var identity_js_1 = require("../../generated/ottochain/apps/identity/v1/identity.js");
24
- Object.defineProperty(exports, "IdentityType", { enumerable: true, get: function () { return identity_js_1.IdentityType; } });
25
- Object.defineProperty(exports, "IdentityState", { enumerable: true, get: function () { return identity_js_1.IdentityState; } });
27
+ Object.defineProperty(exports, "Type", { enumerable: true, get: function () { return identity_js_1.Type; } });
28
+ Object.defineProperty(exports, "State", { enumerable: true, get: function () { return identity_js_1.State; } });
26
29
  Object.defineProperty(exports, "Platform", { enumerable: true, get: function () { return identity_js_1.Platform; } });
27
30
  Object.defineProperty(exports, "PlatformLink", { enumerable: true, get: function () { return identity_js_1.PlatformLink; } });
28
31
  Object.defineProperty(exports, "Reputation", { enumerable: true, get: function () { return identity_js_1.Reputation; } });
@@ -35,15 +38,23 @@ Object.defineProperty(exports, "ChallengeIdentityRequest", { enumerable: true, g
35
38
  Object.defineProperty(exports, "AddStakeRequest", { enumerable: true, get: function () { return identity_js_1.AddStakeRequest; } });
36
39
  Object.defineProperty(exports, "WithdrawIdentityRequest", { enumerable: true, get: function () { return identity_js_1.WithdrawIdentityRequest; } });
37
40
  Object.defineProperty(exports, "IdentityDefinition", { enumerable: true, get: function () { return identity_js_1.IdentityDefinition; } });
38
- Object.defineProperty(exports, "identityTypeFromJSON", { enumerable: true, get: function () { return identity_js_1.identityTypeFromJSON; } });
39
- Object.defineProperty(exports, "identityTypeToJSON", { enumerable: true, get: function () { return identity_js_1.identityTypeToJSON; } });
40
- Object.defineProperty(exports, "identityStateFromJSON", { enumerable: true, get: function () { return identity_js_1.identityStateFromJSON; } });
41
- Object.defineProperty(exports, "identityStateToJSON", { enumerable: true, get: function () { return identity_js_1.identityStateToJSON; } });
41
+ Object.defineProperty(exports, "typeFromJSON", { enumerable: true, get: function () { return identity_js_1.typeFromJSON; } });
42
+ Object.defineProperty(exports, "typeToJSON", { enumerable: true, get: function () { return identity_js_1.typeToJSON; } });
43
+ Object.defineProperty(exports, "stateFromJSON", { enumerable: true, get: function () { return identity_js_1.stateFromJSON; } });
44
+ Object.defineProperty(exports, "stateToJSON", { enumerable: true, get: function () { return identity_js_1.stateToJSON; } });
42
45
  Object.defineProperty(exports, "platformFromJSON", { enumerable: true, get: function () { return identity_js_1.platformFromJSON; } });
43
46
  Object.defineProperty(exports, "platformToJSON", { enumerable: true, get: function () { return identity_js_1.platformToJSON; } });
44
47
  // Legacy aliases for backward compatibility
45
48
  var identity_js_2 = require("../../generated/ottochain/apps/identity/v1/identity.js");
46
- Object.defineProperty(exports, "AgentState", { enumerable: true, get: function () { return identity_js_2.IdentityState; } });
49
+ Object.defineProperty(exports, "AgentState", { enumerable: true, get: function () { return identity_js_2.State; } });
50
+ // Deprecated app-prefixed aliases (renamed to Type / State); kept for compat.
51
+ var identity_js_3 = require("../../generated/ottochain/apps/identity/v1/identity.js");
52
+ Object.defineProperty(exports, "IdentityType", { enumerable: true, get: function () { return identity_js_3.Type; } });
53
+ Object.defineProperty(exports, "IdentityState", { enumerable: true, get: function () { return identity_js_3.State; } });
54
+ Object.defineProperty(exports, "identityTypeFromJSON", { enumerable: true, get: function () { return identity_js_3.typeFromJSON; } });
55
+ Object.defineProperty(exports, "identityTypeToJSON", { enumerable: true, get: function () { return identity_js_3.typeToJSON; } });
56
+ Object.defineProperty(exports, "identityStateFromJSON", { enumerable: true, get: function () { return identity_js_3.stateFromJSON; } });
57
+ Object.defineProperty(exports, "identityStateToJSON", { enumerable: true, get: function () { return identity_js_3.stateToJSON; } });
47
58
  var attestation_js_1 = require("../../generated/ottochain/apps/identity/v1/attestation.js");
48
59
  Object.defineProperty(exports, "AttestationType", { enumerable: true, get: function () { return attestation_js_1.AttestationType; } });
49
60
  Object.defineProperty(exports, "ReputationDelta", { enumerable: true, get: function () { return attestation_js_1.ReputationDelta; } });
@@ -58,6 +69,10 @@ var constants_js_1 = require("./constants.js");
58
69
  Object.defineProperty(exports, "IDENTITY_TRANSITIONS", { enumerable: true, get: function () { return constants_js_1.IDENTITY_TRANSITIONS; } });
59
70
  Object.defineProperty(exports, "AGENT_TRANSITIONS", { enumerable: true, get: function () { return constants_js_1.AGENT_TRANSITIONS; } });
60
71
  Object.defineProperty(exports, "ATTESTATION_DELTAS", { enumerable: true, get: function () { return constants_js_1.ATTESTATION_DELTAS; } });
72
+ Object.defineProperty(exports, "REGISTRY_ROLES", { enumerable: true, get: function () { return constants_js_1.REGISTRY_ROLES; } });
73
+ Object.defineProperty(exports, "REGISTRY_ROLE_MAP", { enumerable: true, get: function () { return constants_js_1.REGISTRY_ROLE_MAP; } });
74
+ Object.defineProperty(exports, "registryRolePath", { enumerable: true, get: function () { return constants_js_1.registryRolePath; } });
75
+ Object.defineProperty(exports, "registryReputationPath", { enumerable: true, get: function () { return constants_js_1.registryReputationPath; } });
61
76
  Object.defineProperty(exports, "canTransition", { enumerable: true, get: function () { return constants_js_1.canTransition; } });
62
77
  Object.defineProperty(exports, "getReputationDelta", { enumerable: true, get: function () { return constants_js_1.getReputationDelta; } });
63
78
  // ---------------------------------------------------------------------------
@@ -82,17 +97,18 @@ const index_js_1 = require("./state-machines/index.js");
82
97
  Object.defineProperty(exports, "identityUniversalDef", { enumerable: true, get: function () { return index_js_1.identityUniversalDef; } });
83
98
  Object.defineProperty(exports, "identityAgentDef", { enumerable: true, get: function () { return index_js_1.identityAgentDef; } });
84
99
  Object.defineProperty(exports, "identityOracleDef", { enumerable: true, get: function () { return index_js_1.identityOracleDef; } });
100
+ Object.defineProperty(exports, "identityRegistryDef", { enumerable: true, get: function () { return index_js_1.identityRegistryDef; } });
85
101
  /** All identity state machine definitions */
86
102
  exports.IDENTITY_DEFINITIONS = {
87
103
  universal: index_js_1.identityUniversalDef,
88
104
  agent: index_js_1.identityAgentDef,
89
105
  oracle: index_js_1.identityOracleDef,
106
+ registry: index_js_1.identityRegistryDef,
90
107
  };
91
108
  /**
92
109
  * Get an identity state machine definition by type.
93
- * @param type - 'universal' | 'agent' | 'oracle' (default: 'agent')
110
+ * @param type - 'universal' | 'agent' | 'oracle' | 'registry' (default: 'agent')
94
111
  */
95
112
  function getIdentityDefinition(type = "agent") {
96
113
  return exports.IDENTITY_DEFINITIONS[type];
97
114
  }
98
- exports.getIdentityDefinition = getIdentityDefinition;