@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,55 @@
1
+ "use strict";
2
+ /**
3
+ * Fiber App Definition Schema
4
+ *
5
+ * TypeScript-first definitions for fiber apps. This is the source of truth —
6
+ * no JSON, no code generation. Import types directly.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.toJSON = exports.isFinalState = exports.getEventsFrom = exports.getTransitionsFrom = exports.defineFiberApp = void 0;
10
+ // =============================================================================
11
+ // Helper: defineFiberApp
12
+ // =============================================================================
13
+ /**
14
+ * Define a fiber app with full type inference.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const agentDef = defineFiberApp({
19
+ * metadata: { name: 'Agent', app: 'identity', type: 'agent', version: '1.0.0' },
20
+ * states: {
21
+ * REGISTERED: { id: 'REGISTERED', isFinal: false },
22
+ * ACTIVE: { id: 'ACTIVE', isFinal: false },
23
+ * },
24
+ * initialState: 'REGISTERED',
25
+ * transitions: [
26
+ * { from: 'REGISTERED', to: 'ACTIVE', eventName: 'activate' },
27
+ * ],
28
+ * });
29
+ * ```
30
+ */
31
+ function defineFiberApp(definition) {
32
+ // Runtime validation could go here
33
+ return definition;
34
+ }
35
+ exports.defineFiberApp = defineFiberApp;
36
+ /** Get valid transitions from a given state */
37
+ function getTransitionsFrom(def, state) {
38
+ return def.transitions.filter(t => t.from === state);
39
+ }
40
+ exports.getTransitionsFrom = getTransitionsFrom;
41
+ /** Get valid event names from a given state */
42
+ function getEventsFrom(def, state) {
43
+ return getTransitionsFrom(def, state).map(t => t.eventName);
44
+ }
45
+ exports.getEventsFrom = getEventsFrom;
46
+ /** Check if a state is final */
47
+ function isFinalState(def, state) {
48
+ return def.states[state]?.isFinal ?? false;
49
+ }
50
+ exports.isFinalState = isFinalState;
51
+ /** Convert definition to plain JSON (for serialization) */
52
+ function toJSON(def) {
53
+ return JSON.parse(JSON.stringify(def));
54
+ }
55
+ exports.toJSON = toJSON;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * Fiber App Schema
19
+ */
20
+ __exportStar(require("./fiber-app.js"), exports);
@@ -19,11 +19,11 @@
19
19
  * @packageDocumentation
20
20
  */
21
21
  // Re-export generated protobuf types (source of truth)
22
- export { ContractState, Contract, ProposeContractRequest, AcceptContractRequest, CompleteContractRequest, RejectContractRequest, DisputeContractRequest, ContractDefinition, contractStateFromJSON, contractStateToJSON, } from '../../generated/ottochain/apps/contracts/v1/contract.js';
22
+ export { ContractState, Contract, ProposeContractRequest, AcceptContractRequest, CompleteContractRequest, RejectContractRequest, DisputeContractRequest, ContractDefinition, contractStateFromJSON, contractStateToJSON, } from "../../generated/ottochain/apps/contracts/v1/contract.js";
23
23
  // ---------------------------------------------------------------------------
24
24
  // State Machine Definitions (generated from JSON at build time)
25
25
  // ---------------------------------------------------------------------------
26
- import { contractUniversalDef, contractAgreementDef, contractEscrowDef, } from './state-machines/index.js';
26
+ import { contractUniversalDef, contractAgreementDef, contractEscrowDef, } from "./state-machines/index.js";
27
27
  export { contractUniversalDef, contractAgreementDef, contractEscrowDef };
28
28
  /** All contract state machine definitions */
