@ottochain/sdk 2.2.5 → 2.4.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 (222) hide show
  1. package/dist/cjs/apps/contracts/index.js +15 -8
  2. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +89 -46
  3. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +152 -45
  4. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +40 -8
  5. package/dist/cjs/apps/corporate/index.js +2 -2
  6. package/dist/cjs/apps/corporate/state-machines/corp-board.js +169 -59
  7. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +245 -47
  8. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +407 -99
  9. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +151 -37
  10. package/dist/cjs/apps/governance/index.js +14 -14
  11. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +85 -43
  12. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +73 -43
  13. package/dist/cjs/apps/governance/state-machines/dao-single.js +55 -14
  14. package/dist/cjs/apps/governance/state-machines/dao-token.js +103 -45
  15. package/dist/cjs/apps/governance/state-machines/governance-simple.js +129 -65
  16. package/dist/cjs/apps/governance/state-machines/governance-universal.js +29 -5
  17. package/dist/cjs/apps/identity/constants.js +55 -14
  18. package/dist/cjs/apps/identity/index.js +27 -11
  19. package/dist/cjs/apps/identity/state-machines/identity-agent.js +57 -9
  20. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +70 -27
  21. package/dist/cjs/apps/identity/state-machines/identity-registry.js +288 -0
  22. package/dist/cjs/apps/identity/state-machines/identity-universal.js +30 -6
  23. package/dist/cjs/apps/identity/state-machines/index.js +3 -1
  24. package/dist/cjs/apps/index.js +19 -8
  25. package/dist/cjs/apps/lending/assets.js +223 -0
  26. package/dist/cjs/apps/lending/credit-scoring.js +87 -0
  27. package/dist/cjs/apps/lending/eligibility.js +121 -0
  28. package/dist/cjs/apps/lending/index.js +91 -0
  29. package/dist/cjs/apps/lending/state-machines/index.js +9 -0
  30. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +412 -0
  31. package/dist/cjs/apps/markets/index.js +21 -11
  32. package/dist/cjs/apps/markets/state-machines/market-auction.js +44 -19
  33. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +54 -29
  34. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +53 -31
  35. package/dist/cjs/apps/markets/state-machines/market-prediction.js +120 -61
  36. package/dist/cjs/apps/markets/state-machines/market-universal.js +50 -10
  37. package/dist/cjs/apps/oracles/index.js +2 -2
  38. package/dist/cjs/errors.js +3 -3
  39. package/dist/cjs/generated/google/protobuf/struct.js +4 -4
  40. package/dist/cjs/generated/index.js +11 -7
  41. package/dist/cjs/generated/openapi.js +6 -0
  42. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +50 -50
  43. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +19 -20
  44. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +13 -13
  45. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +4 -4
  46. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +124 -130
  47. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +107 -107
  48. package/dist/cjs/generated/ottochain/v1/common.js +1722 -1
  49. package/dist/cjs/generated/ottochain/v1/fiber.js +355 -5
  50. package/dist/cjs/generated/ottochain/v1/messages.js +775 -3
  51. package/dist/cjs/generated/ottochain/v1/records.js +350 -3
  52. package/dist/cjs/index.js +45 -7
  53. package/dist/cjs/openapi.js +2 -0
  54. package/dist/cjs/ottochain/drop-nulls.js +1 -2
  55. package/dist/cjs/ottochain/genesis-manifest.js +193 -0
  56. package/dist/cjs/ottochain/index.js +27 -13
  57. package/dist/cjs/ottochain/metagraph-client.js +65 -8
  58. package/dist/cjs/ottochain/snapshot.js +11 -12
  59. package/dist/cjs/ottochain/transaction.js +57 -14
  60. package/dist/cjs/ottochain/types.js +19 -1
  61. package/dist/cjs/privacy/index.js +14 -0
  62. package/dist/cjs/privacy/sealed-bid.js +210 -0
  63. package/dist/cjs/privacy/shield-app.js +131 -0
  64. package/dist/cjs/schema/effects.js +40 -0
  65. package/dist/cjs/schema/fiber-app.js +19 -13
  66. package/dist/cjs/schema/guard-lint.js +352 -0
  67. package/dist/cjs/schema/guards.js +246 -0
  68. package/dist/cjs/signing.js +80 -0
  69. package/dist/cjs/types.js +2 -3
  70. package/dist/cjs/validation.js +8 -8
  71. package/dist/cjs/verify.js +9 -4
  72. package/dist/cjs/zk/commit.js +53 -0
  73. package/dist/cjs/zk/guard.js +107 -0
  74. package/dist/cjs/zk/index.js +48 -0
  75. package/dist/cjs/zk/preimage.js +37 -0
  76. package/dist/cjs/zk/prover.js +87 -0
  77. package/dist/cjs/zk/registry.js +62 -0
  78. package/dist/cjs/zk/types.js +28 -0
  79. package/dist/cjs/zk/witness.js +19 -0
  80. package/dist/esm/apps/contracts/index.js +7 -3
  81. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +89 -46
  82. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +152 -45
  83. package/dist/esm/apps/contracts/state-machines/contract-universal.js +40 -8
  84. package/dist/esm/apps/corporate/state-machines/corp-board.js +169 -59
  85. package/dist/esm/apps/corporate/state-machines/corp-entity.js +245 -47
  86. package/dist/esm/apps/corporate/state-machines/corp-securities.js +407 -99
  87. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +151 -37
  88. package/dist/esm/apps/governance/state-machines/dao-multisig.js +85 -43
  89. package/dist/esm/apps/governance/state-machines/dao-reputation.js +73 -43
  90. package/dist/esm/apps/governance/state-machines/dao-single.js +55 -14
  91. package/dist/esm/apps/governance/state-machines/dao-token.js +103 -45
  92. package/dist/esm/apps/governance/state-machines/governance-simple.js +129 -65
  93. package/dist/esm/apps/governance/state-machines/governance-universal.js +29 -5
  94. package/dist/esm/apps/identity/constants.js +51 -12
  95. package/dist/esm/apps/identity/index.js +12 -7
  96. package/dist/esm/apps/identity/state-machines/identity-agent.js +57 -9
  97. package/dist/esm/apps/identity/state-machines/identity-oracle.js +70 -27
  98. package/dist/esm/apps/identity/state-machines/identity-registry.js +285 -0
  99. package/dist/esm/apps/identity/state-machines/identity-universal.js +30 -6
  100. package/dist/esm/apps/identity/state-machines/index.js +1 -0
  101. package/dist/esm/apps/index.js +1 -0
  102. package/dist/esm/apps/lending/assets.js +207 -0
  103. package/dist/esm/apps/lending/credit-scoring.js +81 -0
  104. package/dist/esm/apps/lending/eligibility.js +115 -0
  105. package/dist/esm/apps/lending/index.js +69 -0
  106. package/dist/esm/apps/lending/state-machines/index.js +5 -0
  107. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +409 -0
  108. package/dist/esm/apps/markets/index.js +8 -4
  109. package/dist/esm/apps/markets/state-machines/market-auction.js +44 -19
  110. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +54 -29
  111. package/dist/esm/apps/markets/state-machines/market-group-buy.js +53 -31
  112. package/dist/esm/apps/markets/state-machines/market-prediction.js +120 -61
  113. package/dist/esm/apps/markets/state-machines/market-universal.js +50 -10
  114. package/dist/esm/generated/index.js +9 -5
  115. package/dist/esm/generated/openapi.js +5 -0
  116. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +46 -46
  117. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +114 -120
  118. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +100 -100
  119. package/dist/esm/generated/ottochain/v1/common.js +1718 -0
  120. package/dist/esm/generated/ottochain/v1/fiber.js +351 -1
  121. package/dist/esm/generated/ottochain/v1/messages.js +774 -2
  122. package/dist/esm/generated/ottochain/v1/records.js +349 -2
  123. package/dist/esm/index.js +23 -2
  124. package/dist/esm/openapi.js +1 -0
  125. package/dist/esm/ottochain/genesis-manifest.js +189 -0
  126. package/dist/esm/ottochain/index.js +4 -3
  127. package/dist/esm/ottochain/metagraph-client.js +65 -8
  128. package/dist/esm/ottochain/snapshot.js +4 -4
  129. package/dist/esm/ottochain/transaction.js +43 -3
  130. package/dist/esm/ottochain/types.js +18 -0
  131. package/dist/esm/privacy/index.js +6 -0
  132. package/dist/esm/privacy/sealed-bid.js +206 -0
  133. package/dist/esm/privacy/shield-app.js +127 -0
  134. package/dist/esm/schema/effects.js +35 -0
  135. package/dist/esm/schema/fiber-app.js +13 -6
  136. package/dist/esm/schema/guard-lint.js +346 -0
  137. package/dist/esm/schema/guards.js +229 -0
  138. package/dist/esm/signing.js +74 -0
  139. package/dist/esm/verify.js +8 -2
  140. package/dist/esm/zk/commit.js +44 -0
  141. package/dist/esm/zk/guard.js +99 -0
  142. package/dist/esm/zk/index.js +19 -0
  143. package/dist/esm/zk/preimage.js +30 -0
  144. package/dist/esm/zk/prover.js +82 -0
  145. package/dist/esm/zk/registry.js +55 -0
  146. package/dist/esm/zk/types.js +25 -0
  147. package/dist/esm/zk/witness.js +15 -0
  148. package/dist/types/apps/contracts/index.d.ts +159 -227
  149. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +50 -101
  150. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +86 -120
  151. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +20 -4
  152. package/dist/types/apps/corporate/index.d.ts +1040 -304
  153. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +188 -52
  154. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +267 -62
  155. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +355 -131
  156. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +225 -53
  157. package/dist/types/apps/governance/index.d.ts +396 -417
  158. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +92 -95
  159. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +57 -69
  160. package/dist/types/apps/governance/state-machines/dao-single.d.ts +40 -50
  161. package/dist/types/apps/governance/state-machines/dao-token.d.ts +80 -53
  162. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +107 -121
  163. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +17 -5
  164. package/dist/types/apps/identity/constants.d.ts +32 -4
  165. package/dist/types/apps/identity/index.d.ts +449 -100
  166. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +30 -0
  167. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +41 -87
  168. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
  169. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +15 -0
  170. package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
  171. package/dist/types/apps/index.d.ts +1 -0
  172. package/dist/types/apps/lending/assets.d.ts +258 -0
  173. package/dist/types/apps/lending/credit-scoring.d.ts +80 -0
  174. package/dist/types/apps/lending/eligibility.d.ts +83 -0
  175. package/dist/types/apps/lending/index.d.ts +548 -0
  176. package/dist/types/apps/lending/state-machines/index.d.ts +5 -0
  177. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +528 -0
  178. package/dist/types/apps/markets/index.d.ts +184 -204
  179. package/dist/types/apps/markets/state-machines/market-auction.d.ts +25 -37
  180. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +26 -34
  181. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +31 -43
  182. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +67 -72
  183. package/dist/types/apps/markets/state-machines/market-universal.d.ts +30 -10
  184. package/dist/types/generated/index.d.ts +5 -5
  185. package/dist/types/generated/openapi.d.ts +1257 -0
  186. package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +5 -5
  187. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +12 -12
  188. package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +11 -11
  189. package/dist/types/generated/ottochain/v1/common.d.ts +228 -0
  190. package/dist/types/generated/ottochain/v1/fiber.d.ts +32 -1
  191. package/dist/types/generated/ottochain/v1/messages.d.ts +84 -0
  192. package/dist/types/generated/ottochain/v1/records.d.ts +34 -0
  193. package/dist/types/index.d.ts +8 -2
  194. package/dist/types/openapi.d.ts +22 -0
  195. package/dist/types/ottochain/genesis-manifest.d.ts +130 -0
  196. package/dist/types/ottochain/index.d.ts +6 -5
  197. package/dist/types/ottochain/metagraph-client.d.ts +49 -7
  198. package/dist/types/ottochain/snapshot.d.ts +6 -6
  199. package/dist/types/ottochain/transaction.d.ts +33 -1
  200. package/dist/types/ottochain/types.d.ts +602 -11
  201. package/dist/types/privacy/index.d.ts +6 -0
  202. package/dist/types/privacy/sealed-bid.d.ts +348 -0
  203. package/dist/types/privacy/shield-app.d.ts +48 -0
  204. package/dist/types/schema/effects.d.ts +34 -0
  205. package/dist/types/schema/fiber-app.d.ts +41 -3
  206. package/dist/types/schema/guard-lint.d.ts +111 -0
  207. package/dist/types/schema/guards.d.ts +134 -0
  208. package/dist/types/signing.d.ts +45 -0
  209. package/dist/types/validation.d.ts +22 -217
  210. package/dist/types/verify.d.ts +4 -0
  211. package/dist/types/zk/commit.d.ts +28 -0
  212. package/dist/types/zk/guard.d.ts +46 -0
  213. package/dist/types/zk/index.d.ts +19 -0
  214. package/dist/types/zk/preimage.d.ts +10 -0
  215. package/dist/types/zk/prover.d.ts +34 -0
  216. package/dist/types/zk/registry.d.ts +34 -0
  217. package/dist/types/zk/types.d.ts +33 -0
  218. package/dist/types/zk/witness.d.ts +40 -0
  219. package/package.json +52 -35
  220. package/dist/cjs/ottochain/normalize.js +0 -186
  221. package/dist/esm/ottochain/normalize.js +0 -179
  222. package/dist/types/ottochain/normalize.d.ts +0 -79
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.daoSingleDef = 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
  * Single owner controls all actions. Simplest governance model.
