@ottochain/sdk 2.4.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 (225) 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 +1 -1
  5. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
  6. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
  7. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
  8. package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
  9. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
  10. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
  11. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
  12. package/dist/cjs/apps/governance/index.js +7 -7
  13. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
  14. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
  15. package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
  16. package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
  17. package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
  18. package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
  19. package/dist/cjs/apps/identity/constants.js +16 -24
  20. package/dist/cjs/apps/identity/index.js +1 -1
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
  23. package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
  24. package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
  25. package/dist/cjs/apps/index.js +4 -1
  26. package/dist/cjs/apps/lending/assets.js +41 -17
  27. package/dist/cjs/apps/lending/credit-scoring.js +4 -4
  28. package/dist/cjs/apps/lending/eligibility.js +9 -25
  29. package/dist/cjs/apps/lending/index.js +1 -1
  30. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
  31. package/dist/cjs/apps/markets/index.js +1 -1
  32. package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
  33. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
  34. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
  35. package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
  36. package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
  37. package/dist/cjs/apps/oracles/index.js +1 -1
  38. package/dist/cjs/apps/privacy/index.js +67 -0
  39. package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
  40. package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
  41. package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
  42. package/dist/cjs/apps/staked-pool/assets.js +103 -0
  43. package/dist/cjs/apps/staked-pool/base.js +498 -0
  44. package/dist/cjs/apps/staked-pool/consumer.js +55 -0
  45. package/dist/cjs/apps/staked-pool/index.js +83 -0
  46. package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
  47. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
  48. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
  49. package/dist/cjs/generated/google/protobuf/struct.js +1 -1
  50. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  51. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  52. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  53. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  54. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  55. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
  56. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  57. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  58. package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
  59. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  60. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  61. package/dist/cjs/index.js +20 -3
  62. package/dist/cjs/ottochain/genesis-manifest.js +6 -0
  63. package/dist/cjs/ottochain/metagraph-client.js +16 -8
  64. package/dist/cjs/ottochain/snapshot.js +2 -4
  65. package/dist/cjs/ottochain/transaction.js +10 -0
  66. package/dist/cjs/privacy/sealed-bid.js +85 -82
  67. package/dist/cjs/privacy/shield-app.js +32 -32
  68. package/dist/cjs/schema/effects.js +117 -1
  69. package/dist/cjs/schema/fiber-app.js +132 -3
  70. package/dist/cjs/schema/guard-lint.js +3 -12
  71. package/dist/cjs/schema/guards.js +38 -38
  72. package/dist/cjs/templates/asset-policy.js +190 -0
  73. package/dist/cjs/templates/index.js +86 -0
  74. package/dist/cjs/templates/machine.js +130 -0
  75. package/dist/cjs/templates/migration.js +39 -0
  76. package/dist/cjs/templates/state-shape.js +38 -0
  77. package/dist/cjs/validation.js +1 -3
  78. package/dist/esm/apps/compute/index.js +29 -0
  79. package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
  80. package/dist/esm/apps/compute/state-machines/index.js +5 -0
  81. package/dist/esm/apps/contracts/index.js +4 -4
  82. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
  83. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
  84. package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
  85. package/dist/esm/apps/corporate/index.js +2 -2
  86. package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
  87. package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
  88. package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
  89. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
  90. package/dist/esm/apps/governance/index.js +10 -10
  91. package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
  92. package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
  93. package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
  94. package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
  95. package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
  96. package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
  97. package/dist/esm/apps/identity/constants.js +18 -26
  98. package/dist/esm/apps/identity/index.js +8 -8
  99. package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
  100. package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
  101. package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
  102. package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
  103. package/dist/esm/apps/index.js +9 -6
  104. package/dist/esm/apps/lending/assets.js +41 -17
  105. package/dist/esm/apps/lending/credit-scoring.js +6 -6
  106. package/dist/esm/apps/lending/eligibility.js +10 -26
  107. package/dist/esm/apps/lending/index.js +5 -5
  108. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
  109. package/dist/esm/apps/markets/index.js +5 -5
  110. package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
  111. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
  112. package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
  113. package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
  114. package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
  115. package/dist/esm/apps/oracles/index.js +3 -3
  116. package/dist/esm/apps/privacy/index.js +56 -0
  117. package/dist/esm/apps/privacy/state-machines/index.js +6 -0
  118. package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
  119. package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
  120. package/dist/esm/apps/staked-pool/assets.js +91 -0
  121. package/dist/esm/apps/staked-pool/base.js +493 -0
  122. package/dist/esm/apps/staked-pool/consumer.js +49 -0
  123. package/dist/esm/apps/staked-pool/index.js +60 -0
  124. package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
  125. package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
  126. package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
  127. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  128. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  129. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  130. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  131. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  132. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  133. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
  134. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  135. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  136. package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
  137. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  138. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  139. package/dist/esm/index.js +10 -4
  140. package/dist/esm/ottochain/genesis-manifest.js +6 -0
  141. package/dist/esm/ottochain/metagraph-client.js +16 -8
  142. package/dist/esm/ottochain/snapshot.js +2 -4
  143. package/dist/esm/ottochain/transaction.js +8 -0
  144. package/dist/esm/privacy/index.js +2 -2
  145. package/dist/esm/privacy/sealed-bid.js +87 -84
  146. package/dist/esm/privacy/shield-app.js +33 -33
  147. package/dist/esm/schema/effects.js +110 -0
  148. package/dist/esm/schema/fiber-app.js +127 -3
  149. package/dist/esm/schema/guard-lint.js +3 -12
  150. package/dist/esm/schema/guards.js +36 -37
  151. package/dist/esm/templates/asset-policy.js +182 -0
  152. package/dist/esm/templates/index.js +41 -0
  153. package/dist/esm/templates/machine.js +125 -0
  154. package/dist/esm/templates/migration.js +34 -0
  155. package/dist/esm/templates/state-shape.js +34 -0
  156. package/dist/esm/validation.js +1 -3
  157. package/dist/esm/zk/index.js +4 -4
  158. package/dist/types/apps/compute/index.d.ts +176 -0
  159. package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
  160. package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
  161. package/dist/types/apps/contracts/index.d.ts +14 -14
  162. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
  163. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
  164. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
  165. package/dist/types/apps/corporate/index.d.ts +162 -162
  166. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
  167. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
  168. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
  169. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
  170. package/dist/types/apps/governance/index.d.ts +81 -81
  171. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
  172. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
  173. package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
  174. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
  175. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
  176. package/dist/types/apps/identity/constants.d.ts +2 -2
  177. package/dist/types/apps/identity/index.d.ts +70 -70
  178. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
  179. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
  180. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
  181. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
  182. package/dist/types/apps/index.d.ts +9 -6
  183. package/dist/types/apps/lending/assets.d.ts +2 -2
  184. package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
  185. package/dist/types/apps/lending/eligibility.d.ts +2 -2
  186. package/dist/types/apps/lending/index.d.ts +20 -12
  187. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
  188. package/dist/types/apps/markets/index.d.ts +76 -76
  189. package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
  190. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
  191. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
  192. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
  193. package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
  194. package/dist/types/apps/oracles/index.d.ts +1 -1
  195. package/dist/types/apps/privacy/index.d.ts +328 -0
  196. package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
  197. package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
  198. package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
  199. package/dist/types/apps/staked-pool/assets.d.ts +53 -0
  200. package/dist/types/apps/staked-pool/base.d.ts +80 -0
  201. package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
  202. package/dist/types/apps/staked-pool/index.d.ts +51 -0
  203. package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
  204. package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
  205. package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
  206. package/dist/types/generated/openapi.d.ts +13 -0
  207. package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
  208. package/dist/types/index.d.ts +3 -3
  209. package/dist/types/openapi.d.ts +4 -2
  210. package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
  211. package/dist/types/ottochain/transaction.d.ts +9 -1
  212. package/dist/types/ottochain/types.d.ts +1 -1
  213. package/dist/types/privacy/index.d.ts +2 -2
  214. package/dist/types/privacy/sealed-bid.d.ts +9 -9
  215. package/dist/types/privacy/shield-app.d.ts +1 -1
  216. package/dist/types/schema/effects.d.ts +107 -0
  217. package/dist/types/schema/fiber-app.d.ts +281 -0
  218. package/dist/types/schema/guards.d.ts +12 -0
  219. package/dist/types/templates/asset-policy.d.ts +119 -0
  220. package/dist/types/templates/index.d.ts +26 -0
  221. package/dist/types/templates/machine.d.ts +139 -0
  222. package/dist/types/templates/migration.d.ts +34 -0
  223. package/dist/types/templates/state-shape.d.ts +30 -0
  224. package/dist/types/zk/index.d.ts +4 -4
  225. package/package.json +31 -13
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * Compute Application — bare computation substrates.
4
+ *
5
+ * Turing-complete JLVM substrates with no parties, assets, or governance: pure
6
+ * in-place state evolution. The flagship is `rule110`, an in-place Rule-110
7
+ * cellular automaton that proves the account layer is Turing-complete.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { getComputeDefinition, COMPUTE_DEFINITIONS } from '@ottochain/sdk/apps/compute';
12
+ *
13
+ * const rule110Def = getComputeDefinition('rule110');
14
+ * ```
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.COMPUTE_DEFINITIONS = exports.computeRule110Def = void 0;
20
+ exports.getComputeDefinition = getComputeDefinition;
21
+ const index_js_1 = require("./state-machines/index.js");
22
+ Object.defineProperty(exports, "computeRule110Def", { enumerable: true, get: function () { return index_js_1.computeRule110Def; } });
23
+ /** All compute (bare-computation) state machine definitions. */
24
+ exports.COMPUTE_DEFINITIONS = {
25
+ rule110: index_js_1.computeRule110Def,
26
+ };
27
+ /**
28
+ * Get a compute state machine definition by type.
29
+ * @param type - 'rule110' (default).
30
+ */
31
+ function getComputeDefinition(type = 'rule110') {
32
+ return exports.COMPUTE_DEFINITIONS[type];
33
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeRule110Def = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Rule-110 cellular automaton — an in-place, Turing-complete JLVM substrate.
7
+ *
8
+ * Each `step` event advances ONE CA generation in place:
9
+ * next[i] = R110(tape[i-1], tape[i], tape[i+1])
10
+ * with fixed-0 boundaries, computed as a JLVM `map` over a STORED index array
11
+ * (`idx`) — no bitwise ops, no spawn, no zip. The fiber loops RUNNING → RUNNING;
12
+ * the chain of transitions IS the Turing-machine tape-head.
13
+ *
14
+ * Rule 110: out = 1 iff p ∈ {1,2,3,5,6}, where p = 4·left + 2·center + right.
15
+ *
16
+ * THE INLINED-CELL CONSTRAINT (do not "simplify" with `let`)
17
+ * ---------------------------------------------------------
18
+ * Inside `map`, a primitive element is overlaid into the eval context, so
19
+ * `{var:""}` coerces to the element int ONLY in arithmetic position. Opening a
20
+ * `let` scope over the element makes `{var:""}` resolve to the whole context
21
+ * object (`{"tag":"map"}`) and any `cat` on it throws `JsonLogicRuntimeError`.
22
+ * Therefore the per-cell predicate P is fully INLINED at each of the five `==`
23
+ * comparison sites (P appears 5×; each neighbour read `nb` reads the tape once
24
+ * per occurrence). This is the only form that works inside `map`. It is built
25
+ * programmatically below to avoid hand-duplicating P, but it expands to the
26
+ * inlined AST — NOT a `let`-form.
27
+ *
28
+ * Neighbour access uses a computed `var` PATH with a null-default boundary:
29
+ * nb(off) = { var: [ { cat: ["state.tape.", off] }, 0 ] }
30
+ * An out-of-bounds index (-1 or N) resolves to the default `0` (fixed-0
31
+ * boundary), so `tape`/`idx` stay exactly length N forever.
32
+ *
33
+ * Verified end-to-end against `@constellation-network/metagraph-sdk-jlvm@1.8.0-rc.5`:
34
+ * the effect reproduces the canonical left-growing Rule-110 fractal exactly,
35
+ * `idx` is byte-identical across every generation, and the unbounded/bounded
36
+ * guard halts at `gen == maxGen`.
37
+ */
38
+ // nb(off): read tape at element-relative offset, fixed-0 boundary via null-default.
39
+ const nb = (off) => ({
40
+ var: [{ cat: ['state.tape.', off] }, 0],
41
+ });
42
+ // P = 4·left + 2·center + right (element {var:""} is the cell index i).
43
+ const P = {
44
+ '+': [{ '*': [4, nb({ '-': [{ var: '' }, 1] })] }, { '*': [2, nb({ var: '' })] }, nb({ '+': [{ var: '' }, 1] })],
45
+ };
46
+ // CELL: 1 iff P ∈ {1,2,3,5,6}, else 0. P is INLINED at each `==` site (B1: never
47
+ // `let` over the map element). Built from the rule-110 truth set programmatically.
48
+ const CELL = {
49
+ if: [{ or: [1, 2, 3, 5, 6].map((k) => ({ '==': [P, k] })) }, 1, 0],
50
+ };
51
+ /**
52
+ * Rule-110 cellular-automaton fiber definition.
53
+ *
54
+ * Trust model: PUBLIC / PERMISSIONLESS / pure compute. No assets, no parties,
55
+ * no owner — anyone may submit `step`. The DoS surface is bounded by per-event
56
+ * gas/fee (~987 gas/cell) and the optional `maxGen` halt bound (absent ⇒
57
+ * unbounded; runs until fees stop).
58
+ */
59
+ exports.computeRule110Def = (0, fiber_app_js_1.defineFiberApp)({
60
+ metadata: {
61
+ name: 'ComputeRule110',
62
+ app: 'compute',
63
+ type: 'rule110',
64
+ version: '1.0.0',
65
+ description: 'In-place Rule-110 cellular automaton — a Turing-complete substrate. Each ' +
66
+ '`step` advances one generation: next[i]=R110(tape[i-1],tape[i],tape[i+1]) ' +
67
+ 'with fixed-0 boundaries, as a JLVM map over a stored index array (no ' +
68
+ 'bitwise, no spawn, no zip).',
69
+ },
70
+ createSchema: {
71
+ // maxGen is NOT required: absent ⇒ unbounded (the step guard uses `missing`).
72
+ required: ['tape', 'idx'],
73
+ properties: {
74
+ tape: {
75
+ type: 'array',
76
+ items: { type: 'integer' },
77
+ description: '0/1 CA row (length N).',
78
+ },
79
+ idx: {
80
+ type: 'array',
81
+ items: { type: 'integer' },
82
+ immutable: true,
83
+ description: 'Monotone index array [0..N-1]; REQUIRED (no range/iota opcode). ' +
84
+ 'Never mutated — the effect preserves it across every generation.',
85
+ },
86
+ gen: {
87
+ type: 'integer',
88
+ default: 0,
89
+ description: 'Generation counter (TM step count).',
90
+ },
91
+ maxGen: {
92
+ type: 'integer',
93
+ description: 'Optional halt bound; absent ⇒ unbounded.',
94
+ },
95
+ },
96
+ },
97
+ stateSchema: {
98
+ properties: {
99
+ tape: { type: 'array', items: { type: 'integer' }, computed: true },
100
+ idx: { type: 'array', items: { type: 'integer' }, immutable: true },
101
+ gen: { type: 'integer', computed: true },
102
+ maxGen: { type: 'integer' },
103
+ status: { type: 'string', computed: true },
104
+ },
105
+ },
106
+ eventSchemas: {
107
+ step: { description: 'Advance one CA generation in place.' },
108
+ halt: { description: 'Terminate once maxGen is reached (gated by gen >= maxGen).' },
109
+ },
110
+ states: {
111
+ RUNNING: {
112
+ id: 'RUNNING',
113
+ isFinal: false,
114
+ metadata: {
115
+ label: 'Running',
116
+ description: 'CA evolving; each step = one generation.',
117
+ category: 'active',
118
+ },
119
+ },
120
+ HALTED: {
121
+ id: 'HALTED',
122
+ isFinal: true,
123
+ metadata: {
124
+ label: 'Halted',
125
+ description: 'maxGen reached; terminal.',
126
+ category: 'terminal',
127
+ },
128
+ },
129
+ },
130
+ initialState: 'RUNNING',
131
+ transitions: [
132
+ {
133
+ // One `step` = one generation. Loops in place (the TM tape-head).
134
+ from: 'RUNNING',
135
+ to: 'RUNNING',
136
+ eventName: 'step',
137
+ // Unbounded when maxGen is absent (`missing` → true); else gate on gen < maxGen.
138
+ guard: {
139
+ or: [{ missing: ['state.maxGen'] }, { '<': [{ var: 'state.gen' }, { var: 'state.maxGen' }] }],
140
+ },
141
+ // Effect result IS the new stateData: merge[state, overrides] preserves
142
+ // idx/maxGen and overwrites tape/gen.
143
+ effect: {
144
+ merge: [
145
+ { var: 'state' },
146
+ {
147
+ tape: { map: [{ var: 'state.idx' }, CELL] },
148
+ gen: { '+': [{ var: 'state.gen' }, 1] },
149
+ },
150
+ ],
151
+ },
152
+ dependencies: [],
153
+ },
154
+ {
155
+ // halt is rejected until exhaustion: gen >= maxGen.
156
+ from: 'RUNNING',
157
+ to: 'HALTED',
158
+ eventName: 'halt',
159
+ guard: { '>=': [{ var: 'state.gen' }, { var: 'state.maxGen' }] },
160
+ effect: { merge: [{ var: 'state' }, { status: 'halted' }] },
161
+ dependencies: [],
162
+ },
163
+ ],
164
+ });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Compute (bare-computation) state machine definitions.
4
+ * Re-exports from TypeScript definition files.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.computeRule110Def = void 0;
8
+ var compute_rule110_js_1 = require("./compute-rule110.js");
9
+ Object.defineProperty(exports, "computeRule110Def", { enumerable: true, get: function () { return compute_rule110_js_1.computeRule110Def; } });
@@ -59,7 +59,7 @@ exports.CONTRACTS_DEFINITIONS = {
59
59
  * Get a contract state machine definition by type.
60
60
  * @param type - 'universal' | 'agreement' | 'escrow' (default: 'agreement')
61
61
  */
62
- function getContractDefinition(type = "agreement") {
62
+ function getContractDefinition(type = 'agreement') {
63
63
  return exports.CONTRACTS_DEFINITIONS[type];
64
64
  }
65
65
  /** @deprecated Use getContractDefinition('escrow') */
@@ -8,203 +8,194 @@ const guards_js_1 = require("../../../schema/guards.js");
8
8
  */
9
9
  exports.contractAgreementDef = (0, fiber_app_js_1.defineFiberApp)({
10
10
  metadata: {
11
- name: "ContractAgreement",
12
- app: "contracts",
13
- type: "agreement",
14
- version: "1.0.0",
15
- description: "Two-party agreement with mutual completion attestation and dispute resolution",
11
+ name: 'ContractAgreement',
12
+ app: 'contracts',
13
+ type: 'agreement',
14
+ version: '1.0.0',
15
+ description: 'Two-party agreement with mutual completion attestation and dispute resolution',
16
16
  crossReferences: {
17
17
  proposerIdentityId: {
18
- machine: "identity-agent",
19
- field: "proposer",
18
+ machine: 'identity-agent',
19
+ field: 'proposer',
20
20
  description: "Links to proposer's AgentIdentity fiber",
21
21
  },
22
22
  counterpartyIdentityId: {
23
- machine: "identity-agent",
24
- field: "counterparty",
23
+ machine: 'identity-agent',
24
+ field: 'counterparty',
25
25
  description: "Links to counterparty's AgentIdentity fiber",
26
26
  },
27
27
  escrowId: {
28
- machine: "contract-escrow",
29
- field: "escrowId",
30
- description: "Links to Escrow if payment is escrowed",
28
+ machine: 'contract-escrow',
29
+ field: 'escrowId',
30
+ description: 'Links to Escrow if payment is escrowed',
31
31
  },
32
32
  arbitrationPoolId: {
33
- machine: "arbitration-pool",
34
- field: "arbitrationPoolId",
35
- description: "Links to ArbitrationPool for dispute resolution",
33
+ machine: 'arbitration-pool',
34
+ field: 'arbitrationPoolId',
35
+ description: 'Links to ArbitrationPool for dispute resolution',
36
36
  },
37
37
  },
38
38
  },
39
39
  createSchema: {
40
- required: ["proposer", "counterparty", "arbitrator"],
40
+ required: ['proposer', 'counterparty', 'arbitrator'],
41
41
  properties: {
42
42
  proposer: {
43
- type: "address",
44
- description: "DAG address of the proposer",
43
+ type: 'address',
44
+ description: 'DAG address of the proposer',
45
45
  immutable: true,
46
46
  },
47
47
  counterparty: {
48
- type: "address",
49
- description: "DAG address of the counterparty",
48
+ type: 'address',
49
+ description: 'DAG address of the counterparty',
50
50
  immutable: true,
51
51
  },
52
52
  arbitrator: {
53
- type: "address",
54
- description: "DAG address of the arbitrator authorized to resolve a dispute",
53
+ type: 'address',
54
+ description: 'DAG address of the arbitrator authorized to resolve a dispute',
55
55
  immutable: true,
56
56
  },
57
57
  },
58
58
  },
59
59
  stateSchema: {
60
60
  properties: {
61
- status: { type: "string" },
62
- proposer: { type: "address" },
63
- counterparty: { type: "address" },
64
- arbitrator: { type: "address", immutable: true },
65
- completions: { type: "array" },
66
- acceptedAt: { type: "integer", nullable: true },
67
- rejectedAt: { type: "integer", nullable: true },
68
- rejectReason: { type: "string", nullable: true },
69
- cancelledAt: { type: "integer", nullable: true },
70
- completedAt: { type: "integer", nullable: true },
71
- disputedAt: { type: "integer", nullable: true },
72
- disputeReason: { type: "string", nullable: true },
73
- disputedBy: { type: "address", nullable: true },
74
- resolvedAt: { type: "integer", nullable: true },
75
- resolution: { type: "string", nullable: true },
76
- rulingId: { type: "string", nullable: true },
61
+ status: { type: 'string' },
62
+ proposer: { type: 'address' },
63
+ counterparty: { type: 'address' },
64
+ arbitrator: { type: 'address', immutable: true },
65
+ completions: { type: 'array' },
66
+ acceptedAt: { type: 'integer', nullable: true },
67
+ rejectedAt: { type: 'integer', nullable: true },
68
+ rejectReason: { type: 'string', nullable: true },
69
+ cancelledAt: { type: 'integer', nullable: true },
70
+ completedAt: { type: 'integer', nullable: true },
71
+ disputedAt: { type: 'integer', nullable: true },
72
+ disputeReason: { type: 'string', nullable: true },
73
+ disputedBy: { type: 'address', nullable: true },
74
+ resolvedAt: { type: 'integer', nullable: true },
75
+ resolution: { type: 'string', nullable: true },
76
+ rulingId: { type: 'string', nullable: true },
77
77
  },
78
78
  },
79
79
  eventSchemas: {
80
80
  accept: {},
81
- reject: { properties: { reason: { type: "string" } } },
81
+ reject: { properties: { reason: { type: 'string' } } },
82
82
  cancel: {},
83
- submit_completion: { properties: { proof: { type: "string" } } },
83
+ submit_completion: { properties: { proof: { type: 'string' } } },
84
84
  finalize: {},
85
- dispute: { properties: { reason: { type: "string" } } },
85
+ dispute: { properties: { reason: { type: 'string' } } },
86
86
  resolve: {
87
87
  properties: {
88
- resolution: { type: "string" },
89
- rulingId: { type: "string", nullable: true },
88
+ resolution: { type: 'string' },
89
+ rulingId: { type: 'string', nullable: true },
90
90
  },
91
91
  },
92
92
  },
93
93
  states: {
94
94
  PROPOSED: {
95
- id: "PROPOSED",
95
+ id: 'PROPOSED',
96
96
  isFinal: false,
97
97
  metadata: {
98
- label: "Proposed",
99
- description: "Agreement proposed; awaiting the counterparty",
100
- category: "initial",
98
+ label: 'Proposed',
99
+ description: 'Agreement proposed; awaiting the counterparty',
100
+ category: 'initial',
101
101
  },
102
102
  },
103
103
  ACTIVE: {
104
- id: "ACTIVE",
104
+ id: 'ACTIVE',
105
105
  isFinal: false,
106
106
  metadata: {
107
- label: "Active",
108
- description: "Agreement accepted and in effect",
109
- category: "active",
107
+ label: 'Active',
108
+ description: 'Agreement accepted and in effect',
109
+ category: 'active',
110
110
  },
111
111
  },
112
112
  COMPLETED: {
113
- id: "COMPLETED",
113
+ id: 'COMPLETED',
114
114
  isFinal: true,
115
115
  metadata: {
116
- label: "Completed",
117
- description: "Agreement completed and attested (terminal)",
118
- category: "terminal",
116
+ label: 'Completed',
117
+ description: 'Agreement completed and attested (terminal)',
118
+ category: 'terminal',
119
119
  },
120
120
  },
121
121
  DISPUTED: {
122
- id: "DISPUTED",
122
+ id: 'DISPUTED',
123
123
  isFinal: false,
124
124
  metadata: {
125
- label: "Disputed",
126
- description: "A party has raised a dispute; awaiting resolution",
127
- category: "pending",
125
+ label: 'Disputed',
126
+ description: 'A party has raised a dispute; awaiting resolution',
127
+ category: 'pending',
128
128
  },
129
129
  },
130
130
  REJECTED: {
131
- id: "REJECTED",
131
+ id: 'REJECTED',
132
132
  isFinal: true,
133
133
  metadata: {
134
- label: "Rejected",
135
- description: "Proposal rejected by the counterparty (terminal)",
136
- category: "terminal",
134
+ label: 'Rejected',
135
+ description: 'Proposal rejected by the counterparty (terminal)',
136
+ category: 'terminal',
137
137
  },
138
138
  },
139
139
  CANCELLED: {
140
- id: "CANCELLED",
140
+ id: 'CANCELLED',
141
141
  isFinal: true,
142
142
  metadata: {
143
- label: "Cancelled",
144
- description: "Agreement cancelled before completion (terminal)",
145
- category: "terminal",
143
+ label: 'Cancelled',
144
+ description: 'Agreement cancelled before completion (terminal)',
145
+ category: 'terminal',
146
146
  },
147
147
  },
148
148
  },
149
- initialState: "PROPOSED",
149
+ initialState: 'PROPOSED',
150
150
  transitions: [
151
151
  {
152
- from: "PROPOSED",
153
- to: "ACTIVE",
154
- eventName: "accept",
155
- guard: (0, guards_js_1.signerIsParty)("state.counterparty"),
152
+ from: 'PROPOSED',
153
+ to: 'ACTIVE',
154
+ eventName: 'accept',
155
+ guard: (0, guards_js_1.signerIsParty)('state.counterparty'),
156
156
  effect: {
157
- merge: [
158
- { var: "state" },
159
- { status: "ACTIVE", acceptedAt: { var: "$ordinal" } },
160
- ],
157
+ merge: [{ var: 'state' }, { status: 'ACTIVE', acceptedAt: { var: '$ordinal' } }],
161
158
  },
162
159
  dependencies: [],
163
160
  },
164
161
  {
165
- from: "PROPOSED",
166
- to: "REJECTED",
167
- eventName: "reject",
168
- guard: (0, guards_js_1.signerIsParty)("state.counterparty"),
162
+ from: 'PROPOSED',
163
+ to: 'REJECTED',
164
+ eventName: 'reject',
165
+ guard: (0, guards_js_1.signerIsParty)('state.counterparty'),
169
166
  effect: {
170
167
  merge: [
171
- { var: "state" },
168
+ { var: 'state' },
172
169
  {
173
- status: "REJECTED",
174
- rejectedAt: { var: "$ordinal" },
175
- rejectReason: { var: "event.reason" },
170
+ status: 'REJECTED',
171
+ rejectedAt: { var: '$ordinal' },
172
+ rejectReason: { var: 'event.reason' },
176
173
  },
177
174
  ],
178
175
  },
179
176
  dependencies: [],
180
177
  },
181
178
  {
182
- from: "PROPOSED",
183
- to: "CANCELLED",
184
- eventName: "cancel",
185
- guard: (0, guards_js_1.signerIsParty)("state.proposer"),
179
+ from: 'PROPOSED',
180
+ to: 'CANCELLED',
181
+ eventName: 'cancel',
182
+ guard: (0, guards_js_1.signerIsParty)('state.proposer'),
186
183
  effect: {
187
- merge: [
188
- { var: "state" },
189
- { status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
190
- ],
184
+ merge: [{ var: 'state' }, { status: 'CANCELLED', cancelledAt: { var: '$ordinal' } }],
191
185
  },
192
186
  dependencies: [],
193
187
  },
194
188
  {
195
- from: "ACTIVE",
196
- to: "ACTIVE",
197
- eventName: "submit_completion",
189
+ from: 'ACTIVE',
190
+ to: 'ACTIVE',
191
+ eventName: 'submit_completion',
198
192
  guard: {
199
193
  and: [
200
- (0, guards_js_1.signerIsAnyParty)(["state.proposer", "state.counterparty"]),
194
+ (0, guards_js_1.signerIsAnyParty)(['state.proposer', 'state.counterparty']),
201
195
  {
202
- "!": [
196
+ '!': [
203
197
  {
204
- in: [
205
- { var: "event.agent" },
206
- { map: [{ var: "state.completions" }, { var: "agent" }] },
207
- ],
198
+ in: [{ var: 'event.agent' }, { map: [{ var: 'state.completions' }, { var: 'agent' }] }],
208
199
  },
209
200
  ],
210
201
  },
@@ -212,16 +203,16 @@ exports.contractAgreementDef = (0, fiber_app_js_1.defineFiberApp)({
212
203
  },
213
204
  effect: {
214
205
  merge: [
215
- { var: "state" },
206
+ { var: 'state' },
216
207
  {
217
208
  completions: {
218
209
  cat: [
219
- { var: "state.completions" },
210
+ { var: 'state.completions' },
220
211
  [
221
212
  {
222
- agent: { var: "event.agent" },
223
- proof: { var: "event.proof" },
224
- submittedAt: { var: "$ordinal" },
213
+ agent: { var: 'event.agent' },
214
+ proof: { var: 'event.proof' },
215
+ submittedAt: { var: '$ordinal' },
225
216
  },
226
217
  ],
227
218
  ],
@@ -232,66 +223,56 @@ exports.contractAgreementDef = (0, fiber_app_js_1.defineFiberApp)({
232
223
  dependencies: [],
233
224
  },
234
225
  {
235
- from: "ACTIVE",
236
- to: "COMPLETED",
237
- eventName: "finalize",
238
- guard: { ">=": [{ length: [{ var: "state.completions" }] }, 2] },
226
+ from: 'ACTIVE',
227
+ to: 'COMPLETED',
228
+ eventName: 'finalize',
229
+ guard: { '>=': [{ length: [{ var: 'state.completions' }] }, 2] },
239
230
  effect: {
240
- merge: [
241
- { var: "state" },
242
- { status: "COMPLETED", completedAt: { var: "$ordinal" } },
243
- ],
231
+ merge: [{ var: 'state' }, { status: 'COMPLETED', completedAt: { var: '$ordinal' } }],
244
232
  },
245
233
  dependencies: [],
246
234
  },
247
235
  {
248
- from: "ACTIVE",
249
- to: "DISPUTED",
250
- eventName: "dispute",
251
- guard: (0, guards_js_1.signerIsAnyParty)(["state.proposer", "state.counterparty"]),
236
+ from: 'ACTIVE',
237
+ to: 'DISPUTED',
238
+ eventName: 'dispute',
239
+ guard: (0, guards_js_1.signerIsAnyParty)(['state.proposer', 'state.counterparty']),
252
240
  effect: {
253
241
  merge: [
254
- { var: "state" },
242
+ { var: 'state' },
255
243
  {
256
- status: "DISPUTED",
257
- disputedAt: { var: "$ordinal" },
258
- disputeReason: { var: "event.reason" },
259
- disputedBy: { var: "event.agent" },
244
+ status: 'DISPUTED',
245
+ disputedAt: { var: '$ordinal' },
246
+ disputeReason: { var: 'event.reason' },
247
+ disputedBy: { var: 'event.agent' },
260
248
  },
261
249
  ],
262
250
  },
263
251
  dependencies: [],
264
252
  },
265
253
  {
266
- from: "DISPUTED",
267
- to: "COMPLETED",
268
- eventName: "resolve",
254
+ from: 'DISPUTED',
255
+ to: 'COMPLETED',
256
+ eventName: 'resolve',
269
257
  // 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)
270
258
  guard: {
271
259
  or: [
272
- (0, guards_js_1.signerIsParty)("state.arbitrator"),
260
+ (0, guards_js_1.signerIsParty)('state.arbitrator'),
273
261
  {
274
- and: [
275
- (0, guards_js_1.signerIsParty)("state.proposer"),
276
- (0, guards_js_1.signerIsParty)("state.counterparty"),
277
- ],
262
+ and: [(0, guards_js_1.signerIsParty)('state.proposer'), (0, guards_js_1.signerIsParty)('state.counterparty')],
278
263
  },
279
264
  ],
280
265
  },
281
266
  effect: {
282
267
  merge: [
283
- { var: "state" },
268
+ { var: 'state' },
284
269
  {
285
- status: "COMPLETED",
286
- resolvedAt: { var: "$ordinal" },
287
- resolution: { var: "event.resolution" },
270
+ status: 'COMPLETED',
271
+ resolvedAt: { var: '$ordinal' },
272
+ resolution: { var: 'event.resolution' },
288
273
  // rulingId is recorded only on the arbitrator-resolved path
289
274
  rulingId: {
290
- if: [
291
- (0, guards_js_1.signerIsParty)("state.arbitrator"),
292
- { var: "event.rulingId" },
293
- null,
294
- ],
275
+ if: [(0, guards_js_1.signerIsParty)('state.arbitrator'), { var: 'event.rulingId' }, null],
295
276
  },
296
277
  },
297
278
  ],
@@ -299,15 +280,12 @@ exports.contractAgreementDef = (0, fiber_app_js_1.defineFiberApp)({
299
280
  dependencies: [],
300
281
  },
301
282
  {
302
- from: "ACTIVE",
303
- to: "CANCELLED",
304
- eventName: "cancel",
305
- guard: (0, guards_js_1.signerIsAnyParty)(["state.proposer", "state.counterparty"]),
283
+ from: 'ACTIVE',
284
+ to: 'CANCELLED',
285
+ eventName: 'cancel',
286
+ guard: (0, guards_js_1.signerIsAnyParty)(['state.proposer', 'state.counterparty']),
306
287
  effect: {
307
- merge: [
308
- { var: "state" },
309
- { status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
310
- ],
288
+ merge: [{ var: 'state' }, { status: 'CANCELLED', cancelledAt: { var: '$ordinal' } }],
311
289
  },
312
290
  dependencies: [],
313
291
  },