@ottochain/sdk 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/dist/cjs/apps/compute/index.js +33 -0
  2. package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
  3. package/dist/cjs/apps/compute/state-machines/index.js +9 -0
  4. package/dist/cjs/apps/contracts/index.js +16 -9
  5. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +134 -161
  6. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +192 -170
  7. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
  8. package/dist/cjs/apps/corporate/index.js +2 -2
  9. package/dist/cjs/apps/corporate/state-machines/corp-board.js +500 -456
  10. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +487 -361
  11. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +769 -576
  12. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +567 -557
  13. package/dist/cjs/apps/governance/index.js +21 -21
  14. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +188 -209
  15. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +181 -228
  16. package/dist/cjs/apps/governance/state-machines/dao-single.js +105 -88
  17. package/dist/cjs/apps/governance/state-machines/dao-token.js +199 -227
  18. package/dist/cjs/apps/governance/state-machines/governance-simple.js +231 -231
  19. package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
  20. package/dist/cjs/apps/identity/constants.js +55 -22
  21. package/dist/cjs/apps/identity/index.js +28 -12
  22. package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
  23. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +158 -173
  24. package/dist/cjs/apps/identity/state-machines/identity-registry.js +262 -0
  25. package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
  26. package/dist/cjs/apps/identity/state-machines/index.js +3 -1
  27. package/dist/cjs/apps/index.js +22 -8
  28. package/dist/cjs/apps/lending/assets.js +247 -0
  29. package/dist/cjs/apps/lending/credit-scoring.js +87 -0
  30. package/dist/cjs/apps/lending/eligibility.js +105 -0
  31. package/dist/cjs/apps/lending/index.js +91 -0
  32. package/dist/cjs/apps/lending/state-machines/index.js +9 -0
  33. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +433 -0
  34. package/dist/cjs/apps/markets/index.js +22 -12
  35. package/dist/cjs/apps/markets/state-machines/market-auction.js +116 -134
  36. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +131 -141
  37. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +163 -184
  38. package/dist/cjs/apps/markets/state-machines/market-prediction.js +226 -233
  39. package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
  40. package/dist/cjs/apps/oracles/index.js +3 -3
  41. package/dist/cjs/apps/privacy/index.js +67 -0
  42. package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
  43. package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
  44. package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
  45. package/dist/cjs/apps/staked-pool/assets.js +103 -0
  46. package/dist/cjs/apps/staked-pool/base.js +498 -0
  47. package/dist/cjs/apps/staked-pool/consumer.js +55 -0
  48. package/dist/cjs/apps/staked-pool/index.js +83 -0
  49. package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
  50. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
  51. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
  52. package/dist/cjs/errors.js +3 -3
  53. package/dist/cjs/generated/google/protobuf/struct.js +5 -5
  54. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  55. package/dist/cjs/generated/index.js +11 -7
  56. package/dist/cjs/generated/openapi.js +6 -0
  57. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +51 -51
  58. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +20 -21
  59. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +14 -14
  60. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +5 -5
  61. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +125 -131
  62. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +108 -108
  63. package/dist/cjs/generated/ottochain/v1/common.js +5 -5
  64. package/dist/cjs/generated/ottochain/v1/fiber.js +44 -6
  65. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  66. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  67. package/dist/cjs/index.js +58 -7
  68. package/dist/cjs/openapi.js +2 -0
  69. package/dist/cjs/ottochain/drop-nulls.js +1 -2
  70. package/dist/cjs/ottochain/genesis-manifest.js +17 -11
  71. package/dist/cjs/ottochain/index.js +23 -13
  72. package/dist/cjs/ottochain/metagraph-client.js +81 -16
  73. package/dist/cjs/ottochain/snapshot.js +13 -16
  74. package/dist/cjs/ottochain/transaction.js +67 -14
  75. package/dist/cjs/ottochain/types.js +16 -2
  76. package/dist/cjs/privacy/index.js +14 -0
  77. package/dist/cjs/privacy/sealed-bid.js +213 -0
  78. package/dist/cjs/privacy/shield-app.js +131 -0
  79. package/dist/cjs/schema/effects.js +156 -0
  80. package/dist/cjs/schema/fiber-app.js +150 -15
  81. package/dist/cjs/schema/guard-lint.js +343 -0
  82. package/dist/cjs/schema/guards.js +246 -0
  83. package/dist/cjs/signing.js +80 -0
  84. package/dist/cjs/templates/asset-policy.js +190 -0
  85. package/dist/cjs/templates/index.js +86 -0
  86. package/dist/cjs/templates/machine.js +130 -0
  87. package/dist/cjs/templates/migration.js +39 -0
  88. package/dist/cjs/templates/state-shape.js +38 -0
  89. package/dist/cjs/types.js +2 -3
  90. package/dist/cjs/validation.js +9 -11
  91. package/dist/cjs/verify.js +9 -4
  92. package/dist/cjs/zk/commit.js +53 -0
  93. package/dist/cjs/zk/guard.js +107 -0
  94. package/dist/cjs/zk/index.js +48 -0
  95. package/dist/cjs/zk/preimage.js +37 -0
  96. package/dist/cjs/zk/prover.js +87 -0
  97. package/dist/cjs/zk/registry.js +62 -0
  98. package/dist/cjs/zk/types.js +28 -0
  99. package/dist/cjs/zk/witness.js +19 -0
  100. package/dist/esm/apps/compute/index.js +29 -0
  101. package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
  102. package/dist/esm/apps/compute/state-machines/index.js +5 -0
  103. package/dist/esm/apps/contracts/index.js +9 -5
  104. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +135 -162
  105. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +193 -171
  106. package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
  107. package/dist/esm/apps/corporate/index.js +2 -2
  108. package/dist/esm/apps/corporate/state-machines/corp-board.js +501 -457
  109. package/dist/esm/apps/corporate/state-machines/corp-entity.js +488 -362
  110. package/dist/esm/apps/corporate/state-machines/corp-securities.js +770 -577
  111. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +568 -558
  112. package/dist/esm/apps/governance/index.js +10 -10
  113. package/dist/esm/apps/governance/state-machines/dao-multisig.js +189 -210
  114. package/dist/esm/apps/governance/state-machines/dao-reputation.js +182 -229
  115. package/dist/esm/apps/governance/state-machines/dao-single.js +106 -89
  116. package/dist/esm/apps/governance/state-machines/dao-token.js +200 -228
  117. package/dist/esm/apps/governance/state-machines/governance-simple.js +232 -232
  118. package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
  119. package/dist/esm/apps/identity/constants.js +52 -21
  120. package/dist/esm/apps/identity/index.js +14 -9
  121. package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
  122. package/dist/esm/apps/identity/state-machines/identity-oracle.js +159 -174
  123. package/dist/esm/apps/identity/state-machines/identity-registry.js +259 -0
  124. package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
  125. package/dist/esm/apps/identity/state-machines/index.js +1 -0
  126. package/dist/esm/apps/index.js +9 -5
  127. package/dist/esm/apps/lending/assets.js +231 -0
  128. package/dist/esm/apps/lending/credit-scoring.js +81 -0
  129. package/dist/esm/apps/lending/eligibility.js +99 -0
  130. package/dist/esm/apps/lending/index.js +69 -0
  131. package/dist/esm/apps/lending/state-machines/index.js +5 -0
  132. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +430 -0
  133. package/dist/esm/apps/markets/index.js +11 -7
  134. package/dist/esm/apps/markets/state-machines/market-auction.js +117 -135
  135. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +132 -142
  136. package/dist/esm/apps/markets/state-machines/market-group-buy.js +164 -185
  137. package/dist/esm/apps/markets/state-machines/market-prediction.js +227 -234
  138. package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
  139. package/dist/esm/apps/oracles/index.js +3 -3
  140. package/dist/esm/apps/privacy/index.js +56 -0
  141. package/dist/esm/apps/privacy/state-machines/index.js +6 -0
  142. package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
  143. package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
  144. package/dist/esm/apps/staked-pool/assets.js +91 -0
  145. package/dist/esm/apps/staked-pool/base.js +493 -0
  146. package/dist/esm/apps/staked-pool/consumer.js +49 -0
  147. package/dist/esm/apps/staked-pool/index.js +60 -0
  148. package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
  149. package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
  150. package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
  151. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  152. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  153. package/dist/esm/generated/index.js +9 -5
  154. package/dist/esm/generated/openapi.js +5 -0
  155. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +47 -47
  156. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  157. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  158. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  159. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +115 -121
  160. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +101 -101
  161. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  162. package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
  163. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  164. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  165. package/dist/esm/index.js +28 -3
  166. package/dist/esm/openapi.js +1 -0
  167. package/dist/esm/ottochain/genesis-manifest.js +15 -9
  168. package/dist/esm/ottochain/index.js +2 -3
  169. package/dist/esm/ottochain/metagraph-client.js +81 -16
  170. package/dist/esm/ottochain/snapshot.js +6 -8
  171. package/dist/esm/ottochain/transaction.js +51 -3
  172. package/dist/esm/ottochain/types.js +15 -1
  173. package/dist/esm/privacy/index.js +6 -0
  174. package/dist/esm/privacy/sealed-bid.js +209 -0
  175. package/dist/esm/privacy/shield-app.js +127 -0
  176. package/dist/esm/schema/effects.js +145 -0
  177. package/dist/esm/schema/fiber-app.js +139 -8
  178. package/dist/esm/schema/guard-lint.js +337 -0
  179. package/dist/esm/schema/guards.js +228 -0
  180. package/dist/esm/signing.js +74 -0
  181. package/dist/esm/templates/asset-policy.js +182 -0
  182. package/dist/esm/templates/index.js +41 -0
  183. package/dist/esm/templates/machine.js +125 -0
  184. package/dist/esm/templates/migration.js +34 -0
  185. package/dist/esm/templates/state-shape.js +34 -0
  186. package/dist/esm/validation.js +1 -3
  187. package/dist/esm/verify.js +8 -2
  188. package/dist/esm/zk/commit.js +44 -0
  189. package/dist/esm/zk/guard.js +99 -0
  190. package/dist/esm/zk/index.js +19 -0
  191. package/dist/esm/zk/preimage.js +30 -0
  192. package/dist/esm/zk/prover.js +82 -0
  193. package/dist/esm/zk/registry.js +55 -0
  194. package/dist/esm/zk/types.js +25 -0
  195. package/dist/esm/zk/witness.js +15 -0
  196. package/dist/types/apps/compute/index.d.ts +176 -0
  197. package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
  198. package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
  199. package/dist/types/apps/contracts/index.d.ts +81 -221
  200. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +23 -98
  201. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +49 -115
  202. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
  203. package/dist/types/apps/corporate/index.d.ts +1176 -440
  204. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +271 -135
  205. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +279 -74
  206. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +373 -149
  207. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +252 -80
  208. package/dist/types/apps/governance/index.d.ts +368 -470
  209. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +92 -107
  210. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +61 -85
  211. package/dist/types/apps/governance/state-machines/dao-single.d.ts +25 -47
  212. package/dist/types/apps/governance/state-machines/dao-token.d.ts +79 -68
  213. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +95 -125
  214. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +6 -6
  215. package/dist/types/apps/identity/constants.d.ts +33 -5
  216. package/dist/types/apps/identity/index.d.ts +415 -131
  217. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
  218. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +27 -98
  219. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
  220. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
  221. package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
  222. package/dist/types/apps/index.d.ts +9 -5
  223. package/dist/types/apps/lending/assets.d.ts +258 -0
  224. package/dist/types/apps/lending/credit-scoring.d.ts +80 -0
  225. package/dist/types/apps/lending/eligibility.d.ts +83 -0
  226. package/dist/types/apps/lending/index.d.ts +556 -0
  227. package/dist/types/apps/lending/state-machines/index.d.ts +5 -0
  228. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +536 -0
  229. package/dist/types/apps/markets/index.d.ts +181 -276
  230. package/dist/types/apps/markets/state-machines/market-auction.d.ts +25 -49
  231. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +35 -53
  232. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +35 -61
  233. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +65 -86
  234. package/dist/types/apps/markets/state-machines/market-universal.d.ts +12 -12
  235. package/dist/types/apps/oracles/index.d.ts +1 -1
  236. package/dist/types/apps/privacy/index.d.ts +328 -0
  237. package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
  238. package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
  239. package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
  240. package/dist/types/apps/staked-pool/assets.d.ts +53 -0
  241. package/dist/types/apps/staked-pool/base.d.ts +80 -0
  242. package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
  243. package/dist/types/apps/staked-pool/index.d.ts +51 -0
  244. package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
  245. package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
  246. package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
  247. package/dist/types/generated/index.d.ts +5 -5
  248. package/dist/types/generated/openapi.d.ts +1270 -0
  249. package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +5 -5
  250. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +12 -12
  251. package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +11 -11
  252. package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
  253. package/dist/types/index.d.ts +7 -3
  254. package/dist/types/openapi.d.ts +24 -0
  255. package/dist/types/ottochain/genesis-manifest.d.ts +11 -5
  256. package/dist/types/ottochain/index.d.ts +5 -6
  257. package/dist/types/ottochain/metagraph-client.d.ts +49 -7
  258. package/dist/types/ottochain/snapshot.d.ts +6 -6
  259. package/dist/types/ottochain/transaction.d.ts +41 -1
  260. package/dist/types/ottochain/types.d.ts +336 -31
  261. package/dist/types/privacy/index.d.ts +6 -0
  262. package/dist/types/privacy/sealed-bid.d.ts +348 -0
  263. package/dist/types/privacy/shield-app.d.ts +48 -0
  264. package/dist/types/schema/effects.d.ts +141 -0
  265. package/dist/types/schema/fiber-app.d.ts +282 -2
  266. package/dist/types/schema/guard-lint.d.ts +111 -0
  267. package/dist/types/schema/guards.d.ts +146 -0
  268. package/dist/types/signing.d.ts +45 -0
  269. package/dist/types/templates/asset-policy.d.ts +119 -0
  270. package/dist/types/templates/index.d.ts +26 -0
  271. package/dist/types/templates/machine.d.ts +139 -0
  272. package/dist/types/templates/migration.d.ts +34 -0
  273. package/dist/types/templates/state-shape.d.ts +30 -0
  274. package/dist/types/validation.d.ts +22 -217
  275. package/dist/types/verify.d.ts +4 -0
  276. package/dist/types/zk/commit.d.ts +28 -0
  277. package/dist/types/zk/guard.d.ts +46 -0
  278. package/dist/types/zk/index.d.ts +19 -0
  279. package/dist/types/zk/preimage.d.ts +10 -0
  280. package/dist/types/zk/prover.d.ts +34 -0
  281. package/dist/types/zk/registry.d.ts +34 -0
  282. package/dist/types/zk/types.d.ts +33 -0
  283. package/dist/types/zk/witness.d.ts +40 -0
  284. package/package.json +47 -15
  285. package/dist/cjs/ottochain/normalize.js +0 -186
  286. package/dist/esm/ottochain/normalize.js +0 -179
  287. package/dist/types/ottochain/normalize.d.ts +0 -79