7
8
  */
@@ -78,9 +79,33 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
78
79
  },
79
80
  },
80
81
  states: {
81
- ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
82
- TRANSFERRING: { id: "TRANSFERRING", isFinal: false, metadata: null },
83
- DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
82
+ ACTIVE: {
83
+ id: "ACTIVE",
84
+ isFinal: false,
85
+ metadata: {
86
+ label: "Active",
87
+ description: "Single owner controls the DAO and may act or transfer ownership",
88
+ category: "initial",
89
+ },
90
+ },
91
+ TRANSFERRING: {
92
+ id: "TRANSFERRING",
93
+ isFinal: false,
94
+ metadata: {
95
+ label: "Transferring",
96
+ description: "Ownership transfer proposed; awaiting acceptance",
97
+ category: "pending",
98
+ },
99
+ },
100
+ DISSOLVED: {
101
+ id: "DISSOLVED",
102
+ isFinal: true,
103
+ metadata: {
104
+ label: "Dissolved",
105
+ description: "DAO dissolved by its owner (terminal)",
106
+ category: "terminal",
107
+ },
108
+ },
84
109
  },
85
110
  initialState: "ACTIVE",
86
111
  transitions: [
@@ -89,7 +114,7 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
89
114
  from: "ACTIVE",
90
115
  to: "ACTIVE",
91
116
  eventName: "execute",
92
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
117
+ guard: (0, guards_js_1.signerIsParty)("state.owner"),
93
118
  effect: {
94
119
  merge: [
95
120
  { var: "state" },
@@ -102,15 +127,23 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
102
127
  id: { var: "event.actionId" },
103
128
  type: { var: "event.actionType" },
104
129
  payload: { var: "event.payload" },
105
- executedAt: { var: "$timestamp" },
130
+ executedAt: { var: "$ordinal" },
106
131
  },
107
132
  ],
108
133
  ],
