@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
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { defineFiberApp } from "../../../schema/fiber-app.js";
|
|
2
|
+
import { signerIsParty, depInState } from "../../../schema/guards.js";
|
|
3
|
+
import { addDependency } from "../../../schema/effects.js";
|
|
2
4
|
/**
|
|
3
5
|
* Master corporate record tracking the lifecycle of a business entity from incorporation through dissolution.
|
|
4
6
|
* Manages legal identity, share structure, and corporate status.
|
|
@@ -44,13 +46,42 @@ export const corpEntityDef = defineFiberApp({
|
|
|
44
46
|
},
|
|
45
47
|
},
|
|
46
48
|
createSchema: {
|
|
47
|
-
required: [
|
|
49
|
+
required: [
|
|
50
|
+
"entityId",
|
|
51
|
+
"legalName",
|
|
52
|
+
"entityType",
|
|
53
|
+
"jurisdiction",
|
|
54
|
+
"charterAuthority",
|
|
55
|
+
"boardAuthority",
|
|
56
|
+
"shareholderAuthority",
|
|
57
|
+
"stateAuthority",
|
|
58
|
+
],
|
|
48
59
|
properties: {
|
|
49
60
|
entityId: {
|
|
50
61
|
type: "string",
|
|
51
62
|
description: "Unique identifier for this corporate entity",
|
|
52
63
|
immutable: true,
|
|
53
64
|
},
|
|
65
|
+
charterAuthority: {
|
|
66
|
+
type: "address",
|
|
67
|
+
description: "State-pinned DAG address authorized to amend the charter (legal identity). Verified against proofs[].address.",
|
|
68
|
+
immutable: true,
|
|
69
|
+
},
|
|
70
|
+
boardAuthority: {
|
|
71
|
+
type: "address",
|
|
72
|
+
description: "State-pinned DAG address of the board authority (governs registered-agent changes, suspension/reinstatement, and the board half of voluntary dissolution). Verified against proofs[].address.",
|
|
73
|
+
immutable: true,
|
|
74
|
+
},
|
|
75
|
+
shareholderAuthority: {
|
|
76
|
+
type: "address",
|
|
77
|
+
description: "State-pinned DAG address of the shareholder authority (the shareholder half of voluntary dissolution). Verified against proofs[].address.",
|
|
78
|
+
immutable: true,
|
|
79
|
+
},
|
|
80
|
+
stateAuthority: {
|
|
81
|
+
type: "address",
|
|
82
|
+
description: "State-pinned DAG address of the chartering jurisdiction/registrar that may administratively dissolve a suspended entity. Verified against proofs[].address.",
|
|
83
|
+
immutable: true,
|
|
84
|
+
},
|
|
54
85
|
legalName: {
|
|
55
86
|
type: "string",
|
|
56
87
|
description: "Full legal name of the corporation",
|
|
@@ -138,6 +169,10 @@ export const corpEntityDef = defineFiberApp({
|
|
|
138
169
|
stateSchema: {
|
|
139
170
|
properties: {
|
|
140
171
|
entityId: { type: "string", immutable: true },
|
|
172
|
+
charterAuthority: { type: "address", immutable: true },
|
|
173
|
+
boardAuthority: { type: "address", immutable: true },
|
|
174
|
+
shareholderAuthority: { type: "address", immutable: true },
|
|
175
|
+
stateAuthority: { type: "address", immutable: true },
|
|
141
176
|
legalName: { type: "string" },
|
|
142
177
|
tradeName: { type: "string", nullable: true },
|
|
143
178
|
entityType: { type: "string" },
|
|
@@ -176,6 +211,13 @@ export const corpEntityDef = defineFiberApp({
|
|
|
176
211
|
},
|
|
177
212
|
createdAt: { type: "timestamp", computed: true },
|
|
178
213
|
updatedAt: { type: "timestamp", computed: true },
|
|
214
|
+
// Two-phase amendment (#24): propose_amend_charter binds the resolution fiber + records the
|
|
215
|
+
// pending amendment here; amend_charter asserts the bound resolution is EXECUTED, then clears this.
|
|
216
|
+
pendingAmendCharter: { type: "object", nullable: true, computed: true },
|
|
217
|
+
// Two-phase voluntary dissolution (#24): propose_dissolve_voluntary binds the board + shareholder
|
|
218
|
+
// resolution fibers + records the pending dissolution here; dissolve_voluntary asserts both bound
|
|
219
|
+
// resolutions are EXECUTED, then clears this.
|
|
220
|
+
pendingDissolveVoluntary: { type: "object", nullable: true, computed: true },
|
|
179
221
|
},
|
|
180
222
|
},
|
|
181
223
|
eventSchemas: {
|
|
@@ -191,8 +233,8 @@ export const corpEntityDef = defineFiberApp({
|
|
|
191
233
|
},
|
|
192
234
|
},
|
|
193
235
|
},
|
|
194
|
-
|
|
195
|
-
description: "
|
|
236
|
+
propose_amend_charter: {
|
|
237
|
+
description: "Phase 1 of a charter amendment: bind the approving resolution fiber (#24 _addDependency) and record the pending amendment",
|
|
196
238
|
required: [
|
|
197
239
|
"amendmentId",
|
|
198
240
|
"description",
|
|
@@ -227,6 +269,37 @@ export const corpEntityDef = defineFiberApp({
|
|
|
227
269
|
newLegalName: { type: "string", nullable: true },
|
|
228
270
|
},
|
|
229
271
|
},
|
|
272
|
+
amend_charter: {
|
|
273
|
+
description: "Phase 2 of a charter amendment: apply once the bound approving resolution is EXECUTED",
|
|
274
|
+
required: [
|
|
275
|
+
"amendmentId",
|
|
276
|
+
"description",
|
|
277
|
+
"amendmentType",
|
|
278
|
+
"effectiveDate",
|
|
279
|
+
"filedDate",
|
|
280
|
+
],
|
|
281
|
+
properties: {
|
|
282
|
+
amendmentId: { type: "string" },
|
|
283
|
+
description: { type: "string" },
|
|
284
|
+
amendmentType: {
|
|
285
|
+
type: "string",
|
|
286
|
+
enum: [
|
|
287
|
+
"NAME_CHANGE",
|
|
288
|
+
"SHARE_AUTHORIZATION",
|
|
289
|
+
"PURPOSE_CHANGE",
|
|
290
|
+
"OTHER",
|
|
291
|
+
],
|
|
292
|
+
},
|
|
293
|
+
effectiveDate: { type: "string", format: "date" },
|
|
294
|
+
filedDate: { type: "string", format: "date" },
|
|
295
|
+
newShareAuthorization: {
|
|
296
|
+
type: "object",
|
|
297
|
+
nullable: true,
|
|
298
|
+
description: "If increasing/changing authorized shares",
|
|
299
|
+
},
|
|
300
|
+
newLegalName: { type: "string", nullable: true },
|
|
301
|
+
},
|
|
302
|
+
},
|
|
230
303
|
update_share_class: {
|
|
231
304
|
description: "Update authorized shares for an existing class or add new class (requires charter amendment)",
|
|
232
305
|
required: [
|
|
@@ -305,8 +378,8 @@ export const corpEntityDef = defineFiberApp({
|
|
|
305
378
|
penaltiesPaid: { type: "number", nullable: true },
|
|
306
379
|
},
|
|
307
380
|
},
|
|
308
|
-
|
|
309
|
-
description: "
|
|
381
|
+
propose_dissolve_voluntary: {
|
|
382
|
+
description: "Phase 1 of voluntary dissolution: bind the executing board + shareholder resolution fibers (#24 _addDependency) and record the pending dissolution",
|
|
310
383
|
required: [
|
|
311
384
|
"dissolutionDate",
|
|
312
385
|
"boardResolutionRef",
|
|
@@ -323,6 +396,18 @@ export const corpEntityDef = defineFiberApp({
|
|
|
323
396
|
certificateOfDissolution: { type: "string" },
|
|
324
397
|
},
|
|
325
398
|
},
|
|
399
|
+
dissolve_voluntary: {
|
|
400
|
+
description: "Phase 2 of voluntary dissolution: execute once both bound resolutions are EXECUTED",
|
|
401
|
+
required: ["dissolutionDate"],
|
|
402
|
+
properties: {
|
|
403
|
+
dissolutionDate: { type: "string", format: "date" },
|
|
404
|
+
windingUpPlan: {
|
|
405
|
+
type: "string",
|
|
406
|
+
description: "Reference to winding up plan",
|
|
407
|
+
},
|
|
408
|
+
certificateOfDissolution: { type: "string" },
|
|
409
|
+
},
|
|
410
|
+
},
|
|
326
411
|
dissolve_administrative: {
|
|
327
412
|
description: "Administrative dissolution by state after prolonged suspension",
|
|
328
413
|
required: ["dissolutionDate", "stateOrder", "reason"],
|
|
@@ -432,8 +517,8 @@ export const corpEntityDef = defineFiberApp({
|
|
|
432
517
|
{ "!=": [{ var: "state.legalName" }, null] },
|
|
433
518
|
{ "!=": [{ var: "state.jurisdiction.state" }, null] },
|
|
434
519
|
{ "!=": [{ var: "state.registeredAgent" }, null] },
|
|
435
|
-
{ ">": [{ var: "state.incorporators
|
|
436
|
-
{ ">": [{ var: "state.shareStructure.classes
|
|
520
|
+
{ ">": [{ length: [{ var: "state.incorporators" }] }, 0] },
|
|
521
|
+
{ ">": [{ length: [{ var: "state.shareStructure.classes" }] }, 0] },
|
|
437
522
|
{ ">": [{ var: "state.shareStructure.totalAuthorized" }, 0] },
|
|
438
523
|
],
|
|
439
524
|
},
|
|
@@ -443,38 +528,77 @@ export const corpEntityDef = defineFiberApp({
|
|
|
443
528
|
{
|
|
444
529
|
status: "ACTIVE",
|
|
445
530
|
formationDate: { var: "event.approvalDate" },
|
|
446
|
-
updatedAt: { var: "$
|
|
531
|
+
updatedAt: { var: "$ordinal" },
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
_emit: [
|
|
535
|
+
{ name: "CORPORATION_FORMED", data: { var: "event" }, destination: "external" },
|
|
536
|
+
],
|
|
447
537
|
},
|
|
448
538
|
],
|
|
449
539
|
},
|
|
450
|
-
emits: ["CORPORATION_FORMED"],
|
|
451
540
|
},
|
|
452
|
-
// ACTIVE -> ACTIVE (
|
|
541
|
+
// ACTIVE -> ACTIVE (propose_amend_charter) — phase 1 (#24): bind the approving resolution fiber and
|
|
542
|
+
// record the pending amendment, so amend_charter can read the resolution's state next transition.
|
|
543
|
+
{
|
|
544
|
+
from: "ACTIVE",
|
|
545
|
+
to: "ACTIVE",
|
|
546
|
+
eventName: "propose_amend_charter",
|
|
547
|
+
// authority gate — an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
548
|
+
guard: signerIsParty("state.charterAuthority"),
|
|
549
|
+
effect: {
|
|
550
|
+
merge: [
|
|
551
|
+
{ var: "state" },
|
|
552
|
+
{
|
|
553
|
+
pendingAmendCharter: {
|
|
554
|
+
amendmentId: { var: "event.amendmentId" },
|
|
555
|
+
description: { var: "event.description" },
|
|
556
|
+
effectiveDate: { var: "event.effectiveDate" },
|
|
557
|
+
filedDate: { var: "event.filedDate" },
|
|
558
|
+
newLegalName: { var: "event.newLegalName" },
|
|
559
|
+
ref: { var: "event.resolutionRef" },
|
|
560
|
+
proposedAt: { var: "$ordinal" },
|
|
561
|
+
},
|
|
562
|
+
},
|
|
563
|
+
// bind the resolution fiber so amend_charter can assert its state next transition
|
|
564
|
+
addDependency({ var: "event.resolutionRef" }),
|
|
565
|
+
],
|
|
566
|
+
},
|
|
567
|
+
dependencies: [],
|
|
568
|
+
},
|
|
569
|
+
// ACTIVE -> ACTIVE (amend_charter) — phase 2 (#24): apply once the bound approving resolution is
|
|
570
|
+
// EXECUTED. depInState replaces the dropped object-form dependency (which silently never gated).
|
|
453
571
|
{
|
|
454
572
|
from: "ACTIVE",
|
|
455
573
|
to: "ACTIVE",
|
|
456
574
|
eventName: "amend_charter",
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
575
|
+
// authority gate — an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
576
|
+
guard: {
|
|
577
|
+
and: [
|
|
578
|
+
signerIsParty("state.charterAuthority"),
|
|
579
|
+
// the proposal must target this amendment, and its bound resolution must be EXECUTED
|
|
580
|
+
{
|
|
581
|
+
"==": [
|
|
582
|
+
{ var: "state.pendingAmendCharter.amendmentId" },
|
|
583
|
+
{ var: "event.amendmentId" },
|
|
584
|
+
],
|
|
585
|
+
},
|
|
586
|
+
depInState("state.pendingAmendCharter.ref", "EXECUTED"),
|
|
587
|
+
],
|
|
588
|
+
},
|
|
465
589
|
effect: {
|
|
466
590
|
merge: [
|
|
467
591
|
{ var: "state" },
|
|
468
592
|
{
|
|
469
593
|
charterAmendments: {
|
|
470
|
-
|
|
594
|
+
merge: [
|
|
471
595
|
{ var: "state.charterAmendments" },
|
|
472
596
|
[
|
|
473
597
|
{
|
|
474
598
|
amendmentId: { var: "event.amendmentId" },
|
|
475
599
|
description: { var: "event.description" },
|
|
476
600
|
effectiveDate: { var: "event.effectiveDate" },
|
|
477
|
-
resolutionRef: { var: "
|
|
601
|
+
resolutionRef: { var: "state.pendingAmendCharter.ref" },
|
|
478
602
|
filedDate: { var: "event.filedDate" },
|
|
479
603
|
},
|
|
480
604
|
],
|
|
@@ -487,11 +611,18 @@ export const corpEntityDef = defineFiberApp({
|
|
|
487
611
|
{ var: "state.legalName" },
|
|
488
612
|
],
|
|
489
613
|
},
|
|
490
|
-
updatedAt: { var: "$
|
|
614
|
+
updatedAt: { var: "$ordinal" },
|
|
615
|
+
// clear the consumed proposal
|
|
616
|
+
pendingAmendCharter: null,
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
_emit: [
|
|
620
|
+
{ name: "CHARTER_AMENDED", data: { var: "event" }, destination: "external" },
|
|
621
|
+
],
|
|
491
622
|
},
|
|
492
623
|
],
|
|
493
624
|
},
|
|
494
|
-
|
|
625
|
+
dependencies: [],
|
|
495
626
|
},
|
|
496
627
|
// ACTIVE -> ACTIVE (update_share_class)
|
|
497
628
|
{
|
|
@@ -503,7 +634,7 @@ export const corpEntityDef = defineFiberApp({
|
|
|
503
634
|
{ var: "state.charterAmendments" },
|
|
504
635
|
{
|
|
505
636
|
"==": [
|
|
506
|
-
{ var: "
|
|
637
|
+
{ var: "amendmentId" },
|
|
507
638
|
{ var: "event.charterAmendmentRef" },
|
|
508
639
|
],
|
|
509
640
|
},
|
|
@@ -524,7 +655,7 @@ export const corpEntityDef = defineFiberApp({
|
|
|
524
655
|
if: [
|
|
525
656
|
{
|
|
526
657
|
"==": [
|
|
527
|
-
{ var: "
|
|
658
|
+
{ var: "classId" },
|
|
528
659
|
{ var: "event.classId" },
|
|
529
660
|
],
|
|
530
661
|
},
|
|
@@ -561,7 +692,8 @@ export const corpEntityDef = defineFiberApp({
|
|
|
561
692
|
from: "ACTIVE",
|
|
562
693
|
to: "ACTIVE",
|
|
563
694
|
eventName: "update_registered_agent",
|
|
564
|
-
|
|
695
|
+
// authority gate — an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
696
|
+
guard: signerIsParty("state.boardAuthority"),
|
|
565
697
|
effect: {
|
|
566
698
|
merge: [
|
|
567
699
|
{ var: "state" },
|
|
@@ -574,16 +706,21 @@ export const corpEntityDef = defineFiberApp({
|
|
|
574
706
|
effectiveDate: { var: "event.effectiveDate" },
|
|
575
707
|
},
|
|
576
708
|
},
|
|
709
|
+
{
|
|
710
|
+
_emit: [
|
|
711
|
+
{ name: "REGISTERED_AGENT_CHANGED", data: { var: "event" }, destination: "external" },
|
|
712
|
+
],
|
|
713
|
+
},
|
|
577
714
|
],
|
|
578
715
|
},
|
|
579
|
-
emits: ["REGISTERED_AGENT_CHANGED"],
|
|
580
716
|
},
|
|
581
717
|
// ACTIVE -> SUSPENDED
|
|
582
718
|
{
|
|
583
719
|
from: "ACTIVE",
|
|
584
720
|
to: "SUSPENDED",
|
|
585
721
|
eventName: "suspend",
|
|
586
|
-
|
|
722
|
+
// authority gate — state-initiated enforcement; an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
723
|
+
guard: signerIsParty("state.stateAuthority"),
|
|
587
724
|
effect: {
|
|
588
725
|
merge: [
|
|
589
726
|
{ var: "state" },
|
|
@@ -592,16 +729,21 @@ export const corpEntityDef = defineFiberApp({
|
|
|
592
729
|
suspensionReason: { var: "event.reason" },
|
|
593
730
|
suspensionDate: { var: "event.suspensionDate" },
|
|
594
731
|
},
|
|
732
|
+
{
|
|
733
|
+
_emit: [
|
|
734
|
+
{ name: "CORPORATION_SUSPENDED", data: { var: "event" }, destination: "external" },
|
|
735
|
+
],
|
|
736
|
+
},
|
|
595
737
|
],
|
|
596
738
|
},
|
|
597
|
-
emits: ["CORPORATION_SUSPENDED"],
|
|
598
739
|
},
|
|
599
740
|
// SUSPENDED -> ACTIVE
|
|
600
741
|
{
|
|
601
742
|
from: "SUSPENDED",
|
|
602
743
|
to: "ACTIVE",
|
|
603
744
|
eventName: "reinstate",
|
|
604
|
-
|
|
745
|
+
// authority gate — an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
746
|
+
guard: signerIsParty("state.boardAuthority"),
|
|
605
747
|
effect: {
|
|
606
748
|
merge: [
|
|
607
749
|
{ var: "state" },
|
|
@@ -610,28 +752,72 @@ export const corpEntityDef = defineFiberApp({
|
|
|
610
752
|
suspensionReason: null,
|
|
611
753
|
suspensionDate: null,
|
|
612
754
|
},
|
|
755
|
+
{
|
|
756
|
+
_emit: [
|
|
757
|
+
{ name: "CORPORATION_REINSTATED", data: { var: "event" }, destination: "external" },
|
|
758
|
+
],
|
|
759
|
+
},
|
|
760
|
+
],
|
|
761
|
+
},
|
|
762
|
+
},
|
|
763
|
+
// ACTIVE -> ACTIVE (propose_dissolve_voluntary) — phase 1 (#24): bind BOTH executing resolution
|
|
764
|
+
// fibers (board + shareholder) and record the pending dissolution, so dissolve_voluntary can read
|
|
765
|
+
// both resolutions' states next transition.
|
|
766
|
+
{
|
|
767
|
+
from: "ACTIVE",
|
|
768
|
+
to: "ACTIVE",
|
|
769
|
+
eventName: "propose_dissolve_voluntary",
|
|
770
|
+
// authority gate — both the board and shareholder authorities must sign; identity role attestations (BOARD_MEMBER/...) layer on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
771
|
+
guard: {
|
|
772
|
+
and: [
|
|
773
|
+
signerIsParty("state.boardAuthority"),
|
|
774
|
+
signerIsParty("state.shareholderAuthority"),
|
|
775
|
+
],
|
|
776
|
+
},
|
|
777
|
+
effect: {
|
|
778
|
+
merge: [
|
|
779
|
+
{ var: "state" },
|
|
780
|
+
{
|
|
781
|
+
pendingDissolveVoluntary: {
|
|
782
|
+
dissolutionDate: { var: "event.dissolutionDate" },
|
|
783
|
+
boardRef: { var: "event.boardResolutionRef" },
|
|
784
|
+
shareholderRef: { var: "event.shareholderResolutionRef" },
|
|
785
|
+
proposedAt: { var: "$ordinal" },
|
|
786
|
+
},
|
|
787
|
+
},
|
|
788
|
+
// bind both resolution fibers so dissolve_voluntary can assert their states next transition
|
|
789
|
+
{
|
|
790
|
+
_addDependency: [
|
|
791
|
+
{ fiberId: { var: "event.boardResolutionRef" } },
|
|
792
|
+
{ fiberId: { var: "event.shareholderResolutionRef" } },
|
|
793
|
+
],
|
|
794
|
+
},
|
|
613
795
|
],
|
|
614
796
|
},
|
|
615
|
-
|
|
797
|
+
dependencies: [],
|
|
616
798
|
},
|
|
617
|
-
// ACTIVE -> DISSOLVED (
|
|
799
|
+
// ACTIVE -> DISSOLVED (dissolve_voluntary) — phase 2 (#24): execute once BOTH bound resolutions are
|
|
800
|
+
// EXECUTED. depInState replaces the dropped object-form dependencies (which silently never gated).
|
|
618
801
|
{
|
|
619
802
|
from: "ACTIVE",
|
|
620
803
|
to: "DISSOLVED",
|
|
621
804
|
eventName: "dissolve_voluntary",
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
805
|
+
// authority gate — both the board and shareholder authorities must sign; identity role attestations (BOARD_MEMBER/...) layer on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
806
|
+
guard: {
|
|
807
|
+
and: [
|
|
808
|
+
signerIsParty("state.boardAuthority"),
|
|
809
|
+
signerIsParty("state.shareholderAuthority"),
|
|
810
|
+
// the proposal must target this dissolution, and its bound resolutions must both be EXECUTED
|
|
811
|
+
{
|
|
812
|
+
"==": [
|
|
813
|
+
{ var: "state.pendingDissolveVoluntary.dissolutionDate" },
|
|
814
|
+
{ var: "event.dissolutionDate" },
|
|
815
|
+
],
|
|
816
|
+
},
|
|
817
|
+
depInState("state.pendingDissolveVoluntary.boardRef", "EXECUTED"),
|
|
818
|
+
depInState("state.pendingDissolveVoluntary.shareholderRef", "EXECUTED"),
|
|
819
|
+
],
|
|
820
|
+
},
|
|
635
821
|
effect: {
|
|
636
822
|
merge: [
|
|
637
823
|
{ var: "state" },
|
|
@@ -639,17 +825,25 @@ export const corpEntityDef = defineFiberApp({
|
|
|
639
825
|
status: "DISSOLVED",
|
|
640
826
|
dissolutionDate: { var: "event.dissolutionDate" },
|
|
641
827
|
dissolutionReason: "VOLUNTARY",
|
|
828
|
+
// clear the consumed proposal
|
|
829
|
+
pendingDissolveVoluntary: null,
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
_emit: [
|
|
833
|
+
{ name: "CORPORATION_DISSOLVED", data: { var: "event" }, destination: "external" },
|
|
834
|
+
],
|
|
642
835
|
},
|
|
643
836
|
],
|
|
644
837
|
},
|
|
645
|
-
|
|
838
|
+
dependencies: [],
|
|
646
839
|
},
|
|
647
840
|
// SUSPENDED -> DISSOLVED (administrative)
|
|
648
841
|
{
|
|
649
842
|
from: "SUSPENDED",
|
|
650
843
|
to: "DISSOLVED",
|
|
651
844
|
eventName: "dissolve_administrative",
|
|
652
|
-
|
|
845
|
+
// authority gate — state-initiated dissolution; an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
846
|
+
guard: signerIsParty("state.stateAuthority"),
|
|
653
847
|
effect: {
|
|
654
848
|
merge: [
|
|
655
849
|
{ var: "state" },
|
|
@@ -660,9 +854,13 @@ export const corpEntityDef = defineFiberApp({
|
|
|
660
854
|
cat: ["ADMINISTRATIVE: ", { var: "event.reason" }],
|
|
661
855
|
},
|
|
662
856
|
},
|
|
857
|
+
{
|
|
858
|
+
_emit: [
|
|
859
|
+
{ name: "CORPORATION_DISSOLVED", data: { var: "event" }, destination: "external" },
|
|
860
|
+
],
|
|
861
|
+
},
|
|
663
862
|
],
|
|
664
863
|
},
|
|
665
|
-
emits: ["CORPORATION_DISSOLVED"],
|
|
666
864
|
},
|
|
667
865
|
],
|
|
668
866
|
});
|