@ottochain/sdk 2.3.0 → 2.5.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 (287) hide show
  1. package/dist/cjs/apps/compute/index.js +33 -0
  2. package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
  3. package/dist/cjs/apps/compute/state-machines/index.js +9 -0
  4. package/dist/cjs/apps/contracts/index.js +16 -9
  5. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +134 -161
  6. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +192 -170
  7. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
  8. package/dist/cjs/apps/corporate/index.js +2 -2
  9. package/dist/cjs/apps/corporate/state-machines/corp-board.js +500 -456
  10. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +487 -361
  11. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +769 -576
  12. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +567 -557
  13. package/dist/cjs/apps/governance/index.js +21 -21
  14. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +188 -209
  15. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +181 -228
  16. package/dist/cjs/apps/governance/state-machines/dao-single.js +105 -88
  17. package/dist/cjs/apps/governance/state-machines/dao-token.js +199 -227
  18. package/dist/cjs/apps/governance/state-machines/governance-simple.js +231 -231
  19. package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
  20. package/dist/cjs/apps/identity/constants.js +55 -22
  21. package/dist/cjs/apps/identity/index.js +28 -12
  22. package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
  23. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +158 -173
  24. package/dist/cjs/apps/identity/state-machines/identity-registry.js +262 -0
  25. package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
  26. package/dist/cjs/apps/identity/state-machines/index.js +3 -1
  27. package/dist/cjs/apps/index.js +22 -8
  28. package/dist/cjs/apps/lending/assets.js +247 -0
  29. package/dist/cjs/apps/lending/credit-scoring.js +87 -0
  30. package/dist/cjs/apps/lending/eligibility.js +105 -0
  31. package/dist/cjs/apps/lending/index.js +91 -0
  32. package/dist/cjs/apps/lending/state-machines/index.js +9 -0
  33. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +433 -0
  34. package/dist/cjs/apps/markets/index.js +22 -12
  35. package/dist/cjs/apps/markets/state-machines/market-auction.js +116 -134
  36. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +131 -141
  37. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +163 -184
  38. package/dist/cjs/apps/markets/state-machines/market-prediction.js +226 -233
  39. package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
  40. package/dist/cjs/apps/oracles/index.js +3 -3
  41. package/dist/cjs/apps/privacy/index.js +67 -0
  42. package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
  43. package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
  44. package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
  45. package/dist/cjs/apps/staked-pool/assets.js +103 -0
  46. package/dist/cjs/apps/staked-pool/base.js +498 -0
  47. package/dist/cjs/apps/staked-pool/consumer.js +55 -0
  48. package/dist/cjs/apps/staked-pool/index.js +83 -0
  49. package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
  50. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
  51. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
  52. package/dist/cjs/errors.js +3 -3
  53. package/dist/cjs/generated/google/protobuf/struct.js +5 -5
  54. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  55. package/dist/cjs/generated/index.js +11 -7
  56. package/dist/cjs/generated/openapi.js +6 -0
  57. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +51 -51
  58. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +20 -21
  59. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +14 -14
  60. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +5 -5
  61. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +125 -131
  62. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +108 -108
  63. package/dist/cjs/generated/ottochain/v1/common.js +5 -5
  64. package/dist/cjs/generated/ottochain/v1/fiber.js +44 -6
  65. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  66. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  67. package/dist/cjs/index.js +58 -7
  68. package/dist/cjs/openapi.js +2 -0
  69. package/dist/cjs/ottochain/drop-nulls.js +1 -2
  70. package/dist/cjs/ottochain/genesis-manifest.js +17 -11
  71. package/dist/cjs/ottochain/index.js +23 -13
  72. package/dist/cjs/ottochain/metagraph-client.js +81 -16
  73. package/dist/cjs/ottochain/snapshot.js +13 -16
  74. package/dist/cjs/ottochain/transaction.js +67 -14
  75. package/dist/cjs/ottochain/types.js +16 -2
  76. package/dist/cjs/privacy/index.js +14 -0
  77. package/dist/cjs/privacy/sealed-bid.js +213 -0
  78. package/dist/cjs/privacy/shield-app.js +131 -0
  79. package/dist/cjs/schema/effects.js +156 -0
  80. package/dist/cjs/schema/fiber-app.js +150 -15
  81. package/dist/cjs/schema/guard-lint.js +343 -0
  82. package/dist/cjs/schema/guards.js +246 -0
  83. package/dist/cjs/signing.js +80 -0
  84. package/dist/cjs/templates/asset-policy.js +190 -0
  85. package/dist/cjs/templates/index.js +86 -0
  86. package/dist/cjs/templates/machine.js +130 -0
  87. package/dist/cjs/templates/migration.js +39 -0
  88. package/dist/cjs/templates/state-shape.js +38 -0
  89. package/dist/cjs/types.js +2 -3
  90. package/dist/cjs/validation.js +9 -11
  91. package/dist/cjs/verify.js +9 -4
  92. package/dist/cjs/zk/commit.js +53 -0
  93. package/dist/cjs/zk/guard.js +107 -0
  94. package/dist/cjs/zk/index.js +48 -0
  95. package/dist/cjs/zk/preimage.js +37 -0
  96. package/dist/cjs/zk/prover.js +87 -0
  97. package/dist/cjs/zk/registry.js +62 -0
  98. package/dist/cjs/zk/types.js +28 -0
  99. package/dist/cjs/zk/witness.js +19 -0
  100. package/dist/esm/apps/compute/index.js +29 -0
  101. package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
  102. package/dist/esm/apps/compute/state-machines/index.js +5 -0
  103. package/dist/esm/apps/contracts/index.js +9 -5
  104. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +135 -162
  105. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +193 -171
  106. package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
  107. package/dist/esm/apps/corporate/index.js +2 -2
  108. package/dist/esm/apps/corporate/state-machines/corp-board.js +501 -457
  109. package/dist/esm/apps/corporate/state-machines/corp-entity.js +488 -362
  110. package/dist/esm/apps/corporate/state-machines/corp-securities.js +770 -577
  111. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +568 -558
  112. package/dist/esm/apps/governance/index.js +10 -10
  113. package/dist/esm/apps/governance/state-machines/dao-multisig.js +189 -210
  114. package/dist/esm/apps/governance/state-machines/dao-reputation.js +182 -229
  115. package/dist/esm/apps/governance/state-machines/dao-single.js +106 -89
  116. package/dist/esm/apps/governance/state-machines/dao-token.js +200 -228
  117. package/dist/esm/apps/governance/state-machines/governance-simple.js +232 -232
  118. package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
  119. package/dist/esm/apps/identity/constants.js +52 -21
  120. package/dist/esm/apps/identity/index.js +14 -9
  121. package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
  122. package/dist/esm/apps/identity/state-machines/identity-oracle.js +159 -174
  123. package/dist/esm/apps/identity/state-machines/identity-registry.js +259 -0
  124. package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
  125. package/dist/esm/apps/identity/state-machines/index.js +1 -0
  126. package/dist/esm/apps/index.js +9 -5
  127. package/dist/esm/apps/lending/assets.js +231 -0
  128. package/dist/esm/apps/lending/credit-scoring.js +81 -0
  129. package/dist/esm/apps/lending/eligibility.js +99 -0
  130. package/dist/esm/apps/lending/index.js +69 -0
  131. package/dist/esm/apps/lending/state-machines/index.js +5 -0
  132. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +430 -0
  133. package/dist/esm/apps/markets/index.js +11 -7
  134. package/dist/esm/apps/markets/state-machines/market-auction.js +117 -135
  135. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +132 -142
  136. package/dist/esm/apps/markets/state-machines/market-group-buy.js +164 -185
  137. package/dist/esm/apps/markets/state-machines/market-prediction.js +227 -234
  138. package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
  139. package/dist/esm/apps/oracles/index.js +3 -3
  140. package/dist/esm/apps/privacy/index.js +56 -0
  141. package/dist/esm/apps/privacy/state-machines/index.js +6 -0
  142. package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
  143. package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
  144. package/dist/esm/apps/staked-pool/assets.js +91 -0
  145. package/dist/esm/apps/staked-pool/base.js +493 -0
  146. package/dist/esm/apps/staked-pool/consumer.js +49 -0
  147. package/dist/esm/apps/staked-pool/index.js +60 -0
  148. package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
  149. package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
  150. package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
  151. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  152. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  153. package/dist/esm/generated/index.js +9 -5
  154. package/dist/esm/generated/openapi.js +5 -0
  155. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +47 -47
  156. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  157. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  158. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  159. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +115 -121
  160. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +101 -101
  161. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  162. package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
  163. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  164. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  165. package/dist/esm/index.js +28 -3
  166. package/dist/esm/openapi.js +1 -0
  167. package/dist/esm/ottochain/genesis-manifest.js +15 -9
  168. package/dist/esm/ottochain/index.js +2 -3
  169. package/dist/esm/ottochain/metagraph-client.js +81 -16
  170. package/dist/esm/ottochain/snapshot.js +6 -8
  171. package/dist/esm/ottochain/transaction.js +51 -3
  172. package/dist/esm/ottochain/types.js +15 -1
  173. package/dist/esm/privacy/index.js +6 -0
  174. package/dist/esm/privacy/sealed-bid.js +209 -0
  175. package/dist/esm/privacy/shield-app.js +127 -0
  176. package/dist/esm/schema/effects.js +145 -0
  177. package/dist/esm/schema/fiber-app.js +139 -8
  178. package/dist/esm/schema/guard-lint.js +337 -0
  179. package/dist/esm/schema/guards.js +228 -0
  180. package/dist/esm/signing.js +74 -0
  181. package/dist/esm/templates/asset-policy.js +182 -0
  182. package/dist/esm/templates/index.js +41 -0
  183. package/dist/esm/templates/machine.js +125 -0
  184. package/dist/esm/templates/migration.js +34 -0
  185. package/dist/esm/templates/state-shape.js +34 -0
  186. package/dist/esm/validation.js +1 -3
  187. package/dist/esm/verify.js +8 -2
  188. package/dist/esm/zk/commit.js +44 -0
  189. package/dist/esm/zk/guard.js +99 -0
  190. package/dist/esm/zk/index.js +19 -0
  191. package/dist/esm/zk/preimage.js +30 -0
  192. package/dist/esm/zk/prover.js +82 -0
  193. package/dist/esm/zk/registry.js +55 -0
  194. package/dist/esm/zk/types.js +25 -0
  195. package/dist/esm/zk/witness.js +15 -0
  196. package/dist/types/apps/compute/index.d.ts +176 -0
  197. package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
  198. package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
  199. package/dist/types/apps/contracts/index.d.ts +81 -221
  200. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +23 -98
  201. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +49 -115
  202. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
  203. package/dist/types/apps/corporate/index.d.ts +1176 -440
  204. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +271 -135
  205. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +279 -74
  206. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +373 -149
  207. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +252 -80
  208. package/dist/types/apps/governance/index.d.ts +368 -470
  209. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +92 -107
  210. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +61 -85
  211. package/dist/types/apps/governance/state-machines/dao-single.d.ts +25 -47
  212. package/dist/types/apps/governance/state-machines/dao-token.d.ts +79 -68
  213. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +95 -125
  214. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +6 -6
  215. package/dist/types/apps/identity/constants.d.ts +33 -5
  216. package/dist/types/apps/identity/index.d.ts +415 -131
  217. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
  218. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +27 -98
  219. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
  220. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
  221. package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
  222. package/dist/types/apps/index.d.ts +9 -5
  223. package/dist/types/apps/lending/assets.d.ts +258 -0
  224. package/dist/types/apps/lending/credit-scoring.d.ts +80 -0
  225. package/dist/types/apps/lending/eligibility.d.ts +83 -0
  226. package/dist/types/apps/lending/index.d.ts +556 -0
  227. package/dist/types/apps/lending/state-machines/index.d.ts +5 -0
  228. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +536 -0
  229. package/dist/types/apps/markets/index.d.ts +181 -276
  230. package/dist/types/apps/markets/state-machines/market-auction.d.ts +25 -49
  231. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +35 -53
  232. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +35 -61
  233. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +65 -86
  234. package/dist/types/apps/markets/state-machines/market-universal.d.ts +12 -12
  235. package/dist/types/apps/oracles/index.d.ts +1 -1
  236. package/dist/types/apps/privacy/index.d.ts +328 -0
  237. package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
  238. package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
  239. package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
  240. package/dist/types/apps/staked-pool/assets.d.ts +53 -0
  241. package/dist/types/apps/staked-pool/base.d.ts +80 -0
  242. package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
  243. package/dist/types/apps/staked-pool/index.d.ts +51 -0
  244. package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
  245. package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
  246. package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
  247. package/dist/types/generated/index.d.ts +5 -5
  248. package/dist/types/generated/openapi.d.ts +1270 -0
  249. package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +5 -5
  250. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +12 -12
  251. package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +11 -11
  252. package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
  253. package/dist/types/index.d.ts +7 -3
  254. package/dist/types/openapi.d.ts +24 -0
  255. package/dist/types/ottochain/genesis-manifest.d.ts +11 -5
  256. package/dist/types/ottochain/index.d.ts +5 -6
  257. package/dist/types/ottochain/metagraph-client.d.ts +49 -7
  258. package/dist/types/ottochain/snapshot.d.ts +6 -6
  259. package/dist/types/ottochain/transaction.d.ts +41 -1
  260. package/dist/types/ottochain/types.d.ts +336 -31
  261. package/dist/types/privacy/index.d.ts +6 -0
  262. package/dist/types/privacy/sealed-bid.d.ts +348 -0
  263. package/dist/types/privacy/shield-app.d.ts +48 -0
  264. package/dist/types/schema/effects.d.ts +141 -0
  265. package/dist/types/schema/fiber-app.d.ts +282 -2
  266. package/dist/types/schema/guard-lint.d.ts +111 -0
  267. package/dist/types/schema/guards.d.ts +146 -0
  268. package/dist/types/signing.d.ts +45 -0
  269. package/dist/types/templates/asset-policy.d.ts +119 -0
  270. package/dist/types/templates/index.d.ts +26 -0
  271. package/dist/types/templates/machine.d.ts +139 -0
  272. package/dist/types/templates/migration.d.ts +34 -0
  273. package/dist/types/templates/state-shape.d.ts +30 -0
  274. package/dist/types/validation.d.ts +22 -217
  275. package/dist/types/verify.d.ts +4 -0
  276. package/dist/types/zk/commit.d.ts +28 -0
  277. package/dist/types/zk/guard.d.ts +46 -0
  278. package/dist/types/zk/index.d.ts +19 -0
  279. package/dist/types/zk/preimage.d.ts +10 -0
  280. package/dist/types/zk/prover.d.ts +34 -0
  281. package/dist/types/zk/registry.d.ts +34 -0
  282. package/dist/types/zk/types.d.ts +33 -0
  283. package/dist/types/zk/witness.d.ts +40 -0
  284. package/package.json +47 -15
  285. package/dist/cjs/ottochain/normalize.js +0 -186
  286. package/dist/esm/ottochain/normalize.js +0 -179
  287. package/dist/types/ottochain/normalize.d.ts +0 -79
