@ottochain/sdk 2.3.0 → 2.5.0

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