@ottochain/sdk 2.4.0 → 2.6.0

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