@ottochain/sdk 2.4.0 → 2.5.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/compute/index.js +33 -0
- package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
- package/dist/cjs/apps/compute/state-machines/index.js +9 -0
- package/dist/cjs/apps/contracts/index.js +1 -1
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
- package/dist/cjs/apps/governance/index.js +7 -7
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
- package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
- package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
- package/dist/cjs/apps/identity/constants.js +16 -24
- package/dist/cjs/apps/identity/index.js +1 -1
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
- package/dist/cjs/apps/index.js +4 -1
- package/dist/cjs/apps/lending/assets.js +41 -17
- package/dist/cjs/apps/lending/credit-scoring.js +4 -4
- package/dist/cjs/apps/lending/eligibility.js +9 -25
- package/dist/cjs/apps/lending/index.js +1 -1
- package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
- package/dist/cjs/apps/markets/index.js +1 -1
- package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
- package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
- package/dist/cjs/apps/oracles/index.js +1 -1
- package/dist/cjs/apps/privacy/index.js +67 -0
- package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
- package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
- package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
- package/dist/cjs/apps/staked-pool/assets.js +103 -0
- package/dist/cjs/apps/staked-pool/base.js +498 -0
- package/dist/cjs/apps/staked-pool/consumer.js +55 -0
- package/dist/cjs/apps/staked-pool/index.js +83 -0
- package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
- package/dist/cjs/generated/google/protobuf/struct.js +1 -1
- package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
- package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/cjs/generated/ottochain/v1/common.js +1 -1
- package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
- package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
- package/dist/cjs/generated/ottochain/v1/records.js +1 -1
- package/dist/cjs/index.js +20 -3
- package/dist/cjs/ottochain/genesis-manifest.js +6 -0
- package/dist/cjs/ottochain/metagraph-client.js +16 -8
- package/dist/cjs/ottochain/snapshot.js +2 -4
- package/dist/cjs/ottochain/transaction.js +10 -0
- package/dist/cjs/privacy/sealed-bid.js +85 -82
- package/dist/cjs/privacy/shield-app.js +32 -32
- package/dist/cjs/schema/effects.js +117 -1
- package/dist/cjs/schema/fiber-app.js +132 -3
- package/dist/cjs/schema/guard-lint.js +3 -12
- package/dist/cjs/schema/guards.js +38 -38
- package/dist/cjs/templates/asset-policy.js +190 -0
- package/dist/cjs/templates/index.js +86 -0
- package/dist/cjs/templates/machine.js +130 -0
- package/dist/cjs/templates/migration.js +39 -0
- package/dist/cjs/templates/state-shape.js +38 -0
- package/dist/cjs/validation.js +1 -3
- package/dist/esm/apps/compute/index.js +29 -0
- package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
- package/dist/esm/apps/compute/state-machines/index.js +5 -0
- package/dist/esm/apps/contracts/index.js +4 -4
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
- package/dist/esm/apps/corporate/index.js +2 -2
- package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
- package/dist/esm/apps/governance/index.js +10 -10
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
- package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
- package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
- package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
- package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
- package/dist/esm/apps/identity/constants.js +18 -26
- package/dist/esm/apps/identity/index.js +8 -8
- package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
- package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
- package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
- package/dist/esm/apps/index.js +9 -6
- package/dist/esm/apps/lending/assets.js +41 -17
- package/dist/esm/apps/lending/credit-scoring.js +6 -6
- package/dist/esm/apps/lending/eligibility.js +10 -26
- package/dist/esm/apps/lending/index.js +5 -5
- package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
- package/dist/esm/apps/markets/index.js +5 -5
- package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
- package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
- package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
- package/dist/esm/apps/oracles/index.js +3 -3
- package/dist/esm/apps/privacy/index.js +56 -0
- package/dist/esm/apps/privacy/state-machines/index.js +6 -0
- package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
- package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
- package/dist/esm/apps/staked-pool/assets.js +91 -0
- package/dist/esm/apps/staked-pool/base.js +493 -0
- package/dist/esm/apps/staked-pool/consumer.js +49 -0
- package/dist/esm/apps/staked-pool/index.js +60 -0
- package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
- package/dist/esm/generated/google/protobuf/struct.js +1 -1
- package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
- package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/esm/generated/ottochain/v1/common.js +1 -1
- package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
- package/dist/esm/generated/ottochain/v1/messages.js +1 -1
- package/dist/esm/generated/ottochain/v1/records.js +1 -1
- package/dist/esm/index.js +10 -4
- package/dist/esm/ottochain/genesis-manifest.js +6 -0
- package/dist/esm/ottochain/metagraph-client.js +16 -8
- package/dist/esm/ottochain/snapshot.js +2 -4
- package/dist/esm/ottochain/transaction.js +8 -0
- package/dist/esm/privacy/index.js +2 -2
- package/dist/esm/privacy/sealed-bid.js +87 -84
- package/dist/esm/privacy/shield-app.js +33 -33
- package/dist/esm/schema/effects.js +110 -0
- package/dist/esm/schema/fiber-app.js +127 -3
- package/dist/esm/schema/guard-lint.js +3 -12
- package/dist/esm/schema/guards.js +36 -37
- package/dist/esm/templates/asset-policy.js +182 -0
- package/dist/esm/templates/index.js +41 -0
- package/dist/esm/templates/machine.js +125 -0
- package/dist/esm/templates/migration.js +34 -0
- package/dist/esm/templates/state-shape.js +34 -0
- package/dist/esm/validation.js +1 -3
- package/dist/esm/zk/index.js +4 -4
- package/dist/types/apps/compute/index.d.ts +176 -0
- package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
- package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
- package/dist/types/apps/contracts/index.d.ts +14 -14
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
- package/dist/types/apps/corporate/index.d.ts +162 -162
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
- package/dist/types/apps/governance/index.d.ts +81 -81
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
- package/dist/types/apps/identity/constants.d.ts +2 -2
- package/dist/types/apps/identity/index.d.ts +70 -70
- package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
- package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
- package/dist/types/apps/index.d.ts +9 -6
- package/dist/types/apps/lending/assets.d.ts +2 -2
- package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
- package/dist/types/apps/lending/eligibility.d.ts +2 -2
- package/dist/types/apps/lending/index.d.ts +20 -12
- package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
- package/dist/types/apps/markets/index.d.ts +76 -76
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
- package/dist/types/apps/oracles/index.d.ts +1 -1
- package/dist/types/apps/privacy/index.d.ts +328 -0
- package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
- package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
- package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
- package/dist/types/apps/staked-pool/assets.d.ts +53 -0
- package/dist/types/apps/staked-pool/base.d.ts +80 -0
- package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
- package/dist/types/apps/staked-pool/index.d.ts +51 -0
- package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
- package/dist/types/generated/openapi.d.ts +13 -0
- package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/openapi.d.ts +4 -2
- package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
- package/dist/types/ottochain/transaction.d.ts +9 -1
- package/dist/types/ottochain/types.d.ts +1 -1
- package/dist/types/privacy/index.d.ts +2 -2
- package/dist/types/privacy/sealed-bid.d.ts +9 -9
- package/dist/types/privacy/shield-app.d.ts +1 -1
- package/dist/types/schema/effects.d.ts +107 -0
- package/dist/types/schema/fiber-app.d.ts +281 -0
- package/dist/types/schema/guards.d.ts +12 -0
- package/dist/types/templates/asset-policy.d.ts +119 -0
- package/dist/types/templates/index.d.ts +26 -0
- package/dist/types/templates/machine.d.ts +139 -0
- package/dist/types/templates/migration.d.ts +34 -0
- package/dist/types/templates/state-shape.d.ts +30 -0
- package/dist/types/zk/index.d.ts +4 -4
- package/package.json +31 -13
|
@@ -10,618 +10,560 @@ const effects_js_1 = require("../../../schema/effects.js");
|
|
|
10
10
|
*/
|
|
11
11
|
exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
12
12
|
metadata: {
|
|
13
|
-
name:
|
|
14
|
-
app:
|
|
15
|
-
type:
|
|
16
|
-
version:
|
|
17
|
-
description:
|
|
13
|
+
name: 'CorpSecurities',
|
|
14
|
+
app: 'corporate',
|
|
15
|
+
type: 'securities',
|
|
16
|
+
version: '1.0.0',
|
|
17
|
+
description: 'Securities state machine tracking the lifecycle of equity from authorization through issuance, transfer, and retirement. Manages stock certificates, book entry positions, and restricted securities.',
|
|
18
18
|
crossReferences: {
|
|
19
19
|
entity: {
|
|
20
|
-
machine:
|
|
21
|
-
description:
|
|
22
|
-
foreignKey:
|
|
20
|
+
machine: 'corporate-entity',
|
|
21
|
+
description: 'Parent corporate entity with share class definitions',
|
|
22
|
+
foreignKey: 'entityId',
|
|
23
23
|
},
|
|
24
24
|
resolutions: {
|
|
25
|
-
machine:
|
|
26
|
-
description:
|
|
27
|
-
foreignKey:
|
|
25
|
+
machine: 'corporate-resolution',
|
|
26
|
+
description: 'Board resolutions authorizing securities actions',
|
|
27
|
+
foreignKey: 'entityId',
|
|
28
28
|
},
|
|
29
29
|
shareholders: {
|
|
30
|
-
machine:
|
|
31
|
-
description:
|
|
32
|
-
foreignKey:
|
|
30
|
+
machine: 'corporate-shareholders',
|
|
31
|
+
description: 'Shareholder meetings for determining voting rights',
|
|
32
|
+
foreignKey: 'entityId',
|
|
33
33
|
},
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
createSchema: {
|
|
37
37
|
required: [
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
'securityId',
|
|
39
|
+
'entityId',
|
|
40
|
+
'issuerAddress',
|
|
41
|
+
'shareClass',
|
|
42
|
+
'shareClassName',
|
|
43
|
+
'shareCount',
|
|
44
|
+
'parValue',
|
|
45
45
|
],
|
|
46
46
|
properties: {
|
|
47
47
|
securityId: {
|
|
48
|
-
type:
|
|
49
|
-
description:
|
|
48
|
+
type: 'string',
|
|
49
|
+
description: 'Unique identifier for this security lot/certificate',
|
|
50
50
|
immutable: true,
|
|
51
51
|
},
|
|
52
52
|
entityId: {
|
|
53
|
-
type:
|
|
54
|
-
description:
|
|
53
|
+
type: 'string',
|
|
54
|
+
description: 'Reference to parent corporate-entity',
|
|
55
55
|
immutable: true,
|
|
56
56
|
},
|
|
57
57
|
issuerAddress: {
|
|
58
|
-
type:
|
|
59
|
-
description:
|
|
58
|
+
type: 'address',
|
|
59
|
+
description: 'State-pinned DAG address of the issuing authority (the corporation / transfer agent). Verified against proofs[].address to gate issuer-privileged transitions.',
|
|
60
60
|
immutable: true,
|
|
61
61
|
},
|
|
62
62
|
shareClass: {
|
|
63
|
-
type:
|
|
64
|
-
description:
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'Share class ID from corporate-entity',
|
|
65
65
|
},
|
|
66
66
|
shareClassName: {
|
|
67
|
-
type:
|
|
68
|
-
description:
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'Human-readable class name',
|
|
69
69
|
},
|
|
70
70
|
shareCount: {
|
|
71
|
-
type:
|
|
72
|
-
description:
|
|
71
|
+
type: 'integer',
|
|
72
|
+
description: 'Number of shares in this lot',
|
|
73
73
|
},
|
|
74
74
|
parValue: {
|
|
75
|
-
type:
|
|
76
|
-
description:
|
|
75
|
+
type: 'number',
|
|
76
|
+
description: 'Par value per share',
|
|
77
77
|
},
|
|
78
78
|
},
|
|
79
79
|
},
|
|
80
80
|
stateSchema: {
|
|
81
81
|
properties: {
|
|
82
|
-
securityId: { type:
|
|
83
|
-
entityId: { type:
|
|
84
|
-
issuerAddress: { type:
|
|
85
|
-
shareClass: { type:
|
|
86
|
-
shareClassName: { type:
|
|
82
|
+
securityId: { type: 'string', immutable: true },
|
|
83
|
+
entityId: { type: 'string', immutable: true },
|
|
84
|
+
issuerAddress: { type: 'address', immutable: true },
|
|
85
|
+
shareClass: { type: 'string' },
|
|
86
|
+
shareClassName: { type: 'string' },
|
|
87
87
|
certificateNumber: {
|
|
88
|
-
type:
|
|
88
|
+
type: 'string',
|
|
89
89
|
nullable: true,
|
|
90
|
-
description:
|
|
90
|
+
description: 'For certificated shares',
|
|
91
91
|
},
|
|
92
92
|
cusip: {
|
|
93
|
-
type:
|
|
93
|
+
type: 'string',
|
|
94
94
|
nullable: true,
|
|
95
|
-
description:
|
|
95
|
+
description: 'CUSIP number if assigned',
|
|
96
96
|
},
|
|
97
|
-
shareCount: { type:
|
|
98
|
-
parValue: { type:
|
|
97
|
+
shareCount: { type: 'integer' },
|
|
98
|
+
parValue: { type: 'number' },
|
|
99
99
|
issuancePrice: {
|
|
100
|
-
type:
|
|
100
|
+
type: 'number',
|
|
101
101
|
nullable: true,
|
|
102
|
-
description:
|
|
102
|
+
description: 'Price per share at issuance',
|
|
103
103
|
computed: true,
|
|
104
104
|
},
|
|
105
105
|
issuanceDate: {
|
|
106
|
-
type:
|
|
107
|
-
format:
|
|
106
|
+
type: 'string',
|
|
107
|
+
format: 'date',
|
|
108
108
|
nullable: true,
|
|
109
109
|
computed: true,
|
|
110
110
|
},
|
|
111
111
|
form: {
|
|
112
|
-
type:
|
|
113
|
-
enum: [
|
|
114
|
-
description:
|
|
112
|
+
type: 'string',
|
|
113
|
+
enum: ['CERTIFICATED', 'BOOK_ENTRY', 'DRS'],
|
|
114
|
+
description: 'Physical certificate, book entry, or Direct Registration System',
|
|
115
115
|
computed: true,
|
|
116
116
|
},
|
|
117
|
-
holder: { $ref:
|
|
118
|
-
restrictions: { $ref:
|
|
117
|
+
holder: { $ref: '#/definitions/Holder', nullable: true, computed: true },
|
|
118
|
+
restrictions: { $ref: '#/definitions/Restrictions', computed: true },
|
|
119
119
|
authorization: {
|
|
120
|
-
$ref:
|
|
120
|
+
$ref: '#/definitions/Authorization',
|
|
121
121
|
nullable: true,
|
|
122
122
|
computed: true,
|
|
123
123
|
},
|
|
124
124
|
issuanceDetails: {
|
|
125
|
-
$ref:
|
|
125
|
+
$ref: '#/definitions/IssuanceDetails',
|
|
126
126
|
nullable: true,
|
|
127
127
|
computed: true,
|
|
128
128
|
},
|
|
129
129
|
transferHistory: {
|
|
130
|
-
type:
|
|
131
|
-
items: { $ref:
|
|
130
|
+
type: 'array',
|
|
131
|
+
items: { $ref: '#/definitions/TransferRecord' },
|
|
132
132
|
computed: true,
|
|
133
133
|
},
|
|
134
134
|
corporateActions: {
|
|
135
|
-
type:
|
|
136
|
-
items: { $ref:
|
|
135
|
+
type: 'array',
|
|
136
|
+
items: { $ref: '#/definitions/CorporateAction' },
|
|
137
137
|
computed: true,
|
|
138
138
|
},
|
|
139
139
|
retirementDetails: {
|
|
140
|
-
$ref:
|
|
140
|
+
$ref: '#/definitions/RetirementDetails',
|
|
141
141
|
nullable: true,
|
|
142
142
|
computed: true,
|
|
143
143
|
},
|
|
144
144
|
status: {
|
|
145
|
-
type:
|
|
146
|
-
enum: [
|
|
147
|
-
"AUTHORIZED",
|
|
148
|
-
"ISSUED",
|
|
149
|
-
"TREASURY",
|
|
150
|
-
"TRANSFERRED",
|
|
151
|
-
"RETIRED",
|
|
152
|
-
],
|
|
145
|
+
type: 'string',
|
|
146
|
+
enum: ['AUTHORIZED', 'ISSUED', 'TREASURY', 'TRANSFERRED', 'RETIRED'],
|
|
153
147
|
computed: true,
|
|
154
148
|
},
|
|
155
|
-
createdAt: { type:
|
|
156
|
-
updatedAt: { type:
|
|
149
|
+
createdAt: { type: 'timestamp', computed: true },
|
|
150
|
+
updatedAt: { type: 'timestamp', computed: true },
|
|
157
151
|
// Two-phase resolution gating (#24): each propose_<X> binds the executing resolution (and, for
|
|
158
152
|
// issuance, the parent entity) fiber via _addDependency and records the pending action here; the
|
|
159
153
|
// gated <X> then asserts the bound dependency state via depInState and clears the pending object.
|
|
160
154
|
// The dropped object-form dependencies (which the chain silently never gated) are replaced this way.
|
|
161
|
-
pendingIssue: { type:
|
|
162
|
-
pendingRepurchase: { type:
|
|
163
|
-
pendingReissue: { type:
|
|
164
|
-
pendingRetire: { type:
|
|
165
|
-
pendingDividend: { type:
|
|
155
|
+
pendingIssue: { type: 'object', nullable: true, computed: true },
|
|
156
|
+
pendingRepurchase: { type: 'object', nullable: true, computed: true },
|
|
157
|
+
pendingReissue: { type: 'object', nullable: true, computed: true },
|
|
158
|
+
pendingRetire: { type: 'object', nullable: true, computed: true },
|
|
159
|
+
pendingDividend: { type: 'object', nullable: true, computed: true },
|
|
166
160
|
},
|
|
167
161
|
},
|
|
168
162
|
eventSchemas: {
|
|
169
163
|
authorize_shares: {
|
|
170
|
-
description:
|
|
164
|
+
description: 'Record shares as authorized per charter/amendment',
|
|
171
165
|
required: [
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
166
|
+
'securityId',
|
|
167
|
+
'entityId',
|
|
168
|
+
'shareClass',
|
|
169
|
+
'shareClassName',
|
|
170
|
+
'shareCount',
|
|
171
|
+
'parValue',
|
|
172
|
+
'authorizedDate',
|
|
179
173
|
],
|
|
180
174
|
properties: {
|
|
181
|
-
securityId: { type:
|
|
182
|
-
entityId: { type:
|
|
183
|
-
shareClass: { type:
|
|
184
|
-
shareClassName: { type:
|
|
185
|
-
shareCount: { type:
|
|
186
|
-
parValue: { type:
|
|
187
|
-
authorizedDate: { type:
|
|
188
|
-
charterProvision: { type:
|
|
175
|
+
securityId: { type: 'string' },
|
|
176
|
+
entityId: { type: 'string' },
|
|
177
|
+
shareClass: { type: 'string' },
|
|
178
|
+
shareClassName: { type: 'string' },
|
|
179
|
+
shareCount: { type: 'integer' },
|
|
180
|
+
parValue: { type: 'number' },
|
|
181
|
+
authorizedDate: { type: 'string', format: 'date' },
|
|
182
|
+
charterProvision: { type: 'string' },
|
|
189
183
|
},
|
|
190
184
|
},
|
|
191
185
|
propose_issue: {
|
|
192
|
-
description:
|
|
193
|
-
required: [
|
|
186
|
+
description: 'Phase 1 of issuance (#24): bind the executing board resolution + parent entity fibers (_addDependency) and record the pending issuance',
|
|
187
|
+
required: ['holderId', 'boardResolutionRef'],
|
|
194
188
|
properties: {
|
|
195
|
-
holderId: { type:
|
|
196
|
-
boardResolutionRef: { type:
|
|
189
|
+
holderId: { type: 'string' },
|
|
190
|
+
boardResolutionRef: { type: 'string' },
|
|
197
191
|
},
|
|
198
192
|
},
|
|
199
193
|
issue_shares: {
|
|
200
|
-
description:
|
|
201
|
-
required: [
|
|
202
|
-
"holderId",
|
|
203
|
-
"holderType",
|
|
204
|
-
"holderName",
|
|
205
|
-
"issuanceDate",
|
|
206
|
-
"form",
|
|
207
|
-
"consideration",
|
|
208
|
-
],
|
|
194
|
+
description: 'Issue shares to a holder',
|
|
195
|
+
required: ['holderId', 'holderType', 'holderName', 'issuanceDate', 'form', 'consideration'],
|
|
209
196
|
properties: {
|
|
210
|
-
holderId: { type:
|
|
211
|
-
holderType: { type:
|
|
212
|
-
holderName: { type:
|
|
197
|
+
holderId: { type: 'string' },
|
|
198
|
+
holderType: { type: 'string' },
|
|
199
|
+
holderName: { type: 'string' },
|
|
213
200
|
holderWallet: {
|
|
214
|
-
type:
|
|
215
|
-
description:
|
|
201
|
+
type: 'address',
|
|
202
|
+
description: 'DAG wallet address the holder controls; pinned so holder-initiated transfer/repurchase can be authorized via proofs[].address.',
|
|
216
203
|
},
|
|
217
|
-
address: { type:
|
|
218
|
-
issuanceDate: { type:
|
|
219
|
-
issuancePrice: { type:
|
|
204
|
+
address: { type: 'object' },
|
|
205
|
+
issuanceDate: { type: 'string', format: 'date' },
|
|
206
|
+
issuancePrice: { type: 'number' },
|
|
220
207
|
form: {
|
|
221
|
-
type:
|
|
222
|
-
enum: [
|
|
208
|
+
type: 'string',
|
|
209
|
+
enum: ['CERTIFICATED', 'BOOK_ENTRY', 'DRS'],
|
|
223
210
|
},
|
|
224
|
-
certificateNumber: { type:
|
|
225
|
-
consideration: { type:
|
|
226
|
-
isRestricted: { type:
|
|
227
|
-
restrictionType: { type:
|
|
228
|
-
legends: { type:
|
|
229
|
-
exemptionUsed: { type:
|
|
230
|
-
accreditedInvestor: { type:
|
|
211
|
+
certificateNumber: { type: 'string' },
|
|
212
|
+
consideration: { type: 'object' },
|
|
213
|
+
isRestricted: { type: 'boolean', default: false },
|
|
214
|
+
restrictionType: { type: 'array' },
|
|
215
|
+
legends: { type: 'array' },
|
|
216
|
+
exemptionUsed: { type: 'string' },
|
|
217
|
+
accreditedInvestor: { type: 'boolean' },
|
|
231
218
|
},
|
|
232
219
|
},
|
|
233
220
|
initiate_transfer: {
|
|
234
|
-
description:
|
|
235
|
-
required: [
|
|
236
|
-
"transferId",
|
|
237
|
-
"toHolderId",
|
|
238
|
-
"toHolderName",
|
|
239
|
-
"toHolderType",
|
|
240
|
-
"transferType",
|
|
241
|
-
"transferDate",
|
|
242
|
-
],
|
|
221
|
+
description: 'Begin transfer of shares to new holder',
|
|
222
|
+
required: ['transferId', 'toHolderId', 'toHolderName', 'toHolderType', 'transferType', 'transferDate'],
|
|
243
223
|
properties: {
|
|
244
|
-
transferId: { type:
|
|
245
|
-
toHolderId: { type:
|
|
246
|
-
toHolderName: { type:
|
|
247
|
-
toHolderType: { type:
|
|
248
|
-
toAddress: { type:
|
|
249
|
-
transferType: { type:
|
|
250
|
-
pricePerShare: { type:
|
|
251
|
-
transferDate: { type:
|
|
224
|
+
transferId: { type: 'string' },
|
|
225
|
+
toHolderId: { type: 'string' },
|
|
226
|
+
toHolderName: { type: 'string' },
|
|
227
|
+
toHolderType: { type: 'string' },
|
|
228
|
+
toAddress: { type: 'object' },
|
|
229
|
+
transferType: { type: 'string' },
|
|
230
|
+
pricePerShare: { type: 'number' },
|
|
231
|
+
transferDate: { type: 'string', format: 'date' },
|
|
252
232
|
},
|
|
253
233
|
},
|
|
254
234
|
complete_transfer: {
|
|
255
|
-
description:
|
|
256
|
-
required: [
|
|
257
|
-
"toHolderId",
|
|
258
|
-
"toHolderName",
|
|
259
|
-
"toHolderType",
|
|
260
|
-
"completedDate",
|
|
261
|
-
],
|
|
235
|
+
description: 'Complete the transfer, update holder',
|
|
236
|
+
required: ['toHolderId', 'toHolderName', 'toHolderType', 'completedDate'],
|
|
262
237
|
properties: {
|
|
263
|
-
transferAgentConfirmation: { type:
|
|
264
|
-
newCertificateNumber: { type:
|
|
265
|
-
toHolderId: { type:
|
|
266
|
-
toHolderName: { type:
|
|
267
|
-
toHolderType: { type:
|
|
238
|
+
transferAgentConfirmation: { type: 'string' },
|
|
239
|
+
newCertificateNumber: { type: 'string' },
|
|
240
|
+
toHolderId: { type: 'string' },
|
|
241
|
+
toHolderName: { type: 'string' },
|
|
242
|
+
toHolderType: { type: 'string' },
|
|
268
243
|
toHolderWallet: {
|
|
269
|
-
type:
|
|
270
|
-
description:
|
|
244
|
+
type: 'address',
|
|
245
|
+
description: 'DAG wallet address the new holder controls.',
|
|
271
246
|
},
|
|
272
|
-
toAddress: { type:
|
|
273
|
-
completedDate: { type:
|
|
274
|
-
costBasis: { type:
|
|
247
|
+
toAddress: { type: 'object' },
|
|
248
|
+
completedDate: { type: 'string', format: 'date' },
|
|
249
|
+
costBasis: { type: 'number' },
|
|
275
250
|
},
|
|
276
251
|
},
|
|
277
252
|
propose_repurchase: {
|
|
278
|
-
description:
|
|
279
|
-
required: [
|
|
253
|
+
description: 'Phase 1 of repurchase (#24): bind the executing board resolution fiber (_addDependency) and record the pending repurchase',
|
|
254
|
+
required: ['repurchaseDate', 'boardResolutionRef'],
|
|
280
255
|
properties: {
|
|
281
|
-
repurchaseDate: { type:
|
|
282
|
-
boardResolutionRef: { type:
|
|
256
|
+
repurchaseDate: { type: 'string', format: 'date' },
|
|
257
|
+
boardResolutionRef: { type: 'string' },
|
|
283
258
|
},
|
|
284
259
|
},
|
|
285
260
|
repurchase: {
|
|
286
|
-
description:
|
|
287
|
-
required: [
|
|
261
|
+
description: 'Company repurchases shares from holder',
|
|
262
|
+
required: ['repurchaseDate', 'pricePerShare'],
|
|
288
263
|
properties: {
|
|
289
|
-
repurchaseDate: { type:
|
|
290
|
-
pricePerShare: { type:
|
|
291
|
-
repurchaseAgreementRef: { type:
|
|
264
|
+
repurchaseDate: { type: 'string', format: 'date' },
|
|
265
|
+
pricePerShare: { type: 'number' },
|
|
266
|
+
repurchaseAgreementRef: { type: 'string' },
|
|
292
267
|
},
|
|
293
268
|
},
|
|
294
269
|
propose_reissue: {
|
|
295
|
-
description:
|
|
296
|
-
required: [
|
|
270
|
+
description: 'Phase 1 of treasury reissue (#24): bind the executing board resolution fiber (_addDependency) and record the pending reissue',
|
|
271
|
+
required: ['holderId', 'boardResolutionRef'],
|
|
297
272
|
properties: {
|
|
298
|
-
holderId: { type:
|
|
299
|
-
boardResolutionRef: { type:
|
|
273
|
+
holderId: { type: 'string' },
|
|
274
|
+
boardResolutionRef: { type: 'string' },
|
|
300
275
|
},
|
|
301
276
|
},
|
|
302
277
|
reissue_from_treasury: {
|
|
303
|
-
description:
|
|
304
|
-
required: [
|
|
305
|
-
"holderId",
|
|
306
|
-
"holderName",
|
|
307
|
-
"holderType",
|
|
308
|
-
"reissueDate",
|
|
309
|
-
],
|
|
278
|
+
description: 'Reissue treasury shares to a new holder',
|
|
279
|
+
required: ['holderId', 'holderName', 'holderType', 'reissueDate'],
|
|
310
280
|
properties: {
|
|
311
|
-
holderId: { type:
|
|
312
|
-
holderName: { type:
|
|
313
|
-
holderType: { type:
|
|
281
|
+
holderId: { type: 'string' },
|
|
282
|
+
holderName: { type: 'string' },
|
|
283
|
+
holderType: { type: 'string' },
|
|
314
284
|
holderWallet: {
|
|
315
|
-
type:
|
|
316
|
-
description:
|
|
285
|
+
type: 'address',
|
|
286
|
+
description: 'DAG wallet address the reissued holder controls.',
|
|
317
287
|
},
|
|
318
|
-
address: { type:
|
|
319
|
-
reissueDate: { type:
|
|
320
|
-
issuancePrice: { type:
|
|
288
|
+
address: { type: 'object' },
|
|
289
|
+
reissueDate: { type: 'string', format: 'date' },
|
|
290
|
+
issuancePrice: { type: 'number' },
|
|
321
291
|
},
|
|
322
292
|
},
|
|
323
293
|
propose_retire: {
|
|
324
|
-
description:
|
|
325
|
-
required: [
|
|
294
|
+
description: 'Phase 1 of retirement (#24): bind the executing board resolution fiber (_addDependency) and record the pending retirement (from ISSUED or TREASURY)',
|
|
295
|
+
required: ['retiredDate', 'boardResolutionRef'],
|
|
326
296
|
properties: {
|
|
327
|
-
retiredDate: { type:
|
|
328
|
-
boardResolutionRef: { type:
|
|
297
|
+
retiredDate: { type: 'string', format: 'date' },
|
|
298
|
+
boardResolutionRef: { type: 'string' },
|
|
329
299
|
},
|
|
330
300
|
},
|
|
331
301
|
retire: {
|
|
332
|
-
description:
|
|
333
|
-
required: [
|
|
302
|
+
description: 'Retire shares (cancel them)',
|
|
303
|
+
required: ['retiredDate', 'retirementMethod'],
|
|
334
304
|
properties: {
|
|
335
|
-
retiredDate: { type:
|
|
336
|
-
retirementMethod: { type:
|
|
337
|
-
repurchasePrice: { type:
|
|
305
|
+
retiredDate: { type: 'string', format: 'date' },
|
|
306
|
+
retirementMethod: { type: 'string' },
|
|
307
|
+
repurchasePrice: { type: 'number' },
|
|
338
308
|
},
|
|
339
309
|
},
|
|
340
310
|
stock_split: {
|
|
341
|
-
description:
|
|
342
|
-
required: [
|
|
343
|
-
"actionId",
|
|
344
|
-
"splitRatio",
|
|
345
|
-
"effectiveDate",
|
|
346
|
-
"resolutionRef",
|
|
347
|
-
"newShareCount",
|
|
348
|
-
],
|
|
311
|
+
description: 'Apply stock split to this lot',
|
|
312
|
+
required: ['actionId', 'splitRatio', 'effectiveDate', 'resolutionRef', 'newShareCount'],
|
|
349
313
|
properties: {
|
|
350
|
-
actionId: { type:
|
|
314
|
+
actionId: { type: 'string' },
|
|
351
315
|
splitRatio: {
|
|
352
|
-
type:
|
|
316
|
+
type: 'string',
|
|
353
317
|
description: "e.g., '2:1' for 2-for-1 split",
|
|
354
318
|
},
|
|
355
|
-
effectiveDate: { type:
|
|
356
|
-
resolutionRef: { type:
|
|
357
|
-
newShareCount: { type:
|
|
319
|
+
effectiveDate: { type: 'string', format: 'date' },
|
|
320
|
+
resolutionRef: { type: 'string' },
|
|
321
|
+
newShareCount: { type: 'integer' },
|
|
358
322
|
},
|
|
359
323
|
},
|
|
360
324
|
propose_dividend: {
|
|
361
|
-
description:
|
|
362
|
-
required: [
|
|
325
|
+
description: 'Phase 1 of dividend declaration (#24): bind the executing board resolution fiber (_addDependency) and record the pending declaration',
|
|
326
|
+
required: ['actionId', 'resolutionRef'],
|
|
363
327
|
properties: {
|
|
364
|
-
actionId: { type:
|
|
365
|
-
resolutionRef: { type:
|
|
328
|
+
actionId: { type: 'string' },
|
|
329
|
+
resolutionRef: { type: 'string' },
|
|
366
330
|
},
|
|
367
331
|
},
|
|
368
332
|
declare_dividend: {
|
|
369
|
-
description:
|
|
370
|
-
required: [
|
|
371
|
-
"actionId",
|
|
372
|
-
"dividendType",
|
|
373
|
-
"recordDate",
|
|
374
|
-
"paymentDate",
|
|
375
|
-
],
|
|
333
|
+
description: 'Record dividend declaration affecting this lot (for stock dividends)',
|
|
334
|
+
required: ['actionId', 'dividendType', 'recordDate', 'paymentDate'],
|
|
376
335
|
properties: {
|
|
377
|
-
actionId: { type:
|
|
378
|
-
dividendType: { type:
|
|
379
|
-
recordDate: { type:
|
|
380
|
-
paymentDate: { type:
|
|
381
|
-
cashAmount: { type:
|
|
382
|
-
stockShares: { type:
|
|
336
|
+
actionId: { type: 'string' },
|
|
337
|
+
dividendType: { type: 'string', enum: ['CASH', 'STOCK'] },
|
|
338
|
+
recordDate: { type: 'string', format: 'date' },
|
|
339
|
+
paymentDate: { type: 'string', format: 'date' },
|
|
340
|
+
cashAmount: { type: 'number' },
|
|
341
|
+
stockShares: { type: 'integer' },
|
|
383
342
|
},
|
|
384
343
|
},
|
|
385
344
|
remove_restriction: {
|
|
386
|
-
description:
|
|
387
|
-
required: [
|
|
345
|
+
description: 'Remove or update restrictions on the shares',
|
|
346
|
+
required: ['restrictionType', 'removedDate'],
|
|
388
347
|
properties: {
|
|
389
|
-
restrictionType: { type:
|
|
390
|
-
removedDate: { type:
|
|
391
|
-
reason: { type:
|
|
392
|
-
legalOpinionRef: { type:
|
|
348
|
+
restrictionType: { type: 'string' },
|
|
349
|
+
removedDate: { type: 'string', format: 'date' },
|
|
350
|
+
reason: { type: 'string' },
|
|
351
|
+
legalOpinionRef: { type: 'string' },
|
|
393
352
|
},
|
|
394
353
|
},
|
|
395
354
|
},
|
|
396
355
|
definitions: {
|
|
397
356
|
Holder: {
|
|
398
|
-
type:
|
|
357
|
+
type: 'object',
|
|
399
358
|
nullable: true,
|
|
400
359
|
properties: {
|
|
401
|
-
holderId: { type:
|
|
360
|
+
holderId: { type: 'string' },
|
|
402
361
|
holderType: {
|
|
403
|
-
type:
|
|
404
|
-
enum: [
|
|
362
|
+
type: 'string',
|
|
363
|
+
enum: ['INDIVIDUAL', 'ENTITY', 'TRUST', 'TREASURY'],
|
|
405
364
|
},
|
|
406
|
-
name: { type:
|
|
407
|
-
taxId: { type:
|
|
365
|
+
name: { type: 'string' },
|
|
366
|
+
taxId: { type: 'string', nullable: true },
|
|
408
367
|
walletAddress: {
|
|
409
|
-
type:
|
|
368
|
+
type: 'address',
|
|
410
369
|
nullable: true,
|
|
411
|
-
description:
|
|
370
|
+
description: 'State-pinned DAG wallet address controlled by this holder; verified against proofs[].address to gate holder-initiated transfer/repurchase.',
|
|
412
371
|
},
|
|
413
|
-
address: { type:
|
|
414
|
-
acquisitionDate: { type:
|
|
372
|
+
address: { type: 'object', nullable: true },
|
|
373
|
+
acquisitionDate: { type: 'string', format: 'date' },
|
|
415
374
|
acquisitionMethod: {
|
|
416
|
-
type:
|
|
375
|
+
type: 'string',
|
|
417
376
|
enum: [
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
377
|
+
'ORIGINAL_ISSUANCE',
|
|
378
|
+
'PURCHASE',
|
|
379
|
+
'GIFT',
|
|
380
|
+
'INHERITANCE',
|
|
381
|
+
'STOCK_SPLIT',
|
|
382
|
+
'CONVERSION',
|
|
383
|
+
'EXERCISE',
|
|
425
384
|
],
|
|
426
385
|
},
|
|
427
|
-
costBasis: { type:
|
|
386
|
+
costBasis: { type: 'number', nullable: true },
|
|
428
387
|
},
|
|
429
388
|
},
|
|
430
389
|
Restrictions: {
|
|
431
|
-
type:
|
|
390
|
+
type: 'object',
|
|
432
391
|
properties: {
|
|
433
|
-
isRestricted: { type:
|
|
392
|
+
isRestricted: { type: 'boolean', default: false },
|
|
434
393
|
restrictionType: {
|
|
435
|
-
type:
|
|
394
|
+
type: 'array',
|
|
436
395
|
items: {
|
|
437
|
-
type:
|
|
396
|
+
type: 'string',
|
|
438
397
|
enum: [
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
398
|
+
'RULE_144',
|
|
399
|
+
'SECTION_4(a)(2)',
|
|
400
|
+
'REG_D',
|
|
401
|
+
'REG_S',
|
|
402
|
+
'LOCK_UP',
|
|
403
|
+
'VESTING',
|
|
404
|
+
'RIGHT_OF_FIRST_REFUSAL',
|
|
446
405
|
],
|
|
447
406
|
},
|
|
448
407
|
},
|
|
449
|
-
restrictionEndDate: { type:
|
|
408
|
+
restrictionEndDate: { type: 'string', format: 'date', nullable: true },
|
|
450
409
|
legends: {
|
|
451
|
-
type:
|
|
452
|
-
items: { type:
|
|
453
|
-
description:
|
|
410
|
+
type: 'array',
|
|
411
|
+
items: { type: 'string' },
|
|
412
|
+
description: 'Legend text on certificates',
|
|
454
413
|
},
|
|
455
414
|
vestingSchedule: {
|
|
456
|
-
type:
|
|
415
|
+
type: 'object',
|
|
457
416
|
nullable: true,
|
|
458
417
|
properties: {
|
|
459
|
-
vestingStartDate: { type:
|
|
460
|
-
totalShares: { type:
|
|
461
|
-
vestedShares: { type:
|
|
462
|
-
vestingScheduleRef: { type:
|
|
418
|
+
vestingStartDate: { type: 'string', format: 'date' },
|
|
419
|
+
totalShares: { type: 'integer' },
|
|
420
|
+
vestedShares: { type: 'integer' },
|
|
421
|
+
vestingScheduleRef: { type: 'string' },
|
|
463
422
|
},
|
|
464
423
|
},
|
|
465
|
-
lockUpExpiration: { type:
|
|
424
|
+
lockUpExpiration: { type: 'string', format: 'date', nullable: true },
|
|
466
425
|
rofr: {
|
|
467
|
-
type:
|
|
426
|
+
type: 'object',
|
|
468
427
|
nullable: true,
|
|
469
|
-
description:
|
|
428
|
+
description: 'Right of First Refusal',
|
|
470
429
|
properties: {
|
|
471
|
-
holderIds: { type:
|
|
472
|
-
noticePeriodDays: { type:
|
|
430
|
+
holderIds: { type: 'array', items: { type: 'string' } },
|
|
431
|
+
noticePeriodDays: { type: 'integer' },
|
|
473
432
|
},
|
|
474
433
|
},
|
|
475
434
|
},
|
|
476
435
|
},
|
|
477
436
|
Authorization: {
|
|
478
|
-
type:
|
|
437
|
+
type: 'object',
|
|
479
438
|
nullable: true,
|
|
480
|
-
description:
|
|
439
|
+
description: 'For shares in AUTHORIZED state',
|
|
481
440
|
properties: {
|
|
482
|
-
authorizedDate: { type:
|
|
483
|
-
charterProvision: { type:
|
|
484
|
-
authorizedShares: { type:
|
|
441
|
+
authorizedDate: { type: 'string', format: 'date' },
|
|
442
|
+
charterProvision: { type: 'string' },
|
|
443
|
+
authorizedShares: { type: 'integer' },
|
|
485
444
|
},
|
|
486
445
|
},
|
|
487
446
|
IssuanceDetails: {
|
|
488
|
-
type:
|
|
447
|
+
type: 'object',
|
|
489
448
|
nullable: true,
|
|
490
449
|
properties: {
|
|
491
|
-
boardResolutionRef: { type:
|
|
492
|
-
issuanceAgreementRef: { type:
|
|
450
|
+
boardResolutionRef: { type: 'string' },
|
|
451
|
+
issuanceAgreementRef: { type: 'string' },
|
|
493
452
|
consideration: {
|
|
494
|
-
type:
|
|
453
|
+
type: 'object',
|
|
495
454
|
properties: {
|
|
496
455
|
type: {
|
|
497
|
-
type:
|
|
498
|
-
enum: [
|
|
499
|
-
"CASH",
|
|
500
|
-
"PROPERTY",
|
|
501
|
-
"SERVICES",
|
|
502
|
-
"DEBT_CONVERSION",
|
|
503
|
-
"STOCK_CONVERSION",
|
|
504
|
-
],
|
|
456
|
+
type: 'string',
|
|
457
|
+
enum: ['CASH', 'PROPERTY', 'SERVICES', 'DEBT_CONVERSION', 'STOCK_CONVERSION'],
|
|
505
458
|
},
|
|
506
|
-
value: { type:
|
|
507
|
-
description: { type:
|
|
459
|
+
value: { type: 'number' },
|
|
460
|
+
description: { type: 'string' },
|
|
508
461
|
},
|
|
509
462
|
},
|
|
510
|
-
exemptionUsed: { type:
|
|
511
|
-
accreditedInvestor: { type:
|
|
463
|
+
exemptionUsed: { type: 'string', nullable: true },
|
|
464
|
+
accreditedInvestor: { type: 'boolean', nullable: true },
|
|
512
465
|
},
|
|
513
466
|
},
|
|
514
467
|
TransferRecord: {
|
|
515
|
-
type:
|
|
468
|
+
type: 'object',
|
|
516
469
|
properties: {
|
|
517
|
-
transferId: { type:
|
|
518
|
-
transferDate: { type:
|
|
519
|
-
fromHolderId: { type:
|
|
520
|
-
toHolderId: { type:
|
|
521
|
-
shares: { type:
|
|
470
|
+
transferId: { type: 'string' },
|
|
471
|
+
transferDate: { type: 'string', format: 'date' },
|
|
472
|
+
fromHolderId: { type: 'string' },
|
|
473
|
+
toHolderId: { type: 'string' },
|
|
474
|
+
shares: { type: 'integer' },
|
|
522
475
|
transferType: {
|
|
523
|
-
type:
|
|
524
|
-
enum: [
|
|
476
|
+
type: 'string',
|
|
477
|
+
enum: ['SALE', 'GIFT', 'INHERITANCE', 'INTERNAL'],
|
|
525
478
|
},
|
|
526
|
-
pricePerShare: { type:
|
|
527
|
-
transferAgentConfirmation: { type:
|
|
479
|
+
pricePerShare: { type: 'number', nullable: true },
|
|
480
|
+
transferAgentConfirmation: { type: 'string', nullable: true },
|
|
528
481
|
},
|
|
529
482
|
},
|
|
530
483
|
CorporateAction: {
|
|
531
|
-
type:
|
|
532
|
-
description:
|
|
484
|
+
type: 'object',
|
|
485
|
+
description: 'Stock splits, dividends, etc. affecting this lot',
|
|
533
486
|
properties: {
|
|
534
|
-
actionId: { type:
|
|
487
|
+
actionId: { type: 'string' },
|
|
535
488
|
actionType: {
|
|
536
|
-
type:
|
|
537
|
-
enum: [
|
|
538
|
-
"STOCK_SPLIT",
|
|
539
|
-
"REVERSE_SPLIT",
|
|
540
|
-
"STOCK_DIVIDEND",
|
|
541
|
-
"CONVERSION",
|
|
542
|
-
"RECLASSIFICATION",
|
|
543
|
-
],
|
|
489
|
+
type: 'string',
|
|
490
|
+
enum: ['STOCK_SPLIT', 'REVERSE_SPLIT', 'STOCK_DIVIDEND', 'CONVERSION', 'RECLASSIFICATION'],
|
|
544
491
|
},
|
|
545
|
-
actionDate: { type:
|
|
492
|
+
actionDate: { type: 'string', format: 'date' },
|
|
546
493
|
ratio: {
|
|
547
|
-
type:
|
|
494
|
+
type: 'string',
|
|
548
495
|
nullable: true,
|
|
549
|
-
description:
|
|
496
|
+
description: 'e.g., 2:1 for split',
|
|
550
497
|
},
|
|
551
|
-
sharesBeforeAction: { type:
|
|
552
|
-
sharesAfterAction: { type:
|
|
553
|
-
resolutionRef: { type:
|
|
498
|
+
sharesBeforeAction: { type: 'integer' },
|
|
499
|
+
sharesAfterAction: { type: 'integer' },
|
|
500
|
+
resolutionRef: { type: 'string' },
|
|
554
501
|
},
|
|
555
502
|
},
|
|
556
503
|
RetirementDetails: {
|
|
557
|
-
type:
|
|
504
|
+
type: 'object',
|
|
558
505
|
nullable: true,
|
|
559
506
|
properties: {
|
|
560
|
-
retiredDate: { type:
|
|
507
|
+
retiredDate: { type: 'string', format: 'date' },
|
|
561
508
|
retirementMethod: {
|
|
562
|
-
type:
|
|
563
|
-
enum: [
|
|
564
|
-
"REPURCHASE",
|
|
565
|
-
"REDEMPTION",
|
|
566
|
-
"CANCELLATION",
|
|
567
|
-
"CONVERSION",
|
|
568
|
-
],
|
|
509
|
+
type: 'string',
|
|
510
|
+
enum: ['REPURCHASE', 'REDEMPTION', 'CANCELLATION', 'CONVERSION'],
|
|
569
511
|
},
|
|
570
|
-
repurchasePrice: { type:
|
|
571
|
-
boardResolutionRef: { type:
|
|
512
|
+
repurchasePrice: { type: 'number', nullable: true },
|
|
513
|
+
boardResolutionRef: { type: 'string' },
|
|
572
514
|
},
|
|
573
515
|
},
|
|
574
516
|
},
|
|
575
517
|
states: {
|
|
576
518
|
AUTHORIZED: {
|
|
577
|
-
id:
|
|
519
|
+
id: 'AUTHORIZED',
|
|
578
520
|
isFinal: false,
|
|
579
|
-
description:
|
|
521
|
+
description: 'Shares authorized by charter but not yet issued',
|
|
580
522
|
},
|
|
581
523
|
ISSUED: {
|
|
582
|
-
id:
|
|
524
|
+
id: 'ISSUED',
|
|
583
525
|
isFinal: false,
|
|
584
|
-
description:
|
|
526
|
+
description: 'Shares issued and held by a shareholder',
|
|
585
527
|
},
|
|
586
528
|
TREASURY: {
|
|
587
|
-
id:
|
|
529
|
+
id: 'TREASURY',
|
|
588
530
|
isFinal: false,
|
|
589
|
-
description:
|
|
531
|
+
description: 'Shares repurchased and held by the company',
|
|
590
532
|
},
|
|
591
533
|
TRANSFERRED: {
|
|
592
|
-
id:
|
|
534
|
+
id: 'TRANSFERRED',
|
|
593
535
|
isFinal: false,
|
|
594
|
-
description:
|
|
536
|
+
description: 'Transitional state during transfer between holders',
|
|
595
537
|
},
|
|
596
538
|
RETIRED: {
|
|
597
|
-
id:
|
|
539
|
+
id: 'RETIRED',
|
|
598
540
|
isFinal: true,
|
|
599
|
-
description:
|
|
541
|
+
description: 'Shares cancelled and returned to authorized but unissued',
|
|
600
542
|
},
|
|
601
543
|
},
|
|
602
|
-
initialState:
|
|
544
|
+
initialState: 'AUTHORIZED',
|
|
603
545
|
transitions: [
|
|
604
546
|
// Initial authorization (creation)
|
|
605
547
|
{
|
|
606
|
-
from:
|
|
607
|
-
to:
|
|
608
|
-
eventName:
|
|
548
|
+
from: 'AUTHORIZED',
|
|
549
|
+
to: 'AUTHORIZED',
|
|
550
|
+
eventName: 'authorize_shares',
|
|
609
551
|
// 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)
|
|
610
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
552
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
611
553
|
effect: {
|
|
612
554
|
merge: [
|
|
613
|
-
{ var:
|
|
555
|
+
{ var: 'state' },
|
|
614
556
|
{
|
|
615
|
-
securityId: { var:
|
|
616
|
-
entityId: { var:
|
|
617
|
-
shareClass: { var:
|
|
618
|
-
shareClassName: { var:
|
|
619
|
-
shareCount: { var:
|
|
620
|
-
parValue: { var:
|
|
557
|
+
securityId: { var: 'event.securityId' },
|
|
558
|
+
entityId: { var: 'event.entityId' },
|
|
559
|
+
shareClass: { var: 'event.shareClass' },
|
|
560
|
+
shareClassName: { var: 'event.shareClassName' },
|
|
561
|
+
shareCount: { var: 'event.shareCount' },
|
|
562
|
+
parValue: { var: 'event.parValue' },
|
|
621
563
|
authorization: {
|
|
622
|
-
authorizedDate: { var:
|
|
623
|
-
charterProvision: { var:
|
|
624
|
-
authorizedShares: { var:
|
|
564
|
+
authorizedDate: { var: 'event.authorizedDate' },
|
|
565
|
+
charterProvision: { var: 'event.charterProvision' },
|
|
566
|
+
authorizedShares: { var: 'event.shareCount' },
|
|
625
567
|
},
|
|
626
568
|
transferHistory: [],
|
|
627
569
|
corporateActions: [],
|
|
@@ -632,25 +574,25 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
632
574
|
// AUTHORIZED -> AUTHORIZED (propose_issue) — phase 1 (#24): bind the executing resolution + parent
|
|
633
575
|
// entity fibers and record the pending issuance, so issue_shares can read their state next transition.
|
|
634
576
|
{
|
|
635
|
-
from:
|
|
636
|
-
to:
|
|
637
|
-
eventName:
|
|
577
|
+
from: 'AUTHORIZED',
|
|
578
|
+
to: 'AUTHORIZED',
|
|
579
|
+
eventName: 'propose_issue',
|
|
638
580
|
// 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)
|
|
639
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
581
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
640
582
|
effect: {
|
|
641
583
|
merge: [
|
|
642
|
-
{ var:
|
|
584
|
+
{ var: 'state' },
|
|
643
585
|
{
|
|
644
586
|
pendingIssue: {
|
|
645
|
-
holderId: { var:
|
|
646
|
-
ref: { var:
|
|
647
|
-
proposedAt: { var:
|
|
587
|
+
holderId: { var: 'event.holderId' },
|
|
588
|
+
ref: { var: 'event.boardResolutionRef' },
|
|
589
|
+
proposedAt: { var: '$ordinal' },
|
|
648
590
|
},
|
|
649
591
|
},
|
|
650
592
|
// bind the resolution fiber so issue_shares can assert its state next transition
|
|
651
|
-
(0, effects_js_1.addDependency)({ var:
|
|
593
|
+
(0, effects_js_1.addDependency)({ var: 'event.boardResolutionRef' }),
|
|
652
594
|
// bind the parent entity fiber so issue_shares can assert it is ACTIVE
|
|
653
|
-
(0, effects_js_1.addDependency)({ var:
|
|
595
|
+
(0, effects_js_1.addDependency)({ var: 'state.entityId' }),
|
|
654
596
|
],
|
|
655
597
|
},
|
|
656
598
|
dependencies: [],
|
|
@@ -658,66 +600,58 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
658
600
|
// AUTHORIZED -> ISSUED — phase 2 (#24): issue once the bound resolution is EXECUTED and the parent
|
|
659
601
|
// entity is ACTIVE. depInState replaces the dropped object-form dependencies (which never gated).
|
|
660
602
|
{
|
|
661
|
-
from:
|
|
662
|
-
to:
|
|
663
|
-
eventName:
|
|
603
|
+
from: 'AUTHORIZED',
|
|
604
|
+
to: 'ISSUED',
|
|
605
|
+
eventName: 'issue_shares',
|
|
664
606
|
// 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)
|
|
665
607
|
guard: {
|
|
666
608
|
and: [
|
|
667
|
-
(0, guards_js_1.signerIsParty)(
|
|
609
|
+
(0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
668
610
|
// the proposal must target this holder, and its bound resolution must be EXECUTED
|
|
669
611
|
{
|
|
670
|
-
|
|
671
|
-
{ var: "state.pendingIssue.holderId" },
|
|
672
|
-
{ var: "event.holderId" },
|
|
673
|
-
],
|
|
612
|
+
'==': [{ var: 'state.pendingIssue.holderId' }, { var: 'event.holderId' }],
|
|
674
613
|
},
|
|
675
|
-
(0, guards_js_1.depInState)(
|
|
676
|
-
(0, guards_js_1.depInState)(
|
|
614
|
+
(0, guards_js_1.depInState)('state.pendingIssue.ref', 'EXECUTED'),
|
|
615
|
+
(0, guards_js_1.depInState)('state.entityId', 'ACTIVE'),
|
|
677
616
|
],
|
|
678
617
|
},
|
|
679
618
|
effect: {
|
|
680
619
|
merge: [
|
|
681
|
-
{ var:
|
|
620
|
+
{ var: 'state' },
|
|
682
621
|
{
|
|
683
|
-
status:
|
|
684
|
-
form: { var:
|
|
685
|
-
certificateNumber: { var:
|
|
686
|
-
issuanceDate: { var:
|
|
687
|
-
issuancePrice: { var:
|
|
622
|
+
status: 'ISSUED',
|
|
623
|
+
form: { var: 'event.form' },
|
|
624
|
+
certificateNumber: { var: 'event.certificateNumber' },
|
|
625
|
+
issuanceDate: { var: 'event.issuanceDate' },
|
|
626
|
+
issuancePrice: { var: 'event.issuancePrice' },
|
|
688
627
|
holder: {
|
|
689
|
-
holderId: { var:
|
|
690
|
-
holderType: { var:
|
|
691
|
-
name: { var:
|
|
692
|
-
walletAddress: { var:
|
|
693
|
-
address: { var:
|
|
694
|
-
acquisitionDate: { var:
|
|
695
|
-
acquisitionMethod:
|
|
628
|
+
holderId: { var: 'event.holderId' },
|
|
629
|
+
holderType: { var: 'event.holderType' },
|
|
630
|
+
name: { var: 'event.holderName' },
|
|
631
|
+
walletAddress: { var: 'event.holderWallet' },
|
|
632
|
+
address: { var: 'event.address' },
|
|
633
|
+
acquisitionDate: { var: 'event.issuanceDate' },
|
|
634
|
+
acquisitionMethod: 'ORIGINAL_ISSUANCE',
|
|
696
635
|
costBasis: {
|
|
697
|
-
|
|
698
|
-
{ var: "event.issuancePrice" },
|
|
699
|
-
{ var: "state.shareCount" },
|
|
700
|
-
],
|
|
636
|
+
'*': [{ var: 'event.issuancePrice' }, { var: 'state.shareCount' }],
|
|
701
637
|
},
|
|
702
638
|
},
|
|
703
639
|
restrictions: {
|
|
704
|
-
isRestricted: { var:
|
|
705
|
-
restrictionType: { var:
|
|
706
|
-
legends: { var:
|
|
640
|
+
isRestricted: { var: 'event.isRestricted' },
|
|
641
|
+
restrictionType: { var: 'event.restrictionType' },
|
|
642
|
+
legends: { var: 'event.legends' },
|
|
707
643
|
},
|
|
708
644
|
issuanceDetails: {
|
|
709
|
-
boardResolutionRef: { var:
|
|
710
|
-
consideration: { var:
|
|
711
|
-
exemptionUsed: { var:
|
|
712
|
-
accreditedInvestor: { var:
|
|
645
|
+
boardResolutionRef: { var: 'state.pendingIssue.ref' },
|
|
646
|
+
consideration: { var: 'event.consideration' },
|
|
647
|
+
exemptionUsed: { var: 'event.exemptionUsed' },
|
|
648
|
+
accreditedInvestor: { var: 'event.accreditedInvestor' },
|
|
713
649
|
},
|
|
714
650
|
// clear the consumed proposal
|
|
715
651
|
pendingIssue: null,
|
|
716
652
|
},
|
|
717
653
|
{
|
|
718
|
-
_emit: [
|
|
719
|
-
{ name: "SHARES_ISSUED", data: { var: "event" }, destination: "external" },
|
|
720
|
-
],
|
|
654
|
+
_emit: [{ name: 'SHARES_ISSUED', data: { var: 'event' }, destination: 'external' }],
|
|
721
655
|
},
|
|
722
656
|
],
|
|
723
657
|
},
|
|
@@ -725,94 +659,87 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
725
659
|
},
|
|
726
660
|
// ISSUED -> TRANSFERRED
|
|
727
661
|
{
|
|
728
|
-
from:
|
|
729
|
-
to:
|
|
730
|
-
eventName:
|
|
662
|
+
from: 'ISSUED',
|
|
663
|
+
to: 'TRANSFERRED',
|
|
664
|
+
eventName: 'initiate_transfer',
|
|
731
665
|
guard: {
|
|
732
666
|
and: [
|
|
733
667
|
// 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)
|
|
734
|
-
(0, guards_js_1.signerIsParty)(
|
|
668
|
+
(0, guards_js_1.signerIsParty)('state.holder.walletAddress'),
|
|
735
669
|
{
|
|
736
670
|
or: [
|
|
737
|
-
{
|
|
671
|
+
{ '==': [{ var: 'state.restrictions.isRestricted' }, false] },
|
|
738
672
|
{
|
|
739
|
-
|
|
673
|
+
'==': [{ var: 'state.restrictions.restrictionEndDate' }, null],
|
|
740
674
|
},
|
|
741
675
|
{
|
|
742
|
-
|
|
743
|
-
{ var: "$ordinal" },
|
|
744
|
-
{ var: "state.restrictions.restrictionEndDate" },
|
|
745
|
-
],
|
|
676
|
+
'>=': [{ var: '$ordinal' }, { var: 'state.restrictions.restrictionEndDate' }],
|
|
746
677
|
},
|
|
747
678
|
],
|
|
748
679
|
},
|
|
749
|
-
{
|
|
680
|
+
{ '==': [{ var: 'state.restrictions.rofr' }, null] },
|
|
750
681
|
],
|
|
751
682
|
},
|
|
752
683
|
effect: {
|
|
753
684
|
merge: [
|
|
754
|
-
{ var:
|
|
685
|
+
{ var: 'state' },
|
|
755
686
|
{
|
|
756
|
-
status:
|
|
687
|
+
status: 'TRANSFERRED',
|
|
757
688
|
transferHistory: {
|
|
758
689
|
merge: [
|
|
759
|
-
{ var:
|
|
690
|
+
{ var: 'state.transferHistory' },
|
|
760
691
|
[
|
|
761
692
|
{
|
|
762
|
-
transferId: { var:
|
|
763
|
-
transferDate: { var:
|
|
764
|
-
fromHolderId: { var:
|
|
765
|
-
toHolderId: { var:
|
|
766
|
-
shares: { var:
|
|
767
|
-
transferType: { var:
|
|
768
|
-
pricePerShare: { var:
|
|
693
|
+
transferId: { var: 'event.transferId' },
|
|
694
|
+
transferDate: { var: 'event.transferDate' },
|
|
695
|
+
fromHolderId: { var: 'state.holder.holderId' },
|
|
696
|
+
toHolderId: { var: 'event.toHolderId' },
|
|
697
|
+
shares: { var: 'state.shareCount' },
|
|
698
|
+
transferType: { var: 'event.transferType' },
|
|
699
|
+
pricePerShare: { var: 'event.pricePerShare' },
|
|
769
700
|
},
|
|
770
701
|
],
|
|
771
702
|
],
|
|
772
703
|
},
|
|
773
704
|
},
|
|
774
705
|
{
|
|
775
|
-
_emit: [
|
|
776
|
-
{ name: "TRANSFER_INITIATED", data: { var: "event" }, destination: "external" },
|
|
777
|
-
],
|
|
706
|
+
_emit: [{ name: 'TRANSFER_INITIATED', data: { var: 'event' }, destination: 'external' }],
|
|
778
707
|
},
|
|
779
708
|
],
|
|
780
709
|
},
|
|
781
710
|
},
|
|
782
711
|
// TRANSFERRED -> ISSUED
|
|
783
712
|
{
|
|
784
|
-
from:
|
|
785
|
-
to:
|
|
786
|
-
eventName:
|
|
713
|
+
from: 'TRANSFERRED',
|
|
714
|
+
to: 'ISSUED',
|
|
715
|
+
eventName: 'complete_transfer',
|
|
787
716
|
// 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)
|
|
788
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
717
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
789
718
|
effect: {
|
|
790
719
|
merge: [
|
|
791
|
-
{ var:
|
|
720
|
+
{ var: 'state' },
|
|
792
721
|
{
|
|
793
|
-
status:
|
|
722
|
+
status: 'ISSUED',
|
|
794
723
|
holder: {
|
|
795
|
-
holderId: { var:
|
|
796
|
-
holderType: { var:
|
|
797
|
-
name: { var:
|
|
798
|
-
walletAddress: { var:
|
|
799
|
-
address: { var:
|
|
800
|
-
acquisitionDate: { var:
|
|
801
|
-
acquisitionMethod:
|
|
802
|
-
costBasis: { var:
|
|
724
|
+
holderId: { var: 'event.toHolderId' },
|
|
725
|
+
holderType: { var: 'event.toHolderType' },
|
|
726
|
+
name: { var: 'event.toHolderName' },
|
|
727
|
+
walletAddress: { var: 'event.toHolderWallet' },
|
|
728
|
+
address: { var: 'event.toAddress' },
|
|
729
|
+
acquisitionDate: { var: 'event.completedDate' },
|
|
730
|
+
acquisitionMethod: 'PURCHASE',
|
|
731
|
+
costBasis: { var: 'event.costBasis' },
|
|
803
732
|
},
|
|
804
733
|
certificateNumber: {
|
|
805
734
|
if: [
|
|
806
|
-
{
|
|
807
|
-
{ var:
|
|
808
|
-
{ var:
|
|
735
|
+
{ '!=': [{ var: 'event.newCertificateNumber' }, null] },
|
|
736
|
+
{ var: 'event.newCertificateNumber' },
|
|
737
|
+
{ var: 'state.certificateNumber' },
|
|
809
738
|
],
|
|
810
739
|
},
|
|
811
740
|
},
|
|
812
741
|
{
|
|
813
|
-
_emit: [
|
|
814
|
-
{ name: "TRANSFER_COMPLETED", data: { var: "event" }, destination: "external" },
|
|
815
|
-
],
|
|
742
|
+
_emit: [{ name: 'TRANSFER_COMPLETED', data: { var: 'event' }, destination: 'external' }],
|
|
816
743
|
},
|
|
817
744
|
],
|
|
818
745
|
},
|
|
@@ -820,89 +747,81 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
820
747
|
// ISSUED -> ISSUED (propose_repurchase) — phase 1 (#24): bind the executing resolution fiber and
|
|
821
748
|
// record the pending repurchase, so repurchase can read the resolution's state next transition.
|
|
822
749
|
{
|
|
823
|
-
from:
|
|
824
|
-
to:
|
|
825
|
-
eventName:
|
|
750
|
+
from: 'ISSUED',
|
|
751
|
+
to: 'ISSUED',
|
|
752
|
+
eventName: 'propose_repurchase',
|
|
826
753
|
// authority gate — the selling holder must sign; an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
827
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
754
|
+
guard: (0, guards_js_1.signerIsParty)('state.holder.walletAddress'),
|
|
828
755
|
effect: {
|
|
829
756
|
merge: [
|
|
830
|
-
{ var:
|
|
757
|
+
{ var: 'state' },
|
|
831
758
|
{
|
|
832
759
|
pendingRepurchase: {
|
|
833
|
-
repurchaseDate: { var:
|
|
834
|
-
ref: { var:
|
|
835
|
-
proposedAt: { var:
|
|
760
|
+
repurchaseDate: { var: 'event.repurchaseDate' },
|
|
761
|
+
ref: { var: 'event.boardResolutionRef' },
|
|
762
|
+
proposedAt: { var: '$ordinal' },
|
|
836
763
|
},
|
|
837
764
|
},
|
|
838
765
|
// bind the resolution fiber so repurchase can assert its state next transition
|
|
839
|
-
(0, effects_js_1.addDependency)({ var:
|
|
766
|
+
(0, effects_js_1.addDependency)({ var: 'event.boardResolutionRef' }),
|
|
840
767
|
],
|
|
841
768
|
},
|
|
842
769
|
dependencies: [],
|
|
843
770
|
},
|
|
844
771
|
// ISSUED -> TREASURY — phase 2 (#24): repurchase once the bound resolution is EXECUTED.
|
|
845
772
|
{
|
|
846
|
-
from:
|
|
847
|
-
to:
|
|
848
|
-
eventName:
|
|
773
|
+
from: 'ISSUED',
|
|
774
|
+
to: 'TREASURY',
|
|
775
|
+
eventName: 'repurchase',
|
|
849
776
|
// authority gate — the selling holder must sign; an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
|
|
850
777
|
guard: {
|
|
851
778
|
and: [
|
|
852
|
-
(0, guards_js_1.signerIsParty)(
|
|
779
|
+
(0, guards_js_1.signerIsParty)('state.holder.walletAddress'),
|
|
853
780
|
// the proposal must match this repurchase, and its bound resolution must be EXECUTED
|
|
854
781
|
{
|
|
855
|
-
|
|
856
|
-
{ var: "state.pendingRepurchase.repurchaseDate" },
|
|
857
|
-
{ var: "event.repurchaseDate" },
|
|
858
|
-
],
|
|
782
|
+
'==': [{ var: 'state.pendingRepurchase.repurchaseDate' }, { var: 'event.repurchaseDate' }],
|
|
859
783
|
},
|
|
860
|
-
(0, guards_js_1.depInState)(
|
|
784
|
+
(0, guards_js_1.depInState)('state.pendingRepurchase.ref', 'EXECUTED'),
|
|
861
785
|
],
|
|
862
786
|
},
|
|
863
787
|
effect: {
|
|
864
788
|
merge: [
|
|
865
|
-
{ var:
|
|
789
|
+
{ var: 'state' },
|
|
866
790
|
{
|
|
867
|
-
status:
|
|
791
|
+
status: 'TREASURY',
|
|
868
792
|
transferHistory: {
|
|
869
793
|
merge: [
|
|
870
|
-
{ var:
|
|
794
|
+
{ var: 'state.transferHistory' },
|
|
871
795
|
[
|
|
872
796
|
{
|
|
873
797
|
transferId: {
|
|
874
|
-
cat: [
|
|
798
|
+
cat: ['REPURCHASE-', { var: 'event.repurchaseDate' }],
|
|
875
799
|
},
|
|
876
|
-
transferDate: { var:
|
|
877
|
-
fromHolderId: { var:
|
|
878
|
-
toHolderId:
|
|
879
|
-
shares: { var:
|
|
880
|
-
transferType:
|
|
881
|
-
pricePerShare: { var:
|
|
800
|
+
transferDate: { var: 'event.repurchaseDate' },
|
|
801
|
+
fromHolderId: { var: 'state.holder.holderId' },
|
|
802
|
+
toHolderId: 'TREASURY',
|
|
803
|
+
shares: { var: 'state.shareCount' },
|
|
804
|
+
transferType: 'INTERNAL',
|
|
805
|
+
pricePerShare: { var: 'event.pricePerShare' },
|
|
882
806
|
},
|
|
883
807
|
],
|
|
884
808
|
],
|
|
885
809
|
},
|
|
886
810
|
holder: {
|
|
887
|
-
holderId:
|
|
888
|
-
holderType:
|
|
889
|
-
name:
|
|
890
|
-
acquisitionDate: { var:
|
|
891
|
-
acquisitionMethod:
|
|
811
|
+
holderId: 'TREASURY',
|
|
812
|
+
holderType: 'TREASURY',
|
|
813
|
+
name: 'Treasury Stock',
|
|
814
|
+
acquisitionDate: { var: 'event.repurchaseDate' },
|
|
815
|
+
acquisitionMethod: 'PURCHASE',
|
|
892
816
|
costBasis: {
|
|
893
|
-
|
|
894
|
-
{ var: "event.pricePerShare" },
|
|
895
|
-
{ var: "state.shareCount" },
|
|
896
|
-
],
|
|
817
|
+
'*': [{ var: 'event.pricePerShare' }, { var: 'state.shareCount' }],
|
|
897
818
|
},
|
|
898
819
|
},
|
|
899
820
|
// clear the consumed proposal
|
|
900
821
|
pendingRepurchase: null,
|
|
901
822
|
},
|
|
902
823
|
{
|
|
903
|
-
_emit: [
|
|
904
|
-
{ name: "SHARES_REPURCHASED", data: { var: "event" }, destination: "external" },
|
|
905
|
-
],
|
|
824
|
+
_emit: [{ name: 'SHARES_REPURCHASED', data: { var: 'event' }, destination: 'external' }],
|
|
906
825
|
},
|
|
907
826
|
],
|
|
908
827
|
},
|
|
@@ -911,73 +830,65 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
911
830
|
// TREASURY -> TREASURY (propose_reissue) — phase 1 (#24): bind the executing resolution fiber and
|
|
912
831
|
// record the pending reissue, so reissue_from_treasury can read the resolution's state next transition.
|
|
913
832
|
{
|
|
914
|
-
from:
|
|
915
|
-
to:
|
|
916
|
-
eventName:
|
|
833
|
+
from: 'TREASURY',
|
|
834
|
+
to: 'TREASURY',
|
|
835
|
+
eventName: 'propose_reissue',
|
|
917
836
|
// 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)
|
|
918
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
837
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
919
838
|
effect: {
|
|
920
839
|
merge: [
|
|
921
|
-
{ var:
|
|
840
|
+
{ var: 'state' },
|
|
922
841
|
{
|
|
923
842
|
pendingReissue: {
|
|
924
|
-
holderId: { var:
|
|
925
|
-
ref: { var:
|
|
926
|
-
proposedAt: { var:
|
|
843
|
+
holderId: { var: 'event.holderId' },
|
|
844
|
+
ref: { var: 'event.boardResolutionRef' },
|
|
845
|
+
proposedAt: { var: '$ordinal' },
|
|
927
846
|
},
|
|
928
847
|
},
|
|
929
848
|
// bind the resolution fiber so reissue_from_treasury can assert its state next transition
|
|
930
|
-
(0, effects_js_1.addDependency)({ var:
|
|
849
|
+
(0, effects_js_1.addDependency)({ var: 'event.boardResolutionRef' }),
|
|
931
850
|
],
|
|
932
851
|
},
|
|
933
852
|
dependencies: [],
|
|
934
853
|
},
|
|
935
854
|
// TREASURY -> ISSUED — phase 2 (#24): reissue once the bound resolution is EXECUTED.
|
|
936
855
|
{
|
|
937
|
-
from:
|
|
938
|
-
to:
|
|
939
|
-
eventName:
|
|
856
|
+
from: 'TREASURY',
|
|
857
|
+
to: 'ISSUED',
|
|
858
|
+
eventName: 'reissue_from_treasury',
|
|
940
859
|
// 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)
|
|
941
860
|
guard: {
|
|
942
861
|
and: [
|
|
943
|
-
(0, guards_js_1.signerIsParty)(
|
|
862
|
+
(0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
944
863
|
// the proposal must target this holder, and its bound resolution must be EXECUTED
|
|
945
864
|
{
|
|
946
|
-
|
|
947
|
-
{ var: "state.pendingReissue.holderId" },
|
|
948
|
-
{ var: "event.holderId" },
|
|
949
|
-
],
|
|
865
|
+
'==': [{ var: 'state.pendingReissue.holderId' }, { var: 'event.holderId' }],
|
|
950
866
|
},
|
|
951
|
-
(0, guards_js_1.depInState)(
|
|
867
|
+
(0, guards_js_1.depInState)('state.pendingReissue.ref', 'EXECUTED'),
|
|
952
868
|
],
|
|
953
869
|
},
|
|
954
870
|
effect: {
|
|
955
871
|
merge: [
|
|
956
|
-
{ var:
|
|
872
|
+
{ var: 'state' },
|
|
957
873
|
{
|
|
958
|
-
status:
|
|
874
|
+
status: 'ISSUED',
|
|
959
875
|
holder: {
|
|
960
|
-
holderId: { var:
|
|
961
|
-
holderType: { var:
|
|
962
|
-
name: { var:
|
|
963
|
-
walletAddress: { var:
|
|
964
|
-
address: { var:
|
|
965
|
-
acquisitionDate: { var:
|
|
966
|
-
acquisitionMethod:
|
|
876
|
+
holderId: { var: 'event.holderId' },
|
|
877
|
+
holderType: { var: 'event.holderType' },
|
|
878
|
+
name: { var: 'event.holderName' },
|
|
879
|
+
walletAddress: { var: 'event.holderWallet' },
|
|
880
|
+
address: { var: 'event.address' },
|
|
881
|
+
acquisitionDate: { var: 'event.reissueDate' },
|
|
882
|
+
acquisitionMethod: 'PURCHASE',
|
|
967
883
|
costBasis: {
|
|
968
|
-
|
|
969
|
-
{ var: "event.issuancePrice" },
|
|
970
|
-
{ var: "state.shareCount" },
|
|
971
|
-
],
|
|
884
|
+
'*': [{ var: 'event.issuancePrice' }, { var: 'state.shareCount' }],
|
|
972
885
|
},
|
|
973
886
|
},
|
|
974
887
|
// clear the consumed proposal
|
|
975
888
|
pendingReissue: null,
|
|
976
889
|
},
|
|
977
890
|
{
|
|
978
|
-
_emit: [
|
|
979
|
-
{ name: "TREASURY_SHARES_REISSUED", data: { var: "event" }, destination: "external" },
|
|
980
|
-
],
|
|
891
|
+
_emit: [{ name: 'TREASURY_SHARES_REISSUED', data: { var: 'event' }, destination: 'external' }],
|
|
981
892
|
},
|
|
982
893
|
],
|
|
983
894
|
},
|
|
@@ -986,23 +897,23 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
986
897
|
// ISSUED -> ISSUED (propose_retire) — phase 1 (#24): bind the executing resolution fiber and record
|
|
987
898
|
// the pending retirement, so the retire transition can read the resolution's state next transition.
|
|
988
899
|
{
|
|
989
|
-
from:
|
|
990
|
-
to:
|
|
991
|
-
eventName:
|
|
900
|
+
from: 'ISSUED',
|
|
901
|
+
to: 'ISSUED',
|
|
902
|
+
eventName: 'propose_retire',
|
|
992
903
|
// 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)
|
|
993
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
904
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
994
905
|
effect: {
|
|
995
906
|
merge: [
|
|
996
|
-
{ var:
|
|
907
|
+
{ var: 'state' },
|
|
997
908
|
{
|
|
998
909
|
pendingRetire: {
|
|
999
|
-
retiredDate: { var:
|
|
1000
|
-
ref: { var:
|
|
1001
|
-
proposedAt: { var:
|
|
910
|
+
retiredDate: { var: 'event.retiredDate' },
|
|
911
|
+
ref: { var: 'event.boardResolutionRef' },
|
|
912
|
+
proposedAt: { var: '$ordinal' },
|
|
1002
913
|
},
|
|
1003
914
|
},
|
|
1004
915
|
// bind the resolution fiber so retire can assert its state next transition
|
|
1005
|
-
(0, effects_js_1.addDependency)({ var:
|
|
916
|
+
(0, effects_js_1.addDependency)({ var: 'event.boardResolutionRef' }),
|
|
1006
917
|
],
|
|
1007
918
|
},
|
|
1008
919
|
dependencies: [],
|
|
@@ -1010,65 +921,60 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1010
921
|
// TREASURY -> TREASURY (propose_retire) — phase 1 (#24): the treasury-side counterpart, binding the
|
|
1011
922
|
// executing resolution fiber and recording the pending retirement before retire executes.
|
|
1012
923
|
{
|
|
1013
|
-
from:
|
|
1014
|
-
to:
|
|
1015
|
-
eventName:
|
|
924
|
+
from: 'TREASURY',
|
|
925
|
+
to: 'TREASURY',
|
|
926
|
+
eventName: 'propose_retire',
|
|
1016
927
|
// 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)
|
|
1017
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
928
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1018
929
|
effect: {
|
|
1019
930
|
merge: [
|
|
1020
|
-
{ var:
|
|
931
|
+
{ var: 'state' },
|
|
1021
932
|
{
|
|
1022
933
|
pendingRetire: {
|
|
1023
|
-
retiredDate: { var:
|
|
1024
|
-
ref: { var:
|
|
1025
|
-
proposedAt: { var:
|
|
934
|
+
retiredDate: { var: 'event.retiredDate' },
|
|
935
|
+
ref: { var: 'event.boardResolutionRef' },
|
|
936
|
+
proposedAt: { var: '$ordinal' },
|
|
1026
937
|
},
|
|
1027
938
|
},
|
|
1028
939
|
// bind the resolution fiber so retire can assert its state next transition
|
|
1029
|
-
(0, effects_js_1.addDependency)({ var:
|
|
940
|
+
(0, effects_js_1.addDependency)({ var: 'event.boardResolutionRef' }),
|
|
1030
941
|
],
|
|
1031
942
|
},
|
|
1032
943
|
dependencies: [],
|
|
1033
944
|
},
|
|
1034
945
|
// ISSUED -> RETIRED — phase 2 (#24): retire once the bound resolution is EXECUTED.
|
|
1035
946
|
{
|
|
1036
|
-
from:
|
|
1037
|
-
to:
|
|
1038
|
-
eventName:
|
|
947
|
+
from: 'ISSUED',
|
|
948
|
+
to: 'RETIRED',
|
|
949
|
+
eventName: 'retire',
|
|
1039
950
|
// 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)
|
|
1040
951
|
guard: {
|
|
1041
952
|
and: [
|
|
1042
|
-
(0, guards_js_1.signerIsParty)(
|
|
953
|
+
(0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1043
954
|
// the proposal must match this retirement, and its bound resolution must be EXECUTED
|
|
1044
955
|
{
|
|
1045
|
-
|
|
1046
|
-
{ var: "state.pendingRetire.retiredDate" },
|
|
1047
|
-
{ var: "event.retiredDate" },
|
|
1048
|
-
],
|
|
956
|
+
'==': [{ var: 'state.pendingRetire.retiredDate' }, { var: 'event.retiredDate' }],
|
|
1049
957
|
},
|
|
1050
|
-
(0, guards_js_1.depInState)(
|
|
958
|
+
(0, guards_js_1.depInState)('state.pendingRetire.ref', 'EXECUTED'),
|
|
1051
959
|
],
|
|
1052
960
|
},
|
|
1053
961
|
effect: {
|
|
1054
962
|
merge: [
|
|
1055
|
-
{ var:
|
|
963
|
+
{ var: 'state' },
|
|
1056
964
|
{
|
|
1057
|
-
status:
|
|
965
|
+
status: 'RETIRED',
|
|
1058
966
|
retirementDetails: {
|
|
1059
|
-
retiredDate: { var:
|
|
1060
|
-
retirementMethod: { var:
|
|
1061
|
-
repurchasePrice: { var:
|
|
1062
|
-
boardResolutionRef: { var:
|
|
967
|
+
retiredDate: { var: 'event.retiredDate' },
|
|
968
|
+
retirementMethod: { var: 'event.retirementMethod' },
|
|
969
|
+
repurchasePrice: { var: 'event.repurchasePrice' },
|
|
970
|
+
boardResolutionRef: { var: 'state.pendingRetire.ref' },
|
|
1063
971
|
},
|
|
1064
972
|
holder: null,
|
|
1065
973
|
// clear the consumed proposal
|
|
1066
974
|
pendingRetire: null,
|
|
1067
975
|
},
|
|
1068
976
|
{
|
|
1069
|
-
_emit: [
|
|
1070
|
-
{ name: "SHARES_RETIRED", data: { var: "event" }, destination: "external" },
|
|
1071
|
-
],
|
|
977
|
+
_emit: [{ name: 'SHARES_RETIRED', data: { var: 'event' }, destination: 'external' }],
|
|
1072
978
|
},
|
|
1073
979
|
],
|
|
1074
980
|
},
|
|
@@ -1076,42 +982,37 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1076
982
|
},
|
|
1077
983
|
// TREASURY -> RETIRED — phase 2 (#24): retire once the bound resolution is EXECUTED.
|
|
1078
984
|
{
|
|
1079
|
-
from:
|
|
1080
|
-
to:
|
|
1081
|
-
eventName:
|
|
985
|
+
from: 'TREASURY',
|
|
986
|
+
to: 'RETIRED',
|
|
987
|
+
eventName: 'retire',
|
|
1082
988
|
// 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)
|
|
1083
989
|
guard: {
|
|
1084
990
|
and: [
|
|
1085
|
-
(0, guards_js_1.signerIsParty)(
|
|
991
|
+
(0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1086
992
|
// the proposal must match this retirement, and its bound resolution must be EXECUTED
|
|
1087
993
|
{
|
|
1088
|
-
|
|
1089
|
-
{ var: "state.pendingRetire.retiredDate" },
|
|
1090
|
-
{ var: "event.retiredDate" },
|
|
1091
|
-
],
|
|
994
|
+
'==': [{ var: 'state.pendingRetire.retiredDate' }, { var: 'event.retiredDate' }],
|
|
1092
995
|
},
|
|
1093
|
-
(0, guards_js_1.depInState)(
|
|
996
|
+
(0, guards_js_1.depInState)('state.pendingRetire.ref', 'EXECUTED'),
|
|
1094
997
|
],
|
|
1095
998
|
},
|
|
1096
999
|
effect: {
|
|
1097
1000
|
merge: [
|
|
1098
|
-
{ var:
|
|
1001
|
+
{ var: 'state' },
|
|
1099
1002
|
{
|
|
1100
|
-
status:
|
|
1003
|
+
status: 'RETIRED',
|
|
1101
1004
|
retirementDetails: {
|
|
1102
|
-
retiredDate: { var:
|
|
1103
|
-
retirementMethod: { var:
|
|
1104
|
-
repurchasePrice: { var:
|
|
1105
|
-
boardResolutionRef: { var:
|
|
1005
|
+
retiredDate: { var: 'event.retiredDate' },
|
|
1006
|
+
retirementMethod: { var: 'event.retirementMethod' },
|
|
1007
|
+
repurchasePrice: { var: 'event.repurchasePrice' },
|
|
1008
|
+
boardResolutionRef: { var: 'state.pendingRetire.ref' },
|
|
1106
1009
|
},
|
|
1107
1010
|
holder: null,
|
|
1108
1011
|
// clear the consumed proposal
|
|
1109
1012
|
pendingRetire: null,
|
|
1110
1013
|
},
|
|
1111
1014
|
{
|
|
1112
|
-
_emit: [
|
|
1113
|
-
{ name: "SHARES_RETIRED", data: { var: "event" }, destination: "external" },
|
|
1114
|
-
],
|
|
1015
|
+
_emit: [{ name: 'SHARES_RETIRED', data: { var: 'event' }, destination: 'external' }],
|
|
1115
1016
|
},
|
|
1116
1017
|
],
|
|
1117
1018
|
},
|
|
@@ -1119,37 +1020,35 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1119
1020
|
},
|
|
1120
1021
|
// ISSUED -> ISSUED (stock_split)
|
|
1121
1022
|
{
|
|
1122
|
-
from:
|
|
1123
|
-
to:
|
|
1124
|
-
eventName:
|
|
1023
|
+
from: 'ISSUED',
|
|
1024
|
+
to: 'ISSUED',
|
|
1025
|
+
eventName: 'stock_split',
|
|
1125
1026
|
// 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)
|
|
1126
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
1027
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1127
1028
|
effect: {
|
|
1128
1029
|
merge: [
|
|
1129
|
-
{ var:
|
|
1030
|
+
{ var: 'state' },
|
|
1130
1031
|
{
|
|
1131
1032
|
corporateActions: {
|
|
1132
1033
|
merge: [
|
|
1133
|
-
{ var:
|
|
1034
|
+
{ var: 'state.corporateActions' },
|
|
1134
1035
|
[
|
|
1135
1036
|
{
|
|
1136
|
-
actionId: { var:
|
|
1137
|
-
actionType:
|
|
1138
|
-
actionDate: { var:
|
|
1139
|
-
ratio: { var:
|
|
1140
|
-
sharesBeforeAction: { var:
|
|
1141
|
-
sharesAfterAction: { var:
|
|
1142
|
-
resolutionRef: { var:
|
|
1037
|
+
actionId: { var: 'event.actionId' },
|
|
1038
|
+
actionType: 'STOCK_SPLIT',
|
|
1039
|
+
actionDate: { var: 'event.effectiveDate' },
|
|
1040
|
+
ratio: { var: 'event.splitRatio' },
|
|
1041
|
+
sharesBeforeAction: { var: 'state.shareCount' },
|
|
1042
|
+
sharesAfterAction: { var: 'event.newShareCount' },
|
|
1043
|
+
resolutionRef: { var: 'event.resolutionRef' },
|
|
1143
1044
|
},
|
|
1144
1045
|
],
|
|
1145
1046
|
],
|
|
1146
1047
|
},
|
|
1147
|
-
shareCount: { var:
|
|
1048
|
+
shareCount: { var: 'event.newShareCount' },
|
|
1148
1049
|
},
|
|
1149
1050
|
{
|
|
1150
|
-
_emit: [
|
|
1151
|
-
{ name: "STOCK_SPLIT_APPLIED", data: { var: "event" }, destination: "external" },
|
|
1152
|
-
],
|
|
1051
|
+
_emit: [{ name: 'STOCK_SPLIT_APPLIED', data: { var: 'event' }, destination: 'external' }],
|
|
1153
1052
|
},
|
|
1154
1053
|
],
|
|
1155
1054
|
},
|
|
@@ -1157,23 +1056,23 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1157
1056
|
// ISSUED -> ISSUED (propose_dividend) — phase 1 (#24): bind the executing resolution fiber and record
|
|
1158
1057
|
// the pending declaration, so declare_dividend can read the resolution's state next transition.
|
|
1159
1058
|
{
|
|
1160
|
-
from:
|
|
1161
|
-
to:
|
|
1162
|
-
eventName:
|
|
1059
|
+
from: 'ISSUED',
|
|
1060
|
+
to: 'ISSUED',
|
|
1061
|
+
eventName: 'propose_dividend',
|
|
1163
1062
|
// 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)
|
|
1164
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
1063
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1165
1064
|
effect: {
|
|
1166
1065
|
merge: [
|
|
1167
|
-
{ var:
|
|
1066
|
+
{ var: 'state' },
|
|
1168
1067
|
{
|
|
1169
1068
|
pendingDividend: {
|
|
1170
|
-
actionId: { var:
|
|
1171
|
-
ref: { var:
|
|
1172
|
-
proposedAt: { var:
|
|
1069
|
+
actionId: { var: 'event.actionId' },
|
|
1070
|
+
ref: { var: 'event.resolutionRef' },
|
|
1071
|
+
proposedAt: { var: '$ordinal' },
|
|
1173
1072
|
},
|
|
1174
1073
|
},
|
|
1175
1074
|
// bind the resolution fiber so declare_dividend can assert its state next transition
|
|
1176
|
-
(0, effects_js_1.addDependency)({ var:
|
|
1075
|
+
(0, effects_js_1.addDependency)({ var: 'event.resolutionRef' }),
|
|
1177
1076
|
],
|
|
1178
1077
|
},
|
|
1179
1078
|
dependencies: [],
|
|
@@ -1181,55 +1080,46 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1181
1080
|
// ISSUED -> ISSUED (declare_dividend) — phase 2 (#24): stock dividend handling once the bound
|
|
1182
1081
|
// resolution is EXECUTED.
|
|
1183
1082
|
{
|
|
1184
|
-
from:
|
|
1185
|
-
to:
|
|
1186
|
-
eventName:
|
|
1083
|
+
from: 'ISSUED',
|
|
1084
|
+
to: 'ISSUED',
|
|
1085
|
+
eventName: 'declare_dividend',
|
|
1187
1086
|
// 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)
|
|
1188
1087
|
guard: {
|
|
1189
1088
|
and: [
|
|
1190
|
-
(0, guards_js_1.signerIsParty)(
|
|
1089
|
+
(0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1191
1090
|
// the proposal must target this action, and its bound resolution must be EXECUTED
|
|
1192
1091
|
{
|
|
1193
|
-
|
|
1194
|
-
{ var: "state.pendingDividend.actionId" },
|
|
1195
|
-
{ var: "event.actionId" },
|
|
1196
|
-
],
|
|
1092
|
+
'==': [{ var: 'state.pendingDividend.actionId' }, { var: 'event.actionId' }],
|
|
1197
1093
|
},
|
|
1198
|
-
(0, guards_js_1.depInState)(
|
|
1094
|
+
(0, guards_js_1.depInState)('state.pendingDividend.ref', 'EXECUTED'),
|
|
1199
1095
|
],
|
|
1200
1096
|
},
|
|
1201
1097
|
effect: {
|
|
1202
1098
|
if: [
|
|
1203
|
-
{
|
|
1099
|
+
{ '==': [{ var: 'event.dividendType' }, 'STOCK'] },
|
|
1204
1100
|
{
|
|
1205
1101
|
merge: [
|
|
1206
|
-
{ var:
|
|
1102
|
+
{ var: 'state' },
|
|
1207
1103
|
{
|
|
1208
1104
|
corporateActions: {
|
|
1209
1105
|
merge: [
|
|
1210
|
-
{ var:
|
|
1106
|
+
{ var: 'state.corporateActions' },
|
|
1211
1107
|
[
|
|
1212
1108
|
{
|
|
1213
|
-
actionId: { var:
|
|
1214
|
-
actionType:
|
|
1215
|
-
actionDate: { var:
|
|
1216
|
-
sharesBeforeAction: { var:
|
|
1109
|
+
actionId: { var: 'event.actionId' },
|
|
1110
|
+
actionType: 'STOCK_DIVIDEND',
|
|
1111
|
+
actionDate: { var: 'event.paymentDate' },
|
|
1112
|
+
sharesBeforeAction: { var: 'state.shareCount' },
|
|
1217
1113
|
sharesAfterAction: {
|
|
1218
|
-
|
|
1219
|
-
{ var: "state.shareCount" },
|
|
1220
|
-
{ var: "event.stockShares" },
|
|
1221
|
-
],
|
|
1114
|
+
'+': [{ var: 'state.shareCount' }, { var: 'event.stockShares' }],
|
|
1222
1115
|
},
|
|
1223
|
-
resolutionRef: { var:
|
|
1116
|
+
resolutionRef: { var: 'state.pendingDividend.ref' },
|
|
1224
1117
|
},
|
|
1225
1118
|
],
|
|
1226
1119
|
],
|
|
1227
1120
|
},
|
|
1228
1121
|
shareCount: {
|
|
1229
|
-
|
|
1230
|
-
{ var: "state.shareCount" },
|
|
1231
|
-
{ var: "event.stockShares" },
|
|
1232
|
-
],
|
|
1122
|
+
'+': [{ var: 'state.shareCount' }, { var: 'event.stockShares' }],
|
|
1233
1123
|
},
|
|
1234
1124
|
// clear the consumed proposal
|
|
1235
1125
|
pendingDividend: null,
|
|
@@ -1238,7 +1128,7 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1238
1128
|
},
|
|
1239
1129
|
{
|
|
1240
1130
|
merge: [
|
|
1241
|
-
{ var:
|
|
1131
|
+
{ var: 'state' },
|
|
1242
1132
|
// cash dividend: no share change, but still clear the consumed proposal
|
|
1243
1133
|
{ pendingDividend: null },
|
|
1244
1134
|
],
|
|
@@ -1249,41 +1139,38 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1249
1139
|
},
|
|
1250
1140
|
// ISSUED -> ISSUED (remove_restriction)
|
|
1251
1141
|
{
|
|
1252
|
-
from:
|
|
1253
|
-
to:
|
|
1254
|
-
eventName:
|
|
1142
|
+
from: 'ISSUED',
|
|
1143
|
+
to: 'ISSUED',
|
|
1144
|
+
eventName: 'remove_restriction',
|
|
1255
1145
|
// 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)
|
|
1256
|
-
guard: (0, guards_js_1.signerIsParty)(
|
|
1146
|
+
guard: (0, guards_js_1.signerIsParty)('state.issuerAddress'),
|
|
1257
1147
|
effect: {
|
|
1258
1148
|
merge: [
|
|
1259
|
-
{ var:
|
|
1149
|
+
{ var: 'state' },
|
|
1260
1150
|
{
|
|
1261
1151
|
restrictions: {
|
|
1262
1152
|
merge: [
|
|
1263
|
-
{ var:
|
|
1153
|
+
{ var: 'state.restrictions' },
|
|
1264
1154
|
{
|
|
1265
1155
|
restrictionType: {
|
|
1266
1156
|
filter: [
|
|
1267
|
-
{ var:
|
|
1268
|
-
{
|
|
1157
|
+
{ var: 'state.restrictions.restrictionType' },
|
|
1158
|
+
{ '!=': [{ var: '' }, { var: 'event.restrictionType' }] },
|
|
1269
1159
|
],
|
|
1270
1160
|
},
|
|
1271
1161
|
isRestricted: {
|
|
1272
|
-
|
|
1162
|
+
'>': [
|
|
1273
1163
|
{
|
|
1274
1164
|
reduce: [
|
|
1275
1165
|
{
|
|
1276
1166
|
filter: [
|
|
1277
|
-
{ var:
|
|
1167
|
+
{ var: 'state.restrictions.restrictionType' },
|
|
1278
1168
|
{
|
|
1279
|
-
|
|
1280
|
-
{ var: "" },
|
|
1281
|
-
{ var: "event.restrictionType" },
|
|
1282
|
-
],
|
|
1169
|
+
'!=': [{ var: '' }, { var: 'event.restrictionType' }],
|
|
1283
1170
|
},
|
|
1284
1171
|
],
|
|
1285
1172
|
},
|
|
1286
|
-
{
|
|
1173
|
+
{ '+': [{ var: 'accumulator' }, 1] },
|
|
1287
1174
|
0,
|
|
1288
1175
|
],
|
|
1289
1176
|
},
|
|
@@ -1295,9 +1182,7 @@ exports.corpSecuritiesDef = (0, fiber_app_js_1.defineFiberApp)({
|
|
|
1295
1182
|
},
|
|
1296
1183
|
},
|
|
1297
1184
|
{
|
|
1298
|
-
_emit: [
|
|
1299
|
-
{ name: "RESTRICTION_REMOVED", data: { var: "event" }, destination: "external" },
|
|
1300
|
-
],
|
|
1185
|
+
_emit: [{ name: 'RESTRICTION_REMOVED', data: { var: 'event' }, destination: 'external' }],
|
|
1301
1186
|
},
|
|
1302
1187
|
],
|
|
1303
1188
|
},
|