109
134
  },
135
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
136
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
137
+ _emit: [
138
+ {
139
+ name: "action_executed",
140
+ data: { actionId: { var: "event.actionId" } },
141
+ destination: "external",
142
+ },
143
+ ],
110
144
  },
111
145
  ],
112
146
  },
113
- emits: [{ event: "action_executed", to: "external" }],
114
147
  dependencies: [],
115
148
  },
116
149
  // ACTIVE → TRANSFERRING: transfer_ownership (owner only)
@@ -118,13 +151,13 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
118
151
  from: "ACTIVE",
119
152
  to: "TRANSFERRING",
120
153
  eventName: "transfer_ownership",
121
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
154
+ guard: (0, guards_js_1.signerIsParty)("state.owner"),
122
155
  effect: {
123
156
  merge: [
124
157
  { var: "state" },
125
158
  {
126
159
  pendingOwner: { var: "event.newOwner" },
127
- transferInitiatedAt: { var: "$timestamp" },
160
+ transferInitiatedAt: { var: "$ordinal" },
128
161
  },
129
162
  ],
130
163
  },
@@ -135,7 +168,7 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
135
168
  from: "TRANSFERRING",
136
169
  to: "ACTIVE",
137
170
  eventName: "accept_ownership",
138
- guard: { "===": [{ var: "event.agent" }, { var: "state.pendingOwner" }] },
171
+ guard: (0, guards_js_1.signerIsParty)("state.pendingOwner"),
139
172
  effect: {
140
173
  merge: [
141
174
  { var: "state" },
@@ -150,15 +183,23 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
150
183
  {
151
184
  from: { var: "state.owner" },
152
185
  to: { var: "state.pendingOwner" },
153
- at: { var: "$timestamp" },
186
+ at: { var: "$ordinal" },
154
187
  },
155
188
  ],
156
189
  ],
