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