29
29
  export const CONTRACTS_DEFINITIONS = {
@@ -35,7 +35,7 @@ export const CONTRACTS_DEFINITIONS = {
35
35
  * Get a contract state machine definition by type.
36
36
  * @param type - 'universal' | 'agreement' | 'escrow' (default: 'agreement')
37
37
  */
38
- export function getContractDefinition(type = 'agreement') {
38
+ export function getContractDefinition(type = "agreement") {
39
39
  return CONTRACTS_DEFINITIONS[type];
40
40
  }
41
41
  /** @deprecated Use getContractDefinition('escrow') */
@@ -0,0 +1,269 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ /**
3
+ * Two-party agreement with mutual completion attestation and dispute resolution.
4
+ */
5
+ export const contractAgreementDef = defineFiberApp({
6
+ metadata: {
7
+ name: "ContractAgreement",
8
+ app: "contracts",
9
+ type: "agreement",
10
+ version: "1.0.0",
11
+ description: "Two-party agreement with mutual completion attestation and dispute resolution",
12
+ crossReferences: {
13
+ proposerIdentityId: {
14
+ machine: "identity-agent",
15
+ field: "proposer",
16
+ description: "Links to proposer's AgentIdentity fiber",
17
+ },
18
+ counterpartyIdentityId: {
19
+ machine: "identity-agent",
20
+ field: "counterparty",
21
+ description: "Links to counterparty's AgentIdentity fiber",
22
+ },
23
+ escrowId: {
24
+ machine: "contract-escrow",
25
+ field: "escrowId",
26
+ description: "Links to Escrow if payment is escrowed",
27
+ },
28
+ arbitrationPoolId: {
29
+ machine: "arbitration-pool",
30
+ field: "arbitrationPoolId",
31
+ description: "Links to ArbitrationPool for dispute resolution",
32
+ },
33
+ },
34
+ },
35
+ createSchema: {
36
+ required: ["proposer", "counterparty"],
37
+ properties: {
38
+ proposer: {
39
+ type: "address",
40
+ description: "DAG address of the proposer",
41
+ immutable: true,
42
+ },
43
+ counterparty: {
44
+ type: "address",
45
+ description: "DAG address of the counterparty",
46
+ immutable: true,
47
+ },
48
+ },
49
+ },
50
+ stateSchema: {
51
+ properties: {
52
+ status: { type: "string" },
53
+ proposer: { type: "address" },
54
+ counterparty: { type: "address" },
55
+ completions: { type: "array" },
56
+ acceptedAt: { type: "integer", nullable: true },
57
+ rejectedAt: { type: "integer", nullable: true },
58
+ rejectReason: { type: "string", nullable: true },
59
+ cancelledAt: { type: "integer", nullable: true },
60
+ completedAt: { type: "integer", nullable: true },
61
+ disputedAt: { type: "integer", nullable: true },
62
+ disputeReason: { type: "string", nullable: true },
63
+ disputedBy: { type: "address", nullable: true },
64
+ resolvedAt: { type: "integer", nullable: true },
65
+ resolution: { type: "string", nullable: true },
66
+ rulingId: { type: "string", nullable: true },
67
+ },
68
+ },
69
+ eventSchemas: {
70
+ accept: {},
71
+ reject: { properties: { reason: { type: "string" } } },
72
+ cancel: {},
73
+ submit_completion: { properties: { proof: { type: "string" } } },
74
+ finalize: {},
75
+ dispute: { properties: { reason: { type: "string" } } },
76
+ resolve: {
77
+ properties: {
78
+ judicialRuling: { type: "boolean", nullable: true },
79
+ proposerApproves: { type: "boolean", nullable: true },
80
+ counterpartyApproves: { type: "boolean", nullable: true },
81
+ resolution: { type: "string" },
82
+ rulingId: { type: "string", nullable: true },
83
+ },
84
+ },
85
+ },
86
+ states: {
87
+ PROPOSED: { id: "PROPOSED", isFinal: false, metadata: null },
88
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
89
+ COMPLETED: { id: "COMPLETED", isFinal: true, metadata: null },
90
+ DISPUTED: { id: "DISPUTED", isFinal: false, metadata: null },
91
+ REJECTED: { id: "REJECTED", isFinal: true, metadata: null },
92
+ CANCELLED: { id: "CANCELLED", isFinal: true, metadata: null },
93
+ },
94
+ initialState: "PROPOSED",
95
+ transitions: [
96
+ {
97
+ from: "PROPOSED",
98
+ to: "ACTIVE",
99
+ eventName: "accept",
100
+ guard: { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
101
+ effect: {
102
+ merge: [
103
+ { var: "state" },
104
+ { status: "ACTIVE", acceptedAt: { var: "$timestamp" } },
105
+ ],
106
+ },
107
+ dependencies: [],
108
+ },
109
+ {
110
+ from: "PROPOSED",
111
+ to: "REJECTED",
112
+ eventName: "reject",
113
+ guard: { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
114
+ effect: {
115
+ merge: [
116
+ { var: "state" },
117
+ {
118
+ status: "REJECTED",
119
+ rejectedAt: { var: "$timestamp" },
120
+ rejectReason: { var: "event.reason" },
121
+ },
122
+ ],
123
+ },
124
+ dependencies: [],
125
+ },
126
+ {
127
+ from: "PROPOSED",
128
+ to: "CANCELLED",
129
+ eventName: "cancel",
130
+ guard: { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
131
+ effect: {
132
+ merge: [
133
+ { var: "state" },
134
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
135
+ ],
136
+ },
137
+ dependencies: [],
138
+ },
139
+ {
140
+ from: "ACTIVE",
141
+ to: "ACTIVE",
142
+ eventName: "submit_completion",
143
+ guard: {
144
+ and: [
145
+ {
146
+ or: [
147
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
148
+ {
149
+ "===": [{ var: "event.agent" }, { var: "state.counterparty" }],
150
+ },
151
+ ],
152
+ },
153
+ {
154
+ "!": [
155
+ {
156
+ in: [
157
+ { var: "event.agent" },
158
+ { map: [{ var: "state.completions" }, { var: "agent" }] },
159
+ ],
160
+ },
161
+ ],
162
+ },
163
+ ],
164
+ },
165
+ effect: {
166
+ merge: [
167
+ { var: "state" },
168
+ {
169
+ completions: {
170
+ cat: [
171
+ { var: "state.completions" },
172
+ [
173
+ {
174
+ agent: { var: "event.agent" },
175
+ proof: { var: "event.proof" },
176
+ submittedAt: { var: "$timestamp" },
177
+ },
178
+ ],
179
+ ],
180
+ },
181
+ },
182
+ ],
183
+ },
184
+ dependencies: [],
185
+ },
186
+ {
187
+ from: "ACTIVE",
188
+ to: "COMPLETED",
189
+ eventName: "finalize",
190
+ guard: { ">=": [{ size: { var: "state.completions" } }, 2] },
191
+ effect: {
192
+ merge: [
193
+ { var: "state" },
194
+ { status: "COMPLETED", completedAt: { var: "$timestamp" } },
195
+ ],
196
+ },
197
+ dependencies: [],
198
+ },
199
+ {
200
+ from: "ACTIVE",
201
+ to: "DISPUTED",
202
+ eventName: "dispute",
203
+ guard: {
204
+ or: [
205
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
206
+ { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
207
+ ],
208
+ },
209
+ effect: {
210
+ merge: [
211
+ { var: "state" },
212
+ {
213
+ status: "DISPUTED",
214
+ disputedAt: { var: "$timestamp" },
215
+ disputeReason: { var: "event.reason" },
216
+ disputedBy: { var: "event.agent" },
217
+ },
218
+ ],
219
+ },
220
+ dependencies: [],
221
+ },
222
+ {
223
+ from: "DISPUTED",
224
+ to: "COMPLETED",
225
+ eventName: "resolve",
226
+ guard: {
227
+ or: [
228
+ { var: "event.judicialRuling" },
229
+ {
230
+ and: [
231
+ { "===": [{ var: "event.proposerApproves" }, true] },
232
+ { "===": [{ var: "event.counterpartyApproves" }, true] },
233
+ ],
234
+ },
235
+ ],
236
+ },
237
+ effect: {
238
+ merge: [
239
+ { var: "state" },
240
+ {
241
+ status: "COMPLETED",
242
+ resolvedAt: { var: "$timestamp" },
243
+ resolution: { var: "event.resolution" },
244
+ rulingId: { var: "event.rulingId" },
245
+ },
246
+ ],
247
+ },
248
+ dependencies: [],
249
+ },
250
+ {
251
+ from: "ACTIVE",
252
+ to: "CANCELLED",
253
+ eventName: "cancel",
254
+ guard: {
255
+ or: [
256
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
257
+ { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
258
+ ],
259
+ },
260
+ effect: {
261
+ merge: [
262
+ { var: "state" },
263
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
264
+ ],
265
+ },
266
+ dependencies: [],
267
+ },
268
+ ],
269
+ });
@@ -0,0 +1,281 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ /**
3
+ * Asset custody with conditional release, dispute resolution, and split payments.
4
+ */
5
+ export const contractEscrowDef = defineFiberApp({
6
+ metadata: {
7
+ name: "ContractEscrow",
8
+ app: "contracts",
9
+ type: "escrow",
10
+ version: "1.0.0",
11
+ description: "Asset custody with conditional release, dispute resolution, and split payments",
12
+ crossReferences: {
13
+ contractId: {
14
+ machine: "contract-agreement",
15
+ field: "contractId",
16
+ description: "Links to Contract SM that created this escrow",
17
+ },
18
+ marketId: {
19
+ machine: "market-universal",
20
+ field: "marketId",
21
+ description: "Links to Market SM for market-based escrow",
22
+ },
23
+ insuranceId: {
24
+ machine: "insurance",
25
+ field: "insuranceId",
26
+ description: "Links to Insurance SM for protected escrow",
27
+ },
28
+ arbitrationPoolId: {
29
+ machine: "arbitration-pool",
30
+ field: "arbitrationPoolId",
31
+ description: "Links to ArbitrationPool for dispute resolution",
32
+ },
33
+ treasuryId: {
34
+ machine: "treasury",
35
+ field: "treasuryId",
36
+ description: "Links to Treasury for fee collection",
37
+ },
38
+ },
39
+ },
40
+ createSchema: {
41
+ required: ["depositor", "beneficiary", "requiredAmount"],
42
+ properties: {
43
+ depositor: {
44
+ type: "address",
45
+ description: "DAG address of the depositor",
46
+ },
47
+ beneficiary: {
48
+ type: "address",
49
+ description: "DAG address of the beneficiary",
50
+ },
51
+ requiredAmount: {
52
+ type: "number",
53
+ minimum: 0,
54
+ description: "Required escrow amount",
55
+ },
56
+ releaseWindowMs: {
57
+ type: "integer",
58
+ description: "Time window for dispute before auto-release",
59
+ nullable: true,
60
+ },
61
+ expiresAt: {
62
+ type: "integer",
63
+ description: "Timestamp when escrow expires",
64
+ nullable: true,
65
+ },
66
+ autoActivate: {
67
+ type: "boolean",
68
+ description: "Whether to auto-activate on funding",
69
+ nullable: true,
70
+ },
71
+ },
72
+ },
73
+ stateSchema: {
74
+ properties: {
75
+ depositor: { type: "address" },
76
+ beneficiary: { type: "address" },
77
+ requiredAmount: { type: "number" },
78
+ balance: { type: "number" },
79
+ fundedAt: { type: "integer", nullable: true },
80
+ activatedAt: { type: "integer", nullable: true },
81
+ releaseRequest: { type: "object", nullable: true },
82
+ releaseDeadline: { type: "integer", nullable: true },
83
+ releasedAt: { type: "integer", nullable: true },
84
+ releasedTo: { type: "address", nullable: true },
85
+ disputedAt: { type: "integer", nullable: true },
86
+ refundedAt: { type: "integer", nullable: true },
87
+ splits: { type: "array", nullable: true },
88
+ rulingId: { type: "string", nullable: true },
89
+ releaseWindowMs: { type: "integer", nullable: true },
90
+ expiresAt: { type: "integer", nullable: true },
91
+ autoActivate: { type: "boolean", nullable: true },
92
+ },
93
+ },
94
+ eventSchemas: {
95
+ deposit: {
96
+ properties: {
97
+ amount: { type: "number" },
98
+ },
99
+ },
100
+ activate: {},
101
+ request_release: {
102
+ properties: {
103
+ amount: { type: "number" },
104
+ reason: { type: "string", nullable: true },
105
+ },
106
+ },
107
+ approve_release: {},
108
+ dispute: {},
109
+ ruling: {
110
+ properties: {
111
+ judicialRuling: { type: "boolean" },
112
+ splits: { type: "array" },
113
+ rulingId: { type: "string" },
114
+ },
115
+ },
116
+ refund: {
117
+ properties: {
118
+ mutualConsent: { type: "boolean", nullable: true },
119
+ },
120
+ },
121
+ cancel: {},
122
+ },
123
+ states: {
124
+ CREATED: { id: "CREATED", isFinal: false, metadata: null },
125
+ FUNDED: { id: "FUNDED", isFinal: false, metadata: null },
126
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
127
+ RELEASING: { id: "RELEASING", isFinal: false, metadata: null },
128
+ DISPUTED: { id: "DISPUTED", isFinal: false, metadata: null },
129
+ RELEASED: { id: "RELEASED", isFinal: true, metadata: null },
130
+ REFUNDED: { id: "REFUNDED", isFinal: true, metadata: null },
131
+ SPLIT: { id: "SPLIT", isFinal: true, metadata: null },
132
+ },
133
+ initialState: "CREATED",
134
+ transitions: [
135
+ {
136
+ from: "CREATED",
137
+ to: "FUNDED",
138
+ eventName: "deposit",
139
+ guard: {
140
+ and: [
141
+ { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
142
+ { ">=": [{ var: "event.amount" }, { var: "state.requiredAmount" }] },
143
+ ],
144
+ },
145
+ effect: {
146
+ merge: [
147
+ { var: "state" },
148
+ { balance: { var: "event.amount" }, fundedAt: { var: "$timestamp" } },
149
+ ],
150
+ },
151
+ dependencies: [],
152
+ },
153
+ {
154
+ from: "FUNDED",
155
+ to: "ACTIVE",
156
+ eventName: "activate",
157
+ guard: {
158
+ or: [
159
+ { "===": [{ var: "event.agent" }, { var: "state.beneficiary" }] },
160
+ { var: "state.autoActivate" },
161
+ ],
162
+ },
163
+ effect: {
164
+ merge: [{ var: "state" }, { activatedAt: { var: "$timestamp" } }],
165
+ },
166
+ dependencies: [],
167
+ },
168
+ {
169
+ from: "ACTIVE",
170
+ to: "RELEASING",
171
+ eventName: "request_release",
172
+ guard: { "===": [{ var: "event.agent" }, { var: "state.beneficiary" }] },
173
+ effect: {
174
+ merge: [
175
+ { var: "state" },
176
+ {
177
+ releaseRequest: {
178
+ requestedBy: { var: "event.agent" },
179
+ amount: { var: "event.amount" },
180
+ reason: { var: "event.reason" },
181
+ requestedAt: { var: "$timestamp" },
182
+ },
183
+ releaseDeadline: {
184
+ "+": [{ var: "$timestamp" }, { var: "state.releaseWindowMs" }],
185
+ },
186
+ },
187
+ ],
188
+ },
189
+ dependencies: [],
190
+ },
191
+ {
192
+ from: "RELEASING",
193
+ to: "RELEASED",
194
+ eventName: "approve_release",
195
+ guard: {
196
+ or: [
197
+ { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
198
+ { ">=": [{ var: "$timestamp" }, { var: "state.releaseDeadline" }] },
199
+ ],
200
+ },
201
+ effect: {
202
+ merge: [
203
+ { var: "state" },
204
+ {
205
+ releasedAt: { var: "$timestamp" },
206
+ releasedTo: { var: "state.beneficiary" },
207
+ },
208
+ ],
209
+ },
210
+ dependencies: [],
211
+ },
212
+ {
213
+ from: "RELEASING",
214
+ to: "DISPUTED",
215
+ eventName: "dispute",
216
+ guard: {
217
+ and: [
218
+ { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
219
+ { "<": [{ var: "$timestamp" }, { var: "state.releaseDeadline" }] },
220
+ ],
221
+ },
222
+ effect: {
223
+ merge: [{ var: "state" }, { disputedAt: { var: "$timestamp" } }],
224
+ },
225
+ spawns: {
226
+ sm: "Judiciary",
227
+ initialData: {
228
+ caseType: "escrow_dispute",
229
+ plaintiff: { var: "state.depositor" },
230
+ defendant: { var: "state.beneficiary" },
231
+ claim: {
232
+ escrowId: { var: "fiberId" },
233
+ amount: { var: "state.balance" },
234
+ },
235
+ },
236
+ },
237
+ dependencies: [],
238
+ },
239
+ {
240
+ from: "DISPUTED",
241
+ to: "SPLIT",
242
+ eventName: "ruling",
243
+ guard: { var: "event.judicialRuling" },
244
+ effect: {
245
+ merge: [
246
+ { var: "state" },
247
+ {
248
+ splits: { var: "event.splits" },
249
+ rulingId: { var: "event.rulingId" },
250
+ },
251
+ ],
252
+ },
253
+ dependencies: [],
254
+ },
255
+ {
256
+ from: "ACTIVE",
257
+ to: "REFUNDED",
258
+ eventName: "refund",
259
+ guard: {
260
+ or: [
261
+ { var: "event.mutualConsent" },
262
+ { ">=": [{ var: "$timestamp" }, { var: "state.expiresAt" }] },
263
+ ],
264
+ },
265
+ effect: {
266
+ merge: [{ var: "state" }, { refundedAt: { var: "$timestamp" } }],
267
+ },
268
+ dependencies: [],
269
+ },
270
+ {
271
+ from: "CREATED",
272
+ to: "REFUNDED",
273
+ eventName: "cancel",
274
+ guard: { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
275
+ effect: {
276
+ merge: [{ var: "state" }, { refundedAt: { var: "$timestamp" } }],
277
+ },
278
+ dependencies: [],
279
+ },
280
+ ],
281
+ });