157
190
  },
191
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
192
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
193
+ _emit: [
194
+ {
195
+ name: "ownership_transferred",
196
+ data: { var: "event" },
197
+ destination: "Identity",
198
+ },
199
+ ],
158
200
  },
159
201
  ],
160
202
  },
161
- emits: [{ event: "ownership_transferred", to: "Identity" }],
162
203
  dependencies: [],
163
204
  },
164
205
  // TRANSFERRING → ACTIVE: cancel_transfer (owner only)
@@ -166,7 +207,7 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
166
207
  from: "TRANSFERRING",
167
208
  to: "ACTIVE",
168
209
  eventName: "cancel_transfer",
169
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
210
+ guard: (0, guards_js_1.signerIsParty)("state.owner"),
170
211
  effect: {
171
212
  merge: [
172
213
  { var: "state" },
@@ -183,12 +224,12 @@ exports.daoSingleDef = (0, fiber_app_js_1.defineFiberApp)({
183
224
  from: "ACTIVE",
184
225
  to: "DISSOLVED",
185
226
  eventName: "dissolve",
186
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
227
+ guard: (0, guards_js_1.signerIsParty)("state.owner"),
187
228
  effect: {
188
229
  merge: [
189
230
  { var: "state" },
190
231
  {
191
- dissolvedAt: { var: "$timestamp" },
232
+ dissolvedAt: { var: "$ordinal" },
192
233
  status: "DISSOLVED",
193
234
  },
194
235
  ],
@@ -2,6 +2,7 @@
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
  */
@@ -128,10 +129,42 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
128
129
  },
129
130
  },
130
131
  states: {
131
- ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
132
- VOTING: { id: "VOTING", isFinal: false, metadata: null },
133
- QUEUED: { id: "QUEUED", isFinal: false, metadata: null },
134
- DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
132
+ ACTIVE: {
133
+ id: "ACTIVE",
134
+ isFinal: false,
135
+ metadata: {
136
+ label: "Active",
137
+ description: "DAO is idle and ready to accept a proposal",
138
+ category: "initial",
139
+ },
140
+ },
141
+ VOTING: {
142
+ id: "VOTING",
143
+ isFinal: false,
144
+ metadata: {
145
+ label: "Voting",
146
+ description: "Token holders are voting on the active proposal",
147
+ category: "pending",
148
+ },
149
+ },
150
+ QUEUED: {
151
+ id: "QUEUED",
152
+ isFinal: false,
153
+ metadata: {
154
+ label: "Queued",
155
+ description: "Passed proposal queued in timelock before execution",
156
+ category: "pending",
157
+ },
158
+ },
159
+ DISSOLVED: {
160
+ id: "DISSOLVED",
161
+ isFinal: true,
162
+ metadata: {
163
+ label: "Dissolved",
164
+ description: "Token DAO dissolved (terminal)",
165
+ category: "terminal",
166
+ },
167
+ },
135
168
  },
136
169
  initialState: "ACTIVE",
137
170
  transitions: [
@@ -140,10 +173,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
140
173
  from: "ACTIVE",
141
174
  to: "VOTING",
142
175
  eventName: "propose",
176
+ // S1/A2 coupled fix: a CHAIN-VERIFIED signer must hold >= proposalThreshold
177
+ // tokens. Iterate proofs[].address and read each balance via `get` (getKey is
178
+ // not a JLVM opcode); never trust the forgeable event.agent for the lookup.
143
179
  guard: {
144
- ">=": [
145
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
146
- { var: "state.proposalThreshold" },
180
+ some: [
181
+ { map: [{ var: "proofs" }, { var: "address" }] },
182
+ {
183
+ ">=": [
184
+ { get: [{ var: "state.balances" }, { var: "" }] },
185
+ { var: "state.proposalThreshold" },
186
+ ],
187
+ },
147
188
  ],
148
189
  },
149
190
  effect: {
@@ -157,9 +198,9 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
157
198
  actionType: { var: "event.actionType" },
158
199
  payload: { var: "event.payload" },
159
200
  proposer: { var: "event.agent" },
160
- proposedAt: { var: "$timestamp" },
201
+ proposedAt: { var: "$ordinal" },
161
202
  votingEndsAt: {
162
- "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
203
+ "+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
163
204
  },
164
205
  snapshotBlock: { var: "event.snapshotBlock" },
165
206
  },
@@ -174,26 +215,28 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
174
215
  from: "VOTING",
175
216
  to: "VOTING",
176
217
  eventName: "vote",
218
+ // S1+A2 coupled fix: bind event.agent to a verified signer (actorIsSigner) so the
219
+ // balance lookup, the no-double-vote check, and the voters write below all key on the
220
+ // CHAIN-VERIFIED actor — never a forgeable claim. getKey→get (value), getKey→has
221
+ // (presence), setKey→set are the rc.5 map opcodes (getKey/setKey do not exist).
177
222
  guard: {
178
223
  and: [
224
+ (0, guards_js_1.actorIsSigner)(),
179
225
  {
180
226
  ">": [
181
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
227
+ { get: [{ var: "state.balances" }, { var: "event.agent" }] },
182
228
  0,
183
229
  ],
184
230
  },
185
231
  {
186
232
  "!": [
187
233
  {
188
- getKey: [{ var: "state.votes.voters" }, { var: "event.agent" }],
234
+ has: [{ var: "state.votes.voters" }, { var: "event.agent" }],
189
235
  },
190
236
  ],
191
237
  },
192
238
  {
193
- "<=": [
194
- { var: "$timestamp" },
195
- { var: "state.proposal.votingEndsAt" },
196
- ],
239
+ "<=": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
197
240
  },
198
241
  ],
199
242
  },
@@ -212,7 +255,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
212
255
  "+": [
213
256
  { var: "state.votes.for" },
214
257
  {
215
- getKey: [
258
+ get: [
216
259
  { var: "state.balances" },
217
260
  { var: "event.agent" },
218
261
  ],
@@ -226,7 +269,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
226
269
  "+": [
227
270
  { var: "state.votes.against" },
228
271
  {
229
- getKey: [
272
+ get: [
230
273
  { var: "state.balances" },
231
274
  { var: "event.agent" },
232
275
  ],
@@ -239,7 +282,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
239
282
  "+": [
240
283
  { var: "state.votes.abstain" },
241
284
  {
242
- getKey: [
285
+ get: [
243
286
  { var: "state.balances" },
244
287
  { var: "event.agent" },
245
288
  ],
@@ -251,18 +294,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
251
294
  },
252
295
  {
253
296
  voters: {
254
- setKey: [
297
+ set: [
255
298
  { var: "state.votes.voters" },
256
299
  { var: "event.agent" },
257
300
  {
258
301
  vote: { var: "event.vote" },
259
302
  weight: {
260
- getKey: [
303
+ get: [
261
304
  { var: "state.balances" },
262
305
  { var: "event.agent" },
263
306
  ],
264
307
  },
265
- votedAt: { var: "$timestamp" },
308
+ votedAt: { var: "$ordinal" },
266
309
  },
267
310
  ],
268
311
  },
@@ -282,10 +325,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
282
325
  guard: {
283
326
  and: [
284
327
  {
285
- ">": [
286
- { var: "$timestamp" },
287
- { var: "state.proposal.votingEndsAt" },
288
- ],
328
+ ">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
289
329
  },
290
330
  { ">": [{ var: "state.votes.for" }, { var: "state.votes.against" }] },
291
331
  {
@@ -310,9 +350,9 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
310
350
  merge: [
311
351
  { var: "state.proposal" },
312
352
  {
313
- queuedAt: { var: "$timestamp" },
353
+ queuedAt: { var: "$ordinal" },
314
354
  executableAt: {
315
- "+": [{ var: "$timestamp" }, { var: "state.timelockMs" }],
355
+ "+": [{ var: "$ordinal" }, { var: "state.timelockMs" }],
316
356
  },
317
357
  },
318
358
  ],
@@ -328,7 +368,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
328
368
  to: "ACTIVE",
329
369
  eventName: "execute",
330
370
  guard: {
331
- ">=": [{ var: "$timestamp" }, { var: "state.proposal.executableAt" }],
371
+ ">=": [{ var: "$ordinal" }, { var: "state.proposal.executableAt" }],
332
372
  },
333
373
  effect: {
334
374
  merge: [
@@ -343,7 +383,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
343
383
  { var: "state.proposal" },
344
384
  {
345
385
  votes: { var: "state.votes" },
346
- executedAt: { var: "$timestamp" },
386
+ executedAt: { var: "$ordinal" },
347
387
  },
348
388
  ],
349
389
  },
@@ -352,10 +392,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
352
392
  },
353
393
  proposal: null,
354
394
  votes: null,
395
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
396
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
397
+ _emit: [
398
+ {
399
+ name: "proposal_executed",
400
+ data: { proposalId: { var: "state.proposal.id" } },
401
+ destination: "external",
402
+ },
403
+ ],
355
404
  },
356
405
  ],
357
406
  },
358
- emits: [{ event: "proposal_executed", to: "external" }],
359
407
  dependencies: [],
360
408
  },
361
409
  // VOTING → ACTIVE: reject (voting ended, failed quorum or for <= against)
@@ -366,10 +414,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
366
414
  guard: {
367
415
  and: [
368
416
  {
369
- ">": [
370
- { var: "$timestamp" },
371
- { var: "state.proposal.votingEndsAt" },
372
- ],
417
+ ">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
373
418
  },
374
419
  {
375
420
  or: [
@@ -408,7 +453,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
408
453
  { var: "state.proposal" },
409
454
  {
410
455
  votes: { var: "state.votes" },
411
- rejectedAt: { var: "$timestamp" },
456
+ rejectedAt: { var: "$ordinal" },
412
457
  },
413
458
  ],
414
459
  },
@@ -427,9 +472,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
427
472
  from: "QUEUED",
428
473
  to: "ACTIVE",
429
474
  eventName: "cancel",
430
- guard: {
431
- "===": [{ var: "event.agent" }, { var: "state.proposal.proposer" }],
432
- },
475
+ guard: (0, guards_js_1.signerIsParty)("state.proposal.proposer"),
433
476
  effect: {
434
477
  merge: [
435
478
  { var: "state" },
@@ -441,7 +484,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
441
484
  {
442
485
  merge: [
443
486
  { var: "state.proposal" },
444
- { cancelledAt: { var: "$timestamp" } },
487
+ { cancelledAt: { var: "$ordinal" } },
445
488
  ],
446
489
  },
447
490
  ],
@@ -459,10 +502,17 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
459
502
  from: "ACTIVE",
460
503
  to: "ACTIVE",
461
504
  eventName: "delegate",
505
+ // S1+A2: bind event.agent to a verified signer so the delegation is written under the
506
+ // CHAIN-VERIFIED delegator's key (set), keyed on the same actor whose balance is checked (get).
462
507
  guard: {
463
- ">": [
464
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
465
- 0,
508
+ and: [
509
+ (0, guards_js_1.actorIsSigner)(),
510
+ {
511
+ ">": [
512
+ { get: [{ var: "state.balances" }, { var: "event.agent" }] },
513
+ 0,
514
+ ],
515
+ },
466
516
  ],
467
517
  },
468
518
  effect: {
@@ -470,7 +520,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
470
520
  { var: "state" },
471
521
  {
472
522
  delegations: {
473
- setKey: [
523
+ set: [
474
524
  { var: "state.delegations" },
475
525
  { var: "event.agent" },
476
526
  { var: "event.delegateTo" },
@@ -486,13 +536,21 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
486
536
  from: "ACTIVE",
487
537
  to: "ACTIVE",
488
538
  eventName: "undelegate",
489
- guard: { getKey: [{ var: "state.delegations" }, { var: "event.agent" }] },
539
+ // S1+A2: bind event.agent to a verified signer; presence via has, removal via unset (the rc.5
540
+ // map opcodes — getKey/deleteKey do not exist). Only the verified delegator can clear their own
541
+ // delegation.
542
+ guard: {
543
+ and: [
544
+ (0, guards_js_1.actorIsSigner)(),
545
+ { has: [{ var: "state.delegations" }, { var: "event.agent" }] },
546
+ ],
547
+ },
490
548
  effect: {
491
549
  merge: [
492
550
  { var: "state" },
493
551
  {
494
552
  delegations: {
495
- deleteKey: [{ var: "state.delegations" }, { var: "event.agent" }],
553
+ unset: [{ var: "state.delegations" }, { var: "event.agent" }],
496
554
  },
497
555
  },
498
556
  ],