@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
@@ -1,184 +1,179 @@
1
- import { defineFiberApp } from "../../../schema/fiber-app.js";
2
- import { actorHasEntry, signerHasEntry, signerInSet, signerIsAnyParty, signerIsNotParty, } from "../../../schema/guards.js";
1
+ import { defineFiberApp } from '../../../schema/fiber-app.js';
2
+ import { actorHasEntry, signerHasEntry, signerInSet, signerIsAnyParty, signerIsNotParty, } from '../../../schema/guards.js';
3
3
  /**
4
4
  * Simple org governance: manage members, update rules, resolve disputes.
5
5
  */
6
6
  export const govSimpleDef = defineFiberApp({
7
7
  metadata: {
8
- name: "Governance",
9
- app: "governance",
10
- type: "simple",
11
- version: "1.0.0",
12
- description: "Simple org governance: manage members, update rules, resolve disputes",
8
+ name: 'Governance',
9
+ app: 'governance',
10
+ type: 'simple',
11
+ version: '1.0.0',
12
+ description: 'Simple org governance: manage members, update rules, resolve disputes',
13
13
  },
14
14
  createSchema: {
15
- required: [
16
- "admins",
17
- "passingThreshold",
18
- "disputeQuorum",
19
- "votingPeriodMs",
20
- ],
15
+ required: ['admins', 'passingThreshold', 'disputeQuorum', 'votingPeriodMs'],
21
16
  properties: {
22
17
  admins: {
23
- type: "array",
24
- description: "Initial admin addresses",
18
+ type: 'array',
19
+ description: 'Initial admin addresses',
25
20
  immutable: false,
26
21
  },
27
22
  passingThreshold: {
28
- type: "number",
29
- description: "Fraction of members required to pass (0-1)",
23
+ type: 'number',
24
+ description: 'Fraction of members required to pass (0-1)',
30
25
  },
31
26
  disputeQuorum: {
32
- type: "number",
33
- description: "Min votes to resolve a dispute",
27
+ type: 'number',
28
+ description: 'Min votes to resolve a dispute',
34
29
  },
35
30
  votingPeriodMs: {
36
- type: "number",
37
- description: "Voting window in milliseconds",
31
+ type: 'number',
32
+ description: 'Voting window in milliseconds',
38
33
  },
39
34
  },
40
35
  },
41
36
  stateSchema: {
42
37
  properties: {
43
- admins: { type: "array", immutable: false },
44
- members: { type: "object", computed: true },
45
- rules: { type: "object", computed: true },
46
- history: { type: "array", computed: true },
47
- proposal: { type: "object" },
48
- votes: { type: "object", computed: true },
49
- dispute: { type: "object" },
50
- passingThreshold: { type: "number" },
51
- disputeQuorum: { type: "number" },
52
- votingPeriodMs: { type: "number" },
38
+ admins: { type: 'array', immutable: false },
39
+ members: { type: 'object', computed: true },
40
+ rules: { type: 'object', computed: true },
41
+ history: { type: 'array', computed: true },
42
+ proposal: { type: 'object' },
43
+ votes: { type: 'object', computed: true },
44
+ dispute: { type: 'object' },
45
+ passingThreshold: { type: 'number' },
46
+ disputeQuorum: { type: 'number' },
47
+ votingPeriodMs: { type: 'number' },
53
48
  },
54
49
  },
55
50
  eventSchemas: {
56
51
  add_member: {
57
- description: "Add a member (admin only)",
58
- required: ["member", "role"],
52
+ description: 'Add a member (admin only)',
53
+ required: ['member', 'role'],
59
54
  properties: {
60
- agent: { type: "address" },
61
- member: { type: "address" },
62
- role: { type: "string" },
55
+ agent: { type: 'address' },
56
+ member: { type: 'address' },
57
+ role: { type: 'string' },
63
58
  },
64
59
  },
65
60
  remove_member: {
66
- description: "Remove a member (admin only)",
67
- required: ["member"],
61
+ description: 'Remove a member (admin only)',
62
+ required: ['member'],
68
63
  properties: {
69
- agent: { type: "address" },
70
- member: { type: "address" },
64
+ agent: { type: 'address' },
65
+ member: { type: 'address' },
71
66
  },
72
67
  },
73
68
  propose: {
74
- description: "Submit a rule change proposal",
75
- required: ["proposalId", "type", "changes"],
69
+ description: 'Submit a rule change proposal',
70
+ required: ['proposalId', 'type', 'changes'],
76
71
  properties: {
77
- agent: { type: "address" },
78
- proposalId: { type: "string" },
79
- type: { type: "string" },
80
- changes: { type: "object" },
72
+ agent: { type: 'address' },
73
+ proposalId: { type: 'string' },
74
+ type: { type: 'string' },
75
+ changes: { type: 'object' },
81
76
  },
82
77
  },
83
78
  vote: {
84
- description: "Cast a vote on the active proposal or dispute",
85
- required: ["vote"],
79
+ description: 'Cast a vote on the active proposal or dispute',
80
+ required: ['vote'],
86
81
  properties: {
87
- agent: { type: "address" },
88
- vote: { type: "string" },
89
- ruling: { type: "string" },
82
+ agent: { type: 'address' },
83
+ vote: { type: 'string' },
84
+ ruling: { type: 'string' },
90
85
  },
91
86
  },
92
87
  finalize: {
93
- description: "Finalize the voting period (for-count derived from recorded ballots)",
88
+ description: 'Finalize the voting period (for-count derived from recorded ballots)',
94
89
  properties: {},
95
90
  },
96
91
  file_dispute: {
97
- description: "File a dispute against a member",
98
- required: ["disputeId", "defendant", "claim"],
92
+ description: 'File a dispute against a member',
93
+ required: ['disputeId', 'defendant', 'claim'],
99
94
  properties: {
100
- agent: { type: "address" },
101
- disputeId: { type: "string" },
102
- defendant: { type: "address" },
103
- claim: { type: "string" },
95
+ agent: { type: 'address' },
96
+ disputeId: { type: 'string' },
97
+ defendant: { type: 'address' },
98
+ claim: { type: 'string' },
104
99
  },
105
100
  },
106
101
  submit_evidence: {
107
- description: "Submit evidence in a dispute",
108
- required: ["content"],
102
+ description: 'Submit evidence in a dispute',
103
+ required: ['content'],
109
104
  properties: {
110
- agent: { type: "address" },
111
- content: { type: "string" },
105
+ agent: { type: 'address' },
106
+ content: { type: 'string' },
112
107
  },
113
108
  },
114
109
  resolve: {
115
- description: "Resolve the active dispute",
116
- required: ["ruling", "remedy"],
110
+ description: 'Resolve the active dispute',
111
+ required: ['ruling', 'remedy'],
117
112
  properties: {
118
- ruling: { type: "string" },
119
- remedy: { type: "string" },
113
+ ruling: { type: 'string' },
114
+ remedy: { type: 'string' },
120
115
  },
121
116
  },
122
117
  dissolve: {
123
- description: "Dissolve the organization (requires every member to sign this op — verified unanimity)",
118
+ description: 'Dissolve the organization (requires every member to sign this op — verified unanimity)',
124
119
  properties: {},
125
120
  },
126
121
  },
127
122
  states: {
128
123
  ACTIVE: {
129
- id: "ACTIVE",
124
+ id: 'ACTIVE',
130
125
  isFinal: false,
131
126
  metadata: {
132
- label: "Active",
133
- description: "Governance is idle and ready to accept a proposal",
134
- category: "initial",
127
+ label: 'Active',
128
+ description: 'Governance is idle and ready to accept a proposal',
129
+ category: 'initial',
135
130
  },
136
131
  },
137
132
  VOTING: {
138
- id: "VOTING",
133
+ id: 'VOTING',
139
134
  isFinal: false,
140
135
  metadata: {
141
- label: "Voting",
142
- description: "A proposal is open for voting",
143
- category: "pending",
136
+ label: 'Voting',
137
+ description: 'A proposal is open for voting',
138
+ category: 'pending',
144
139
  },
145
140
  },
146
141
  DISPUTE: {
147
- id: "DISPUTE",
142
+ id: 'DISPUTE',
148
143
  isFinal: false,
149
144
  metadata: {
150
- label: "Dispute",
151
- description: "A proposal outcome is being disputed",
152
- category: "pending",
145
+ label: 'Dispute',
146
+ description: 'A proposal outcome is being disputed',
147
+ category: 'pending',
153
148
  },
154
149
  },
155
150
  DISSOLVED: {
156
- id: "DISSOLVED",
151
+ id: 'DISSOLVED',
157
152
  isFinal: true,
158
153
  metadata: {
159
- label: "Dissolved",
160
- description: "Governance entity dissolved (terminal)",
161
- category: "terminal",
154
+ label: 'Dissolved',
155
+ description: 'Governance entity dissolved (terminal)',
156
+ category: 'terminal',
162
157
  },
163
158
  },
164
159
  },
165
- initialState: "ACTIVE",
160
+ initialState: 'ACTIVE',
166
161
  transitions: [
167
162
  // ACTIVE → ACTIVE: add member (admin only)
168
163
  {
169
- from: "ACTIVE",
170
- to: "ACTIVE",
171
- eventName: "add_member",
172
- guard: signerInSet("state.admins"),
164
+ from: 'ACTIVE',
165
+ to: 'ACTIVE',
166
+ eventName: 'add_member',
167
+ guard: signerInSet('state.admins'),
173
168
  effect: {
174
169
  merge: [
175
- { var: "state" },
170
+ { var: 'state' },
176
171
  {
177
172
  members: {
178
173
  set: [
179
- { var: "state.members" },
180
- { var: "event.member" },
181
- { role: { var: "event.role" }, addedAt: { var: "$ordinal" } },
174
+ { var: 'state.members' },
175
+ { var: 'event.member' },
176
+ { role: { var: 'event.role' }, addedAt: { var: '$ordinal' } },
182
177
  ],
183
178
  },
184
179
  },
@@ -188,16 +183,16 @@ export const govSimpleDef = defineFiberApp({
188
183
  },
189
184
  // ACTIVE → ACTIVE: remove member (admin only)
190
185
  {
191
- from: "ACTIVE",
192
- to: "ACTIVE",
193
- eventName: "remove_member",
194
- guard: signerInSet("state.admins"),
186
+ from: 'ACTIVE',
187
+ to: 'ACTIVE',
188
+ eventName: 'remove_member',
189
+ guard: signerInSet('state.admins'),
195
190
  effect: {
196
191
  merge: [
197
- { var: "state" },
192
+ { var: 'state' },
198
193
  {
199
194
  members: {
200
- unset: [{ var: "state.members" }, { var: "event.member" }],
195
+ unset: [{ var: 'state.members' }, { var: 'event.member' }],
201
196
  },
202
197
  },
203
198
  ],
@@ -206,24 +201,24 @@ export const govSimpleDef = defineFiberApp({
206
201
  },
207
202
  // ACTIVE → VOTING: propose
208
203
  {
209
- from: "ACTIVE",
210
- to: "VOTING",
211
- eventName: "propose",
204
+ from: 'ACTIVE',
205
+ to: 'VOTING',
206
+ eventName: 'propose',
212
207
  // S1/A2 coupled fix: a CHAIN-VERIFIED signer must be a member (getKey is not a
213
208
  // JLVM opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
214
- guard: signerHasEntry("state.members"),
209
+ guard: signerHasEntry('state.members'),
215
210
  effect: {
216
211
  merge: [
217
- { var: "state" },
212
+ { var: 'state' },
218
213
  {
219
214
  proposal: {
220
- id: { var: "event.proposalId" },
221
- type: { var: "event.type" },
222
- changes: { var: "event.changes" },
223
- proposer: { var: "event.agent" },
224
- proposedAt: { var: "$ordinal" },
215
+ id: { var: 'event.proposalId' },
216
+ type: { var: 'event.type' },
217
+ changes: { var: 'event.changes' },
218
+ proposer: { var: 'event.agent' },
219
+ proposedAt: { var: '$ordinal' },
225
220
  deadline: {
226
- "+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
221
+ '+': [{ var: '$ordinal' }, { var: 'state.votingPeriodMs' }],
227
222
  },
228
223
  },
229
224
  votes: {},
@@ -234,28 +229,25 @@ export const govSimpleDef = defineFiberApp({
234
229
  },
235
230
  // VOTING → VOTING: vote (member, no double-voting)
236
231
  {
237
- from: "VOTING",
238
- to: "VOTING",
239
- eventName: "vote",
232
+ from: 'VOTING',
233
+ to: 'VOTING',
234
+ eventName: 'vote',
240
235
  // S1/A2 coupled fix: bind event.agent to a verified signer who is a member (actorHasEntry),
241
236
  // and block a re-vote by that SAME bound actor — so the ballot is recorded under, and deduped
242
237
  // on, the chain-verified voter. Without the binding, signerHasEntry only proves SOME signer is a
243
238
  // member, letting one member stuff votes under arbitrary keys (set is the rc.5 map-write opcode).
244
239
  guard: {
245
- and: [
246
- actorHasEntry("state.members"),
247
- { "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
248
- ],
240
+ and: [actorHasEntry('state.members'), { '!': [{ has: [{ var: 'state.votes' }, { var: 'event.agent' }] }] }],
249
241
  },
250
242
  effect: {
251
243
  merge: [
252
- { var: "state" },
244
+ { var: 'state' },
253
245
  {
254
246
  votes: {
255
247
  set: [
256
- { var: "state.votes" },
257
- { var: "event.agent" },
258
- { vote: { var: "event.vote" }, votedAt: { var: "$ordinal" } },
248
+ { var: 'state.votes' },
249
+ { var: 'event.agent' },
250
+ { vote: { var: 'event.vote' }, votedAt: { var: '$ordinal' } },
259
251
  ],
260
252
  },
261
253
  },
@@ -265,51 +257,42 @@ export const govSimpleDef = defineFiberApp({
265
257
  },
266
258
  // VOTING → ACTIVE: finalize (passed)
267
259
  {
268
- from: "VOTING",
269
- to: "ACTIVE",
270
- eventName: "finalize",
260
+ from: 'VOTING',
261
+ to: 'ACTIVE',
262
+ eventName: 'finalize',
271
263
  // S2/A2 coupled fix: the for-count is DERIVED from recorded ballots in
272
264
  // state.votes (length of the "for" entries), never read from the attacker's
273
265
  // event.forCount. members is a Map so its count is length(keys(members)).
274
266
  guard: {
275
- ">=": [
267
+ '>=': [
276
268
  {
277
269
  length: [
278
270
  {
279
- filter: [
280
- { values: [{ var: "state.votes" }] },
281
- { "===": [{ var: "vote" }, "for"] },
282
- ],
271
+ filter: [{ values: [{ var: 'state.votes' }] }, { '===': [{ var: 'vote' }, 'for'] }],
283
272
  },
284
273
  ],
285
274
  },
286
275
  {
287
- "*": [
288
- { length: [{ keys: [{ var: "state.members" }] }] },
289
- { var: "state.passingThreshold" },
290
- ],
276
+ '*': [{ length: [{ keys: [{ var: 'state.members' }] }] }, { var: 'state.passingThreshold' }],
291
277
  },
292
278
  ],
293
279
  },
294
280
  effect: {
295
281
  merge: [
296
- { var: "state" },
282
+ { var: 'state' },
297
283
  {
298
284
  rules: {
299
- merge: [
300
- { var: "state.rules" },
301
- { var: "state.proposal.changes" },
302
- ],
285
+ merge: [{ var: 'state.rules' }, { var: 'state.proposal.changes' }],
303
286
  },
304
287
  history: {
305
288
  cat: [
306
- { var: "state.history" },
289
+ { var: 'state.history' },
307
290
  [
308
291
  {
309
- type: "rule_change",
310
- proposal: { var: "state.proposal" },
311
- outcome: "passed",
312
- finalizedAt: { var: "$ordinal" },
292
+ type: 'rule_change',
293
+ proposal: { var: 'state.proposal' },
294
+ outcome: 'passed',
295
+ finalizedAt: { var: '$ordinal' },
313
296
  },
314
297
  ],
315
298
  ],
@@ -323,44 +306,38 @@ export const govSimpleDef = defineFiberApp({
323
306
  },
324
307
  // VOTING → ACTIVE: finalize (failed)
325
308
  {
326
- from: "VOTING",
327
- to: "ACTIVE",
328
- eventName: "finalize",
309
+ from: 'VOTING',
310
+ to: 'ACTIVE',
311
+ eventName: 'finalize',
329
312
  // S2/A2 coupled fix (failed arm): derive the for-count from recorded ballots in
330
313
  // state.votes; never from event.forCount. members count = length(keys(members)).
331
314
  guard: {
332
- "<": [
315
+ '<': [
333
316
  {
334
317
  length: [
335
318
  {
336
- filter: [
337
- { values: [{ var: "state.votes" }] },
338
- { "===": [{ var: "vote" }, "for"] },
339
- ],
319
+ filter: [{ values: [{ var: 'state.votes' }] }, { '===': [{ var: 'vote' }, 'for'] }],
340
320
  },
341
321
  ],
342
322
  },
343
323
  {
344
- "*": [
345
- { length: [{ keys: [{ var: "state.members" }] }] },
346
- { var: "state.passingThreshold" },
347
- ],
324
+ '*': [{ length: [{ keys: [{ var: 'state.members' }] }] }, { var: 'state.passingThreshold' }],
348
325
  },
349
326
  ],
350
327
  },
351
328
  effect: {
352
329
  merge: [
353
- { var: "state" },
330
+ { var: 'state' },
354
331
  {
355
332
  history: {
356
333
  cat: [
357
- { var: "state.history" },
334
+ { var: 'state.history' },
358
335
  [
359
336
  {
360
- type: "rule_change",
361
- proposal: { var: "state.proposal" },
362
- outcome: "failed",
363
- finalizedAt: { var: "$ordinal" },
337
+ type: 'rule_change',
338
+ proposal: { var: 'state.proposal' },
339
+ outcome: 'failed',
340
+ finalizedAt: { var: '$ordinal' },
364
341
  },
365
342
  ],
366
343
  ],
@@ -374,22 +351,22 @@ export const govSimpleDef = defineFiberApp({
374
351
  },
375
352
  // ACTIVE → DISPUTE: file_dispute
376
353
  {
377
- from: "ACTIVE",
378
- to: "DISPUTE",
379
- eventName: "file_dispute",
354
+ from: 'ACTIVE',
355
+ to: 'DISPUTE',
356
+ eventName: 'file_dispute',
380
357
  // S1/A2 coupled fix: only a CHAIN-VERIFIED member may file (getKey is not a JLVM
381
358
  // opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
382
- guard: signerHasEntry("state.members"),
359
+ guard: signerHasEntry('state.members'),
383
360
  effect: {
384
361
  merge: [
385
- { var: "state" },
362
+ { var: 'state' },
386
363
  {
387
364
  dispute: {
388
- id: { var: "event.disputeId" },
389
- plaintiff: { var: "event.agent" },
390
- defendant: { var: "event.defendant" },
391
- claim: { var: "event.claim" },
392
- filedAt: { var: "$ordinal" },
365
+ id: { var: 'event.disputeId' },
366
+ plaintiff: { var: 'event.agent' },
367
+ defendant: { var: 'event.defendant' },
368
+ claim: { var: 'event.claim' },
369
+ filedAt: { var: '$ordinal' },
393
370
  evidence: [],
394
371
  },
395
372
  votes: {},
@@ -400,29 +377,26 @@ export const govSimpleDef = defineFiberApp({
400
377
  },
401
378
  // DISPUTE → DISPUTE: submit_evidence (plaintiff or defendant)
402
379
  {
403
- from: "DISPUTE",
404
- to: "DISPUTE",
405
- eventName: "submit_evidence",
406
- guard: signerIsAnyParty([
407
- "state.dispute.plaintiff",
408
- "state.dispute.defendant",
409
- ]),
380
+ from: 'DISPUTE',
381
+ to: 'DISPUTE',
382
+ eventName: 'submit_evidence',
383
+ guard: signerIsAnyParty(['state.dispute.plaintiff', 'state.dispute.defendant']),
410
384
  effect: {
411
385
  merge: [
412
- { var: "state" },
386
+ { var: 'state' },
413
387
  {
414
388
  dispute: {
415
389
  merge: [
416
- { var: "state.dispute" },
390
+ { var: 'state.dispute' },
417
391
  {
418
392
  evidence: {
419
393
  cat: [
420
- { var: "state.dispute.evidence" },
394
+ { var: 'state.dispute.evidence' },
421
395
  [
422
396
  {
423
- from: { var: "event.agent" },
424
- content: { var: "event.content" },
425
- at: { var: "$ordinal" },
397
+ from: { var: 'event.agent' },
398
+ content: { var: 'event.content' },
399
+ at: { var: '$ordinal' },
426
400
  },
427
401
  ],
428
402
  ],
@@ -437,32 +411,32 @@ export const govSimpleDef = defineFiberApp({
437
411
  },
438
412
  // DISPUTE → DISPUTE: vote (member, not party, no double-vote)
439
413
  {
440
- from: "DISPUTE",
441
- to: "DISPUTE",
442
- eventName: "vote",
414
+ from: 'DISPUTE',
415
+ to: 'DISPUTE',
416
+ eventName: 'vote',
443
417
  // S1/A2 coupled fix: bind event.agent to a verified member (actorHasEntry), exclude the parties,
444
418
  // and block a re-vote by that SAME bound actor — so the dispute ballot is recorded under, and
445
419
  // deduped on, the chain-verified voter (set is the rc.5 map-write opcode; signerIsNotParty still
446
420
  // excludes any signer who is a party, which covers the bound actor).
447
421
  guard: {
448
422
  and: [
449
- actorHasEntry("state.members"),
450
- signerIsNotParty("state.dispute.plaintiff"),
451
- signerIsNotParty("state.dispute.defendant"),
452
- { "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
423
+ actorHasEntry('state.members'),
424
+ signerIsNotParty('state.dispute.plaintiff'),
425
+ signerIsNotParty('state.dispute.defendant'),
426
+ { '!': [{ has: [{ var: 'state.votes' }, { var: 'event.agent' }] }] },
453
427
  ],
454
428
  },
455
429
  effect: {
456
430
  merge: [
457
- { var: "state" },
431
+ { var: 'state' },
458
432
  {
459
433
  votes: {
460
434
  set: [
461
- { var: "state.votes" },
462
- { var: "event.agent" },
435
+ { var: 'state.votes' },
436
+ { var: 'event.agent' },
463
437
  {
464
- ruling: { var: "event.ruling" },
465
- votedAt: { var: "$ordinal" },
438
+ ruling: { var: 'event.ruling' },
439
+ votedAt: { var: '$ordinal' },
466
440
  },
467
441
  ],
468
442
  },
@@ -473,31 +447,28 @@ export const govSimpleDef = defineFiberApp({
473
447
  },
474
448
  // DISPUTE → ACTIVE: resolve (quorum met)
475
449
  {
476
- from: "DISPUTE",
477
- to: "ACTIVE",
478
- eventName: "resolve",
450
+ from: 'DISPUTE',
451
+ to: 'ACTIVE',
452
+ eventName: 'resolve',
479
453
  // A2 fix: count recorded ballots. votes is a Map, and `length` rejects Maps, so
480
454
  // count its keys: length(keys(state.votes)). (size is not a JLVM opcode.)
481
455
  guard: {
482
- ">=": [
483
- { length: [{ keys: [{ var: "state.votes" }] }] },
484
- { var: "state.disputeQuorum" },
485
- ],
456
+ '>=': [{ length: [{ keys: [{ var: 'state.votes' }] }] }, { var: 'state.disputeQuorum' }],
486
457
  },
487
458
  effect: {
488
459
  merge: [
489
- { var: "state" },
460
+ { var: 'state' },
490
461
  {
491
462
  history: {
492
463
  cat: [
493
- { var: "state.history" },
464
+ { var: 'state.history' },
494
465
  [
495
466
  {
496
- type: "dispute",
497
- dispute: { var: "state.dispute" },
498
- ruling: { var: "event.ruling" },
499
- remedy: { var: "event.remedy" },
500
- resolvedAt: { var: "$ordinal" },
467
+ type: 'dispute',
468
+ dispute: { var: 'state.dispute' },
469
+ ruling: { var: 'event.ruling' },
470
+ remedy: { var: 'event.remedy' },
471
+ resolvedAt: { var: '$ordinal' },
501
472
  },
502
473
  ],
503
474
  ],
@@ -511,31 +482,28 @@ export const govSimpleDef = defineFiberApp({
511
482
  },
512
483
  // ACTIVE → DISSOLVED: dissolve (90% approval)
513
484
  {
514
- from: "ACTIVE",
515
- to: "DISSOLVED",
516
- eventName: "dissolve",
485
+ from: 'ACTIVE',
486
+ to: 'DISSOLVED',
487
+ eventName: 'dissolve',
517
488
  // S2/A2 coupled fix: dissolution must not trust an attacker-supplied
518
489
  // approvalCount. Derive consent from the CHAIN-VERIFIED signers — every member
519
490
  // (a key in state.members) must be among proofs[].address, with a non-empty
520
491
  // belt. members is a Map, so iterate keys(members); size is not a JLVM opcode.
521
492
  guard: {
522
493
  and: [
523
- { ">": [{ length: [{ keys: [{ var: "state.members" }] }] }, 0] },
494
+ { '>': [{ length: [{ keys: [{ var: 'state.members' }] }] }, 0] },
524
495
  {
525
496
  all: [
526
- { keys: [{ var: "state.members" }] },
497
+ { keys: [{ var: 'state.members' }] },
527
498
  {
528
- in: [
529
- { var: "" },
530
- { map: [{ var: "proofs" }, { var: "address" }] },
531
- ],
499
+ in: [{ var: '' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
532
500
  },
533
501
  ],
534
502
  },
535
503
  ],
536
504
  },
537
505
  effect: {
538
- merge: [{ var: "state" }, { dissolvedAt: { var: "$ordinal" } }],
506
+ merge: [{ var: 'state' }, { dissolvedAt: { var: '$ordinal' } }],
539
507
  },
540
508
  dependencies: [],
541
509
  },