@@ -1,196 +1,201 @@
1
- import { defineFiberApp } from "../../../schema/fiber-app.js";
1
+ import { defineFiberApp } from '../../../schema/fiber-app.js';
2
+ import { signerIsParty, signerInSet } from '../../../schema/guards.js';
2
3
  /**
3
4
  * Binary or multi-outcome prediction market with oracle resolution and position staking.
4
5
  */
5
6
  export const marketPredictionDef = defineFiberApp({
6
7
  metadata: {
7
- name: "MarketPrediction",
8
- app: "markets",
9
- type: "prediction",
10
- version: "1.0.0",
11
- description: "Binary or multi-outcome prediction market with oracle resolution and position staking",
8
+ name: 'MarketPrediction',
9
+ app: 'markets',
10
+ type: 'prediction',
11
+ version: '1.0.0',
12
+ description: 'Binary or multi-outcome prediction market with oracle resolution and position staking',
12
13
  crossReferences: {
13
- oracleId: "Links to IdentityOracle that resolves the outcome",
14
+ oracleId: 'Links to IdentityOracle that resolves the outcome',
14
15
  creatorIdentityId: "Links to creator's IdentityAgent",
15
16
  },
16
17
  },
17
18
  createSchema: {
18
- required: ["creator", "outcomes", "oracles", "quorum"],
19
+ required: ['creator', 'outcomes', 'oracles', 'quorum', 'arbiter'],
19
20
  properties: {
20
21
  creator: {
21
- type: "address",
22
- description: "DAG address of the market creator",
22
+ type: 'address',
23
+ description: 'DAG address of the market creator',
24
+ immutable: true,
25
+ },
26
+ arbiter: {
27
+ type: 'address',
28
+ description: 'DAG address of the arbiter authorized to rule on a disputed resolution',
23
29
  immutable: true,
24
30
  },
25
31
  outcomes: {
26
- type: "array",
27
- description: "Valid outcome identifiers",
32
+ type: 'array',
33
+ description: 'Valid outcome identifiers',
28
34
  immutable: true,
29
35
  },
30
36
  oracles: {
31
- type: "array",
32
- description: "Authorized oracle addresses",
37
+ type: 'array',
38
+ description: 'Authorized oracle addresses',
33
39
  immutable: true,
34
40
  },
35
41
  quorum: {
36
- type: "number",
37
- description: "Minimum oracle submissions needed to resolve",
42
+ type: 'number',
43
+ description: 'Minimum oracle submissions needed to resolve',
38
44
  immutable: true,
39
45
  },
40
- deadline: { type: "timestamp", description: "Optional trading deadline" },
46
+ deadline: { type: 'timestamp', description: 'Optional trading deadline' },
41
47
  },
42
48
  },
43
49
  stateSchema: {
44
50
  properties: {
45
- status: { type: "string", computed: true },
46
- creator: { type: "address", immutable: true },
47
- outcomes: { type: "array", immutable: true },
48
- oracles: { type: "array", immutable: true },
49
- quorum: { type: "number", immutable: true },
50
- deadline: { type: "timestamp" },
51
- positions: { type: "object", computed: true },
52
- totalPool: { type: "number", computed: true },
53
- resolutions: { type: "array", computed: true },
54
- finalOutcome: { type: "string", computed: true },
55
- claims: { type: "array", computed: true },
51
+ status: { type: 'string', computed: true },
52
+ creator: { type: 'address', immutable: true },
53
+ arbiter: { type: 'address', immutable: true },
54
+ outcomes: { type: 'array', immutable: true },
55
+ oracles: { type: 'array', immutable: true },
56
+ quorum: { type: 'number', immutable: true },
57
+ deadline: { type: 'timestamp' },
58
+ positions: { type: 'object', computed: true },
59
+ totalPool: { type: 'number', computed: true },
60
+ resolutions: { type: 'array', computed: true },
61
+ finalOutcome: { type: 'string', computed: true },
62
+ claims: { type: 'array', computed: true },
56
63
  },
57
64
  },
58
65
  eventSchemas: {
59
- open: { description: "Open the market for trading" },
66
+ open: { description: 'Open the market for trading' },
60
67
  cancel: {
61
- description: "Cancel the market before opening",
62
- properties: { reason: { type: "string" } },
68
+ description: 'Cancel the market before opening',
69
+ properties: { reason: { type: 'string' } },
63
70
  },
64
71
  take_position: {
65
- description: "Take a position on an outcome",
66
- required: ["outcome", "amount"],
72
+ description: 'Take a position on an outcome',
73
+ required: ['outcome', 'amount'],
67
74
  properties: {
68
- outcome: { type: "string" },
69
- amount: { type: "number", minimum: 0 },
75
+ outcome: { type: 'string' },
76
+ amount: { type: 'number', minimum: 0 },
70
77
  },
71
78
  },
72
- close: { description: "Close trading" },
79
+ close: { description: 'Close trading' },
73
80
  submit_resolution: {
74
- description: "Submit oracle resolution",
75
- required: ["outcome", "proof"],
81
+ description: 'Submit oracle resolution',
82
+ required: ['outcome', 'proof'],
76
83
  properties: {
77
- outcome: { type: "string" },
78
- proof: { type: "string" },
84
+ outcome: { type: 'string' },
85
+ proof: { type: 'string' },
79
86
  },
80
87
  },
81
88
  finalize: {
82
- description: "Finalize market after quorum reached",
83
- properties: { outcome: { type: "string" } },
89
+ description: 'Finalize market after quorum reached',
84
90
  },
85
91
  dispute: {
86
- description: "Dispute the resolution",
87
- required: ["stake"],
92
+ description: 'Dispute the resolution',
93
+ required: ['stake'],
88
94
  properties: {
89
- stake: { type: "number", minimum: 0 },
90
- reason: { type: "string" },
95
+ stake: { type: 'number', minimum: 0 },
96
+ reason: { type: 'string' },
91
97
  },
92
98
  },
93
99
  ruling: {
94
- description: "Judicial ruling on dispute",
100
+ description: 'Judicial ruling on dispute',
95
101
  properties: {
96
- judicialRuling: { type: "boolean" },
97
- outcome: { type: "string" },
98
- rulingId: { type: "string" },
102
+ finalOutcome: { type: 'string' },
103
+ rulingId: { type: 'string' },
99
104
  },
100
105
  },
101
- invalidate: { description: "Invalidate market by oracle consensus" },
106
+ invalidate: { description: 'Invalidate market by oracle consensus' },
102
107
  claim: {
103
- description: "Claim payout after settlement",
104
- properties: { amount: { type: "number" } },
108
+ description: 'Claim payout after settlement',
109
+ properties: { amount: { type: 'number' } },
105
110
  },
106
111
  },
107
112
  states: {
108
113
  PROPOSED: {
109
- id: "PROPOSED",
114
+ id: 'PROPOSED',
110
115
  isFinal: false,
111
116
  metadata: {
112
- label: "Proposed",
113
- description: "Market created but not yet open for trading",
114
- category: "initial",
117
+ label: 'Proposed',
118
+ description: 'Market created but not yet open for trading',
119
+ category: 'initial',
115
120
  },
116
121
  },
117
122
  OPEN: {
118
- id: "OPEN",
123
+ id: 'OPEN',
119
124
  isFinal: false,
120
125
  metadata: {
121
- label: "Open",
122
- description: "Accepting positions on outcomes",
123
- category: "active",
126
+ label: 'Open',
127
+ description: 'Accepting positions on outcomes',
128
+ category: 'active',
124
129
  },
125
130
  },
126
131
  CLOSED: {
127
- id: "CLOSED",
132
+ id: 'CLOSED',
128
133
  isFinal: false,
129
134
  metadata: {
130
- label: "Closed",
131
- description: "No more positions, awaiting resolution",
132
- category: "pending",
135
+ label: 'Closed',
136
+ description: 'No more positions, awaiting resolution',
137
+ category: 'pending',
133
138
  },
134
139
  },
135
140
  RESOLVING: {
136
- id: "RESOLVING",
141
+ id: 'RESOLVING',
137
142
  isFinal: false,
138
143
  metadata: {
139
- label: "Resolving",
140
- description: "Oracle(s) submitting resolution",
141
- category: "pending",
144
+ label: 'Resolving',
145
+ description: 'Oracle(s) submitting resolution',
146
+ category: 'pending',
142
147
  },
143
148
  },
144
149
  DISPUTED: {
145
- id: "DISPUTED",
150
+ id: 'DISPUTED',
146
151
  isFinal: false,
147
152
  metadata: {
148
- label: "Disputed",
149
- description: "Resolution challenged, awaiting arbitration",
150
- category: "pending",
153
+ label: 'Disputed',
154
+ description: 'Resolution challenged, awaiting arbitration',
155
+ category: 'pending',
151
156
  },
152
157
  },
153
158
  SETTLED: {
154
- id: "SETTLED",
159
+ id: 'SETTLED',
155
160
  isFinal: true,
156
161
  metadata: {
157
- label: "Settled",
158
- description: "Outcome finalized, payouts available",
159
- category: "terminal",
162
+ label: 'Settled',
163
+ description: 'Outcome finalized, payouts available',
164
+ category: 'terminal',
160
165
  },
161
166
  },
162
167
  REFUNDED: {
163
- id: "REFUNDED",
168
+ id: 'REFUNDED',
164
169
  isFinal: true,
165
170
  metadata: {
166
- label: "Refunded",
167
- description: "Market invalidated, all positions refunded",
168
- category: "terminal",
171
+ label: 'Refunded',
172
+ description: 'Market invalidated, all positions refunded',
173
+ category: 'terminal',
169
174
  },
170
175
  },
171
176
  CANCELLED: {
172
- id: "CANCELLED",
177
+ id: 'CANCELLED',
173
178
  isFinal: true,
174
179
  metadata: {
175
- label: "Cancelled",
176
- description: "Market cancelled before opening",
177
- category: "terminal",
180
+ label: 'Cancelled',
181
+ description: 'Market cancelled before opening',
182
+ category: 'terminal',
178
183
  },
179
184
  },
180
185
  },
181
- initialState: "PROPOSED",
186
+ initialState: 'PROPOSED',
182
187
  transitions: [
183
188
  {
184
- from: "PROPOSED",
185
- to: "OPEN",
186
- eventName: "open",
187
- guard: { "===": [{ var: "event.agent" }, { var: "state.creator" }] },
189
+ from: 'PROPOSED',
190
+ to: 'OPEN',
191
+ eventName: 'open',
192
+ guard: signerIsParty('state.creator'),
188
193
  effect: {
189
194
  merge: [
190
- { var: "state" },
195
+ { var: 'state' },
191
196
  {
192
- status: "OPEN",
193
- openedAt: { var: "$timestamp" },
197
+ status: 'OPEN',
198
+ openedAt: { var: '$ordinal' },
194
199
  positions: {},
195
200
  totalPool: 0,
196
201
  },
@@ -199,58 +204,51 @@ export const marketPredictionDef = defineFiberApp({
199
204
  dependencies: [],
200
205
  },
201
206
  {
202
- from: "PROPOSED",
203
- to: "CANCELLED",
204
- eventName: "cancel",
205
- guard: { "===": [{ var: "event.agent" }, { var: "state.creator" }] },
207
+ from: 'PROPOSED',
208
+ to: 'CANCELLED',
209
+ eventName: 'cancel',
210
+ guard: signerIsParty('state.creator'),
206
211
  effect: {
207
212
  merge: [
208
- { var: "state" },
213
+ { var: 'state' },
209
214
  {
210
- status: "CANCELLED",
211
- cancelledAt: { var: "$timestamp" },
212
- reason: { var: "event.reason" },
215
+ status: 'CANCELLED',
216
+ cancelledAt: { var: '$ordinal' },
217
+ reason: { var: 'event.reason' },
213
218
  },
214
219
  ],
215
220
  },
216
221
  dependencies: [],
217
222
  },
218
223
  {
219
- from: "OPEN",
220
- to: "OPEN",
221
- eventName: "take_position",
224
+ from: 'OPEN',
225
+ to: 'OPEN',
226
+ eventName: 'take_position',
222
227
  guard: {
223
228
  and: [
224
- { ">": [{ var: "event.amount" }, 0] },
225
- { in: [{ var: "event.outcome" }, { var: "state.outcomes" }] },
229
+ { '>': [{ var: 'event.amount' }, 0] },
230
+ { in: [{ var: 'event.outcome' }, { var: 'state.outcomes' }] },
226
231
  {
227
- or: [
228
- { "!": [{ var: "state.deadline" }] },
229
- { "<=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
230
- ],
232
+ or: [{ '!': [{ var: 'state.deadline' }] }, { '<=': [{ var: '$ordinal' }, { var: 'state.deadline' }] }],
231
233
  },
232
234
  ],
233
235
  },
234
236
  effect: {
235
237
  merge: [
236
- { var: "state" },
238
+ { var: 'state' },
237
239
  {
238
240
  positions: {
239
241
  merge: [
240
- { var: "state.positions" },
242
+ { var: 'state.positions' },
241
243
  {
242
244
  __computed: {
243
- cat: [
244
- { var: "event.agent" },
245
- "_",
246
- { var: "event.outcome" },
247
- ],
245
+ cat: [{ var: 'event.agent' }, '_', { var: 'event.outcome' }],
248
246
  },
249
247
  },
250
248
  ],
251
249
  },
252
250
  totalPool: {
253
- "+": [{ var: "state.totalPool" }, { var: "event.amount" }],
251
+ '+': [{ var: 'state.totalPool' }, { var: 'event.amount' }],
254
252
  },
255
253
  },
256
254
  ],
@@ -258,44 +256,38 @@ export const marketPredictionDef = defineFiberApp({
258
256
  dependencies: [],
259
257
  },
260
258
  {
261
- from: "OPEN",
262
- to: "CLOSED",
263
- eventName: "close",
259
+ from: 'OPEN',
260
+ to: 'CLOSED',
261
+ eventName: 'close',
264
262
  guard: {
265
263
  or: [
266
- { "===": [{ var: "event.agent" }, { var: "state.creator" }] },
264
+ signerIsParty('state.creator'),
267
265
  {
268
- and: [
269
- { var: "state.deadline" },
270
- { ">=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
271
- ],
266
+ and: [{ var: 'state.deadline' }, { '>=': [{ var: '$ordinal' }, { var: 'state.deadline' }] }],
272
267
  },
273
268
  ],
274
269
  },
275
270
  effect: {
276
- merge: [
277
- { var: "state" },
278
- { status: "CLOSED", closedAt: { var: "$timestamp" } },
279
- ],
271
+ merge: [{ var: 'state' }, { status: 'CLOSED', closedAt: { var: '$ordinal' } }],
280
272
  },
281
273
  dependencies: [],
282
274
  },
283
275
  {
284
- from: "CLOSED",
285
- to: "RESOLVING",
286
- eventName: "submit_resolution",
287
- guard: { in: [{ var: "event.agent" }, { var: "state.oracles" }] },
276
+ from: 'CLOSED',
277
+ to: 'RESOLVING',
278
+ eventName: 'submit_resolution',
279
+ guard: signerInSet('state.oracles'),
288
280
  effect: {
289
281
  merge: [
290
- { var: "state" },
282
+ { var: 'state' },
291
283
  {
292
- status: "RESOLVING",
284
+ status: 'RESOLVING',
293
285
  resolutions: [
294
286
  {
295
- oracle: { var: "event.agent" },
296
- outcome: { var: "event.outcome" },
297
- proof: { var: "event.proof" },
298
- submittedAt: { var: "$timestamp" },
287
+ oracle: { var: 'event.agent' },
288
+ outcome: { var: 'event.outcome' },
289
+ proof: { var: 'event.proof' },
290
+ submittedAt: { var: '$ordinal' },
299
291
  },
300
292
  ],
301
293
  },
@@ -304,19 +296,16 @@ export const marketPredictionDef = defineFiberApp({
304
296
  dependencies: [],
305
297
  },
306
298
  {
307
- from: "RESOLVING",
308
- to: "RESOLVING",
309
- eventName: "submit_resolution",
299
+ from: 'RESOLVING',
300
+ to: 'RESOLVING',
301
+ eventName: 'submit_resolution',
310
302
  guard: {
311
303
  and: [
312
- { in: [{ var: "event.agent" }, { var: "state.oracles" }] },
304
+ signerInSet('state.oracles'),
313
305
  {
314
- "!": [
306
+ '!': [
315
307
  {
316
- in: [
317
- { var: "event.agent" },
318
- { map: [{ var: "state.resolutions" }, { var: "oracle" }] },
319
- ],
308
+ in: [{ var: 'event.agent' }, { map: [{ var: 'state.resolutions' }, { var: 'oracle' }] }],
320
309
  },
321
310
  ],
322
311
  },
@@ -324,17 +313,17 @@ export const marketPredictionDef = defineFiberApp({
324
313
  },
325
314
  effect: {
326
315
  merge: [
327
- { var: "state" },
316
+ { var: 'state' },
328
317
  {
329
318
  resolutions: {
330
319
  cat: [
331
- { var: "state.resolutions" },
320
+ { var: 'state.resolutions' },
332
321
  [
333
322
  {
334
- oracle: { var: "event.agent" },
335
- outcome: { var: "event.outcome" },
336
- proof: { var: "event.proof" },
337
- submittedAt: { var: "$timestamp" },
323
+ oracle: { var: 'event.agent' },
324
+ outcome: { var: 'event.outcome' },
325
+ proof: { var: 'event.proof' },
326
+ submittedAt: { var: '$ordinal' },
338
327
  },
339
328
  ],
340
329
  ],
@@ -345,19 +334,26 @@ export const marketPredictionDef = defineFiberApp({
345
334
  dependencies: [],
346
335
  },
347
336
  {
348
- from: "RESOLVING",
349
- to: "SETTLED",
350
- eventName: "finalize",
337
+ from: 'RESOLVING',
338
+ to: 'SETTLED',
339
+ eventName: 'finalize',
340
+ // 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)
351
341
  guard: {
352
- ">=": [{ size: { var: "state.resolutions" } }, { var: "state.quorum" }],
342
+ and: [
343
+ signerInSet('state.oracles'),
344
+ {
345
+ '>=': [{ count: { var: 'state.resolutions' } }, { var: 'state.quorum' }],
346
+ },
347
+ ],
353
348
  },
354
349
  effect: {
355
350
  merge: [
356
- { var: "state" },
351
+ { var: 'state' },
357
352
  {
358
- status: "SETTLED",
359
- settledAt: { var: "$timestamp" },
360
- finalOutcome: { var: "event.outcome" },
353
+ status: 'SETTLED',
354
+ settledAt: { var: '$ordinal' },
355
+ // finalOutcome derives from the quorum-agreed resolution, not a raw event field
356
+ finalOutcome: { var: 'state.resolutions.0.outcome' },
361
357
  claims: [],
362
358
  },
363
359
  ],
@@ -365,54 +361,56 @@ export const marketPredictionDef = defineFiberApp({
365
361
  dependencies: [],
366
362
  },
367
363
  {
368
- from: "RESOLVING",
369
- to: "DISPUTED",
370
- eventName: "dispute",
364
+ from: 'RESOLVING',
365
+ to: 'DISPUTED',
366
+ eventName: 'dispute',
371
367
  guard: {
372
368
  and: [
373
369
  {
374
- ">": [
370
+ '>': [
375
371
  {
376
- size: {
377
- filter: [
378
- { var: "state.positions" },
379
- { "===": [{ var: "agent" }, { var: "event.agent" }] },
380
- ],
381
- },
372
+ length: [
373
+ {
374
+ filter: [{ var: 'state.positions' }, { '===': [{ var: 'agent' }, { var: 'event.agent' }] }],
375
+ },
376
+ ],
382
377
  },
383
378
  0,
384
379
  ],
385
380
  },
386
- { var: "event.stake" },
381
+ { var: 'event.stake' },
387
382
  ],
388
383
  },
389
384
  effect: {
390
385
  merge: [
391
- { var: "state" },
386
+ { var: 'state' },
392
387
  {
393
- status: "DISPUTED",
394
- disputedAt: { var: "$timestamp" },
395
- disputedBy: { var: "event.agent" },
396
- disputeStake: { var: "event.stake" },
397
- disputeReason: { var: "event.reason" },
388
+ status: 'DISPUTED',
389
+ disputedAt: { var: '$ordinal' },
390
+ disputedBy: { var: 'event.agent' },
391
+ disputeStake: { var: 'event.stake' },
392
+ disputeReason: { var: 'event.reason' },
398
393
  },
399
394
  ],
400
395
  },
401
396
  dependencies: [],
402
397
  },
403
398
  {
404
- from: "DISPUTED",
405
- to: "SETTLED",
406
- eventName: "ruling",
407
- guard: { var: "event.judicialRuling" },
399
+ from: 'DISPUTED',
400
+ to: 'SETTLED',
401
+ eventName: 'ruling',
402
+ // 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)
403
+ guard: {
404
+ and: [signerIsParty('state.arbiter'), { in: [{ var: 'event.finalOutcome' }, { var: 'state.outcomes' }] }],
405
+ },
408
406
  effect: {
409
407
  merge: [
410
- { var: "state" },
408
+ { var: 'state' },
411
409
  {
412
- status: "SETTLED",
413
- settledAt: { var: "$timestamp" },
414
- finalOutcome: { var: "event.outcome" },
415
- rulingId: { var: "event.rulingId" },
410
+ status: 'SETTLED',
411
+ settledAt: { var: '$ordinal' },
412
+ finalOutcome: { var: 'event.finalOutcome' },
413
+ rulingId: { var: 'event.rulingId' },
416
414
  claims: [],
417
415
  },
418
416
  ],
@@ -420,70 +418,65 @@ export const marketPredictionDef = defineFiberApp({
420
418
  dependencies: [],
421
419
  },
422
420
  {
423
- from: "RESOLVING",
424
- to: "REFUNDED",
425
- eventName: "invalidate",
421
+ from: 'RESOLVING',
422
+ to: 'REFUNDED',
423
+ eventName: 'invalidate',
426
424
  guard: {
427
- ">=": [
425
+ '>=': [
428
426
  {
429
- size: {
430
- filter: [
431
- { var: "state.resolutions" },
432
- { "===": [{ var: "outcome" }, "INVALID"] },
433
- ],
434
- },
427
+ length: [
428
+ {
429
+ filter: [{ var: 'state.resolutions' }, { '===': [{ var: 'outcome' }, 'INVALID'] }],
430
+ },
431
+ ],
435
432
  },
436
- { var: "state.quorum" },
433
+ { var: 'state.quorum' },
437
434
  ],
438
435
  },
439
436
  effect: {
440
437
  merge: [
441
- { var: "state" },
438
+ { var: 'state' },
442
439
  {
443
- status: "REFUNDED",
444
- refundedAt: { var: "$timestamp" },
445
- reason: "oracle_invalidation",
440
+ status: 'REFUNDED',
441
+ refundedAt: { var: '$ordinal' },
442
+ reason: 'oracle_invalidation',
446
443
  },
447
444
  ],
448
445
  },
449
446
  dependencies: [],
450
447
  },
451
448
  {
452
- from: "SETTLED",
453
- to: "SETTLED",
454
- eventName: "claim",
449
+ from: 'SETTLED',
450
+ to: 'SETTLED',
451
+ eventName: 'claim',
455
452
  guard: {
456
453
  and: [
457
454
  {
458
- ">": [
455
+ '>': [
459
456
  {
460
- size: {
461
- filter: [
462
- { var: "state.positions" },
463
- {
464
- and: [
465
- { "===": [{ var: "agent" }, { var: "event.agent" }] },
466
- {
467
- "===": [
468
- { var: "outcome" },
469
- { var: "state.finalOutcome" },
470
- ],
471
- },
472
- ],
473
- },
474
- ],
475
- },
457
+ length: [
458
+ {
459
+ filter: [
460
+ { var: 'state.positions' },
461
+ {
462
+ and: [
463
+ { '===': [{ var: 'agent' }, { var: 'event.agent' }] },
464
+ {
465
+ '===': [{ var: 'outcome' }, { var: 'state.finalOutcome' }],
466
+ },
467
+ ],
468
+ },
469
+ ],
470
+ },
471
+ ],
476
472
  },
477
473
  0,
478
474
  ],
479
475
  },
480
476
  {
481
- "!": [
477
+ '!': [
482
478
  {
483
- in: [
484
- { var: "event.agent" },
485
- { map: [{ var: "state.claims" }, { var: "agent" }] },
486
- ],
479
+ in: [{ var: 'event.agent' }, { map: [{ var: 'state.claims' }, { var: 'agent' }] }],
487
480
  },
488
481
  ],
489
482
  },
@@ -491,16 +484,16 @@ export const marketPredictionDef = defineFiberApp({
491
484
  },
492
485
  effect: {
493
486
  merge: [
494
- { var: "state" },
487
+ { var: 'state' },
495
488
  {
496
489
  claims: {
497
490
  cat: [
498
- { var: "state.claims" },
491
+ { var: 'state.claims' },
499
492
  [
500
493
  {
501
- agent: { var: "event.agent" },
502
- amount: { var: "event.amount" },
503
- claimedAt: { var: "$timestamp" },
494
+ agent: { var: 'event.agent' },
495
+ amount: { var: 'event.amount' },
496
+ claimedAt: { var: '$ordinal' },
504
497
  },
505
498
  ],
506
499
  ],