@ottochain/sdk 2.0.0 → 2.2.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 (142) 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 +28 -14
  20. package/dist/cjs/apps/identity/index.js +27 -12
  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/google/protobuf/struct.js +1 -1
  34. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  35. package/dist/cjs/generated/index.js +26 -22
  36. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  37. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  38. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  39. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +12 -12
  40. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1688 -0
  41. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  42. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  43. package/dist/cjs/generated/ottochain/v1/fiber.js +1 -1
  44. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  45. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  46. package/dist/cjs/schema/fiber-app.js +95 -0
  47. package/dist/cjs/schema/index.js +20 -0
  48. package/dist/esm/apps/contracts/index.js +3 -3
  49. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +269 -0
  50. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +281 -0
  51. package/dist/esm/apps/contracts/state-machines/contract-universal.js +90 -0
  52. package/dist/esm/apps/contracts/state-machines/index.js +177 -1
  53. package/dist/esm/apps/corporate/index.js +3 -3
  54. package/dist/esm/apps/corporate/state-machines/corp-board.js +1019 -0
  55. package/dist/esm/apps/corporate/state-machines/corp-entity.js +668 -0
  56. package/dist/esm/apps/corporate/state-machines/corp-securities.js +995 -0
  57. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +1099 -0
  58. package/dist/esm/apps/corporate/state-machines/index.js +15 -4439
  59. package/dist/esm/apps/governance/index.js +9 -9
  60. package/dist/esm/apps/governance/state-machines/dao-multisig.js +464 -0
  61. package/dist/esm/apps/governance/state-machines/dao-reputation.js +455 -0
  62. package/dist/esm/apps/governance/state-machines/dao-single.js +196 -0
  63. package/dist/esm/apps/governance/state-machines/dao-token.js +500 -0
  64. package/dist/esm/apps/governance/state-machines/governance-simple.js +479 -0
  65. package/dist/esm/apps/governance/state-machines/governance-universal.js +135 -0
  66. package/dist/esm/apps/governance/state-machines/index.js +9 -2933
  67. package/dist/esm/apps/identity/constants.js +28 -14
  68. package/dist/esm/apps/identity/index.js +7 -5
  69. package/dist/esm/apps/identity/state-machines/identity-agent.js +253 -0
  70. package/dist/esm/apps/identity/state-machines/identity-oracle.js +318 -0
  71. package/dist/esm/apps/identity/state-machines/identity-universal.js +103 -0
  72. package/dist/esm/apps/identity/state-machines/index.js +11 -783
  73. package/dist/esm/apps/index.js +5 -5
  74. package/dist/esm/apps/markets/index.js +3 -3
  75. package/dist/esm/apps/markets/state-machines/index.js +8 -2297
  76. package/dist/esm/apps/markets/state-machines/market-auction.js +280 -0
  77. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +309 -0
  78. package/dist/esm/apps/markets/state-machines/market-group-buy.js +404 -0
  79. package/dist/esm/apps/markets/state-machines/market-prediction.js +482 -0
  80. package/dist/esm/apps/markets/state-machines/market-universal.js +126 -0
  81. package/dist/esm/apps/oracles/index.js +21 -0
  82. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  83. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  84. package/dist/esm/generated/index.js +8 -4
  85. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  86. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  87. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  88. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +2 -2
  89. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1676 -0
  90. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  91. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  92. package/dist/esm/generated/ottochain/v1/fiber.js +1 -1
  93. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  94. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  95. package/dist/esm/schema/fiber-app.js +86 -0
  96. package/dist/esm/schema/index.js +4 -0
  97. package/dist/types/apps/contracts/index.d.ts +151 -2
  98. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +462 -0
  99. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +511 -0
  100. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +147 -0
  101. package/dist/types/apps/contracts/state-machines/index.d.ts +149 -0
  102. package/dist/types/apps/corporate/index.d.ts +5263 -3825
  103. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +1479 -0
  104. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +970 -0
  105. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +1381 -0
  106. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +1631 -0
  107. package/dist/types/apps/corporate/state-machines/index.d.ts +5245 -3802
  108. package/dist/types/apps/governance/index.d.ts +875 -37
  109. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +644 -0
  110. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +610 -0
  111. package/dist/types/apps/governance/state-machines/dao-single.d.ts +276 -0
  112. package/dist/types/apps/governance/state-machines/dao-token.d.ts +601 -0
  113. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +652 -0
  114. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +181 -0
  115. package/dist/types/apps/governance/state-machines/index.d.ts +9 -2136
  116. package/dist/types/apps/identity/constants.d.ts +8 -6
  117. package/dist/types/apps/identity/index.d.ts +1078 -577
  118. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +401 -0
  119. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +550 -0
  120. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +151 -0
  121. package/dist/types/apps/identity/state-machines/index.d.ts +1069 -567
  122. package/dist/types/apps/index.d.ts +5 -5
  123. package/dist/types/apps/markets/index.d.ts +535 -7
  124. package/dist/types/apps/markets/state-machines/index.d.ts +8 -1678
  125. package/dist/types/apps/markets/state-machines/market-auction.d.ts +392 -0
  126. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +443 -0
  127. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +539 -0
  128. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +651 -0
  129. package/dist/types/apps/markets/state-machines/market-universal.d.ts +191 -0
  130. package/dist/types/apps/oracles/index.d.ts +18 -0
  131. package/dist/types/generated/index.d.ts +3 -2
  132. package/dist/types/generated/ottochain/apps/identity/v1/attestation.d.ts +1 -1
  133. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +187 -0
  134. package/dist/types/schema/fiber-app.d.ts +172 -0
  135. package/dist/types/schema/index.d.ts +4 -0
  136. package/package.json +1 -1
  137. package/dist/cjs/generated/ottochain/apps/identity/v1/agent.js +0 -619
  138. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle.js +0 -1223
  139. package/dist/esm/generated/ottochain/apps/identity/v1/agent.js +0 -610
  140. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle.js +0 -1217
  141. package/dist/types/generated/ottochain/apps/identity/v1/agent.d.ts +0 -94
  142. package/dist/types/generated/ottochain/apps/oracles/v1/oracle.d.ts +0 -150
