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