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