@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
@@ -1,4 +1,5 @@
1
1
  import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ import { signerIsParty } from "../../../schema/guards.js";
2
3
  /**
3
4
  * Single owner controls all actions. Simplest governance model.
4
5
  */
@@ -75,9 +76,33 @@ export const daoSingleDef = defineFiberApp({
75
76
  },
76
77
  },
77
78
  states: {
78
- ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
79
- TRANSFERRING: { id: "TRANSFERRING", isFinal: false, metadata: null },
80
- DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
79
+ ACTIVE: {
80
+ id: "ACTIVE",
81
+ isFinal: false,
82
+ metadata: {
83
+ label: "Active",
84
+ description: "Single owner controls the DAO and may act or transfer ownership",
85
+ category: "initial",
86
+ },
87
+ },
88
+ TRANSFERRING: {
89
+ id: "TRANSFERRING",
90
+ isFinal: false,
91
+ metadata: {
92
+ label: "Transferring",
93
+ description: "Ownership transfer proposed; awaiting acceptance",
94
+ category: "pending",
95
+ },
96
+ },
97
+ DISSOLVED: {
98
+ id: "DISSOLVED",
99
+ isFinal: true,
100
+ metadata: {
101
+ label: "Dissolved",
102
+ description: "DAO dissolved by its owner (terminal)",
103
+ category: "terminal",
104
+ },
105
+ },
81
106
  },
82
107
  initialState: "ACTIVE",
83
108
  transitions: [
@@ -86,7 +111,7 @@ export const daoSingleDef = defineFiberApp({
86
111
  from: "ACTIVE",
87
112
  to: "ACTIVE",
88
113
  eventName: "execute",
89
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
114
+ guard: signerIsParty("state.owner"),
90
115
  effect: {
91
116
  merge: [
92
117
  { var: "state" },
@@ -99,15 +124,23 @@ export const daoSingleDef = defineFiberApp({
99
124
  id: { var: "event.actionId" },
100
125
  type: { var: "event.actionType" },
101
126
  payload: { var: "event.payload" },
102
- executedAt: { var: "$timestamp" },
127
+ executedAt: { var: "$ordinal" },
103
128
  },
104
129
  ],
105
130
  ],
106
131
  },
132
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
133
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
134
+ _emit: [
135
+ {
136
+ name: "action_executed",
137
+ data: { actionId: { var: "event.actionId" } },
138
+ destination: "external",
139
+ },
140
+ ],
107
141
  },
108
142
  ],
109
143
  },
110
- emits: [{ event: "action_executed", to: "external" }],
111
144
  dependencies: [],
112
145
  },
113
146
  // ACTIVE → TRANSFERRING: transfer_ownership (owner only)
