@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,196 +1,190 @@
1
- import { defineFiberApp } from "../../../schema/fiber-app.js";
1
+ import { defineFiberApp } from '../../../schema/fiber-app.js';
2
+ import { signerIsParty, actorIsSigner } from '../../../schema/guards.js';
2
3
  /**
3
4
  * Token-weighted voting. Voting power proportional to token holdings.
4
5
  */
5
6
  export const daoTokenDef = defineFiberApp({
6
7
  metadata: {
7
- name: "TokenDAO",
8
- app: "governance",
9
- type: "daoToken",
10
- version: "1.0.0",
11
- description: "Token-weighted voting. Voting power proportional to token holdings.",
12
- category: "governance/dao",
8
+ name: 'TokenDAO',
9
+ app: 'governance',
10
+ type: 'daoToken',
11
+ version: '1.0.0',
12
+ description: 'Token-weighted voting. Voting power proportional to token holdings.',
13
+ category: 'governance/dao',
13
14
  crossReferences: {
14
- Identity: "voter verification",
15
- Token: "balance snapshots",
16
- Contract: "action execution",
17
- Treasury: "fund management",
15
+ Identity: 'voter verification',
16
+ Token: 'balance snapshots',
17
+ Contract: 'action execution',
18
+ Treasury: 'fund management',
18
19
  },
19
20
  },
20
21
  createSchema: {
21
- required: [
22
- "balances",
23
- "proposalThreshold",
24
- "quorum",
25
- "votingPeriodMs",
26
- "timelockMs",
27
- ],
22
+ required: ['balances', 'proposalThreshold', 'quorum', 'votingPeriodMs', 'timelockMs'],
28
23
  properties: {
29
24
  balances: {
30
- type: "object",
31
- description: "Initial token balances by address",
25
+ type: 'object',
26
+ description: 'Initial token balances by address',
32
27
  },
33
28
  proposalThreshold: {
34
- type: "number",
35
- description: "Min token balance to submit a proposal",
29
+ type: 'number',
30
+ description: 'Min token balance to submit a proposal',
36
31
  },
37
32
  quorum: {
38
- type: "number",
39
- description: "Min total votes (weighted) to pass",
33
+ type: 'number',
34
+ description: 'Min total votes (weighted) to pass',
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
  timelockMs: {
46
- type: "number",
47
- description: "Time-lock delay before execution",
41
+ type: 'number',
42
+ description: 'Time-lock delay before execution',
48
43
  },
49
44
  },
50
45
  },
51
46
  stateSchema: {
52
47
  properties: {
53
- balances: { type: "object" },
54
- delegations: { type: "object", computed: true },
55
- proposalThreshold: { type: "number" },
56
- quorum: { type: "number" },
57
- votingPeriodMs: { type: "number" },
58
- timelockMs: { type: "number" },
59
- proposal: { type: "object" },
60
- votes: { type: "object", computed: true },
61
- executedProposals: { type: "array", computed: true },
62
- rejectedProposals: { type: "array", computed: true },
63
- cancelledProposals: { type: "array", computed: true },
48
+ balances: { type: 'object' },
49
+ delegations: { type: 'object', computed: true },
50
+ proposalThreshold: { type: 'number' },
51
+ quorum: { type: 'number' },
52
+ votingPeriodMs: { type: 'number' },
53
+ timelockMs: { type: 'number' },
54
+ proposal: { type: 'object' },
55
+ votes: { type: 'object', computed: true },
56
+ executedProposals: { type: 'array', computed: true },
57
+ rejectedProposals: { type: 'array', computed: true },
58
+ cancelledProposals: { type: 'array', computed: true },
64
59
  },
65
60
  },
66
61
  eventSchemas: {
67
62
  propose: {
68
- description: "Submit a proposal (requires >= proposalThreshold tokens)",
69
- required: [
70
- "proposalId",
71
- "title",
72
- "description",
73
- "actionType",
74
- "payload",
75
- ],
63
+ description: 'Submit a proposal (requires >= proposalThreshold tokens)',
64
+ required: ['proposalId', 'title', 'description', 'actionType', 'payload'],
76
65
  properties: {
77
- agent: { type: "address" },
78
- proposalId: { type: "string" },
79
- title: { type: "string" },
80
- description: { type: "string" },
81
- actionType: { type: "string" },
82
- payload: { type: "object" },
83
- snapshotBlock: { type: "string" },
66
+ agent: { type: 'address' },
67
+ proposalId: { type: 'string' },
68
+ title: { type: 'string' },
69
+ description: { type: 'string' },
70
+ actionType: { type: 'string' },
71
+ payload: { type: 'object' },
72
+ snapshotBlock: { type: 'string' },
84
73
  },
85
74
  },
86
75
  vote: {
87
- description: "Cast a token-weighted vote (must hold tokens, no double-vote, within window)",
88
- required: ["vote"],
76
+ description: 'Cast a token-weighted vote (must hold tokens, no double-vote, within window)',
77
+ required: ['vote'],
89
78
  properties: {
90
- agent: { type: "address" },
91
- vote: { type: "string", description: '"for" | "against" | "abstain"' },
79
+ agent: { type: 'address' },
80
+ vote: { type: 'string', description: '"for" | "against" | "abstain"' },
92
81
  },
93
82
  },
94
83
  queue: {
95
- description: "Queue passing proposal into timelock (voting ended, for > against, quorum met)",
84
+ description: 'Queue passing proposal into timelock (voting ended, for > against, quorum met)',
96
85
  properties: {},
97
86
  },
98
87
  execute: {
99
- description: "Execute queued proposal after timelock expires",
88
+ description: 'Execute queued proposal after timelock expires',
100
89
  properties: {},
101
90
  },
102
91
  reject: {
103
- description: "Formally reject a failed proposal (voting ended, failed conditions)",
92
+ description: 'Formally reject a failed proposal (voting ended, failed conditions)',
104
93
  properties: {},
105
94
  },
106
95
  cancel: {
107
- description: "Cancel a queued proposal (proposer only)",
96
+ description: 'Cancel a queued proposal (proposer only)',
108
97
  properties: {
109
- agent: { type: "address" },
98
+ agent: { type: 'address' },
110
99
  },
111
100
  },
112
101
  delegate: {
113
- description: "Delegate voting power to another address",
114
- required: ["delegateTo"],
102
+ description: 'Delegate voting power to another address',
103
+ required: ['delegateTo'],
115
104
  properties: {
116
- agent: { type: "address" },
117
- delegateTo: { type: "address" },
105
+ agent: { type: 'address' },
106
+ delegateTo: { type: 'address' },
118
107
  },
119
108
  },
120
109
  undelegate: {
121
- description: "Revoke delegation",
110
+ description: 'Revoke delegation',
122
111
  properties: {
123
- agent: { type: "address" },
112
+ agent: { type: 'address' },
124
113
  },
125
114
  },
126
115
  },
127
116
  states: {
128
117
  ACTIVE: {
129
- id: "ACTIVE",
118
+ id: 'ACTIVE',
130
119
  isFinal: false,
131
120
  metadata: {
132
- label: "Active",
133
- description: "DAO is idle and ready to accept a proposal",
134
- category: "initial",
121
+ label: 'Active',
122
+ description: 'DAO is idle and ready to accept a proposal',
123
+ category: 'initial',
135
124
  },
136
125
  },
137
126
  VOTING: {
138
- id: "VOTING",
127
+ id: 'VOTING',
139
128
  isFinal: false,
140
129
  metadata: {
141
- label: "Voting",
142
- description: "Token holders are voting on the active proposal",
143
- category: "pending",
130
+ label: 'Voting',
131
+ description: 'Token holders are voting on the active proposal',
132
+ category: 'pending',
144
133
  },
145
134
  },
146
135
  QUEUED: {
147
- id: "QUEUED",
136
+ id: 'QUEUED',
148
137
  isFinal: false,
149
138
  metadata: {
150
- label: "Queued",
151
- description: "Passed proposal queued in timelock before execution",
152
- category: "pending",
139
+ label: 'Queued',
140
+ description: 'Passed proposal queued in timelock before execution',
141
+ category: 'pending',
153
142
  },
154
143
  },
155
144
  DISSOLVED: {
156
- id: "DISSOLVED",
145
+ id: 'DISSOLVED',
157
146
  isFinal: true,
158
147
  metadata: {
159
- label: "Dissolved",
160
- description: "Token DAO dissolved (terminal)",
161
- category: "terminal",
148
+ label: 'Dissolved',
149
+ description: 'Token DAO dissolved (terminal)',
150
+ category: 'terminal',
162
151
  },
163
152
  },
164
153
  },
165
- initialState: "ACTIVE",
154
+ initialState: 'ACTIVE',
166
155
  transitions: [
167
156
  // ACTIVE → VOTING: propose (enough tokens)
168
157
  {
169
- from: "ACTIVE",
170
- to: "VOTING",
171
- eventName: "propose",
158
+ from: 'ACTIVE',
159
+ to: 'VOTING',
160
+ eventName: 'propose',
161
+ // S1/A2 coupled fix: a CHAIN-VERIFIED signer must hold >= proposalThreshold
162
+ // tokens. Iterate proofs[].address and read each balance via `get` (getKey is
163
+ // not a JLVM opcode); never trust the forgeable event.agent for the lookup.
172
164
  guard: {
173
- ">=": [
174
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
175
- { var: "state.proposalThreshold" },
165
+ some: [
166
+ { map: [{ var: 'proofs' }, { var: 'address' }] },
167
+ {
168
+ '>=': [{ get: [{ var: 'state.balances' }, { var: '' }] }, { var: 'state.proposalThreshold' }],
169
+ },
176
170
  ],
177
171
  },
178
172
  effect: {
179
173
  merge: [
180
- { var: "state" },
174
+ { var: 'state' },
181
175
  {
182
176
  proposal: {
183
- id: { var: "event.proposalId" },
184
- title: { var: "event.title" },
185
- description: { var: "event.description" },
186
- actionType: { var: "event.actionType" },
187
- payload: { var: "event.payload" },
188
- proposer: { var: "event.agent" },
189
- proposedAt: { var: "$timestamp" },
177
+ id: { var: 'event.proposalId' },
178
+ title: { var: 'event.title' },
179
+ description: { var: 'event.description' },
180
+ actionType: { var: 'event.actionType' },
181
+ payload: { var: 'event.payload' },
182
+ proposer: { var: 'event.agent' },
183
+ proposedAt: { var: '$ordinal' },
190
184
  votingEndsAt: {
191
- "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
185
+ '+': [{ var: '$ordinal' }, { var: 'state.votingPeriodMs' }],
192
186
  },
193
- snapshotBlock: { var: "event.snapshotBlock" },
187
+ snapshotBlock: { var: 'event.snapshotBlock' },
194
188
  },
195
189
  votes: { for: 0, against: 0, abstain: 0, voters: {} },
196
190
  },
@@ -200,78 +194,68 @@ export const daoTokenDef = defineFiberApp({
200
194
  },
201
195
  // VOTING → VOTING: vote (token holder, no double-vote, within window)
202
196
  {
203
- from: "VOTING",
204
- to: "VOTING",
205
- eventName: "vote",
197
+ from: 'VOTING',
198
+ to: 'VOTING',
199
+ eventName: 'vote',
200
+ // S1+A2 coupled fix: bind event.agent to a verified signer (actorIsSigner) so the
201
+ // balance lookup, the no-double-vote check, and the voters write below all key on the
202
+ // CHAIN-VERIFIED actor — never a forgeable claim. getKey→get (value), getKey→has
203
+ // (presence), setKey→set are the rc.5 map opcodes (getKey/setKey do not exist).
206
204
  guard: {
207
205
  and: [
206
+ actorIsSigner(),
208
207
  {
209
- ">": [
210
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
211
- 0,
212
- ],
208
+ '>': [{ get: [{ var: 'state.balances' }, { var: 'event.agent' }] }, 0],
213
209
  },
214
210
  {
215
- "!": [
211
+ '!': [
216
212
  {
217
- getKey: [{ var: "state.votes.voters" }, { var: "event.agent" }],
213
+ has: [{ var: 'state.votes.voters' }, { var: 'event.agent' }],
218
214
  },
219
215
  ],
220
216
  },
221
217
  {
222
- "<=": [
223
- { var: "$timestamp" },
224
- { var: "state.proposal.votingEndsAt" },
225
- ],
218
+ '<=': [{ var: '$ordinal' }, { var: 'state.proposal.votingEndsAt' }],
226
219
  },
227
220
  ],
228
221
  },
229
222
  effect: {
230
223
  merge: [
231
- { var: "state" },
224
+ { var: 'state' },
232
225
  {
233
226
  votes: {
234
227
  merge: [
235
- { var: "state.votes" },
228
+ { var: 'state.votes' },
236
229
  {
237
230
  if: [
238
- { "===": [{ var: "event.vote" }, "for"] },
231
+ { '===': [{ var: 'event.vote' }, 'for'] },
239
232
  {
240
233
  for: {
241
- "+": [
242
- { var: "state.votes.for" },
234
+ '+': [
235
+ { var: 'state.votes.for' },
243
236
  {
244
- getKey: [
245
- { var: "state.balances" },
246
- { var: "event.agent" },
247
- ],
237
+ get: [{ var: 'state.balances' }, { var: 'event.agent' }],
248
238
  },
249
239
  ],
250
240
  },
251
241
  },
252
- { "===": [{ var: "event.vote" }, "against"] },
242
+ { '===': [{ var: 'event.vote' }, 'against'] },
253
243
  {
254
244
  against: {
255
- "+": [
256
- { var: "state.votes.against" },
245
+ '+': [
246
+ { var: 'state.votes.against' },
257
247
  {
258
- getKey: [
259
- { var: "state.balances" },
260
- { var: "event.agent" },
261
- ],
248
+ get: [{ var: 'state.balances' }, { var: 'event.agent' }],
262
249
  },
263
250
  ],
264
251
  },
265
252
  },
266
253
  {
267
254
  abstain: {
268
- "+": [
269
- { var: "state.votes.abstain" },
255
+ '+': [
256
+ { var: 'state.votes.abstain' },
270
257
  {
271
- getKey: [
272
- { var: "state.balances" },
273
- { var: "event.agent" },
274
- ],
258
+ get: [{ var: 'state.balances' }, { var: 'event.agent' }],
275
259
  },
276
260
  ],
277
261
  },
@@ -280,18 +264,15 @@ export const daoTokenDef = defineFiberApp({
280
264
  },
281
265
  {
282
266
  voters: {
283
- setKey: [
284
- { var: "state.votes.voters" },
285
- { var: "event.agent" },
267
+ set: [
268
+ { var: 'state.votes.voters' },
269
+ { var: 'event.agent' },
286
270
  {
287
- vote: { var: "event.vote" },
271
+ vote: { var: 'event.vote' },
288
272
  weight: {
289
- getKey: [
290
- { var: "state.balances" },
291
- { var: "event.agent" },
292
- ],
273
+ get: [{ var: 'state.balances' }, { var: 'event.agent' }],
293
274
  },
294
- votedAt: { var: "$timestamp" },
275
+ votedAt: { var: '$ordinal' },
295
276
  },
296
277
  ],
297
278
  },
@@ -305,43 +286,36 @@ export const daoTokenDef = defineFiberApp({
305
286
  },
306
287
  // VOTING → QUEUED: queue (voting ended, for > against, quorum met)
307
288
  {
308
- from: "VOTING",
309
- to: "QUEUED",
310
- eventName: "queue",
289
+ from: 'VOTING',
290
+ to: 'QUEUED',
291
+ eventName: 'queue',
311
292
  guard: {
312
293
  and: [
313
294
  {
314
- ">": [
315
- { var: "$timestamp" },
316
- { var: "state.proposal.votingEndsAt" },
317
- ],
295
+ '>': [{ var: '$ordinal' }, { var: 'state.proposal.votingEndsAt' }],
318
296
  },
319
- { ">": [{ var: "state.votes.for" }, { var: "state.votes.against" }] },
297
+ { '>': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }] },
320
298
  {
321
- ">=": [
299
+ '>=': [
322
300
  {
323
- "+": [
324
- { var: "state.votes.for" },
325
- { var: "state.votes.against" },
326
- { var: "state.votes.abstain" },
327
- ],
301
+ '+': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }, { var: 'state.votes.abstain' }],
328
302
  },
329
- { var: "state.quorum" },
303
+ { var: 'state.quorum' },
330
304
  ],
331
305
  },
332
306
  ],
333
307
  },
334
308
  effect: {
335
309
  merge: [
336
- { var: "state" },
310
+ { var: 'state' },
337
311
  {
338
312
  proposal: {
339
313
  merge: [
340
- { var: "state.proposal" },
314
+ { var: 'state.proposal' },
341
315
  {
342
- queuedAt: { var: "$timestamp" },
316
+ queuedAt: { var: '$ordinal' },
343
317
  executableAt: {
344
- "+": [{ var: "$timestamp" }, { var: "state.timelockMs" }],
318
+ '+': [{ var: '$ordinal' }, { var: 'state.timelockMs' }],
345
319
  },
346
320
  },
347
321
  ],
@@ -353,26 +327,26 @@ export const daoTokenDef = defineFiberApp({
353
327
  },
354
328
  // QUEUED → ACTIVE: execute (timelock expired)
355
329
  {
356
- from: "QUEUED",
357
- to: "ACTIVE",
358
- eventName: "execute",
330
+ from: 'QUEUED',
331
+ to: 'ACTIVE',
332
+ eventName: 'execute',
359
333
  guard: {
360
- ">=": [{ var: "$timestamp" }, { var: "state.proposal.executableAt" }],
334
+ '>=': [{ var: '$ordinal' }, { var: 'state.proposal.executableAt' }],
361
335
  },
362
336
  effect: {
363
337
  merge: [
364
- { var: "state" },
338
+ { var: 'state' },
365
339
  {
366
340
  executedProposals: {
367
341
  cat: [
368
- { var: "state.executedProposals" },
342
+ { var: 'state.executedProposals' },
369
343
  [
370
344
  {
371
345
  merge: [
372
- { var: "state.proposal" },
346
+ { var: 'state.proposal' },
373
347
  {
374
- votes: { var: "state.votes" },
375
- executedAt: { var: "$timestamp" },
348
+ votes: { var: 'state.votes' },
349
+ executedAt: { var: '$ordinal' },
376
350
  },
377
351
  ],
378
352
  },
@@ -381,43 +355,41 @@ export const daoTokenDef = defineFiberApp({
381
355
  },
382
356
  proposal: null,
383
357
  votes: null,
358
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
359
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
360
+ _emit: [
361
+ {
362
+ name: 'proposal_executed',
363
+ data: { proposalId: { var: 'state.proposal.id' } },
364
+ destination: 'external',
365
+ },
366
+ ],
384
367
  },
385
368
  ],
386
369
  },
387
- emits: [{ event: "proposal_executed", to: "external" }],
388
370
  dependencies: [],
389
371
  },
390
372
  // VOTING → ACTIVE: reject (voting ended, failed quorum or for <= against)
391
373
  {
392
- from: "VOTING",
393
- to: "ACTIVE",
394
- eventName: "reject",
374
+ from: 'VOTING',
375
+ to: 'ACTIVE',
376
+ eventName: 'reject',
395
377
  guard: {
396
378
  and: [
397
379
  {
398
- ">": [
399
- { var: "$timestamp" },
400
- { var: "state.proposal.votingEndsAt" },
401
- ],
380
+ '>': [{ var: '$ordinal' }, { var: 'state.proposal.votingEndsAt' }],
402
381
  },
403
382
  {
404
383
  or: [
405
384
  {
406
- "<=": [
407
- { var: "state.votes.for" },
408
- { var: "state.votes.against" },
409
- ],
385
+ '<=': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }],
410
386
  },
411
387
  {
412
- "<": [
388
+ '<': [
413
389
  {
414
- "+": [
415
- { var: "state.votes.for" },
416
- { var: "state.votes.against" },
417
- { var: "state.votes.abstain" },
418
- ],
390
+ '+': [{ var: 'state.votes.for' }, { var: 'state.votes.against' }, { var: 'state.votes.abstain' }],
419
391
  },
420
- { var: "state.quorum" },
392
+ { var: 'state.quorum' },
421
393
  ],
422
394
  },
423
395
  ],
@@ -426,18 +398,18 @@ export const daoTokenDef = defineFiberApp({
426
398
  },
427
399
  effect: {
428
400
  merge: [
429
- { var: "state" },
401
+ { var: 'state' },
430
402
  {
431
403
  rejectedProposals: {
432
404
  cat: [
433
- { var: "state.rejectedProposals" },
405
+ { var: 'state.rejectedProposals' },
434
406
  [
435
407
  {
436
408
  merge: [
437
- { var: "state.proposal" },
409
+ { var: 'state.proposal' },
438
410
  {
439
- votes: { var: "state.votes" },
440
- rejectedAt: { var: "$timestamp" },
411
+ votes: { var: 'state.votes' },
412
+ rejectedAt: { var: '$ordinal' },
441
413
  },
442
414
  ],
443
415
  },
@@ -453,25 +425,20 @@ export const daoTokenDef = defineFiberApp({
453
425
  },
454
426
  // QUEUED → ACTIVE: cancel (proposer only)
455
427
  {
456
- from: "QUEUED",
457
- to: "ACTIVE",
458
- eventName: "cancel",
459
- guard: {
460
- "===": [{ var: "event.agent" }, { var: "state.proposal.proposer" }],
461
- },
428
+ from: 'QUEUED',
429
+ to: 'ACTIVE',
430
+ eventName: 'cancel',
431
+ guard: signerIsParty('state.proposal.proposer'),
462
432
  effect: {
463
433
  merge: [
464
- { var: "state" },
434
+ { var: 'state' },
465
435
  {
466
436
  cancelledProposals: {
467
437
  cat: [
468
- { var: "state.cancelledProposals" },
438
+ { var: 'state.cancelledProposals' },
469
439
  [
470
440
  {
471
- merge: [
472
- { var: "state.proposal" },
473
- { cancelledAt: { var: "$timestamp" } },
474
- ],
441
+ merge: [{ var: 'state.proposal' }, { cancelledAt: { var: '$ordinal' } }],
475
442
  },
476
443
  ],
477
444
  ],
@@ -485,25 +452,25 @@ export const daoTokenDef = defineFiberApp({
485
452
  },
486
453
  // ACTIVE → ACTIVE: delegate
487
454
  {
488
- from: "ACTIVE",
489
- to: "ACTIVE",
490
- eventName: "delegate",
455
+ from: 'ACTIVE',
456
+ to: 'ACTIVE',
457
+ eventName: 'delegate',
458
+ // S1+A2: bind event.agent to a verified signer so the delegation is written under the
459
+ // CHAIN-VERIFIED delegator's key (set), keyed on the same actor whose balance is checked (get).
491
460
  guard: {
492
- ">": [
493
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
494
- 0,
461
+ and: [
462
+ actorIsSigner(),
463
+ {
464
+ '>': [{ get: [{ var: 'state.balances' }, { var: 'event.agent' }] }, 0],
465
+ },
495
466
  ],
496
467
  },
497
468
  effect: {
498
469
  merge: [
499
- { var: "state" },
470
+ { var: 'state' },
500
471
  {
501
472
  delegations: {
502
- setKey: [
503
- { var: "state.delegations" },
504
- { var: "event.agent" },
505
- { var: "event.delegateTo" },
506
- ],
473
+ set: [{ var: 'state.delegations' }, { var: 'event.agent' }, { var: 'event.delegateTo' }],
507
474
  },
508
475
  },
509
476
  ],
@@ -512,16 +479,21 @@ export const daoTokenDef = defineFiberApp({
512
479
  },
513
480
  // ACTIVE → ACTIVE: undelegate
514
481
  {
515
- from: "ACTIVE",
516
- to: "ACTIVE",
517
- eventName: "undelegate",
518
- guard: { getKey: [{ var: "state.delegations" }, { var: "event.agent" }] },
482
+ from: 'ACTIVE',
483
+ to: 'ACTIVE',
484
+ eventName: 'undelegate',
485
+ // S1+A2: bind event.agent to a verified signer; presence via has, removal via unset (the rc.5
486
+ // map opcodes — getKey/deleteKey do not exist). Only the verified delegator can clear their own
487
+ // delegation.
488
+ guard: {
489
+ and: [actorIsSigner(), { has: [{ var: 'state.delegations' }, { var: 'event.agent' }] }],
490
+ },
519
491
  effect: {
520
492
  merge: [
521
- { var: "state" },
493
+ { var: 'state' },
522
494
  {
523
495
  delegations: {
524
- deleteKey: [{ var: "state.delegations" }, { var: "event.agent" }],
496
+ unset: [{ var: 'state.delegations' }, { var: 'event.agent' }],
525
497
  },
526
498
  },
527
499
  ],