@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
@@ -1,4 +1,5 @@
1
1
  import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ import { signerIsParty } from "../../../schema/guards.js";
2
3
  /**
3
4
  * Oracle identity with staking, attestations, reputation, and slashing mechanics.
4
5
  */
@@ -11,13 +12,18 @@ export const identityOracleDef = defineFiberApp({
11
12
  description: "Oracle identity with staking, attestations, reputation, and slashing mechanics",
12
13
  },
13
14
  createSchema: {
14
- required: ["owner", "stake", "domains"],
15
+ required: ["owner", "stake", "domains", "slasher"],
15
16
  properties: {
16
17
  owner: {
17
18
  type: "address",
18
19
  description: "Oracle owner DAG address",
19
20
  immutable: true,
20
21
  },
22
+ slasher: {
23
+ type: "address",
24
+ description: "DAG address of the slasher authorized to penalize this oracle's stake",
25
+ immutable: true,
26
+ },
21
27
  stake: {
22
28
  type: "integer",
23
29
  minimum: 0,
@@ -38,6 +44,7 @@ export const identityOracleDef = defineFiberApp({
38
44
  stateSchema: {
39
45
  properties: {
40
46
  owner: { type: "address", immutable: true },
47
+ slasher: { type: "address", immutable: true },
41
48
  address: { type: "address", computed: true },
42
49
  stake: { type: "integer", computed: true },
43
50
  minStake: { type: "integer" },
@@ -85,7 +92,6 @@ export const identityOracleDef = defineFiberApp({
85
92
  required: ["agent"],
86
93
  properties: {
87
94
  agent: { type: "address" },
88
- adminOverride: { type: "boolean", default: false },
89
95
  },
90
96
  },
91
97
  add_stake: {
@@ -129,11 +135,51 @@ export const identityOracleDef = defineFiberApp({
129
135
  },
130
136
  },
131
137
  states: {
132
- UNREGISTERED: { id: "UNREGISTERED", isFinal: false },
133
- REGISTERED: { id: "REGISTERED", isFinal: false },
134
- ACTIVE: { id: "ACTIVE", isFinal: false },
135
- SLASHED: { id: "SLASHED", isFinal: false },
136
- WITHDRAWN: { id: "WITHDRAWN", isFinal: true },
138
+ UNREGISTERED: {
139
+ id: "UNREGISTERED",
140
+ isFinal: false,
141
+ metadata: {
142
+ label: "Unregistered",
143
+ description: "Oracle not yet registered; awaiting stake",
144
+ category: "initial",
145
+ },
146
+ },
147
+ REGISTERED: {
148
+ id: "REGISTERED",
149
+ isFinal: false,
150
+ metadata: {
151
+ label: "Registered",
152
+ description: "Oracle staked and registered but not yet active",
153
+ category: "pending",
154
+ },
155
+ },
156
+ ACTIVE: {
157
+ id: "ACTIVE",
158
+ isFinal: false,
159
+ metadata: {
160
+ label: "Active",
161
+ description: "Oracle is active and may submit resolutions",
162
+ category: "active",
163
+ },
164
+ },
165
+ SLASHED: {
166
+ id: "SLASHED",
167
+ isFinal: false,
168
+ metadata: {
169
+ label: "Slashed",
170
+ description: "Oracle penalized for a lost dispute; stake reduced",
171
+ category: "pending",
172
+ },
173
+ },
174
+ WITHDRAWN: {
175
+ id: "WITHDRAWN",
176
+ isFinal: true,
177
+ metadata: {
178
+ label: "Withdrawn",
179
+ description: "Oracle withdrawn and stake reclaimed (terminal)",
180
+ category: "terminal",
181
+ },
182
+ },
137
183
  },
138
184
  initialState: "UNREGISTERED",
139
185
  transitions: [
@@ -149,7 +195,7 @@ export const identityOracleDef = defineFiberApp({
149
195
  status: "REGISTERED",
150
196
  address: { var: "event.agent" },
151
197
  stake: { var: "event.stake" },
152
- registeredAt: { var: "$timestamp" },
198
+ registeredAt: { var: "$ordinal" },
153
199
  reputation: {
154
200
  accuracy: 100,
155
201
  totalResolutions: 0,
@@ -166,16 +212,12 @@ export const identityOracleDef = defineFiberApp({
166
212
  from: "REGISTERED",
167
213
  to: "ACTIVE",
168
214
  eventName: "activate",
169
- guard: {
170
- or: [
171
- { "===": [{ var: "event.agent" }, { var: "state.address" }] },
172
- { var: "event.adminOverride" },
173
- ],
174
- },
215
+ // authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
216
+ guard: signerIsParty("state.address"),
175
217
  effect: {
176
218
  merge: [
177
219
  { var: "state" },
178
- { status: "ACTIVE", activatedAt: { var: "$timestamp" } },
220
+ { status: "ACTIVE", activatedAt: { var: "$ordinal" } },
179
221
  ],
180
222
  },
181
223
  },
@@ -185,7 +227,7 @@ export const identityOracleDef = defineFiberApp({
185
227
  eventName: "add_stake",
186
228
  guard: {
187
229
  and: [
188
- { "===": [{ var: "event.agent" }, { var: "state.address" }] },
230
+ signerIsParty("state.address"),
189
231
  { ">": [{ var: "event.amount" }, 0] },
190
232
  ],
191
233
  },
@@ -194,7 +236,7 @@ export const identityOracleDef = defineFiberApp({
194
236
  { var: "state" },
195
237
  {
196
238
  stake: { "+": [{ var: "state.stake" }, { var: "event.amount" }] },
197
- lastStakeAt: { var: "$timestamp" },
239
+ lastStakeAt: { var: "$ordinal" },
198
240
  },
199
241
  ],
200
242
  },
@@ -225,7 +267,7 @@ export const identityOracleDef = defineFiberApp({
225
267
  },
226
268
  ],
227
269
  },
228
- lastResolutionAt: { var: "$timestamp" },
270
+ lastResolutionAt: { var: "$ordinal" },
229
271
  },
230
272
  ],
231
273
  },
@@ -234,9 +276,10 @@ export const identityOracleDef = defineFiberApp({
234
276
  from: "ACTIVE",
235
277
  to: "SLASHED",
236
278
  eventName: "slash",
279
+ // authority gate — an ARBITER/SLASHER attestation check layers on additively when the identity registry lands (see docs/design/app-hardening-identity-integration.md §4.2)
237
280
  guard: {
238
281
  and: [
239
- { var: "event.reason" },
282
+ signerIsParty("state.slasher"),
240
283
  { ">": [{ var: "event.amount" }, 0] },
241
284
  { "<=": [{ var: "event.amount" }, { var: "state.stake" }] },
242
285
  ],
@@ -255,12 +298,12 @@ export const identityOracleDef = defineFiberApp({
255
298
  reason: { var: "event.reason" },
256
299
  amount: { var: "event.amount" },
257
300
  marketId: { var: "event.marketId" },
258
- slashedAt: { var: "$timestamp" },
301
+ slashedAt: { var: "$ordinal" },
259
302
  },
260
303
  ],
261
304
  ],
262
305
  },
263
- slashedAt: { var: "$timestamp" },
306
+ slashedAt: { var: "$ordinal" },
264
307
  },
265
308
  ],
266
309
  },
@@ -271,14 +314,14 @@ export const identityOracleDef = defineFiberApp({
271
314
  eventName: "reactivate",
272
315
  guard: {
273
316
  and: [
274
- { "===": [{ var: "event.agent" }, { var: "state.address" }] },
317
+ signerIsParty("state.address"),
275
318
  { ">=": [{ var: "state.stake" }, { var: "state.minStake" }] },
276
319
  ],
277
320
  },
278
321
  effect: {
279
322
  merge: [
280
323
  { var: "state" },
281
- { status: "ACTIVE", reactivatedAt: { var: "$timestamp" } },
324
+ { status: "ACTIVE", reactivatedAt: { var: "$ordinal" } },
282
325
  ],
283
326
  },
284
327
  },
@@ -286,13 +329,13 @@ export const identityOracleDef = defineFiberApp({
286
329
  from: "ACTIVE",
287
330
  to: "WITHDRAWN",
288
331
  eventName: "withdraw",
289
- guard: { "===": [{ var: "event.agent" }, { var: "state.address" }] },
332
+ guard: signerIsParty("state.address"),
290
333
  effect: {
291
334
  merge: [
292
335
  { var: "state" },
293
336
  {
294
337
  status: "WITHDRAWN",
295
- withdrawnAt: { var: "$timestamp" },
338
+ withdrawnAt: { var: "$ordinal" },
296
339
  finalStake: { var: "state.stake" },
297
340
  },
298
341
  ],
@@ -302,13 +345,13 @@ export const identityOracleDef = defineFiberApp({
302
345
  from: "SLASHED",
303
346
  to: "WITHDRAWN",
304
347
  eventName: "withdraw",
305
- guard: { "===": [{ var: "event.agent" }, { var: "state.address" }] },
348
+ guard: signerIsParty("state.address"),
306
349
  effect: {
307
350
  merge: [
308
351
  { var: "state" },
309
352
  {
310
353
  status: "WITHDRAWN",
311
- withdrawnAt: { var: "$timestamp" },
354
+ withdrawnAt: { var: "$ordinal" },
312
355
  finalStake: { var: "state.stake" },
313
356
  },
314
357
  ],
@@ -0,0 +1,285 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ import { signerIsParty } from "../../../schema/guards.js";
3
+ /**
4
+ * Identity Registry — the ecosystem authority & reputation source.
5
+ *
6
+ * Aggregates, under a single authority-governed fiber:
7
+ * - `reputations: { <address>: int }` — the public reputation read by reputation-gated apps
8
+ * (dao-reputation, credit-scoring) via a declared dependency + the `signerHasReputation` helper.
9
+ * - role attestations (ARBITER / SLASHER / ISSUER / BOARD_MEMBER) as FLAT per-role maps
10
+ * `{ <address>: true }`, read via the `signerHasRole` helper for judicial / issuance / governance
11
+ * authority gates.
12
+ *
13
+ * Writes are gated to the registry's pinned `authority` (immutable, set at create) and bound to the
14
+ * CHAIN-VERIFIED signer via `signerIsParty("state.authority")` — never `event.agent`. Reads happen
15
+ * cross-fiber: a consumer app declares this registry as a dependency and reads
16
+ * `machines.<registryDep>.state.reputations` / `.arbiters` / … bound to `proofs[].address`.
17
+ *
18
+ * Roles are flat per-role maps rather than a nested `roles[addr][ROLE]` map on purpose: metakit
19
+ * `get`/`has` on a NULL inner map throw (they are not null-total), so a nested read would error for
20
+ * any signer with no roles entry — the common case. Flat maps keep both the write (`set`/`unset`) and
21
+ * the read (`has`) total and fail-closed. New role types are added as new state maps + a cascade arm.
22
+ *
23
+ * See docs/design/app-hardening-identity-integration.md §3–§4 and src/schema/guards.ts
24
+ * (signerHasReputation / signerHasRole).
25
+ */
26
+ export const identityRegistryDef = defineFiberApp({
27
+ metadata: {
28
+ name: "IdentityRegistry",
29
+ app: "identity",
30
+ type: "registry",
31
+ version: "1.0.0",
32
+ description: "Ecosystem reputation + role-attestation registry; authority-gated writes, dependency reads.",
33
+ crossReferences: {
34
+ IdentityAgent: "per-agent reputation source",
35
+ Governance: "reputation-gated participation",
36
+ Contracts: "ARBITER-gated dispute settlement",
37
+ Corporate: "ISSUER / BOARD_MEMBER authority",
38
+ },
39
+ },
40
+ createSchema: {
41
+ required: ["authority"],
42
+ properties: {
43
+ authority: {
44
+ type: "address",
45
+ description: "DAG address authorized to write reputation + role attestations (immutable)",
46
+ immutable: true,
47
+ },
48
+ },
49
+ },
50
+ stateSchema: {
51
+ properties: {
52
+ authority: { type: "address", immutable: true },
53
+ // { <address>: int } — public reputation, read via signerHasReputation
54
+ reputations: { type: "object", computed: true },
55
+ // FLAT per-role attestation maps { <address>: true }, read via signerHasRole
56
+ arbiters: { type: "object", computed: true },
57
+ slashers: { type: "object", computed: true },
58
+ issuers: { type: "object", computed: true },
59
+ boardMembers: { type: "object", computed: true },
60
+ },
61
+ },
62
+ eventSchemas: {
63
+ set_reputation: {
64
+ description: "Authority sets an address's reputation to an absolute score",
65
+ required: ["subject", "score"],
66
+ properties: {
67
+ subject: { type: "address" },
68
+ score: { type: "integer" },
69
+ },
70
+ },
71
+ adjust_reputation: {
72
+ description: "Authority adjusts an address's reputation by a signed delta",
73
+ required: ["subject", "delta"],
74
+ properties: {
75
+ subject: { type: "address" },
76
+ delta: { type: "integer" },
77
+ },
78
+ },
79
+ grant_role: {
80
+ description: "Authority grants a role attestation (ARBITER|SLASHER|ISSUER|BOARD_MEMBER) to an address",
81
+ required: ["subject", "role"],
82
+ properties: {
83
+ subject: { type: "address" },
84
+ role: {
85
+ type: "string",
86
+ enum: ["ARBITER", "SLASHER", "ISSUER", "BOARD_MEMBER"],
87
+ },
88
+ },
89
+ },
90
+ revoke_role: {
91
+ description: "Authority revokes a role attestation from an address",
92
+ required: ["subject", "role"],
93
+ properties: {
94
+ subject: { type: "address" },
95
+ role: {
96
+ type: "string",
97
+ enum: ["ARBITER", "SLASHER", "ISSUER", "BOARD_MEMBER"],
98
+ },
99
+ },
100
+ },
101
+ },
102
+ states: {
103
+ ACTIVE: {
104
+ id: "ACTIVE",
105
+ isFinal: false,
106
+ metadata: {
107
+ label: "Active",
108
+ description: "Registry accepting authority writes",
109
+ category: "active",
110
+ },
111
+ },
112
+ },
113
+ initialState: "ACTIVE",
114
+ transitions: [
115
+ // ACTIVE → ACTIVE: set_reputation (absolute)
116
+ {
117
+ from: "ACTIVE",
118
+ to: "ACTIVE",
119
+ eventName: "set_reputation",
120
+ guard: signerIsParty("state.authority"),
121
+ effect: {
122
+ merge: [
123
+ { var: "state" },
124
+ {
125
+ reputations: {
126
+ set: [
127
+ { var: "state.reputations" },
128
+ { var: "event.subject" },
129
+ { var: "event.score" },
130
+ ],
131
+ },
132
+ },
133
+ ],
134
+ },
135
+ dependencies: [],
136
+ },
137
+ // ACTIVE → ACTIVE: adjust_reputation (signed delta; absent subject starts from 0)
138
+ {
139
+ from: "ACTIVE",
140
+ to: "ACTIVE",
141
+ eventName: "adjust_reputation",
142
+ guard: signerIsParty("state.authority"),
143
+ effect: {
144
+ merge: [
145
+ { var: "state" },
146
+ {
147
+ reputations: {
148
+ set: [
149
+ { var: "state.reputations" },
150
+ { var: "event.subject" },
151
+ {
152
+ "+": [
153
+ {
154
+ get: [
155
+ { var: "state.reputations" },
156
+ { var: "event.subject" },
157
+ ],
158
+ },
159
+ { var: "event.delta" },
160
+ ],
161
+ },
162
+ ],
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ dependencies: [],
168
+ },
169
+ // ACTIVE → ACTIVE: grant_role (cascade selects the flat per-role map)
170
+ {
171
+ from: "ACTIVE",
172
+ to: "ACTIVE",
173
+ eventName: "grant_role",
174
+ guard: signerIsParty("state.authority"),
175
+ effect: {
176
+ merge: [
177
+ { var: "state" },
178
+ {
179
+ arbiters: {
180
+ if: [
181
+ { "==": [{ var: "event.role" }, "ARBITER"] },
182
+ {
183
+ set: [
184
+ { var: "state.arbiters" },
185
+ { var: "event.subject" },
186
+ true,
187
+ ],
188
+ },
189
+ { var: "state.arbiters" },
190
+ ],
191
+ },
192
+ slashers: {
193
+ if: [
194
+ { "==": [{ var: "event.role" }, "SLASHER"] },
195
+ {
196
+ set: [
197
+ { var: "state.slashers" },
198
+ { var: "event.subject" },
199
+ true,
200
+ ],
201
+ },
202
+ { var: "state.slashers" },
203
+ ],
204
+ },
205
+ issuers: {
206
+ if: [
207
+ { "==": [{ var: "event.role" }, "ISSUER"] },
208
+ {
209
+ set: [
210
+ { var: "state.issuers" },
211
+ { var: "event.subject" },
212
+ true,
213
+ ],
214
+ },
215
+ { var: "state.issuers" },
216
+ ],
217
+ },
218
+ boardMembers: {
219
+ if: [
220
+ { "==": [{ var: "event.role" }, "BOARD_MEMBER"] },
221
+ {
222
+ set: [
223
+ { var: "state.boardMembers" },
224
+ { var: "event.subject" },
225
+ true,
226
+ ],
227
+ },
228
+ { var: "state.boardMembers" },
229
+ ],
230
+ },
231
+ },
232
+ ],
233
+ },
234
+ dependencies: [],
235
+ },
236
+ // ACTIVE → ACTIVE: revoke_role (cascade unsets from the flat per-role map)
237
+ {
238
+ from: "ACTIVE",
239
+ to: "ACTIVE",
240
+ eventName: "revoke_role",
241
+ guard: signerIsParty("state.authority"),
242
+ effect: {
243
+ merge: [
244
+ { var: "state" },
245
+ {
246
+ arbiters: {
247
+ if: [
248
+ { "==": [{ var: "event.role" }, "ARBITER"] },
249
+ { unset: [{ var: "state.arbiters" }, { var: "event.subject" }] },
250
+ { var: "state.arbiters" },
251
+ ],
252
+ },
253
+ slashers: {
254
+ if: [
255
+ { "==": [{ var: "event.role" }, "SLASHER"] },
256
+ { unset: [{ var: "state.slashers" }, { var: "event.subject" }] },
257
+ { var: "state.slashers" },
258
+ ],
259
+ },
260
+ issuers: {
261
+ if: [
262
+ { "==": [{ var: "event.role" }, "ISSUER"] },
263
+ { unset: [{ var: "state.issuers" }, { var: "event.subject" }] },
264
+ { var: "state.issuers" },
265
+ ],
266
+ },
267
+ boardMembers: {
268
+ if: [
269
+ { "==": [{ var: "event.role" }, "BOARD_MEMBER"] },
270
+ {
271
+ unset: [
272
+ { var: "state.boardMembers" },
273
+ { var: "event.subject" },
274
+ ],
275
+ },
276
+ { var: "state.boardMembers" },
277
+ ],
278
+ },
279
+ },
280
+ ],
281
+ },
282
+ dependencies: [],
283
+ },
284
+ ],
285
+ });
@@ -54,9 +54,33 @@ export const identityUniversalDef = defineFiberApp({
54
54
  },
55
55
  },
56
56
  states: {
57
- CREATED: { id: "CREATED", isFinal: false },
58
- ACTIVE: { id: "ACTIVE", isFinal: false },
59
- INACTIVE: { id: "INACTIVE", isFinal: true },
57
+ CREATED: {
58
+ id: "CREATED",
59
+ isFinal: false,
60
+ metadata: {
61
+ label: "Created",
62
+ description: "Identity registered but not yet activated",
63
+ category: "initial",
64
+ },
65
+ },
66
+ ACTIVE: {
67
+ id: "ACTIVE",
68
+ isFinal: false,
69
+ metadata: {
70
+ label: "Active",
71
+ description: "Identity is active and can be updated",
72
+ category: "active",
73
+ },
74
+ },
75
+ INACTIVE: {
76
+ id: "INACTIVE",
77
+ isFinal: true,
78
+ metadata: {
79
+ label: "Inactive",
80
+ description: "Identity deactivated by its owner (terminal)",
81
+ category: "terminal",
82
+ },
83
+ },
60
84
  },
61
85
  initialState: "CREATED",
62
86
  transitions: [
@@ -68,7 +92,7 @@ export const identityUniversalDef = defineFiberApp({
68
92
  effect: {
69
93
  merge: [
70
94
  { var: "state" },
71
- { status: "ACTIVE", activatedAt: { var: "$timestamp" } },
95
+ { status: "ACTIVE", activatedAt: { var: "$ordinal" } },
72
96
  ],
73
97
  },
74
98
  },
@@ -81,7 +105,7 @@ export const identityUniversalDef = defineFiberApp({
81
105
  merge: [
82
106
  { var: "state" },
83
107
  {
84
- updatedAt: { var: "$timestamp" },
108
+ updatedAt: { var: "$ordinal" },
85
109
  metadata: { var: "event.metadata" },
86
110
  },
87
111
  ],
@@ -95,7 +119,7 @@ export const identityUniversalDef = defineFiberApp({
95
119
  effect: {
96
120
  merge: [
97
121
  { var: "state" },
98
- { status: "INACTIVE", deactivatedAt: { var: "$timestamp" } },
122
+ { status: "INACTIVE", deactivatedAt: { var: "$ordinal" } },
99
123
  ],
100
124
  },
101
125
  },
@@ -5,3 +5,4 @@
5
5
  export { identityAgentDef } from './identity-agent.js';
6
6
  export { identityOracleDef } from './identity-oracle.js';
7
7
  export { identityUniversalDef } from './identity-universal.js';
8
+ export { identityRegistryDef } from './identity-registry.js';
@@ -32,3 +32,4 @@ export * as contracts from "./contracts/index.js";
32
32
  export * as markets from "./markets/index.js";
33
33
  export * as governance from "./governance/index.js";
34
34
  export * as corporate from "./corporate/index.js";
35
+ export * as lending from "./lending/index.js";