@@ -1,184 +1,169 @@
1
- import { defineFiberApp } from "../../../schema/fiber-app.js";
1
+ import { defineFiberApp } from '../../../schema/fiber-app.js';
2
+ import { actorIsSigner, signerInSet } from '../../../schema/guards.js';
2
3
  /**
3
4
  * Reputation-based governance. Minimum reputation required for participation.
4
5
  */
5
6
  export const daoReputationDef = defineFiberApp({
6
7
  metadata: {
7
- name: "DAOReputation",
8
- app: "governance",
9
- type: "daoReputation",
10
- version: "1.0.0",
11
- description: "Reputation-based governance. Minimum reputation required for participation.",
12
- category: "governance/dao",
8
+ name: 'DAOReputation',
9
+ app: 'governance',
10
+ type: 'daoReputation',
11
+ version: '1.0.0',
12
+ description: 'Reputation-based governance. Minimum reputation required for participation.',
13
+ category: 'governance/dao',
13
14
  crossReferences: {
14
- Identity: "member verification",
15
- Reputation: "threshold checks",
16
- Contract: "action execution",
15
+ Identity: 'member verification',
16
+ Reputation: 'threshold checks',
17
+ Contract: 'action execution',
17
18
  },
18
19
  },
19
20
  createSchema: {
20
- required: [
21
- "memberThreshold",
22
- "voteThreshold",
23
- "proposeThreshold",
24
- "quorum",
25
- "votingPeriodMs",
26
- ],
21
+ required: ['memberThreshold', 'voteThreshold', 'proposeThreshold', 'quorum', 'votingPeriodMs'],
27
22
  properties: {
28
23
  memberThreshold: {
29
- type: "number",
30
- description: "Min reputation to join as a member",
24
+ type: 'number',
25
+ description: 'Min reputation to join as a member',
31
26
  },
32
- voteThreshold: { type: "number", description: "Min reputation to vote" },
27
+ voteThreshold: { type: 'number', description: 'Min reputation to vote' },
33
28
  proposeThreshold: {
34
- type: "number",
35
- description: "Min reputation to submit a proposal",
29
+ type: 'number',
30
+ description: 'Min reputation to submit a proposal',
36
31
  },
37
32
  quorum: {
38
- type: "number",
39
- description: "Min total votes (count) to execute",
33
+ type: 'number',
34
+ description: 'Min total votes (count) to execute',
40
35
  },
41
36
  votingPeriodMs: {
42
- type: "number",
43
- description: "Voting window in milliseconds",
37
+ type: 'number',
38
+ description: 'Voting window in milliseconds',
44
39
  },
45
40
  },
46
41
  },
47
42
  stateSchema: {
48
43
  properties: {
49
- members: { type: "array", computed: true },
50
- memberJoinedAt: { type: "object", computed: true },
51
- memberThreshold: { type: "number" },
52
- voteThreshold: { type: "number" },
53
- proposeThreshold: { type: "number" },
54
- quorum: { type: "number" },
55
- votingPeriodMs: { type: "number" },
56
- proposal: { type: "object" },
57
- votes: { type: "object", computed: true },
58
- history: { type: "array", computed: true },
44
+ members: { type: 'array', computed: true },
45
+ memberJoinedAt: { type: 'object', computed: true },
46
+ memberThreshold: { type: 'number' },
47
+ voteThreshold: { type: 'number' },
48
+ proposeThreshold: { type: 'number' },
49
+ quorum: { type: 'number' },
50
+ votingPeriodMs: { type: 'number' },
51
+ proposal: { type: 'object' },
52
+ votes: { type: 'object', computed: true },
53
+ history: { type: 'array', computed: true },
59
54
  },
60
55
  },
61
56
  eventSchemas: {
62
57
  propose: {
63
- description: "Submit a proposal (requires >= proposeThreshold reputation)",
64
- required: [
65
- "proposalId",
66
- "title",
67
- "description",
68
- "actionType",
69
- "payload",
70
- "agentReputation",
71
- ],
58
+ description: 'Submit a proposal (requires >= proposeThreshold reputation)',
59
+ required: ['proposalId', 'title', 'description', 'actionType', 'payload', 'agentReputation'],
72
60
  properties: {
73
- agent: { type: "address" },
74
- agentReputation: { type: "number" },
75
- proposalId: { type: "string" },
76
- title: { type: "string" },
77
- description: { type: "string" },
78
- actionType: { type: "string" },
79
- payload: { type: "object" },
61
+ agent: { type: 'address' },
62
+ agentReputation: { type: 'number' },
63
+ proposalId: { type: 'string' },
64
+ title: { type: 'string' },
65
+ description: { type: 'string' },
66
+ actionType: { type: 'string' },
67
+ payload: { type: 'object' },
80
68
  },
81
69
  },
82
70
  vote: {
83
- description: "Cast a vote (requires >= voteThreshold, no double-vote, within window)",
84
- required: ["vote", "agentReputation"],
71
+ description: 'Cast a vote (requires >= voteThreshold, no double-vote, within window)',
72
+ required: ['vote', 'agentReputation'],
85
73
  properties: {
86
- agent: { type: "address" },
87
- agentReputation: { type: "number" },
88
- vote: { type: "string", description: '"for" | "against" | "abstain"' },
74
+ agent: { type: 'address' },
75
+ agentReputation: { type: 'number' },
76
+ vote: { type: 'string', description: '"for" | "against" | "abstain"' },
89
77
  },
90
78
  },
91
79
  execute: {
92
- description: "Execute a passing proposal after voting ends",
80
+ description: 'Execute a passing proposal after voting ends',
93
81
  properties: {},
94
82
  },
95
83
  reject: {
96
- description: "Formally reject a failed proposal",
84
+ description: 'Formally reject a failed proposal',
97
85
  properties: {},
98
86
  },
99
87
  join: {
100
- description: "Join the DAO (requires >= memberThreshold reputation)",
101
- required: ["agentReputation"],
88
+ description: 'Join the DAO (requires >= memberThreshold reputation)',
89
+ required: ['agentReputation'],
102
90
  properties: {
103
- agent: { type: "address" },
104
- agentReputation: { type: "number" },
91
+ agent: { type: 'address' },
92
+ agentReputation: { type: 'number' },
105
93
  },
106
94
  },
107
95
  leave: {
108
- description: "Leave the DAO voluntarily",
96
+ description: 'Leave the DAO voluntarily',
109
97
  properties: {
110
- agent: { type: "address" },
98
+ agent: { type: 'address' },
111
99
  },
112
100
  },
113
101
  propose_threshold_change: {
114
- description: "Propose changing reputation thresholds",
115
- required: ["proposalId", "agentReputation"],
102
+ description: 'Propose changing reputation thresholds',
103
+ required: ['proposalId', 'agentReputation'],
116
104
  properties: {
117
- agent: { type: "address" },
118
- agentReputation: { type: "number" },
119
- proposalId: { type: "string" },
120
- memberThreshold: { type: "number" },
121
- voteThreshold: { type: "number" },
122
- proposeThreshold: { type: "number" },
105
+ agent: { type: 'address' },
106
+ agentReputation: { type: 'number' },
107
+ proposalId: { type: 'string' },
108
+ memberThreshold: { type: 'number' },
109
+ voteThreshold: { type: 'number' },
110
+ proposeThreshold: { type: 'number' },
123
111
  },
124
112
  },
125
113
  },
126
114
  states: {
127
115
  ACTIVE: {
128
- id: "ACTIVE",
116
+ id: 'ACTIVE',
129
117
  isFinal: false,
130
118
  metadata: {
131
- label: "Active",
132
- description: "DAO is idle and ready to accept a proposal",
133
- category: "initial",
119
+ label: 'Active',
120
+ description: 'DAO is idle and ready to accept a proposal',
121
+ category: 'initial',
134
122
  },
135
123
  },
136
124
  VOTING: {
137
- id: "VOTING",
125
+ id: 'VOTING',
138
126
  isFinal: false,
139
127
  metadata: {
140
- label: "Voting",
141
- description: "Members vote with reputation-weighted power",
142
- category: "pending",
128
+ label: 'Voting',
129
+ description: 'Members vote with reputation-weighted power',
130
+ category: 'pending',
143
131
  },
144
132
  },
145
133
  DISSOLVED: {
146
- id: "DISSOLVED",
134
+ id: 'DISSOLVED',
147
135
  isFinal: true,
148
136
  metadata: {
149
- label: "Dissolved",
150
- description: "Reputation DAO dissolved (terminal)",
151
- category: "terminal",
137
+ label: 'Dissolved',
138
+ description: 'Reputation DAO dissolved (terminal)',
139
+ category: 'terminal',
152
140
  },
153
141
  },
154
142
  },
155
- initialState: "ACTIVE",
143
+ initialState: 'ACTIVE',
156
144
  transitions: [
157
145
  // ACTIVE → VOTING: propose (reputation check)
158
146
  {
159
- from: "ACTIVE",
160
- to: "VOTING",
161
- eventName: "propose",
147
+ from: 'ACTIVE',
148
+ to: 'VOTING',
149
+ eventName: 'propose',
162
150
  guard: {
163
- ">=": [
164
- { var: "event.agentReputation" },
165
- { var: "state.proposeThreshold" },
166
- ],
151
+ '>=': [{ var: 'event.agentReputation' }, { var: 'state.proposeThreshold' }],
167
152
  },
168
153
  effect: {
169
154
  merge: [
170
- { var: "state" },
155
+ { var: 'state' },
171
156
  {
172
157
  proposal: {
173
- id: { var: "event.proposalId" },
174
- title: { var: "event.title" },
175
- description: { var: "event.description" },
176
- actionType: { var: "event.actionType" },
177
- payload: { var: "event.payload" },
178
- proposer: { var: "event.agent" },
179
- proposedAt: { var: "$timestamp" },
158
+ id: { var: 'event.proposalId' },
159
+ title: { var: 'event.title' },
160
+ description: { var: 'event.description' },
161
+ actionType: { var: 'event.actionType' },
162
+ payload: { var: 'event.payload' },
163
+ proposer: { var: 'event.agent' },
164
+ proposedAt: { var: '$ordinal' },
180
165
  deadline: {
181
- "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
166
+ '+': [{ var: '$ordinal' }, { var: 'state.votingPeriodMs' }],
182
167
  },
183
168
  },
184
169
  votes: { for: [], against: [], abstain: [] },
@@ -189,76 +174,54 @@ export const daoReputationDef = defineFiberApp({
189
174
  },
190
175
  // VOTING → VOTING: vote (reputation check, no double-vote, within window)
191
176
  {
192
- from: "VOTING",
193
- to: "VOTING",
194
- eventName: "vote",
177
+ from: 'VOTING',
178
+ to: 'VOTING',
179
+ eventName: 'vote',
195
180
  guard: {
196
181
  and: [
197
182
  {
198
- ">=": [
199
- { var: "event.agentReputation" },
200
- { var: "state.voteThreshold" },
201
- ],
202
- },
203
- {
204
- "!": [{ in: [{ var: "event.agent" }, { var: "state.votes.for" }] }],
205
- },
206
- {
207
- "!": [
208
- { in: [{ var: "event.agent" }, { var: "state.votes.against" }] },
209
- ],
210
- },
211
- {
212
- "!": [
213
- { in: [{ var: "event.agent" }, { var: "state.votes.abstain" }] },
214
- ],
183
+ '>=': [{ var: 'event.agentReputation' }, { var: 'state.voteThreshold' }],
215
184
  },
216
- { "<=": [{ var: "$timestamp" }, { var: "state.proposal.deadline" }] },
185
+ { '!': [signerInSet('state.votes.for')] },
186
+ { '!': [signerInSet('state.votes.against')] },
187
+ { '!': [signerInSet('state.votes.abstain')] },
188
+ { '<=': [{ var: '$ordinal' }, { var: 'state.proposal.deadline' }] },
217
189
  ],
218
190
  },
219
191
  effect: {
220
192
  merge: [
221
- { var: "state" },
193
+ { var: 'state' },
222
194
  {
223
195
  votes: {
224
196
  if: [
225
- { "===": [{ var: "event.vote" }, "for"] },
197
+ { '===': [{ var: 'event.vote' }, 'for'] },
226
198
  {
227
199
  merge: [
228
- { var: "state.votes" },
200
+ { var: 'state.votes' },
229
201
  {
230
202
  for: {
231
- cat: [
232
- { var: "state.votes.for" },
233
- [{ var: "event.agent" }],
234
- ],
203
+ cat: [{ var: 'state.votes.for' }, [{ var: 'event.agent' }]],
235
204
  },
236
205
  },
237
206
  ],
238
207
  },
239
- { "===": [{ var: "event.vote" }, "against"] },
208
+ { '===': [{ var: 'event.vote' }, 'against'] },
240
209
  {
241
210
  merge: [
242
- { var: "state.votes" },
211
+ { var: 'state.votes' },
243
212
  {
244
213
  against: {
245
- cat: [
246
- { var: "state.votes.against" },
247
- [{ var: "event.agent" }],
248
- ],
214
+ cat: [{ var: 'state.votes.against' }, [{ var: 'event.agent' }]],
249
215
  },
250
216
  },
251
217
  ],
252
218
  },
253
219
  {
254
220
  merge: [
255
- { var: "state.votes" },
221
+ { var: 'state.votes' },
256
222
  {
257
223
  abstain: {
258
- cat: [
259
- { var: "state.votes.abstain" },
260
- [{ var: "event.agent" }],
261
- ],
224
+ cat: [{ var: 'state.votes.abstain' }, [{ var: 'event.agent' }]],
262
225
  },
263
226
  },
264
227
  ],
@@ -272,87 +235,81 @@ export const daoReputationDef = defineFiberApp({
272
235
  },
273
236
  // VOTING → ACTIVE: execute (voting ended, for > against, quorum met)
274
237
  {
275
- from: "VOTING",
276
- to: "ACTIVE",
277
- eventName: "execute",
238
+ from: 'VOTING',
239
+ to: 'ACTIVE',
240
+ eventName: 'execute',
241
+ // A2 fix: votes.for/against/abstain are arrays of voter addresses; count with
242
+ // `length` (size is not a JLVM opcode).
278
243
  guard: {
279
244
  and: [
280
- { ">": [{ var: "$timestamp" }, { var: "state.proposal.deadline" }] },
245
+ { '>': [{ var: '$ordinal' }, { var: 'state.proposal.deadline' }] },
281
246
  {
282
- ">": [
283
- { size: { var: "state.votes.for" } },
284
- { size: { var: "state.votes.against" } },
285
- ],
247
+ '>': [{ length: [{ var: 'state.votes.for' }] }, { length: [{ var: 'state.votes.against' }] }],
286
248
  },
287
249
  {
288
- ">=": [
250
+ '>=': [
289
251
  {
290
- "+": [
291
- { size: { var: "state.votes.for" } },
292
- { size: { var: "state.votes.against" } },
293
- ],
252
+ '+': [{ length: [{ var: 'state.votes.for' }] }, { length: [{ var: 'state.votes.against' }] }],
294
253
  },
295
- { var: "state.quorum" },
254
+ { var: 'state.quorum' },
296
255
  ],
297
256
  },
298
257
  ],
299
258
  },
300
259
  effect: {
301
260
  merge: [
302
- { var: "state" },
261
+ { var: 'state' },
303
262
  {
304
263
  history: {
305
264
  cat: [
306
- { var: "state.history" },
265
+ { var: 'state.history' },
307
266
  [
308
267
  {
309
- type: "executed",
310
- proposal: { var: "state.proposal" },
311
- votes: { var: "state.votes" },
312
- at: { var: "$timestamp" },
268
+ type: 'executed',
269
+ proposal: { var: 'state.proposal' },
270
+ votes: { var: 'state.votes' },
271
+ at: { var: '$ordinal' },
313
272
  },
314
273
  ],
315
274
  ],
316
275
  },
317
276
  proposal: null,
318
277
  votes: null,
278
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
279
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
280
+ _emit: [
281
+ {
282
+ name: 'proposal_executed',
283
+ data: { action: 'increase', agents: { var: 'state.votes.for' } },
284
+ destination: 'Reputation',
285
+ },
286
+ ],
319
287
  },
320
288
  ],
321
289
  },
322
- emits: [
323
- {
324
- event: "proposal_executed",
325
- to: "Reputation",
326
- payload: { action: "increase", agents: { var: "state.votes.for" } },
327
- },
328
- ],
329
290
  dependencies: [],
330
291
  },
331
292
  // VOTING → ACTIVE: reject (voting ended, for <= against or quorum not met)
332
293
  {
333
- from: "VOTING",
334
- to: "ACTIVE",
335
- eventName: "reject",
294
+ from: 'VOTING',
295
+ to: 'ACTIVE',
296
+ eventName: 'reject',
297
+ // A2 fix: count the array-shaped vote tallies with `length` (size is not a JLVM
298
+ // opcode).
336
299
  guard: {
337
300
  and: [
338
- { ">": [{ var: "$timestamp" }, { var: "state.proposal.deadline" }] },
301
+ { '>': [{ var: '$ordinal' }, { var: 'state.proposal.deadline' }] },
339
302
  {
340
303
  or: [
341
304
  {
342
- "<=": [
343
- { size: { var: "state.votes.for" } },
344
- { size: { var: "state.votes.against" } },
345
- ],
305
+ '<=': [{ length: [{ var: 'state.votes.for' }] }, { length: [{ var: 'state.votes.against' }] }],
346
306
  },
347
307
  {
348
- "<": [
308
+ '<': [
349
309
  {
350
- "+": [
351
- { size: { var: "state.votes.for" } },
352
- { size: { var: "state.votes.against" } },
353
- ],
310
+ '+': [{ length: [{ var: 'state.votes.for' }] }, { length: [{ var: 'state.votes.against' }] }],
354
311
  },
355
- { var: "state.quorum" },
312
+ { var: 'state.quorum' },
356
313
  ],
357
314
  },
358
315
  ],
@@ -361,17 +318,17 @@ export const daoReputationDef = defineFiberApp({
361
318
  },
362
319
  effect: {
363
320
  merge: [
364
- { var: "state" },
321
+ { var: 'state' },
365
322
  {
366
323
  history: {
367
324
  cat: [
368
- { var: "state.history" },
325
+ { var: 'state.history' },
369
326
  [
370
327
  {
371
- type: "rejected",
372
- proposal: { var: "state.proposal" },
373
- votes: { var: "state.votes" },
374
- at: { var: "$timestamp" },
328
+ type: 'rejected',
329
+ proposal: { var: 'state.proposal' },
330
+ votes: { var: 'state.votes' },
331
+ at: { var: '$ordinal' },
375
332
  },
376
333
  ],
377
334
  ],
@@ -385,33 +342,35 @@ export const daoReputationDef = defineFiberApp({
385
342
  },
386
343
  // ACTIVE → ACTIVE: join (reputation check, not already member)
387
344
  {
388
- from: "ACTIVE",
389
- to: "ACTIVE",
390
- eventName: "join",
345
+ from: 'ACTIVE',
346
+ to: 'ACTIVE',
347
+ eventName: 'join',
348
+ // S1/A2: bind event.agent to a verified signer (actorIsSigner) so the member is appended to the
349
+ // array and keyed into memberJoinedAt under a CHAIN-VERIFIED address (set is the rc.5 map-write
350
+ // opcode), and dedup on that bound actor.
351
+ // TODO(#24): event.agentReputation is self-asserted. Replace the reputation clause with
352
+ // signerHasReputation(registryReputationPath(<registryDep>), "state.memberThreshold") once
353
+ // runtime-updatable dependencies (#24) let a std-app bind the identity-registry instance — the
354
+ // same gate as corp-board's removal-resolution. The registry foundation + read helper already
355
+ // exist (src/apps/identity/state-machines/identity-registry.ts, guards.signerHasReputation).
391
356
  guard: {
392
357
  and: [
358
+ actorIsSigner(),
393
359
  {
394
- ">=": [
395
- { var: "event.agentReputation" },
396
- { var: "state.memberThreshold" },
397
- ],
360
+ '>=': [{ var: 'event.agentReputation' }, { var: 'state.memberThreshold' }],
398
361
  },
399
- { "!": [{ in: [{ var: "event.agent" }, { var: "state.members" }] }] },
362
+ { '!': [{ in: [{ var: 'event.agent' }, { var: 'state.members' }] }] },
400
363
  ],
401
364
  },
402
365
  effect: {
403
366
  merge: [
404
- { var: "state" },
367
+ { var: 'state' },
405
368
  {
406
369
  members: {
407
- cat: [{ var: "state.members" }, [{ var: "event.agent" }]],
370
+ cat: [{ var: 'state.members' }, [{ var: 'event.agent' }]],
408
371
  },
409
372
  memberJoinedAt: {
410
- setKey: [
411
- { var: "state.memberJoinedAt" },
412
- { var: "event.agent" },
413
- { var: "$timestamp" },
414
- ],
373
+ set: [{ var: 'state.memberJoinedAt' }, { var: 'event.agent' }, { var: '$ordinal' }],
415
374
  },
416
375
  },
417
376
  ],
@@ -420,19 +379,16 @@ export const daoReputationDef = defineFiberApp({
420
379
  },
421
380
  // ACTIVE → ACTIVE: leave (member only)
422
381
  {
423
- from: "ACTIVE",
424
- to: "ACTIVE",
425
- eventName: "leave",
426
- guard: { in: [{ var: "event.agent" }, { var: "state.members" }] },
382
+ from: 'ACTIVE',
383
+ to: 'ACTIVE',
384
+ eventName: 'leave',
385
+ guard: signerInSet('state.members'),
427
386
  effect: {
428
387
  merge: [
429
- { var: "state" },
388
+ { var: 'state' },
430
389
  {
431
390
  members: {
432
- filter: [
433
- { var: "state.members" },
434
- { "!==": [{ var: "" }, { var: "event.agent" }] },
435
- ],
391
+ filter: [{ var: 'state.members' }, { '!==': [{ var: '' }, { var: 'event.agent' }] }],
436
392
  },
437
393
  },
438
394
  ],
@@ -441,32 +397,29 @@ export const daoReputationDef = defineFiberApp({
441
397
  },
442
398
  // ACTIVE → VOTING: propose_threshold_change
443
399
  {
444
- from: "ACTIVE",
445
- to: "VOTING",
446
- eventName: "propose_threshold_change",
400
+ from: 'ACTIVE',
401
+ to: 'VOTING',
402
+ eventName: 'propose_threshold_change',
447
403
  guard: {
448
- ">=": [
449
- { var: "event.agentReputation" },
450
- { var: "state.proposeThreshold" },
451
- ],
404
+ '>=': [{ var: 'event.agentReputation' }, { var: 'state.proposeThreshold' }],
452
405
  },
453
406
  effect: {
454
407
  merge: [
455
- { var: "state" },
408
+ { var: 'state' },
456
409
  {
457
410
  proposal: {
458
- id: { var: "event.proposalId" },
459
- title: "Threshold Change",
460
- actionType: "threshold_change",
411
+ id: { var: 'event.proposalId' },
412
+ title: 'Threshold Change',
413
+ actionType: 'threshold_change',
461
414
  payload: {
462
- memberThreshold: { var: "event.memberThreshold" },
463
- voteThreshold: { var: "event.voteThreshold" },
464
- proposeThreshold: { var: "event.proposeThreshold" },
415
+ memberThreshold: { var: 'event.memberThreshold' },
416
+ voteThreshold: { var: 'event.voteThreshold' },
417
+ proposeThreshold: { var: 'event.proposeThreshold' },
465
418
  },
466
- proposer: { var: "event.agent" },
467
- proposedAt: { var: "$timestamp" },
419
+ proposer: { var: 'event.agent' },
420
+ proposedAt: { var: '$ordinal' },
468
421
  deadline: {
469
- "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
422
+ '+': [{ var: '$ordinal' }, { var: 'state.votingPeriodMs' }],
470
423
  },
471
424
  },
472
425
  votes: { for: [], against: [], abstain: [] },