@@ -115,13 +148,13 @@ export const daoSingleDef = defineFiberApp({
115
148
  from: "ACTIVE",
116
149
  to: "TRANSFERRING",
117
150
  eventName: "transfer_ownership",
118
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
151
+ guard: signerIsParty("state.owner"),
119
152
  effect: {
120
153
  merge: [
121
154
  { var: "state" },
122
155
  {
123
156
  pendingOwner: { var: "event.newOwner" },
124
- transferInitiatedAt: { var: "$timestamp" },
157
+ transferInitiatedAt: { var: "$ordinal" },
125
158
  },
126
159
  ],
127
160
  },
@@ -132,7 +165,7 @@ export const daoSingleDef = defineFiberApp({
132
165
  from: "TRANSFERRING",
133
166
  to: "ACTIVE",
134
167
  eventName: "accept_ownership",
135
- guard: { "===": [{ var: "event.agent" }, { var: "state.pendingOwner" }] },
168
+ guard: signerIsParty("state.pendingOwner"),
136
169
  effect: {
137
170
  merge: [
138
171
  { var: "state" },
@@ -147,15 +180,23 @@ export const daoSingleDef = defineFiberApp({
147
180
  {
148
181
  from: { var: "state.owner" },
149
182
  to: { var: "state.pendingOwner" },
150
- at: { var: "$timestamp" },
183
+ at: { var: "$ordinal" },
151
184
  },
152
185
  ],
153
186
  ],
154
187
  },
188
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
189
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
190
+ _emit: [
191
+ {
192
+ name: "ownership_transferred",
193
+ data: { var: "event" },
194
+ destination: "Identity",
195
+ },
196
+ ],
155
197
  },
156
198
  ],
157
199
  },
158
- emits: [{ event: "ownership_transferred", to: "Identity" }],
159
200
  dependencies: [],
160
201
  },
161
202
  // TRANSFERRING → ACTIVE: cancel_transfer (owner only)
@@ -163,7 +204,7 @@ export const daoSingleDef = defineFiberApp({
163
204
  from: "TRANSFERRING",
164
205
  to: "ACTIVE",
165
206
  eventName: "cancel_transfer",
166
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
207
+ guard: signerIsParty("state.owner"),
167
208
  effect: {
168
209
  merge: [
169
210
  { var: "state" },
@@ -180,12 +221,12 @@ export const daoSingleDef = defineFiberApp({
180
221
  from: "ACTIVE",
181
222
  to: "DISSOLVED",
182
223
  eventName: "dissolve",
183
- guard: { "===": [{ var: "event.agent" }, { var: "state.owner" }] },
224
+ guard: signerIsParty("state.owner"),
184
225
  effect: {
185
226
  merge: [
186
227
  { var: "state" },
187
228
  {
188
- dissolvedAt: { var: "$timestamp" },
229
+ dissolvedAt: { var: "$ordinal" },
189
230
  status: "DISSOLVED",
190
231
  },
191
232
  ],
@@ -1,4 +1,5 @@
1
1
  import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ import { signerIsParty, actorIsSigner } from "../../../schema/guards.js";
2
3
  /**
3
4
  * Token-weighted voting. Voting power proportional to token holdings.
4
5
  */
@@ -125,10 +126,42 @@ export const daoTokenDef = defineFiberApp({
125
126
  },
126
127
  },
127
128
  states: {
128
- ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
129
- VOTING: { id: "VOTING", isFinal: false, metadata: null },
130
- QUEUED: { id: "QUEUED", isFinal: false, metadata: null },
131
- DISSOLVED: { id: "DISSOLVED", isFinal: true, metadata: null },
129
+ ACTIVE: {
130
+ id: "ACTIVE",
131
+ isFinal: false,
132
+ metadata: {
133
+ label: "Active",
134
+ description: "DAO is idle and ready to accept a proposal",
135
+ category: "initial",
136
+ },
137
+ },
138
+ VOTING: {
139
+ id: "VOTING",
140
+ isFinal: false,
141
+ metadata: {
142
+ label: "Voting",
143
+ description: "Token holders are voting on the active proposal",
144
+ category: "pending",
145
+ },
146
+ },
147
+ QUEUED: {
148
+ id: "QUEUED",
149
+ isFinal: false,
150
+ metadata: {
151
+ label: "Queued",
152
+ description: "Passed proposal queued in timelock before execution",
153
+ category: "pending",
154
+ },
155
+ },
156
+ DISSOLVED: {
157
+ id: "DISSOLVED",
158
+ isFinal: true,
159
+ metadata: {
160
+ label: "Dissolved",
161
+ description: "Token DAO dissolved (terminal)",
162
+ category: "terminal",
163
+ },
164
+ },
132
165
  },
133
166
  initialState: "ACTIVE",
134
167
  transitions: [
@@ -137,10 +170,18 @@ export const daoTokenDef = defineFiberApp({
137
170
  from: "ACTIVE",
138
171
  to: "VOTING",
139
172
  eventName: "propose",
173
+ // S1/A2 coupled fix: a CHAIN-VERIFIED signer must hold >= proposalThreshold
174
+ // tokens. Iterate proofs[].address and read each balance via `get` (getKey is
175
+ // not a JLVM opcode); never trust the forgeable event.agent for the lookup.
140
176
  guard: {
141
- ">=": [
142
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
143
- { var: "state.proposalThreshold" },
177
+ some: [
178
+ { map: [{ var: "proofs" }, { var: "address" }] },
179
+ {
180
+ ">=": [
181
+ { get: [{ var: "state.balances" }, { var: "" }] },
182
+ { var: "state.proposalThreshold" },
183
+ ],
184
+ },
144
185
  ],
145
186
  },
146
187
  effect: {
@@ -154,9 +195,9 @@ export const daoTokenDef = defineFiberApp({
154
195
  actionType: { var: "event.actionType" },
155
196
  payload: { var: "event.payload" },
156
197
  proposer: { var: "event.agent" },
157
- proposedAt: { var: "$timestamp" },
198
+ proposedAt: { var: "$ordinal" },
158
199
  votingEndsAt: {
159
- "+": [{ var: "$timestamp" }, { var: "state.votingPeriodMs" }],
200
+ "+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
160
201
  },
161
202
  snapshotBlock: { var: "event.snapshotBlock" },
162
203
  },
@@ -171,26 +212,28 @@ export const daoTokenDef = defineFiberApp({
171
212
  from: "VOTING",
172
213
  to: "VOTING",
173
214
  eventName: "vote",
215
+ // S1+A2 coupled fix: bind event.agent to a verified signer (actorIsSigner) so the
216
+ // balance lookup, the no-double-vote check, and the voters write below all key on the
217
+ // CHAIN-VERIFIED actor — never a forgeable claim. getKey→get (value), getKey→has
218
+ // (presence), setKey→set are the rc.5 map opcodes (getKey/setKey do not exist).
174
219
  guard: {
175
220
  and: [
221
+ actorIsSigner(),
176
222
  {
177
223
  ">": [
178
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
224
+ { get: [{ var: "state.balances" }, { var: "event.agent" }] },
179
225
  0,
180
226
  ],
181
227
  },
182
228
  {
183
229
  "!": [
184
230
  {
185
- getKey: [{ var: "state.votes.voters" }, { var: "event.agent" }],
231
+ has: [{ var: "state.votes.voters" }, { var: "event.agent" }],
186
232
  },
187
233
  ],
188
234
  },
189
235
  {
190
- "<=": [
191
- { var: "$timestamp" },
192
- { var: "state.proposal.votingEndsAt" },
193
- ],
236
+ "<=": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
194
237
  },
195
238
  ],
196
239
  },
@@ -209,7 +252,7 @@ export const daoTokenDef = defineFiberApp({
209
252
  "+": [
210
253
  { var: "state.votes.for" },
211
254
  {
212
- getKey: [
255
+ get: [
213
256
  { var: "state.balances" },
214
257
  { var: "event.agent" },
215
258
  ],
@@ -223,7 +266,7 @@ export const daoTokenDef = defineFiberApp({
223
266
  "+": [
224
267
  { var: "state.votes.against" },
225
268
  {
226
- getKey: [
269
+ get: [
227
270
  { var: "state.balances" },
228
271
  { var: "event.agent" },
229
272
  ],
@@ -236,7 +279,7 @@ export const daoTokenDef = defineFiberApp({
236
279
  "+": [
237
280
  { var: "state.votes.abstain" },
238
281
  {
239
- getKey: [
282
+ get: [
240
283
  { var: "state.balances" },
241
284
  { var: "event.agent" },
242
285
  ],
@@ -248,18 +291,18 @@ export const daoTokenDef = defineFiberApp({
248
291
  },
249
292
  {
250
293
  voters: {
251
- setKey: [
294
+ set: [
252
295
  { var: "state.votes.voters" },
253
296
  { var: "event.agent" },
254
297
  {
255
298
  vote: { var: "event.vote" },
256
299
  weight: {
257
- getKey: [
300
+ get: [
258
301
  { var: "state.balances" },
259
302
  { var: "event.agent" },
260
303
  ],
261
304
  },
262
- votedAt: { var: "$timestamp" },
305
+ votedAt: { var: "$ordinal" },
263
306
  },
264
307
  ],
265
308
  },
@@ -279,10 +322,7 @@ export const daoTokenDef = defineFiberApp({
279
322
  guard: {
280
323
  and: [
281
324
  {
282
- ">": [
283
- { var: "$timestamp" },
284
- { var: "state.proposal.votingEndsAt" },
285
- ],
325
+ ">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
286
326
  },
287
327
  { ">": [{ var: "state.votes.for" }, { var: "state.votes.against" }] },
288
328
  {
@@ -307,9 +347,9 @@ export const daoTokenDef = defineFiberApp({
307
347
  merge: [
308
348
  { var: "state.proposal" },
309
349
  {
310
- queuedAt: { var: "$timestamp" },
350
+ queuedAt: { var: "$ordinal" },
311
351
  executableAt: {
312
- "+": [{ var: "$timestamp" }, { var: "state.timelockMs" }],
352
+ "+": [{ var: "$ordinal" }, { var: "state.timelockMs" }],
313
353
  },
314
354
  },
315
355
  ],
@@ -325,7 +365,7 @@ export const daoTokenDef = defineFiberApp({
325
365
  to: "ACTIVE",
326
366
  eventName: "execute",
327
367
  guard: {
328
- ">=": [{ var: "$timestamp" }, { var: "state.proposal.executableAt" }],
368
+ ">=": [{ var: "$ordinal" }, { var: "state.proposal.executableAt" }],
329
369
  },
330
370
  effect: {
331
371
  merge: [
@@ -340,7 +380,7 @@ export const daoTokenDef = defineFiberApp({
340
380
  { var: "state.proposal" },
341
381
  {
342
382
  votes: { var: "state.votes" },
343
- executedAt: { var: "$timestamp" },
383
+ executedAt: { var: "$ordinal" },
344
384
  },
345
385
  ],
346
386
  },
@@ -349,10 +389,18 @@ export const daoTokenDef = defineFiberApp({
349
389
  },
350
390
  proposal: null,
351
391
  votes: null,
392
+ // A3 fix: transition-level `emits` is dropped by the chain; emit from INSIDE the effect
393
+ // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
394
+ _emit: [
395
+ {
396
+ name: "proposal_executed",
397
+ data: { proposalId: { var: "state.proposal.id" } },
398
+ destination: "external",
399
+ },
400
+ ],
352
401
  },
353
402
  ],
354
403
  },
355
- emits: [{ event: "proposal_executed", to: "external" }],
356
404
  dependencies: [],
357
405
  },
358
406
  // VOTING → ACTIVE: reject (voting ended, failed quorum or for <= against)
@@ -363,10 +411,7 @@ export const daoTokenDef = defineFiberApp({
363
411
  guard: {
364
412
  and: [
365
413
  {
366
- ">": [
367
- { var: "$timestamp" },
368
- { var: "state.proposal.votingEndsAt" },
369
- ],
414
+ ">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
370
415
  },
371
416
  {
372
417
  or: [
@@ -405,7 +450,7 @@ export const daoTokenDef = defineFiberApp({
405
450
  { var: "state.proposal" },
406
451
  {
407
452
  votes: { var: "state.votes" },
408
- rejectedAt: { var: "$timestamp" },
453
+ rejectedAt: { var: "$ordinal" },
409
454
  },
410
455
  ],
411
456
  },
@@ -424,9 +469,7 @@ export const daoTokenDef = defineFiberApp({
424
469
  from: "QUEUED",
425
470
  to: "ACTIVE",
426
471
  eventName: "cancel",
427
- guard: {
428
- "===": [{ var: "event.agent" }, { var: "state.proposal.proposer" }],
429
- },
472
+ guard: signerIsParty("state.proposal.proposer"),
430
473
  effect: {
431
474
  merge: [
432
475
  { var: "state" },
@@ -438,7 +481,7 @@ export const daoTokenDef = defineFiberApp({
438
481
  {
439
482
  merge: [
440
483
  { var: "state.proposal" },
441
- { cancelledAt: { var: "$timestamp" } },
484
+ { cancelledAt: { var: "$ordinal" } },
442
485
  ],
443
486
  },
444
487
  ],
@@ -456,10 +499,17 @@ export const daoTokenDef = defineFiberApp({
456
499
  from: "ACTIVE",
457
500
  to: "ACTIVE",
458
501
  eventName: "delegate",
502
+ // S1+A2: bind event.agent to a verified signer so the delegation is written under the
503
+ // CHAIN-VERIFIED delegator's key (set), keyed on the same actor whose balance is checked (get).
459
504
  guard: {
460
- ">": [
461
- { getKey: [{ var: "state.balances" }, { var: "event.agent" }] },
462
- 0,
505
+ and: [
506
+ actorIsSigner(),
507
+ {
508
+ ">": [
509
+ { get: [{ var: "state.balances" }, { var: "event.agent" }] },
510
+ 0,
511
+ ],
512
+ },
463
513
  ],
464
514
  },
465
515
  effect: {
@@ -467,7 +517,7 @@ export const daoTokenDef = defineFiberApp({
467
517
  { var: "state" },
468
518
  {
469
519
  delegations: {
470
- setKey: [
520
+ set: [
471
521
  { var: "state.delegations" },
472
522
  { var: "event.agent" },
473
523
  { var: "event.delegateTo" },
@@ -483,13 +533,21 @@ export const daoTokenDef = defineFiberApp({
483
533
  from: "ACTIVE",
484
534
  to: "ACTIVE",
485
535
  eventName: "undelegate",
486
- guard: { getKey: [{ var: "state.delegations" }, { var: "event.agent" }] },
536
+ // S1+A2: bind event.agent to a verified signer; presence via has, removal via unset (the rc.5
537
+ // map opcodes — getKey/deleteKey do not exist). Only the verified delegator can clear their own
538
+ // delegation.
539
+ guard: {
540
+ and: [
541
+ actorIsSigner(),
542
+ { has: [{ var: "state.delegations" }, { var: "event.agent" }] },
543
+ ],
544
+ },
487
545
  effect: {
488
546
  merge: [
489
547
  { var: "state" },
490
548
  {
491
549
  delegations: {
492
- deleteKey: [{ var: "state.delegations" }, { var: "event.agent" }],
550
+ unset: [{ var: "state.delegations" }, { var: "event.agent" }],
493
551
  },
494
552
  },
495
553
  ],