@@ -1,29 +1,43 @@
1
1
  /**
2
2
  * Identity Constants
3
3
  *
4
- * State machine transitions and configuration constants for agent identity.
4
+ * State machine transitions and configuration constants for identity types.
5
5
  *
6
6
  * @packageDocumentation
7
7
  */
8
- import { AgentState } from '../../generated/ottochain/apps/identity/v1/agent.js';
9
- import { AttestationType } from '../../generated/ottochain/apps/identity/v1/attestation.js';
8
+ import { IdentityState } from "../../generated/ottochain/apps/identity/v1/identity.js";
9
+ import { AttestationType } from "../../generated/ottochain/apps/identity/v1/attestation.js";
10
10
  // ---------------------------------------------------------------------------
11
11
  // State Machine Transitions
12
12
  // ---------------------------------------------------------------------------
13
13
  /**
14
- * Valid transitions for each agent state.
14
+ * Valid transitions for each identity state.
15
15
  * Maps current state to allowed event names.
16
+ * Note: Some transitions are type-specific (agent vs oracle)
16
17
  */
17
- export const AGENT_TRANSITIONS = {
18
- [AgentState.AGENT_STATE_UNSPECIFIED]: [],
19
- [AgentState.AGENT_STATE_REGISTERED]: ['activate', 'withdraw'],
20
- [AgentState.AGENT_STATE_ACTIVE]: ['challenge', 'withdraw'],
21
- [AgentState.AGENT_STATE_CHALLENGED]: ['uphold_challenge', 'dismiss_challenge'],
22
- [AgentState.AGENT_STATE_SUSPENDED]: ['begin_probation'],
23
- [AgentState.AGENT_STATE_PROBATION]: ['complete_probation'],
24
- [AgentState.AGENT_STATE_WITHDRAWN]: [], // Terminal state
25
- [AgentState.UNRECOGNIZED]: [],
18
+ export const IDENTITY_TRANSITIONS = {
19
+ [IdentityState.IDENTITY_STATE_UNSPECIFIED]: [],
20
+ [IdentityState.IDENTITY_STATE_UNREGISTERED]: ["register"],
21
+ [IdentityState.IDENTITY_STATE_REGISTERED]: ["activate", "withdraw"],
22
+ [IdentityState.IDENTITY_STATE_ACTIVE]: [
23
+ "challenge",
24
+ "slash",
25
+ "deactivate",
26
+ "withdraw",
27
+ ],
28
+ [IdentityState.IDENTITY_STATE_CHALLENGED]: [
29
+ "uphold_challenge",
30
+ "dismiss_challenge",
31
+ ],
32
+ [IdentityState.IDENTITY_STATE_SUSPENDED]: ["begin_probation"],
33
+ [IdentityState.IDENTITY_STATE_PROBATION]: ["complete_probation"],
34
+ [IdentityState.IDENTITY_STATE_SLASHED]: ["reactivate", "withdraw"],
35
+ [IdentityState.IDENTITY_STATE_INACTIVE]: ["activate", "withdraw"],
36
+ [IdentityState.IDENTITY_STATE_WITHDRAWN]: [], // Terminal state
37
+ [IdentityState.UNRECOGNIZED]: [],
26
38
  };
39
+ // Legacy alias
40
+ export const AGENT_TRANSITIONS = IDENTITY_TRANSITIONS;
27
41
  // ---------------------------------------------------------------------------
28
42
  // Reputation Configuration
29
43
  // ---------------------------------------------------------------------------
@@ -43,7 +57,7 @@ export const ATTESTATION_DELTAS = {
43
57
  * Check if a transition is valid for the given state.
44
58
  */
45
59
  export function canTransition(state, event) {
46
- return AGENT_TRANSITIONS[state]?.includes(event) ?? false;
60
+ return IDENTITY_TRANSITIONS[state]?.includes(event) ?? false;
47
61
  }
48
62
  /**
49
63
  * Get reputation delta for an attestation type.
@@ -17,10 +17,12 @@
17
17
  * @packageDocumentation
18
18
  */
19
19
  // Re-export generated protobuf types (source of truth)
20
- export { AgentState, Platform, PlatformLink, AgentIdentity, AgentIdentityDefinition, agentStateFromJSON, agentStateToJSON, platformFromJSON, platformToJSON, } from '../../generated/ottochain/apps/identity/v1/agent.js';
21
- export { AttestationType, ReputationDelta, Attestation, VouchRequest, ChallengeRequest, ReputationConfig, attestationTypeFromJSON, attestationTypeToJSON, } from '../../generated/ottochain/apps/identity/v1/attestation.js';
20
+ export { IdentityType, IdentityState, Platform, PlatformLink, Reputation, PenaltyEvent, Identity, RegisterIdentityRequest, ActivateIdentityRequest, LinkPlatformRequest, ChallengeIdentityRequest, AddStakeRequest, WithdrawIdentityRequest, IdentityDefinition, identityTypeFromJSON, identityTypeToJSON, identityStateFromJSON, identityStateToJSON, platformFromJSON, platformToJSON, } from "../../generated/ottochain/apps/identity/v1/identity.js";
21
+ // Legacy aliases for backward compatibility
22
+ export { IdentityState as AgentState } from "../../generated/ottochain/apps/identity/v1/identity.js";
23
+ export { AttestationType, ReputationDelta, Attestation, VouchRequest, ChallengeRequest, ReputationConfig, attestationTypeFromJSON, attestationTypeToJSON, } from "../../generated/ottochain/apps/identity/v1/attestation.js";
22
24
  // Re-export constants and utilities
23
- export { AGENT_TRANSITIONS, ATTESTATION_DELTAS, canTransition, getReputationDelta, } from './constants.js';
25
+ export { IDENTITY_TRANSITIONS, AGENT_TRANSITIONS, ATTESTATION_DELTAS, canTransition, getReputationDelta, } from "./constants.js";
24
26
  // ---------------------------------------------------------------------------
25
27
  // Configuration Defaults
26
28
  // ---------------------------------------------------------------------------
@@ -39,7 +41,7 @@ export const DEFAULT_REPUTATION_CONFIG = {
39
41
  // ---------------------------------------------------------------------------
40
42
  // State Machine Definitions (generated from JSON at build time)
41
43
  // ---------------------------------------------------------------------------
42
- import { identityUniversalDef, identityAgentDef, identityOracleDef, } from './state-machines/index.js';
44
+ import { identityUniversalDef, identityAgentDef, identityOracleDef, } from "./state-machines/index.js";
43
45
  export { identityUniversalDef, identityAgentDef, identityOracleDef };
44
46
  /** All identity state machine definitions */
45
47
  export const IDENTITY_DEFINITIONS = {
@@ -51,6 +53,6 @@ export const IDENTITY_DEFINITIONS = {
51
53
  * Get an identity state machine definition by type.
52
54
  * @param type - 'universal' | 'agent' | 'oracle' (default: 'agent')
53
55
  */
54
- export function getIdentityDefinition(type = 'agent') {
56
+ export function getIdentityDefinition(type = "agent") {
55
57
  return IDENTITY_DEFINITIONS[type];
56
58
  }
@@ -0,0 +1,253 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ /**
3
+ * Standard agent identity with reputation tracking, vouching, and lifecycle management.
4
+ */
5
+ export const identityAgentDef = defineFiberApp({
6
+ metadata: {
7
+ name: "IdentityAgent",
8
+ app: "identity",
9
+ type: "agent",
10
+ version: "1.0.0",
11
+ description: "Standard agent identity with reputation tracking, vouching, and lifecycle management",
12
+ },
13
+ createSchema: {
14
+ required: ["owner", "displayName"],
15
+ properties: {
16
+ owner: {
17
+ type: "address",
18
+ description: "Agent owner DAG address",
19
+ immutable: true,
20
+ },
21
+ displayName: {
22
+ type: "string",
23
+ maxLength: 64,
24
+ description: "Human-readable agent name",
25
+ },
26
+ bio: {
27
+ type: "string",
28
+ maxLength: 256,
29
+ default: "",
30
+ },
31
+ avatar: {
32
+ type: "uri",
33
+ default: null,
34
+ },
35
+ platforms: {
36
+ type: "array",
37
+ items: { $ref: "#/definitions/PlatformLink" },
38
+ default: [],
39
+ },
40
+ },
41
+ },
42
+ stateSchema: {
43
+ properties: {
44
+ owner: { type: "address", immutable: true },
45
+ displayName: { type: "string" },
46
+ bio: { type: "string" },
47
+ avatar: { type: "uri" },
48
+ platforms: {
49
+ type: "array",
50
+ items: { $ref: "#/definitions/PlatformLink" },
51
+ },
52
+ status: {
53
+ type: "string",
54
+ enum: [
55
+ "REGISTERED",
56
+ "ACTIVE",
57
+ "CHALLENGED",
58
+ "SUSPENDED",
59
+ "PROBATION",
60
+ "WITHDRAWN",
61
+ ],
62
+ computed: true,
63
+ },
64
+ reputation: { type: "integer", default: 10, computed: true },
65
+ activatedAt: { type: "timestamp", computed: true },
66
+ suspendedAt: { type: "timestamp", computed: true },
67
+ probationStartedAt: { type: "timestamp", computed: true },
68
+ challengedBy: { type: "address", computed: true },
69
+ },
70
+ },
71
+ eventSchemas: {
72
+ activate: {
73
+ description: "Activate a registered agent",
74
+ },
75
+ receive_vouch: {
76
+ description: "Receive a vouch from another agent",
77
+ required: ["from"],
78
+ properties: {
79
+ from: { type: "address", description: "Address of vouching agent" },
80
+ weight: { type: "integer", minimum: 1, maximum: 10, default: 1 },
81
+ },
82
+ },
83
+ receive_completion: {
84
+ description: "Receive completion attestation from a fiber",
85
+ },
86
+ challenge: {
87
+ description: "Challenge an active agent's behavior",
88
+ required: ["challenger", "reason"],
89
+ properties: {
90
+ challenger: { type: "address" },
91
+ reason: { type: "string", maxLength: 512 },
92
+ evidence: { type: "array", items: { type: "uri" } },
93
+ },
94
+ },
95
+ dismiss_challenge: {
96
+ description: "Dismiss an active challenge",
97
+ },
98
+ uphold_challenge: {
99
+ description: "Uphold a challenge, suspending the agent",
100
+ },
101
+ begin_probation: {
102
+ description: "Move suspended agent to probation",
103
+ },
104
+ complete_probation: {
105
+ description: "Complete probation, reactivating the agent",
106
+ },
107
+ withdraw: {
108
+ description: "Permanently withdraw the agent",
109
+ },
110
+ },
111
+ definitions: {
112
+ PlatformLink: {
113
+ type: "object",
114
+ required: ["platform", "handle"],
115
+ properties: {
116
+ platform: {
117
+ type: "string",
118
+ enum: [
119
+ "twitter",
120
+ "github",
121
+ "discord",
122
+ "telegram",
123
+ "moltbook",
124
+ ],
125
+ },
126
+ handle: { type: "string" },
127
+ verified: { type: "boolean", default: false },
128
+ },
129
+ },
130
+ },
131
+ states: {
132
+ REGISTERED: { id: "REGISTERED", isFinal: false },
133
+ ACTIVE: { id: "ACTIVE", isFinal: false },
134
+ CHALLENGED: { id: "CHALLENGED", isFinal: false },
135
+ SUSPENDED: { id: "SUSPENDED", isFinal: false },
136
+ PROBATION: { id: "PROBATION", isFinal: false },
137
+ WITHDRAWN: { id: "WITHDRAWN", isFinal: true },
138
+ },
139
+ initialState: "REGISTERED",
140
+ transitions: [
141
+ {
142
+ from: "REGISTERED",
143
+ to: "ACTIVE",
144
+ eventName: "activate",
145
+ guard: { "==": [1, 1] },
146
+ effect: {
147
+ merge: [
148
+ { var: "state" },
149
+ { status: "ACTIVE", activatedAt: { var: "$timestamp" } },
150
+ ],
151
+ },
152
+ },
153
+ {
154
+ from: "ACTIVE",
155
+ to: "ACTIVE",
156
+ eventName: "receive_vouch",
157
+ guard: { "!!": [{ var: "event.from" }] },
158
+ effect: {
159
+ merge: [
160
+ { var: "state" },
161
+ { reputation: { "+": [{ var: "state.reputation" }, 2] } },
162
+ ],
163
+ },
164
+ },
165
+ {
166
+ from: "ACTIVE",
167
+ to: "ACTIVE",
168
+ eventName: "receive_completion",
169
+ guard: { "==": [1, 1] },
170
+ effect: {
171
+ merge: [
172
+ { var: "state" },
173
+ { reputation: { "+": [{ var: "state.reputation" }, 5] } },
174
+ ],
175
+ },
176
+ },
177
+ {
178
+ from: "ACTIVE",
179
+ to: "CHALLENGED",
180
+ eventName: "challenge",
181
+ guard: { "!!": [{ var: "event.challenger" }] },
182
+ effect: {
183
+ merge: [
184
+ { var: "state" },
185
+ { status: "CHALLENGED", challengedBy: { var: "event.challenger" } },
186
+ ],
187
+ },
188
+ },
189
+ {
190
+ from: "CHALLENGED",
191
+ to: "ACTIVE",
192
+ eventName: "dismiss_challenge",
193
+ guard: { "==": [1, 1] },
194
+ effect: {
195
+ merge: [{ var: "state" }, { status: "ACTIVE", challengedBy: null }],
196
+ },
197
+ },
198
+ {
199
+ from: "CHALLENGED",
200
+ to: "SUSPENDED",
201
+ eventName: "uphold_challenge",
202
+ guard: { "==": [1, 1] },
203
+ effect: {
204
+ merge: [
205
+ { var: "state" },
206
+ { status: "SUSPENDED", suspendedAt: { var: "$timestamp" } },
207
+ ],
208
+ },
209
+ },
210
+ {
211
+ from: "SUSPENDED",
212
+ to: "PROBATION",
213
+ eventName: "begin_probation",
214
+ guard: { "==": [1, 1] },
215
+ effect: {
216
+ merge: [
217
+ { var: "state" },
218
+ { status: "PROBATION", probationStartedAt: { var: "$timestamp" } },
219
+ ],
220
+ },
221
+ },
222
+ {
223
+ from: "PROBATION",
224
+ to: "ACTIVE",
225
+ eventName: "complete_probation",
226
+ guard: { "==": [1, 1] },
227
+ effect: {
228
+ merge: [
229
+ { var: "state" },
230
+ { status: "ACTIVE", probationStartedAt: null },
231
+ ],
232
+ },
233
+ },
234
+ {
235
+ from: "ACTIVE",
236
+ to: "WITHDRAWN",
237
+ eventName: "withdraw",
238
+ guard: { "==": [1, 1] },
239
+ effect: {
240
+ merge: [{ var: "state" }, { status: "WITHDRAWN" }],
241
+ },
242
+ },
243
+ {
244
+ from: "REGISTERED",
245
+ to: "WITHDRAWN",
246
+ eventName: "withdraw",
247
+ guard: { "==": [1, 1] },
248
+ effect: {
249
+ merge: [{ var: "state" }, { status: "WITHDRAWN" }],
250
+ },
251
+ },
252
+ ],
253
+ });
@@ -0,0 +1,318 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ /**
3
+ * Oracle identity with staking, attestations, reputation, and slashing mechanics.
4
+ */
5
+ export const identityOracleDef = defineFiberApp({
6
+ metadata: {
7
+ name: "IdentityOracle",
8
+ app: "identity",
9
+ type: "oracle",
10
+ version: "1.0.0",
11
+ description: "Oracle identity with staking, attestations, reputation, and slashing mechanics",
12
+ },
13
+ createSchema: {
14
+ required: ["owner", "stake", "domains"],
15
+ properties: {
16
+ owner: {
17
+ type: "address",
18
+ description: "Oracle owner DAG address",
19
+ immutable: true,
20
+ },
21
+ stake: {
22
+ type: "integer",
23
+ minimum: 0,
24
+ description: "Initial stake amount",
25
+ },
26
+ domains: {
27
+ type: "array",
28
+ items: { type: "string" },
29
+ description: "Oracle specialization domains",
30
+ },
31
+ minStake: {
32
+ type: "integer",
33
+ default: 1000,
34
+ description: "Minimum stake required",
35
+ },
36
+ },
37
+ },
38
+ stateSchema: {
39
+ properties: {
40
+ owner: { type: "address", immutable: true },
41
+ address: { type: "address", computed: true },
42
+ stake: { type: "integer", computed: true },
43
+ minStake: { type: "integer" },
44
+ domains: { type: "array", items: { type: "string" } },
45
+ status: {
46
+ type: "string",
47
+ enum: [
48
+ "UNREGISTERED",
49
+ "REGISTERED",
50
+ "ACTIVE",
51
+ "SLASHED",
52
+ "WITHDRAWN",
53
+ ],
54
+ computed: true,
55
+ },
56
+ reputation: {
57
+ type: "object",
58
+ properties: {
59
+ accuracy: { type: "integer" },
60
+ totalResolutions: { type: "integer" },
61
+ disputesWon: { type: "integer" },
62
+ disputesLost: { type: "integer" },
63
+ },
64
+ computed: true,
65
+ },
66
+ slashingHistory: { type: "array", computed: true },
67
+ registeredAt: { type: "timestamp", computed: true },
68
+ activatedAt: { type: "timestamp", computed: true },
69
+ slashedAt: { type: "timestamp", computed: true },
70
+ withdrawnAt: { type: "timestamp", computed: true },
71
+ },
72
+ },
73
+ eventSchemas: {
74
+ register: {
75
+ description: "Register as an oracle with initial stake",
76
+ required: ["agent", "stake", "domains"],
77
+ properties: {
78
+ agent: { type: "address" },
79
+ stake: { type: "integer", minimum: 0 },
80
+ domains: { type: "array", items: { type: "string" } },
81
+ },
82
+ },
83
+ activate: {
84
+ description: "Activate a registered oracle",
85
+ required: ["agent"],
86
+ properties: {
87
+ agent: { type: "address" },
88
+ adminOverride: { type: "boolean", default: false },
89
+ },
90
+ },
91
+ add_stake: {
92
+ description: "Add stake to an active oracle",
93
+ required: ["agent", "amount"],
94
+ properties: {
95
+ agent: { type: "address" },
96
+ amount: { type: "integer", minimum: 1 },
97
+ },
98
+ },
99
+ record_resolution: {
100
+ description: "Record a market resolution outcome",
101
+ required: ["marketId", "correct"],
102
+ properties: {
103
+ marketId: { type: "uuid" },
104
+ correct: { type: "boolean" },
105
+ },
106
+ },
107
+ slash: {
108
+ description: "Slash oracle stake for misconduct",
109
+ required: ["reason", "amount"],
110
+ properties: {
111
+ reason: { type: "string" },
112
+ amount: { type: "integer", minimum: 1 },
113
+ marketId: { type: "uuid" },
114
+ },
115
+ },
116
+ reactivate: {
117
+ description: "Reactivate a slashed oracle",
118
+ required: ["agent"],
119
+ properties: {
120
+ agent: { type: "address" },
121
+ },
122
+ },
123
+ withdraw: {
124
+ description: "Withdraw oracle and reclaim stake",
125
+ required: ["agent"],
126
+ properties: {
127
+ agent: { type: "address" },
128
+ },
129
+ },
130
+ },
131
+ 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 },
137
+ },
138
+ initialState: "UNREGISTERED",
139
+ transitions: [
140
+ {
141
+ from: "UNREGISTERED",
142
+ to: "REGISTERED",
143
+ eventName: "register",
144
+ guard: { ">=": [{ var: "event.stake" }, { var: "state.minStake" }] },
145
+ effect: {
146
+ merge: [
147
+ { var: "state" },
148
+ {
149
+ status: "REGISTERED",
150
+ address: { var: "event.agent" },
151
+ stake: { var: "event.stake" },
152
+ registeredAt: { var: "$timestamp" },
153
+ reputation: {
154
+ accuracy: 100,
155
+ totalResolutions: 0,
156
+ disputesWon: 0,
157
+ disputesLost: 0,
158
+ },
159
+ domains: { var: "event.domains" },
160
+ slashingHistory: [],
161
+ },
162
+ ],
163
+ },
164
+ },
165
+ {
166
+ from: "REGISTERED",
167
+ to: "ACTIVE",
168
+ eventName: "activate",
169
+ guard: {
170
+ or: [
171
+ { "===": [{ var: "event.agent" }, { var: "state.address" }] },
172
+ { var: "event.adminOverride" },
173
+ ],
174
+ },
175
+ effect: {
176
+ merge: [
177
+ { var: "state" },
178
+ { status: "ACTIVE", activatedAt: { var: "$timestamp" } },
179
+ ],
180
+ },
181
+ },
182
+ {
183
+ from: "ACTIVE",
184
+ to: "ACTIVE",
185
+ eventName: "add_stake",
186
+ guard: {
187
+ and: [
188
+ { "===": [{ var: "event.agent" }, { var: "state.address" }] },
189
+ { ">": [{ var: "event.amount" }, 0] },
190
+ ],
191
+ },
192
+ effect: {
193
+ merge: [
194
+ { var: "state" },
195
+ {
196
+ stake: { "+": [{ var: "state.stake" }, { var: "event.amount" }] },
197
+ lastStakeAt: { var: "$timestamp" },
198
+ },
199
+ ],
200
+ },
201
+ },
202
+ {
203
+ from: "ACTIVE",
204
+ to: "ACTIVE",
205
+ eventName: "record_resolution",
206
+ guard: { var: "event.marketId" },
207
+ effect: {
208
+ merge: [
209
+ { var: "state" },
210
+ {
211
+ reputation: {
212
+ merge: [
213
+ { var: "state.reputation" },
214
+ {
215
+ totalResolutions: {
216
+ "+": [{ var: "state.reputation.totalResolutions" }, 1],
217
+ },
218
+ accuracy: {
219
+ if: [
220
+ { var: "event.correct" },
221
+ { var: "state.reputation.accuracy" },
222
+ { "-": [{ var: "state.reputation.accuracy" }, 5] },
223
+ ],
224
+ },
225
+ },
226
+ ],
227
+ },
228
+ lastResolutionAt: { var: "$timestamp" },
229
+ },
230
+ ],
231
+ },
232
+ },
233
+ {
234
+ from: "ACTIVE",
235
+ to: "SLASHED",
236
+ eventName: "slash",
237
+ guard: {
238
+ and: [
239
+ { var: "event.reason" },
240
+ { ">": [{ var: "event.amount" }, 0] },
241
+ { "<=": [{ var: "event.amount" }, { var: "state.stake" }] },
242
+ ],
243
+ },
244
+ effect: {
245
+ merge: [
246
+ { var: "state" },
247
+ {
248
+ status: "SLASHED",
249
+ stake: { "-": [{ var: "state.stake" }, { var: "event.amount" }] },
250
+ slashingHistory: {
251
+ cat: [
252
+ { var: "state.slashingHistory" },
253
+ [
254
+ {
255
+ reason: { var: "event.reason" },
256
+ amount: { var: "event.amount" },
257
+ marketId: { var: "event.marketId" },
258
+ slashedAt: { var: "$timestamp" },
259
+ },
260
+ ],
261
+ ],
262
+ },
263
+ slashedAt: { var: "$timestamp" },
264
+ },
265
+ ],
266
+ },
267
+ },
268
+ {
269
+ from: "SLASHED",
270
+ to: "ACTIVE",
271
+ eventName: "reactivate",
272
+ guard: {
273
+ and: [
274
+ { "===": [{ var: "event.agent" }, { var: "state.address" }] },
275
+ { ">=": [{ var: "state.stake" }, { var: "state.minStake" }] },
276
+ ],
277
+ },
278
+ effect: {
279
+ merge: [
280
+ { var: "state" },
281
+ { status: "ACTIVE", reactivatedAt: { var: "$timestamp" } },
282
+ ],
283
+ },
284
+ },
285
+ {
286
+ from: "ACTIVE",
287
+ to: "WITHDRAWN",
288
+ eventName: "withdraw",
289
+ guard: { "===": [{ var: "event.agent" }, { var: "state.address" }] },
290
+ effect: {
291
+ merge: [
292
+ { var: "state" },
293
+ {
294
+ status: "WITHDRAWN",
295
+ withdrawnAt: { var: "$timestamp" },
296
+ finalStake: { var: "state.stake" },
297
+ },
298
+ ],
299
+ },
300
+ },
301
+ {
302
+ from: "SLASHED",
303
+ to: "WITHDRAWN",
304
+ eventName: "withdraw",
305
+ guard: { "===": [{ var: "event.agent" }, { var: "state.address" }] },
306
+ effect: {
307
+ merge: [
308
+ { var: "state" },
309
+ {
310
+ status: "WITHDRAWN",
311
+ withdrawnAt: { var: "$timestamp" },
312
+ finalStake: { var: "state.stake" },
313
+ },
314
+ ],
315
+ },
316
+ },
317
+ ],
318
+ });