@ottochain/sdk 2.3.0 → 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.
- package/dist/cjs/apps/contracts/index.js +15 -8
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +35 -40
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +80 -37
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +4 -4
- package/dist/cjs/apps/corporate/index.js +2 -2
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +169 -59
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +245 -47
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +407 -99
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +151 -37
- package/dist/cjs/apps/governance/index.js +14 -14
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +58 -40
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +46 -40
- package/dist/cjs/apps/governance/state-machines/dao-single.js +28 -11
- package/dist/cjs/apps/governance/state-machines/dao-token.js +67 -41
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +93 -61
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +2 -2
- package/dist/cjs/apps/identity/constants.js +55 -14
- package/dist/cjs/apps/identity/index.js +27 -11
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +3 -3
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +25 -22
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +288 -0
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +3 -3
- package/dist/cjs/apps/identity/state-machines/index.js +3 -1
- package/dist/cjs/apps/index.js +19 -8
- package/dist/cjs/apps/lending/assets.js +223 -0
- package/dist/cjs/apps/lending/credit-scoring.js +87 -0
- package/dist/cjs/apps/lending/eligibility.js +121 -0
- package/dist/cjs/apps/lending/index.js +91 -0
- package/dist/cjs/apps/lending/state-machines/index.js +9 -0
- package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +412 -0
- package/dist/cjs/apps/markets/index.js +21 -11
- package/dist/cjs/apps/markets/state-machines/market-auction.js +14 -13
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +29 -24
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +24 -26
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +80 -53
- package/dist/cjs/apps/markets/state-machines/market-universal.js +5 -5
- package/dist/cjs/apps/oracles/index.js +2 -2
- package/dist/cjs/errors.js +3 -3
- package/dist/cjs/generated/google/protobuf/struct.js +4 -4
- package/dist/cjs/generated/index.js +11 -7
- package/dist/cjs/generated/openapi.js +6 -0
- package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +50 -50
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +19 -20
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +13 -13
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +4 -4
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +124 -130
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +107 -107
- package/dist/cjs/generated/ottochain/v1/common.js +4 -4
- package/dist/cjs/generated/ottochain/v1/fiber.js +4 -4
- package/dist/cjs/index.js +41 -7
- package/dist/cjs/openapi.js +2 -0
- package/dist/cjs/ottochain/drop-nulls.js +1 -2
- package/dist/cjs/ottochain/genesis-manifest.js +11 -11
- package/dist/cjs/ottochain/index.js +23 -13
- package/dist/cjs/ottochain/metagraph-client.js +65 -8
- package/dist/cjs/ottochain/snapshot.js +11 -12
- package/dist/cjs/ottochain/transaction.js +57 -14
- package/dist/cjs/ottochain/types.js +16 -2
- package/dist/cjs/privacy/index.js +14 -0
- package/dist/cjs/privacy/sealed-bid.js +210 -0
- package/dist/cjs/privacy/shield-app.js +131 -0
- package/dist/cjs/schema/effects.js +40 -0
- package/dist/cjs/schema/fiber-app.js +19 -13
- package/dist/cjs/schema/guard-lint.js +352 -0
- package/dist/cjs/schema/guards.js +246 -0
- package/dist/cjs/signing.js +80 -0
- package/dist/cjs/types.js +2 -3
- package/dist/cjs/validation.js +8 -8
- package/dist/cjs/verify.js +9 -4
- package/dist/cjs/zk/commit.js +53 -0
- package/dist/cjs/zk/guard.js +107 -0
- package/dist/cjs/zk/index.js +48 -0
- package/dist/cjs/zk/preimage.js +37 -0
- package/dist/cjs/zk/prover.js +87 -0
- package/dist/cjs/zk/registry.js +62 -0
- package/dist/cjs/zk/types.js +28 -0
- package/dist/cjs/zk/witness.js +19 -0
- package/dist/esm/apps/contracts/index.js +7 -3
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +35 -40
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +80 -37
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +4 -4
- package/dist/esm/apps/corporate/state-machines/corp-board.js +169 -59
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +245 -47
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +407 -99
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +151 -37
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +58 -40
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +46 -40
- package/dist/esm/apps/governance/state-machines/dao-single.js +28 -11
- package/dist/esm/apps/governance/state-machines/dao-token.js +67 -41
- package/dist/esm/apps/governance/state-machines/governance-simple.js +93 -61
- package/dist/esm/apps/governance/state-machines/governance-universal.js +2 -2
- package/dist/esm/apps/identity/constants.js +51 -12
- package/dist/esm/apps/identity/index.js +12 -7
- package/dist/esm/apps/identity/state-machines/identity-agent.js +3 -3
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +25 -22
- package/dist/esm/apps/identity/state-machines/identity-registry.js +285 -0
- package/dist/esm/apps/identity/state-machines/identity-universal.js +3 -3
- package/dist/esm/apps/identity/state-machines/index.js +1 -0
- package/dist/esm/apps/index.js +1 -0
- package/dist/esm/apps/lending/assets.js +207 -0
- package/dist/esm/apps/lending/credit-scoring.js +81 -0
- package/dist/esm/apps/lending/eligibility.js +115 -0
- package/dist/esm/apps/lending/index.js +69 -0
- package/dist/esm/apps/lending/state-machines/index.js +5 -0
- package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +409 -0
- package/dist/esm/apps/markets/index.js +8 -4
- package/dist/esm/apps/markets/state-machines/market-auction.js +14 -13
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +29 -24
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +24 -26
- package/dist/esm/apps/markets/state-machines/market-prediction.js +80 -53
- package/dist/esm/apps/markets/state-machines/market-universal.js +5 -5
- package/dist/esm/generated/index.js +9 -5
- package/dist/esm/generated/openapi.js +5 -0
- package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +46 -46
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +114 -120
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +100 -100
- package/dist/esm/index.js +21 -2
- package/dist/esm/openapi.js +1 -0
- package/dist/esm/ottochain/genesis-manifest.js +9 -9
- package/dist/esm/ottochain/index.js +2 -3
- package/dist/esm/ottochain/metagraph-client.js +65 -8
- package/dist/esm/ottochain/snapshot.js +4 -4
- package/dist/esm/ottochain/transaction.js +43 -3
- package/dist/esm/ottochain/types.js +15 -1
- package/dist/esm/privacy/index.js +6 -0
- package/dist/esm/privacy/sealed-bid.js +206 -0
- package/dist/esm/privacy/shield-app.js +127 -0
- package/dist/esm/schema/effects.js +35 -0
- package/dist/esm/schema/fiber-app.js +13 -6
- package/dist/esm/schema/guard-lint.js +346 -0
- package/dist/esm/schema/guards.js +229 -0
- package/dist/esm/signing.js +74 -0
- package/dist/esm/verify.js +8 -2
- package/dist/esm/zk/commit.js +44 -0
- package/dist/esm/zk/guard.js +99 -0
- package/dist/esm/zk/index.js +19 -0
- package/dist/esm/zk/preimage.js +30 -0
- package/dist/esm/zk/prover.js +82 -0
- package/dist/esm/zk/registry.js +55 -0
- package/dist/esm/zk/types.js +25 -0
- package/dist/esm/zk/witness.js +15 -0
- package/dist/types/apps/contracts/index.d.ts +69 -209
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +20 -95
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +46 -112
- package/dist/types/apps/corporate/index.d.ts +1040 -304
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +188 -52
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +267 -62
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +355 -131
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +225 -53
- package/dist/types/apps/governance/index.d.ts +296 -398
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +77 -92
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +42 -66
- package/dist/types/apps/governance/state-machines/dao-single.d.ts +25 -47
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +60 -49
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +87 -117
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +2 -2
- package/dist/types/apps/identity/constants.d.ts +32 -4
- package/dist/types/apps/identity/index.d.ts +378 -94
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +16 -87
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +379 -0
- package/dist/types/apps/identity/state-machines/index.d.ts +1 -0
- package/dist/types/apps/index.d.ts +1 -0
- package/dist/types/apps/lending/assets.d.ts +258 -0
- package/dist/types/apps/lending/credit-scoring.d.ts +80 -0
- package/dist/types/apps/lending/eligibility.d.ts +83 -0
- package/dist/types/apps/lending/index.d.ts +548 -0
- package/dist/types/apps/lending/state-machines/index.d.ts +5 -0
- package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +528 -0
- package/dist/types/apps/markets/index.d.ts +108 -203
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +13 -37
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +16 -34
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +17 -43
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +51 -72
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +5 -5
- package/dist/types/generated/index.d.ts +5 -5
- package/dist/types/generated/openapi.d.ts +1257 -0
- package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +5 -5
- package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +12 -12
- package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +11 -11
- package/dist/types/index.d.ts +6 -2
- package/dist/types/openapi.d.ts +22 -0
- package/dist/types/ottochain/genesis-manifest.d.ts +5 -5
- package/dist/types/ottochain/index.d.ts +5 -6
- package/dist/types/ottochain/metagraph-client.d.ts +49 -7
- package/dist/types/ottochain/snapshot.d.ts +6 -6
- package/dist/types/ottochain/transaction.d.ts +33 -1
- package/dist/types/ottochain/types.d.ts +335 -30
- package/dist/types/privacy/index.d.ts +6 -0
- package/dist/types/privacy/sealed-bid.d.ts +348 -0
- package/dist/types/privacy/shield-app.d.ts +48 -0
- package/dist/types/schema/effects.d.ts +34 -0
- package/dist/types/schema/fiber-app.d.ts +1 -2
- package/dist/types/schema/guard-lint.d.ts +111 -0
- package/dist/types/schema/guards.d.ts +134 -0
- package/dist/types/signing.d.ts +45 -0
- package/dist/types/validation.d.ts +22 -217
- package/dist/types/verify.d.ts +4 -0
- package/dist/types/zk/commit.d.ts +28 -0
- package/dist/types/zk/guard.d.ts +46 -0
- package/dist/types/zk/index.d.ts +19 -0
- package/dist/types/zk/preimage.d.ts +10 -0
- package/dist/types/zk/prover.d.ts +34 -0
- package/dist/types/zk/registry.d.ts +34 -0
- package/dist/types/zk/types.d.ts +33 -0
- package/dist/types/zk/witness.d.ts +40 -0
- package/package.json +27 -13
- package/dist/cjs/ottochain/normalize.js +0 -186
- package/dist/esm/ottochain/normalize.js +0 -179
- package/dist/types/ottochain/normalize.d.ts +0 -79
|
@@ -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
|
*/
|
|
@@ -172,10 +173,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
172
173
|
from: "ACTIVE",
|
|
173
174
|
to: "VOTING",
|
|
174
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.
|
|
175
179
|
guard: {
|
|
176
|
-
|
|
177
|
-
{
|
|
178
|
-
{
|
|
180
|
+
some: [
|
|
181
|
+
{ map: [{ var: "proofs" }, { var: "address" }] },
|
|
182
|
+
{
|
|
183
|
+
">=": [
|
|
184
|
+
{ get: [{ var: "state.balances" }, { var: "" }] },
|
|
185
|
+
{ var: "state.proposalThreshold" },
|
|
186
|
+
],
|
|
187
|
+
},
|
|
179
188
|
],
|
|
180
189
|
},
|
|
181
190
|
effect: {
|
|
@@ -189,9 +198,9 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
189
198
|
actionType: { var: "event.actionType" },
|
|
190
199
|
payload: { var: "event.payload" },
|
|
191
200
|
proposer: { var: "event.agent" },
|
|
192
|
-
proposedAt: { var: "$
|
|
201
|
+
proposedAt: { var: "$ordinal" },
|
|
193
202
|
votingEndsAt: {
|
|
194
|
-
"+": [{ var: "$
|
|
203
|
+
"+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
|
|
195
204
|
},
|
|
196
205
|
snapshotBlock: { var: "event.snapshotBlock" },
|
|
197
206
|
},
|
|
@@ -206,26 +215,28 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
206
215
|
from: "VOTING",
|
|
207
216
|
to: "VOTING",
|
|
208
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).
|
|
209
222
|
guard: {
|
|
210
223
|
and: [
|
|
224
|
+
(0, guards_js_1.actorIsSigner)(),
|
|
211
225
|
{
|
|
212
226
|
">": [
|
|
213
|
-
{
|
|
227
|
+
{ get: [{ var: "state.balances" }, { var: "event.agent" }] },
|
|
214
228
|
0,
|
|
215
229
|
],
|
|
216
230
|
},
|
|
217
231
|
{
|
|
218
232
|
"!": [
|
|
219
233
|
{
|
|
220
|
-
|
|
234
|
+
has: [{ var: "state.votes.voters" }, { var: "event.agent" }],
|
|
221
235
|
},
|
|
222
236
|
],
|
|
223
237
|
},
|
|
224
238
|
{
|
|
225
|
-
"<=": [
|
|
226
|
-
{ var: "$timestamp" },
|
|
227
|
-
{ var: "state.proposal.votingEndsAt" },
|
|
228
|
-
],
|
|
239
|
+
"<=": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
|
|
229
240
|
},
|
|
230
241
|
],
|
|
231
242
|
},
|
|
@@ -244,7 +255,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
244
255
|
"+": [
|
|
245
256
|
{ var: "state.votes.for" },
|
|
246
257
|
{
|
|
247
|
-
|
|
258
|
+
get: [
|
|
248
259
|
{ var: "state.balances" },
|
|
249
260
|
{ var: "event.agent" },
|
|
250
261
|
],
|
|
@@ -258,7 +269,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
258
269
|
"+": [
|
|
259
270
|
{ var: "state.votes.against" },
|
|
260
271
|
{
|
|
261
|
-
|
|
272
|
+
get: [
|
|
262
273
|
{ var: "state.balances" },
|
|
263
274
|
{ var: "event.agent" },
|
|
264
275
|
],
|
|
@@ -271,7 +282,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
271
282
|
"+": [
|
|
272
283
|
{ var: "state.votes.abstain" },
|
|
273
284
|
{
|
|
274
|
-
|
|
285
|
+
get: [
|
|
275
286
|
{ var: "state.balances" },
|
|
276
287
|
{ var: "event.agent" },
|
|
277
288
|
],
|
|
@@ -283,18 +294,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
283
294
|
},
|
|
284
295
|
{
|
|
285
296
|
voters: {
|
|
286
|
-
|
|
297
|
+
set: [
|
|
287
298
|
{ var: "state.votes.voters" },
|
|
288
299
|
{ var: "event.agent" },
|
|
289
300
|
{
|
|
290
301
|
vote: { var: "event.vote" },
|
|
291
302
|
weight: {
|
|
292
|
-
|
|
303
|
+
get: [
|
|
293
304
|
{ var: "state.balances" },
|
|
294
305
|
{ var: "event.agent" },
|
|
295
306
|
],
|
|
296
307
|
},
|
|
297
|
-
votedAt: { var: "$
|
|
308
|
+
votedAt: { var: "$ordinal" },
|
|
298
309
|
},
|
|
299
310
|
],
|
|
300
311
|
},
|
|
@@ -314,10 +325,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
314
325
|
guard: {
|
|
315
326
|
and: [
|
|
316
327
|
{
|
|
317
|
-
">": [
|
|
318
|
-
{ var: "$timestamp" },
|
|
319
|
-
{ var: "state.proposal.votingEndsAt" },
|
|
320
|
-
],
|
|
328
|
+
">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
|
|
321
329
|
},
|
|
322
330
|
{ ">": [{ var: "state.votes.for" }, { var: "state.votes.against" }] },
|
|
323
331
|
{
|
|
@@ -342,9 +350,9 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
342
350
|
merge: [
|
|
343
351
|
{ var: "state.proposal" },
|
|
344
352
|
{
|
|
345
|
-
queuedAt: { var: "$
|
|
353
|
+
queuedAt: { var: "$ordinal" },
|
|
346
354
|
executableAt: {
|
|
347
|
-
"+": [{ var: "$
|
|
355
|
+
"+": [{ var: "$ordinal" }, { var: "state.timelockMs" }],
|
|
348
356
|
},
|
|
349
357
|
},
|
|
350
358
|
],
|
|
@@ -360,7 +368,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
360
368
|
to: "ACTIVE",
|
|
361
369
|
eventName: "execute",
|
|
362
370
|
guard: {
|
|
363
|
-
">=": [{ var: "$
|
|
371
|
+
">=": [{ var: "$ordinal" }, { var: "state.proposal.executableAt" }],
|
|
364
372
|
},
|
|
365
373
|
effect: {
|
|
366
374
|
merge: [
|
|
@@ -375,7 +383,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
375
383
|
{ var: "state.proposal" },
|
|
376
384
|
{
|
|
377
385
|
votes: { var: "state.votes" },
|
|
378
|
-
executedAt: { var: "$
|
|
386
|
+
executedAt: { var: "$ordinal" },
|
|
379
387
|
},
|
|
380
388
|
],
|
|
381
389
|
},
|
|
@@ -384,10 +392,18 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
384
392
|
},
|
|
385
393
|
proposal: null,
|
|
386
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
|
+
],
|
|
387
404
|
},
|
|
388
405
|
],
|
|
389
406
|
},
|
|
390
|
-
emits: [{ event: "proposal_executed", to: "external" }],
|
|
391
407
|
dependencies: [],
|
|
392
408
|
},
|
|
393
409
|
// VOTING → ACTIVE: reject (voting ended, failed quorum or for <= against)
|
|
@@ -398,10 +414,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
398
414
|
guard: {
|
|
399
415
|
and: [
|
|
400
416
|
{
|
|
401
|
-
">": [
|
|
402
|
-
{ var: "$timestamp" },
|
|
403
|
-
{ var: "state.proposal.votingEndsAt" },
|
|
404
|
-
],
|
|
417
|
+
">": [{ var: "$ordinal" }, { var: "state.proposal.votingEndsAt" }],
|
|
405
418
|
},
|
|
406
419
|
{
|
|
407
420
|
or: [
|
|
@@ -440,7 +453,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
440
453
|
{ var: "state.proposal" },
|
|
441
454
|
{
|
|
442
455
|
votes: { var: "state.votes" },
|
|
443
|
-
rejectedAt: { var: "$
|
|
456
|
+
rejectedAt: { var: "$ordinal" },
|
|
444
457
|
},
|
|
445
458
|
],
|
|
446
459
|
},
|
|
@@ -459,9 +472,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
459
472
|
from: "QUEUED",
|
|
460
473
|
to: "ACTIVE",
|
|
461
474
|
eventName: "cancel",
|
|
462
|
-
guard:
|
|
463
|
-
"===": [{ var: "event.agent" }, { var: "state.proposal.proposer" }],
|
|
464
|
-
},
|
|
475
|
+
guard: (0, guards_js_1.signerIsParty)("state.proposal.proposer"),
|
|
465
476
|
effect: {
|
|
466
477
|
merge: [
|
|
467
478
|
{ var: "state" },
|
|
@@ -473,7 +484,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
473
484
|
{
|
|
474
485
|
merge: [
|
|
475
486
|
{ var: "state.proposal" },
|
|
476
|
-
{ cancelledAt: { var: "$
|
|
487
|
+
{ cancelledAt: { var: "$ordinal" } },
|
|
477
488
|
],
|
|
478
489
|
},
|
|
479
490
|
],
|
|
@@ -491,10 +502,17 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
491
502
|
from: "ACTIVE",
|
|
492
503
|
to: "ACTIVE",
|
|
493
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).
|
|
494
507
|
guard: {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
508
|
+
and: [
|
|
509
|
+
(0, guards_js_1.actorIsSigner)(),
|
|
510
|
+
{
|
|
511
|
+
">": [
|
|
512
|
+
{ get: [{ var: "state.balances" }, { var: "event.agent" }] },
|
|
513
|
+
0,
|
|
514
|
+
],
|
|
515
|
+
},
|
|
498
516
|
],
|
|
499
517
|
},
|
|
500
518
|
effect: {
|
|
@@ -502,7 +520,7 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
502
520
|
{ var: "state" },
|
|
503
521
|
{
|
|
504
522
|
delegations: {
|
|
505
|
-
|
|
523
|
+
set: [
|
|
506
524
|
{ var: "state.delegations" },
|
|
507
525
|
{ var: "event.agent" },
|
|
508
526
|
{ var: "event.delegateTo" },
|
|
@@ -518,13 +536,21 @@ exports.daoTokenDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
518
536
|
from: "ACTIVE",
|
|
519
537
|
to: "ACTIVE",
|
|
520
538
|
eventName: "undelegate",
|
|
521
|
-
|
|
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
|
+
},
|
|
522
548
|
effect: {
|
|
523
549
|
merge: [
|
|
524
550
|
{ var: "state" },
|
|
525
551
|
{
|
|
526
552
|
delegations: {
|
|
527
|
-
|
|
553
|
+
unset: [{ var: "state.delegations" }, { var: "event.agent" }],
|
|
528
554
|
},
|
|
529
555
|
},
|
|
530
556
|
],
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.govSimpleDef = 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
|
* Simple org governance: manage members, update rules, resolve disputes.
|
|
7
8
|
*/
|
|
@@ -92,11 +93,8 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
92
93
|
},
|
|
93
94
|
},
|
|
94
95
|
finalize: {
|
|
95
|
-
description: "Finalize the voting period",
|
|
96
|
-
|
|
97
|
-
properties: {
|
|
98
|
-
forCount: { type: "number" },
|
|
99
|
-
},
|
|
96
|
+
description: "Finalize the voting period (for-count derived from recorded ballots)",
|
|
97
|
+
properties: {},
|
|
100
98
|
},
|
|
101
99
|
file_dispute: {
|
|
102
100
|
description: "File a dispute against a member",
|
|
@@ -125,11 +123,8 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
125
123
|
},
|
|
126
124
|
},
|
|
127
125
|
dissolve: {
|
|
128
|
-
description: "Dissolve the organization (requires
|
|
129
|
-
|
|
130
|
-
properties: {
|
|
131
|
-
approvalCount: { type: "number" },
|
|
132
|
-
},
|
|
126
|
+
description: "Dissolve the organization (requires every member to sign this op — verified unanimity)",
|
|
127
|
+
properties: {},
|
|
133
128
|
},
|
|
134
129
|
},
|
|
135
130
|
states: {
|
|
@@ -177,16 +172,16 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
177
172
|
from: "ACTIVE",
|
|
178
173
|
to: "ACTIVE",
|
|
179
174
|
eventName: "add_member",
|
|
180
|
-
guard:
|
|
175
|
+
guard: (0, guards_js_1.signerInSet)("state.admins"),
|
|
181
176
|
effect: {
|
|
182
177
|
merge: [
|
|
183
178
|
{ var: "state" },
|
|
184
179
|
{
|
|
185
180
|
members: {
|
|
186
|
-
|
|
181
|
+
set: [
|
|
187
182
|
{ var: "state.members" },
|
|
188
183
|
{ var: "event.member" },
|
|
189
|
-
{ role: { var: "event.role" }, addedAt: { var: "$
|
|
184
|
+
{ role: { var: "event.role" }, addedAt: { var: "$ordinal" } },
|
|
190
185
|
],
|
|
191
186
|
},
|
|
192
187
|
},
|
|
@@ -199,13 +194,13 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
199
194
|
from: "ACTIVE",
|
|
200
195
|
to: "ACTIVE",
|
|
201
196
|
eventName: "remove_member",
|
|
202
|
-
guard:
|
|
197
|
+
guard: (0, guards_js_1.signerInSet)("state.admins"),
|
|
203
198
|
effect: {
|
|
204
199
|
merge: [
|
|
205
200
|
{ var: "state" },
|
|
206
201
|
{
|
|
207
202
|
members: {
|
|
208
|
-
|
|
203
|
+
unset: [{ var: "state.members" }, { var: "event.member" }],
|
|
209
204
|
},
|
|
210
205
|
},
|
|
211
206
|
],
|
|
@@ -217,7 +212,9 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
217
212
|
from: "ACTIVE",
|
|
218
213
|
to: "VOTING",
|
|
219
214
|
eventName: "propose",
|
|
220
|
-
|
|
215
|
+
// S1/A2 coupled fix: a CHAIN-VERIFIED signer must be a member (getKey is not a
|
|
216
|
+
// JLVM opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
|
|
217
|
+
guard: (0, guards_js_1.signerHasEntry)("state.members"),
|
|
221
218
|
effect: {
|
|
222
219
|
merge: [
|
|
223
220
|
{ var: "state" },
|
|
@@ -227,9 +224,9 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
227
224
|
type: { var: "event.type" },
|
|
228
225
|
changes: { var: "event.changes" },
|
|
229
226
|
proposer: { var: "event.agent" },
|
|
230
|
-
proposedAt: { var: "$
|
|
227
|
+
proposedAt: { var: "$ordinal" },
|
|
231
228
|
deadline: {
|
|
232
|
-
"+": [{ var: "$
|
|
229
|
+
"+": [{ var: "$ordinal" }, { var: "state.votingPeriodMs" }],
|
|
233
230
|
},
|
|
234
231
|
},
|
|
235
232
|
votes: {},
|
|
@@ -243,12 +240,14 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
243
240
|
from: "VOTING",
|
|
244
241
|
to: "VOTING",
|
|
245
242
|
eventName: "vote",
|
|
243
|
+
// S1/A2 coupled fix: bind event.agent to a verified signer who is a member (actorHasEntry),
|
|
244
|
+
// and block a re-vote by that SAME bound actor — so the ballot is recorded under, and deduped
|
|
245
|
+
// on, the chain-verified voter. Without the binding, signerHasEntry only proves SOME signer is a
|
|
246
|
+
// member, letting one member stuff votes under arbitrary keys (set is the rc.5 map-write opcode).
|
|
246
247
|
guard: {
|
|
247
248
|
and: [
|
|
248
|
-
|
|
249
|
-
{
|
|
250
|
-
"!": [{ getKey: [{ var: "state.votes" }, { var: "event.agent" }] }],
|
|
251
|
-
},
|
|
249
|
+
(0, guards_js_1.actorHasEntry)("state.members"),
|
|
250
|
+
{ "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
|
|
252
251
|
],
|
|
253
252
|
},
|
|
254
253
|
effect: {
|
|
@@ -256,10 +255,10 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
256
255
|
{ var: "state" },
|
|
257
256
|
{
|
|
258
257
|
votes: {
|
|
259
|
-
|
|
258
|
+
set: [
|
|
260
259
|
{ var: "state.votes" },
|
|
261
260
|
{ var: "event.agent" },
|
|
262
|
-
{ vote: { var: "event.vote" }, votedAt: { var: "$
|
|
261
|
+
{ vote: { var: "event.vote" }, votedAt: { var: "$ordinal" } },
|
|
263
262
|
],
|
|
264
263
|
},
|
|
265
264
|
},
|
|
@@ -272,12 +271,24 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
272
271
|
from: "VOTING",
|
|
273
272
|
to: "ACTIVE",
|
|
274
273
|
eventName: "finalize",
|
|
274
|
+
// S2/A2 coupled fix: the for-count is DERIVED from recorded ballots in
|
|
275
|
+
// state.votes (length of the "for" entries), never read from the attacker's
|
|
276
|
+
// event.forCount. members is a Map so its count is length(keys(members)).
|
|
275
277
|
guard: {
|
|
276
278
|
">=": [
|
|
277
|
-
{
|
|
279
|
+
{
|
|
280
|
+
length: [
|
|
281
|
+
{
|
|
282
|
+
filter: [
|
|
283
|
+
{ values: [{ var: "state.votes" }] },
|
|
284
|
+
{ "===": [{ var: "vote" }, "for"] },
|
|
285
|
+
],
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
},
|
|
278
289
|
{
|
|
279
290
|
"*": [
|
|
280
|
-
{
|
|
291
|
+
{ length: [{ keys: [{ var: "state.members" }] }] },
|
|
281
292
|
{ var: "state.passingThreshold" },
|
|
282
293
|
],
|
|
283
294
|
},
|
|
@@ -301,7 +312,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
301
312
|
type: "rule_change",
|
|
302
313
|
proposal: { var: "state.proposal" },
|
|
303
314
|
outcome: "passed",
|
|
304
|
-
finalizedAt: { var: "$
|
|
315
|
+
finalizedAt: { var: "$ordinal" },
|
|
305
316
|
},
|
|
306
317
|
],
|
|
307
318
|
],
|
|
@@ -318,12 +329,23 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
318
329
|
from: "VOTING",
|
|
319
330
|
to: "ACTIVE",
|
|
320
331
|
eventName: "finalize",
|
|
332
|
+
// S2/A2 coupled fix (failed arm): derive the for-count from recorded ballots in
|
|
333
|
+
// state.votes; never from event.forCount. members count = length(keys(members)).
|
|
321
334
|
guard: {
|
|
322
335
|
"<": [
|
|
323
|
-
{
|
|
336
|
+
{
|
|
337
|
+
length: [
|
|
338
|
+
{
|
|
339
|
+
filter: [
|
|
340
|
+
{ values: [{ var: "state.votes" }] },
|
|
341
|
+
{ "===": [{ var: "vote" }, "for"] },
|
|
342
|
+
],
|
|
343
|
+
},
|
|
344
|
+
],
|
|
345
|
+
},
|
|
324
346
|
{
|
|
325
347
|
"*": [
|
|
326
|
-
{
|
|
348
|
+
{ length: [{ keys: [{ var: "state.members" }] }] },
|
|
327
349
|
{ var: "state.passingThreshold" },
|
|
328
350
|
],
|
|
329
351
|
},
|
|
@@ -341,7 +363,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
341
363
|
type: "rule_change",
|
|
342
364
|
proposal: { var: "state.proposal" },
|
|
343
365
|
outcome: "failed",
|
|
344
|
-
finalizedAt: { var: "$
|
|
366
|
+
finalizedAt: { var: "$ordinal" },
|
|
345
367
|
},
|
|
346
368
|
],
|
|
347
369
|
],
|
|
@@ -358,7 +380,9 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
358
380
|
from: "ACTIVE",
|
|
359
381
|
to: "DISPUTE",
|
|
360
382
|
eventName: "file_dispute",
|
|
361
|
-
|
|
383
|
+
// S1/A2 coupled fix: only a CHAIN-VERIFIED member may file (getKey is not a JLVM
|
|
384
|
+
// opcode; signerHasEntry checks signer ∈ keys(state.members) via `has`).
|
|
385
|
+
guard: (0, guards_js_1.signerHasEntry)("state.members"),
|
|
362
386
|
effect: {
|
|
363
387
|
merge: [
|
|
364
388
|
{ var: "state" },
|
|
@@ -368,7 +392,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
368
392
|
plaintiff: { var: "event.agent" },
|
|
369
393
|
defendant: { var: "event.defendant" },
|
|
370
394
|
claim: { var: "event.claim" },
|
|
371
|
-
filedAt: { var: "$
|
|
395
|
+
filedAt: { var: "$ordinal" },
|
|
372
396
|
evidence: [],
|
|
373
397
|
},
|
|
374
398
|
votes: {},
|
|
@@ -382,16 +406,10 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
382
406
|
from: "DISPUTE",
|
|
383
407
|
to: "DISPUTE",
|
|
384
408
|
eventName: "submit_evidence",
|
|
385
|
-
guard:
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
"===": [{ var: "event.agent" }, { var: "state.dispute.defendant" }],
|
|
392
|
-
},
|
|
393
|
-
],
|
|
394
|
-
},
|
|
409
|
+
guard: (0, guards_js_1.signerIsAnyParty)([
|
|
410
|
+
"state.dispute.plaintiff",
|
|
411
|
+
"state.dispute.defendant",
|
|
412
|
+
]),
|
|
395
413
|
effect: {
|
|
396
414
|
merge: [
|
|
397
415
|
{ var: "state" },
|
|
@@ -407,7 +425,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
407
425
|
{
|
|
408
426
|
from: { var: "event.agent" },
|
|
409
427
|
content: { var: "event.content" },
|
|
410
|
-
at: { var: "$
|
|
428
|
+
at: { var: "$ordinal" },
|
|
411
429
|
},
|
|
412
430
|
],
|
|
413
431
|
],
|
|
@@ -425,18 +443,16 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
425
443
|
from: "DISPUTE",
|
|
426
444
|
to: "DISPUTE",
|
|
427
445
|
eventName: "vote",
|
|
446
|
+
// S1/A2 coupled fix: bind event.agent to a verified member (actorHasEntry), exclude the parties,
|
|
447
|
+
// and block a re-vote by that SAME bound actor — so the dispute ballot is recorded under, and
|
|
448
|
+
// deduped on, the chain-verified voter (set is the rc.5 map-write opcode; signerIsNotParty still
|
|
449
|
+
// excludes any signer who is a party, which covers the bound actor).
|
|
428
450
|
guard: {
|
|
429
451
|
and: [
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
"!==": [{ var: "event.agent" }, { var: "state.dispute.defendant" }],
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
"!": [{ getKey: [{ var: "state.votes" }, { var: "event.agent" }] }],
|
|
439
|
-
},
|
|
452
|
+
(0, guards_js_1.actorHasEntry)("state.members"),
|
|
453
|
+
(0, guards_js_1.signerIsNotParty)("state.dispute.plaintiff"),
|
|
454
|
+
(0, guards_js_1.signerIsNotParty)("state.dispute.defendant"),
|
|
455
|
+
{ "!": [{ has: [{ var: "state.votes" }, { var: "event.agent" }] }] },
|
|
440
456
|
],
|
|
441
457
|
},
|
|
442
458
|
effect: {
|
|
@@ -444,12 +460,12 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
444
460
|
{ var: "state" },
|
|
445
461
|
{
|
|
446
462
|
votes: {
|
|
447
|
-
|
|
463
|
+
set: [
|
|
448
464
|
{ var: "state.votes" },
|
|
449
465
|
{ var: "event.agent" },
|
|
450
466
|
{
|
|
451
467
|
ruling: { var: "event.ruling" },
|
|
452
|
-
votedAt: { var: "$
|
|
468
|
+
votedAt: { var: "$ordinal" },
|
|
453
469
|
},
|
|
454
470
|
],
|
|
455
471
|
},
|
|
@@ -463,9 +479,11 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
463
479
|
from: "DISPUTE",
|
|
464
480
|
to: "ACTIVE",
|
|
465
481
|
eventName: "resolve",
|
|
482
|
+
// A2 fix: count recorded ballots. votes is a Map, and `length` rejects Maps, so
|
|
483
|
+
// count its keys: length(keys(state.votes)). (size is not a JLVM opcode.)
|
|
466
484
|
guard: {
|
|
467
485
|
">=": [
|
|
468
|
-
{
|
|
486
|
+
{ length: [{ keys: [{ var: "state.votes" }] }] },
|
|
469
487
|
{ var: "state.disputeQuorum" },
|
|
470
488
|
],
|
|
471
489
|
},
|
|
@@ -482,7 +500,7 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
482
500
|
dispute: { var: "state.dispute" },
|
|
483
501
|
ruling: { var: "event.ruling" },
|
|
484
502
|
remedy: { var: "event.remedy" },
|
|
485
|
-
resolvedAt: { var: "$
|
|
503
|
+
resolvedAt: { var: "$ordinal" },
|
|
486
504
|
},
|
|
487
505
|
],
|
|
488
506
|
],
|
|
@@ -499,14 +517,28 @@ exports.govSimpleDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
499
517
|
from: "ACTIVE",
|
|
500
518
|
to: "DISSOLVED",
|
|
501
519
|
eventName: "dissolve",
|
|
520
|
+
// S2/A2 coupled fix: dissolution must not trust an attacker-supplied
|
|
521
|
+
// approvalCount. Derive consent from the CHAIN-VERIFIED signers — every member
|
|
522
|
+
// (a key in state.members) must be among proofs[].address, with a non-empty
|
|
523
|
+
// belt. members is a Map, so iterate keys(members); size is not a JLVM opcode.
|
|
502
524
|
guard: {
|
|
503
|
-
|
|
504
|
-
{ var: "
|
|
505
|
-
{
|
|
525
|
+
and: [
|
|
526
|
+
{ ">": [{ length: [{ keys: [{ var: "state.members" }] }] }, 0] },
|
|
527
|
+
{
|
|
528
|
+
all: [
|
|
529
|
+
{ keys: [{ var: "state.members" }] },
|
|
530
|
+
{
|
|
531
|
+
in: [
|
|
532
|
+
{ var: "" },
|
|
533
|
+
{ map: [{ var: "proofs" }, { var: "address" }] },
|
|
534
|
+
],
|
|
535
|
+
},
|
|
536
|
+
],
|
|
537
|
+
},
|
|
506
538
|
],
|
|
507
539
|
},
|
|
508
540
|
effect: {
|
|
509
|
-
merge: [{ var: "state" }, { dissolvedAt: { var: "$
|
|
541
|
+
merge: [{ var: "state" }, { dissolvedAt: { var: "$ordinal" } }],
|
|
510
542
|
},
|
|
511
543
|
dependencies: [],
|
|
512
544
|
},
|
|
@@ -93,7 +93,7 @@ exports.govUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
93
93
|
{
|
|
94
94
|
status: "VOTING",
|
|
95
95
|
proposal: { var: "event.proposal" },
|
|
96
|
-
proposedAt: { var: "$
|
|
96
|
+
proposedAt: { var: "$ordinal" },
|
|
97
97
|
votes: {},
|
|
98
98
|
},
|
|
99
99
|
],
|
|
@@ -152,7 +152,7 @@ exports.govUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
152
152
|
{ var: "state" },
|
|
153
153
|
{
|
|
154
154
|
status: "DISSOLVED",
|
|
155
|
-
dissolvedAt: { var: "$
|
|
155
|
+
dissolvedAt: { var: "$ordinal" },
|
|
156
156
|
},
|
|
157
157
|
],
|
|
158
158
|
},
|