@ottochain/sdk 1.7.0-beta.2 → 2.1.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 (113) hide show
  1. package/dist/cjs/apps/contracts/index.js +1 -1
  2. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +272 -0
  3. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +284 -0
  4. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +93 -0
  5. package/dist/cjs/apps/contracts/state-machines/index.js +177 -1
  6. package/dist/cjs/apps/corporate/state-machines/corp-board.js +1022 -0
  7. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +671 -0
  8. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +998 -0
  9. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +1102 -0
  10. package/dist/cjs/apps/corporate/state-machines/index.js +20 -4440
  11. package/dist/cjs/apps/governance/index.js +7 -7
  12. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +467 -0
  13. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +458 -0
  14. package/dist/cjs/apps/governance/state-machines/dao-single.js +199 -0
  15. package/dist/cjs/apps/governance/state-machines/dao-token.js +503 -0
  16. package/dist/cjs/apps/governance/state-machines/governance-simple.js +482 -0
  17. package/dist/cjs/apps/governance/state-machines/governance-universal.js +138 -0
  18. package/dist/cjs/apps/governance/state-machines/index.js +16 -2934
  19. package/dist/cjs/apps/identity/constants.js +20 -20
  20. package/dist/cjs/apps/identity/index.js +13 -21
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +256 -0
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +321 -0
  23. package/dist/cjs/apps/identity/state-machines/identity-universal.js +106 -0
  24. package/dist/cjs/apps/identity/state-machines/index.js +15 -784
  25. package/dist/cjs/apps/markets/index.js +1 -1
  26. package/dist/cjs/apps/markets/state-machines/index.js +14 -2298
  27. package/dist/cjs/apps/markets/state-machines/market-auction.js +283 -0
  28. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +312 -0
  29. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +407 -0
  30. package/dist/cjs/apps/markets/state-machines/market-prediction.js +485 -0
  31. package/dist/cjs/apps/markets/state-machines/market-universal.js +129 -0
  32. package/dist/cjs/apps/oracles/index.js +36 -0
  33. package/dist/cjs/generated/index.js +14 -7
  34. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +197 -198
  35. package/dist/cjs/schema/fiber-app.js +55 -0
  36. package/dist/cjs/schema/index.js +20 -0
  37. package/dist/esm/apps/contracts/index.js +3 -3
  38. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +269 -0
  39. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +281 -0
  40. package/dist/esm/apps/contracts/state-machines/contract-universal.js +90 -0
  41. package/dist/esm/apps/contracts/state-machines/index.js +177 -1
  42. package/dist/esm/apps/corporate/index.js +3 -3
  43. package/dist/esm/apps/corporate/state-machines/corp-board.js +1019 -0
  44. package/dist/esm/apps/corporate/state-machines/corp-entity.js +668 -0
  45. package/dist/esm/apps/corporate/state-machines/corp-securities.js +995 -0
  46. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +1099 -0
  47. package/dist/esm/apps/corporate/state-machines/index.js +15 -4439
  48. package/dist/esm/apps/governance/index.js +9 -9
  49. package/dist/esm/apps/governance/state-machines/dao-multisig.js +464 -0
  50. package/dist/esm/apps/governance/state-machines/dao-reputation.js +455 -0
  51. package/dist/esm/apps/governance/state-machines/dao-single.js +196 -0
  52. package/dist/esm/apps/governance/state-machines/dao-token.js +500 -0
  53. package/dist/esm/apps/governance/state-machines/governance-simple.js +479 -0
  54. package/dist/esm/apps/governance/state-machines/governance-universal.js +135 -0
  55. package/dist/esm/apps/governance/state-machines/index.js +9 -2933
  56. package/dist/esm/apps/identity/constants.js +21 -21
  57. package/dist/esm/apps/identity/index.js +13 -22
  58. package/dist/esm/apps/identity/state-machines/identity-agent.js +253 -0
  59. package/dist/esm/apps/identity/state-machines/identity-oracle.js +318 -0
  60. package/dist/esm/apps/identity/state-machines/identity-universal.js +103 -0
  61. package/dist/esm/apps/identity/state-machines/index.js +11 -783
  62. package/dist/esm/apps/index.js +5 -5
  63. package/dist/esm/apps/markets/index.js +3 -3
  64. package/dist/esm/apps/markets/state-machines/index.js +8 -2297
  65. package/dist/esm/apps/markets/state-machines/market-auction.js +280 -0
  66. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +309 -0
  67. package/dist/esm/apps/markets/state-machines/market-group-buy.js +404 -0
  68. package/dist/esm/apps/markets/state-machines/market-prediction.js +482 -0
  69. package/dist/esm/apps/markets/state-machines/market-universal.js +126 -0
  70. package/dist/esm/apps/oracles/index.js +21 -0
  71. package/dist/esm/generated/index.js +8 -3
  72. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +196 -197
  73. package/dist/esm/schema/fiber-app.js +47 -0
  74. package/dist/esm/schema/index.js +4 -0
  75. package/dist/types/apps/contracts/index.d.ts +151 -2
  76. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +462 -0
  77. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +511 -0
  78. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +147 -0
  79. package/dist/types/apps/contracts/state-machines/index.d.ts +149 -0
  80. package/dist/types/apps/corporate/index.d.ts +5263 -3825
  81. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +1479 -0
  82. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +970 -0
  83. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +1381 -0
  84. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +1631 -0
  85. package/dist/types/apps/corporate/state-machines/index.d.ts +5245 -3802
  86. package/dist/types/apps/governance/index.d.ts +875 -37
  87. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +644 -0
  88. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +610 -0
  89. package/dist/types/apps/governance/state-machines/dao-single.d.ts +276 -0
  90. package/dist/types/apps/governance/state-machines/dao-token.d.ts +601 -0
  91. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +652 -0
  92. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +181 -0
  93. package/dist/types/apps/governance/state-machines/index.d.ts +9 -2136
  94. package/dist/types/apps/identity/constants.d.ts +4 -7
  95. package/dist/types/apps/identity/index.d.ts +1082 -592
  96. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +401 -0
  97. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +550 -0
  98. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +151 -0
  99. package/dist/types/apps/identity/state-machines/index.d.ts +1069 -567
  100. package/dist/types/apps/index.d.ts +5 -5
  101. package/dist/types/apps/markets/index.d.ts +535 -7
  102. package/dist/types/apps/markets/state-machines/index.d.ts +8 -1678
  103. package/dist/types/apps/markets/state-machines/market-auction.d.ts +392 -0
  104. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +443 -0
  105. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +539 -0
  106. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +651 -0
  107. package/dist/types/apps/markets/state-machines/market-universal.d.ts +191 -0
  108. package/dist/types/apps/oracles/index.d.ts +18 -0
  109. package/dist/types/generated/index.d.ts +3 -1
  110. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +43 -64
  111. package/dist/types/schema/fiber-app.d.ts +139 -0
  112. package/dist/types/schema/index.d.ts +4 -0
  113. package/package.json +1 -1
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.daoReputationDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Reputation-based governance. Minimum reputation required for participation.
7
+ */
8
+ exports.daoReputationDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "DAOReputation",
11
+ app: "governance",
12
+ type: "daoReputation",
13
+ version: "1.0.0",
14
+ description: "Reputation-based governance. Minimum reputation required for participation.",
15
+ category: "governance/dao",
16
+ crossReferences: {
17
+ Identity: "member verification",
18
+ Reputation: "threshold checks",
19
+ Contract: "action execution",
20
+ },
21
+ },
22
+ createSchema: {
23
+ required: [
24
+ "memberThreshold",
25
+ "voteThreshold",
26
+ "proposeThreshold",
27
+ "quorum",
28
+ "votingPeriodMs",
29
+ ],
30
+ properties: {
31
+ memberThreshold: {
32
+ type: "number",
33
+ description: "Min reputation to join as a member",
34
+ },
35
+ voteThreshold: { type: "number", description: "Min reputation to vote" },
36
+ proposeThreshold: {
37
+ type: "number",
38
+ description: "Min reputation to submit a proposal",
39
+ },
40
+ quorum: {
41
+ type: "number",
42
+ description: "Min total votes (count) to execute",
43
+ },
44
+ votingPeriodMs: {
45
+ type: "number",
46
+ description: "Voting window in milliseconds",
47
+ },
48
+ },
49
+ },
50
+ stateSchema: {
51
+ properties: {
52
+ members: { type: "array", computed: true },
53
+ memberJoinedAt: { type: "object", computed: true },
54
+ memberThreshold: { type: "number" },
55
+ voteThreshold: { type: "number" },
56
+ proposeThreshold: { type: "number" },
57
+ quorum: { type: "number" },
58
+ votingPeriodMs: { type: "number" },
59
+ proposal: { type: "object" },
60
+ votes: { type: "object", computed: true },
61
+ history: { type: "array", computed: true },
62
+ },
63
+ },
64
+ eventSchemas: {
65
+ propose: {
66
+ description: "Submit a proposal (requires >= proposeThreshold reputation)",
67
+ required: [
68
+ "proposalId",
69
+ "title",
70
+ "description",
71
+ "actionType",
72
+ "payload",
73
+ "agentReputation",
74
+ ],
75
+ properties: {
76
+ agent: { type: "address" },
77
+ agentReputation: { type: "number" },
78
+ proposalId: { type: "string" },
79
+ title: { type: "string" },
80
+ description: { type: "string" },
81
+ actionType: { type: "string" },
82
+ payload: { type: "object" },
83
+ },
84
+ },
85
+ vote: {
86
+ description: "Cast a vote (requires >= voteThreshold, no double-vote, within window)",
87
+ required: ["vote", "agentReputation"],
88
+ properties: {
89
+ agent: { type: "address" },
90
+ agentReputation: { type: "number" },
91
+ vote: { type: "string", description: '"for" | "against" | "abstain"' },
92
+ },
93
+ },
94
+ execute: {
95
+ description: "Execute a passing proposal after voting ends",
96
+ properties: {},
97
+ },
98
+ reject: {
99
+ description: "Formally reject a failed proposal",
100
+ properties: {},
101
+ },
102
+ join: {
103
+ description: "Join the DAO (requires >= memberThreshold reputation)",
104
+ required: ["agentReputation"],
105
+ properties: {
106
+ agent: { type: "address" },
107
+ agentReputation: { type: "number" },
108
+ },
109
+ },
110
+ leave: {
111
+ description: "Leave the DAO voluntarily",
112
+ properties: {
113
+ agent: { type: "address" },
114
+ },
115
+ },
116
+ propose_threshold_change: {
117
+ description: "Propose changing reputation thresholds",
118
+ required: ["proposalId", "agentReputation"],
119
+ properties: {
120
+ agent: { type: "address" },
121
+ agentReputation: { type: "number" },
122
+ proposalId: { type: "string" },
123
+ memberThreshold: { type: "number" },
124
+ voteThreshold: { type: "number" },
125
+ proposeThreshold: { type: "number" },
126
+ },
127
+ },
128
+ },
129
+ states: {
130
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
131
+ VOTING: { id: "VOTING", isFinal: false, metadata: null },
132
+ DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
133
+ },
134
+ initialState: "ACTIVE",
135
+ transitions: [
136
+ // ACTIVE → VOTING: propose (reputation check)
137
+ {
138
+ from: "ACTIVE",
139
+ to: "VOTING",
140
+ eventName: "propose",
141
+ guard: {
142
+ ">=": [
143
+ { var: "event.agentReputation" },
144
+ { var: "state.proposeThreshold" },
145
+ ],
146
+ },
147
+ effect: {
148
+ merge: [
149
+ { var: "state" },
150
+ {
151
+ proposal: {
152
+ id: { var: "event.proposalId" },
153
+ title: { var: "event.title" },
154
+ description: { var: "event.description" },
155
+ actionType: { var: "event.actionType" },
156
+ payload: { var: "event.payload" },
157
+ proposer: { var: "event.agent" },
158
+ proposedAt: { var: "$timestamp" },
159
+ deadline: {
160
+ "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
161
+ },
162
+ },
163
+ votes: { for: [], against: [], abstain: [] },
164
+ },
165
+ ],
166
+ },
167
+ dependencies: [],
168
+ },
169
+ // VOTING → VOTING: vote (reputation check, no double-vote, within window)
170
+ {
171
+ from: "VOTING",
172
+ to: "VOTING",
173
+ eventName: "vote",
174
+ guard: {
175
+ and: [
176
+ {
177
+ ">=": [
178
+ { var: "event.agentReputation" },
179
+ { var: "state.voteThreshold" },
180
+ ],
181
+ },
182
+ {
183
+ "!": [{ in: [{ var: "event.agent" }, { var: "state.votes.for" }] }],
184
+ },
185
+ {
186
+ "!": [
187
+ { in: [{ var: "event.agent" }, { var: "state.votes.against" }] },
188
+ ],
189
+ },
190
+ {
191
+ "!": [
192
+ { in: [{ var: "event.agent" }, { var: "state.votes.abstain" }] },
193
+ ],
194
+ },
195
+ { "<=": [{ var: "$timestamp" }, { var: "state.proposal.deadline" }] },
196
+ ],
197
+ },
198
+ effect: {
199
+ merge: [
200
+ { var: "state" },
201
+ {
202
+ votes: {
203
+ if: [
204
+ { "===": [{ var: "event.vote" }, "for"] },
205
+ {
206
+ merge: [
207
+ { var: "state.votes" },
208
+ {
209
+ for: {
210
+ cat: [
211
+ { var: "state.votes.for" },
212
+ [{ var: "event.agent" }],
213
+ ],
214
+ },
215
+ },
216
+ ],
217
+ },
218
+ { "===": [{ var: "event.vote" }, "against"] },
219
+ {
220
+ merge: [
221
+ { var: "state.votes" },
222
+ {
223
+ against: {
224
+ cat: [
225
+ { var: "state.votes.against" },
226
+ [{ var: "event.agent" }],
227
+ ],
228
+ },
229
+ },
230
+ ],
231
+ },
232
+ {
233
+ merge: [
234
+ { var: "state.votes" },
235
+ {
236
+ abstain: {
237
+ cat: [
238
+ { var: "state.votes.abstain" },
239
+ [{ var: "event.agent" }],
240
+ ],
241
+ },
242
+ },
243
+ ],
244
+ },
245
+ ],
246
+ },
247
+ },
248
+ ],
249
+ },
250
+ dependencies: [],
251
+ },
252
+ // VOTING → ACTIVE: execute (voting ended, for > against, quorum met)
253
+ {
254
+ from: "VOTING",
255
+ to: "ACTIVE",
256
+ eventName: "execute",
257
+ guard: {
258
+ and: [
259
+ { ">": [{ var: "$timestamp" }, { var: "state.proposal.deadline" }] },
260
+ {
261
+ ">": [
262
+ { size: { var: "state.votes.for" } },
263
+ { size: { var: "state.votes.against" } },
264
+ ],
265
+ },
266
+ {
267
+ ">=": [
268
+ {
269
+ "+": [
270
+ { size: { var: "state.votes.for" } },
271
+ { size: { var: "state.votes.against" } },
272
+ ],
273
+ },
274
+ { var: "state.quorum" },
275
+ ],
276
+ },
277
+ ],
278
+ },
279
+ effect: {
280
+ merge: [
281
+ { var: "state" },
282
+ {
283
+ history: {
284
+ cat: [
285
+ { var: "state.history" },
286
+ [
287
+ {
288
+ type: "executed",
289
+ proposal: { var: "state.proposal" },
290
+ votes: { var: "state.votes" },
291
+ at: { var: "$timestamp" },
292
+ },
293
+ ],
294
+ ],
295
+ },
296
+ proposal: null,
297
+ votes: null,
298
+ },
299
+ ],
300
+ },
301
+ emits: [
302
+ {
303
+ event: "proposal_executed",
304
+ to: "Reputation",
305
+ payload: { action: "increase", agents: { var: "state.votes.for" } },
306
+ },
307
+ ],
308
+ dependencies: [],
309
+ },
310
+ // VOTING → ACTIVE: reject (voting ended, for <= against or quorum not met)
311
+ {
312
+ from: "VOTING",
313
+ to: "ACTIVE",
314
+ eventName: "reject",
315
+ guard: {
316
+ and: [
317
+ { ">": [{ var: "$timestamp" }, { var: "state.proposal.deadline" }] },
318
+ {
319
+ or: [
320
+ {
321
+ "<=": [
322
+ { size: { var: "state.votes.for" } },
323
+ { size: { var: "state.votes.against" } },
324
+ ],
325
+ },
326
+ {
327
+ "<": [
328
+ {
329
+ "+": [
330
+ { size: { var: "state.votes.for" } },
331
+ { size: { var: "state.votes.against" } },
332
+ ],
333
+ },
334
+ { var: "state.quorum" },
335
+ ],
336
+ },
337
+ ],
338
+ },
339
+ ],
340
+ },
341
+ effect: {
342
+ merge: [
343
+ { var: "state" },
344
+ {
345
+ history: {
346
+ cat: [
347
+ { var: "state.history" },
348
+ [
349
+ {
350
+ type: "rejected",
351
+ proposal: { var: "state.proposal" },
352
+ votes: { var: "state.votes" },
353
+ at: { var: "$timestamp" },
354
+ },
355
+ ],
356
+ ],
357
+ },
358
+ proposal: null,
359
+ votes: null,
360
+ },
361
+ ],
362
+ },
363
+ dependencies: [],
364
+ },
365
+ // ACTIVE → ACTIVE: join (reputation check, not already member)
366
+ {
367
+ from: "ACTIVE",
368
+ to: "ACTIVE",
369
+ eventName: "join",
370
+ guard: {
371
+ and: [
372
+ {
373
+ ">=": [
374
+ { var: "event.agentReputation" },
375
+ { var: "state.memberThreshold" },
376
+ ],
377
+ },
378
+ { "!": [{ in: [{ var: "event.agent" }, { var: "state.members" }] }] },
379
+ ],
380
+ },
381
+ effect: {
382
+ merge: [
383
+ { var: "state" },
384
+ {
385
+ members: {
386
+ cat: [{ var: "state.members" }, [{ var: "event.agent" }]],
387
+ },
388
+ memberJoinedAt: {
389
+ setKey: [
390
+ { var: "state.memberJoinedAt" },
391
+ { var: "event.agent" },
392
+ { var: "$timestamp" },
393
+ ],
394
+ },
395
+ },
396
+ ],
397
+ },
398
+ dependencies: [],
399
+ },
400
+ // ACTIVE → ACTIVE: leave (member only)
401
+ {
402
+ from: "ACTIVE",
403
+ to: "ACTIVE",
404
+ eventName: "leave",
405
+ guard: { in: [{ var: "event.agent" }, { var: "state.members" }] },
406
+ effect: {
407
+ merge: [
408
+ { var: "state" },
409
+ {
410
+ members: {
411
+ filter: [
412
+ { var: "state.members" },
413
+ { "!==": [{ var: "" }, { var: "event.agent" }] },
414
+ ],
415
+ },
416
+ },
417
+ ],
418
+ },
419
+ dependencies: [],
420
+ },
421
+ // ACTIVE → VOTING: propose_threshold_change
422
+ {
423
+ from: "ACTIVE",
424
+ to: "VOTING",
425
+ eventName: "propose_threshold_change",
426
+ guard: {
427
+ ">=": [
428
+ { var: "event.agentReputation" },
429
+ { var: "state.proposeThreshold" },
430
+ ],
431
+ },
432
+ effect: {
433
+ merge: [
434
+ { var: "state" },
435
+ {
436
+ proposal: {
437
+ id: { var: "event.proposalId" },
438
+ title: "Threshold Change",
439
+ actionType: "threshold_change",
440
+ payload: {
441
+ memberThreshold: { var: "event.memberThreshold" },
442
+ voteThreshold: { var: "event.voteThreshold" },
443
+ proposeThreshold: { var: "event.proposeThreshold" },
444
+ },
445
+ proposer: { var: "event.agent" },
446
+ proposedAt: { var: "$timestamp" },
447
+ deadline: {
448
+ "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
449
+ },
450
+ },
451
+ votes: { for: [], against: [], abstain: [] },
452
+ },
453
+ ],
454
+ },
455
+ dependencies: [],
456
+ },
457
+ ],
458
+ });
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.daoSingleDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Single owner controls all actions. Simplest governance model.
7
+ */
8
+ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "SingleOwnerDAO",
11
+ app: "governance",
12
+ type: "daoSingle",
13
+ version: "1.0.0",
14
+ description: "Single owner controls all actions. Simplest governance model.",
15
+ category: "governance/dao",
16
+ crossReferences: {
17
+ Identity: "owner registration",
18
+ Contract: "action execution targets",
19
+ Treasury: "fund management",
20
+ },
21
+ },
22
+ createSchema: {
23
+ required: ["owner"],
24
+ properties: {
25
+ owner: {
26
+ type: "address",
27
+ description: "DAG address of the initial owner",
28
+ immutable: false,
29
+ },
30
+ },
31
+ },
32
+ stateSchema: {
33
+ properties: {
34
+ owner: { type: "address" },
35
+ pendingOwner: { type: "address" },
36
+ transferInitiatedAt: { type: "timestamp" },
37
+ ownershipHistory: { type: "array", computed: true },
38
+ actions: { type: "array", computed: true },
39
+ status: { type: "string", computed: true },
40
+ },
41
+ },
42
+ eventSchemas: {
43
+ execute: {
44
+ description: "Execute an action (owner only)",
45
+ required: ["actionId", "actionType", "payload"],
46
+ properties: {
47
+ agent: { type: "address" },
48
+ actionId: { type: "string" },
49
+ actionType: { type: "string" },
50
+ payload: { type: "object" },
51
+ },
52
+ },
53
+ transfer_ownership: {
54
+ description: "Initiate ownership transfer (owner only)",
55
+ required: ["newOwner"],
56
+ properties: {
57
+ agent: { type: "address" },
58
+ newOwner: { type: "address" },
59
+ },
60
+ },
61
+ accept_ownership: {
62
+ description: "Accept ownership (pending owner only)",
63
+ properties: {
64
+ agent: { type: "address" },
65
+ },
66
+ },
67
+ cancel_transfer: {
68
+ description: "Cancel pending ownership transfer (owner only)",
69
+ properties: {
70
+ agent: { type: "address" },
71
+ },
72
+ },
73
+ dissolve: {
74
+ description: "Dissolve the DAO (owner only)",
75
+ properties: {
76
+ agent: { type: "address" },
77
+ },
78
+ },
79
+ },
80
+ states: {
81
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
82
+ TRANSFERRING: { id: "TRANSFERRING", isFinal: false, metadata: null },
83
+ DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
84
+ },
85
+ initialState: "ACTIVE",
86
+ transitions: [
87
+ // ACTIVE → ACTIVE: execute (owner only)
88
+ {
89
+ from: "ACTIVE",
90
+ to: "ACTIVE",
91
+ eventName: "execute",
92
+ guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
93
+ effect: {
94
+ merge: [
95
+ { var: "state" },
96
+ {
97
+ actions: {
98
+ cat: [
99
+ { var: "state.actions" },
100
+ [
101
+ {
102
+ id: { var: "event.actionId" },
103
+ type: { var: "event.actionType" },
104
+ payload: { var: "event.payload" },
105
+ executedAt: { var: "$timestamp" },
106
+ },
107
+ ],
108
+ ],
109
+ },
110
+ },
111
+ ],
112
+ },
113
+ emits: [{ event: "action_executed", to: "external" }],
114
+ dependencies: [],
115
+ },
116
+ // ACTIVE → TRANSFERRING: transfer_ownership (owner only)
117
+ {
118
+ from: "ACTIVE",
119
+ to: "TRANSFERRING",
120
+ eventName: "transfer_ownership",
121
+ guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
122
+ effect: {
123
+ merge: [
124
+ { var: "state" },
125
+ {
126
+ pendingOwner: { var: "event.newOwner" },
127
+ transferInitiatedAt: { var: "$timestamp" },
128
+ },
129
+ ],
130
+ },
131
+ dependencies: [],
132
+ },
133
+ // TRANSFERRING → ACTIVE: accept_ownership (pending owner only)
134
+ {
135
+ from: "TRANSFERRING",
136
+ to: "ACTIVE",
137
+ eventName: "accept_ownership",
138
+ guard: { "===": [{ var: "event.agent" }, { var: "state.pendingOwner" }] },
139
+ effect: {
140
+ merge: [
141
+ { var: "state" },
142
+ {
143
+ owner: { var: "state.pendingOwner" },
144
+ pendingOwner: null,
145
+ transferInitiatedAt: null,
146
+ ownershipHistory: {
147
+ cat: [
148
+ { var: "state.ownershipHistory" },
149
+ [
150
+ {
151
+ from: { var: "state.owner" },
152
+ to: { var: "state.pendingOwner" },
153
+ at: { var: "$timestamp" },
154
+ },
155
+ ],
156
+ ],
157
+ },
158
+ },
159
+ ],
160
+ },
161
+ emits: [{ event: "ownership_transferred", to: "Identity" }],
162
+ dependencies: [],
163
+ },
164
+ // TRANSFERRING → ACTIVE: cancel_transfer (owner only)
165
+ {
166
+ from: "TRANSFERRING",
167
+ to: "ACTIVE",
168
+ eventName: "cancel_transfer",
169
+ guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
170
+ effect: {
171
+ merge: [
172
+ { var: "state" },
173
+ {
174
+ pendingOwner: null,
175
+ transferInitiatedAt: null,
176
+ },
177
+ ],
178
+ },
179
+ dependencies: [],
180
+ },
181
+ // ACTIVE → DISSOLVED: dissolve (owner only)
182
+ {
183
+ from: "ACTIVE",
184
+ to: "DISSOLVED",
185
+ eventName: "dissolve",
186
+ guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
187
+ effect: {
188
+ merge: [
189
+ { var: "state" },
190
+ {
191
+ dissolvedAt: { var: "$timestamp" },
192
+ status: "DISSOLVED",
193
+ },
194
+ ],
195
+ },
196
+ dependencies: [],
197
+ },
198
+ ],
199
+ });