@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,173 +1,173 @@
1
- import { defineFiberApp } from "../../../schema/fiber-app.js";
2
- import { actorInSet, signerIsParty } from "../../../schema/guards.js";
1
+ import { defineFiberApp } from '../../../schema/fiber-app.js';
2
+ import { actorInSet, signerIsParty } from '../../../schema/guards.js';
3
3
  /**
4
4
  * N-of-M multisig governance. Requires threshold signatures for actions.
5
5
  */
6
6
  export const daoMultisigDef = defineFiberApp({
7
7
  metadata: {
8
- name: "MultisigDAO",
9
- app: "governance",
10
- type: "daoMultisig",
11
- version: "1.0.0",
12
- description: "N-of-M multisig governance. Requires threshold signatures for actions.",
13
- category: "governance/dao",
8
+ name: 'MultisigDAO',
9
+ app: 'governance',
10
+ type: 'daoMultisig',
11
+ version: '1.0.0',
12
+ description: 'N-of-M multisig governance. Requires threshold signatures for actions.',
13
+ category: 'governance/dao',
14
14
  crossReferences: {
15
- Identity: "signer verification",
16
- Contract: "action execution targets",
17
- Treasury: "fund management",
18
- Escrow: "controlled release",
15
+ Identity: 'signer verification',
16
+ Contract: 'action execution targets',
17
+ Treasury: 'fund management',
18
+ Escrow: 'controlled release',
19
19
  },
20
20
  },
21
21
  createSchema: {
22
- required: ["signers", "threshold", "proposalTTLMs"],
22
+ required: ['signers', 'threshold', 'proposalTTLMs'],
23
23
  properties: {
24
24
  signers: {
25
- type: "array",
26
- description: "Authorized signer addresses",
25
+ type: 'array',
26
+ description: 'Authorized signer addresses',
27
27
  immutable: false,
28
28
  },
29
29
  threshold: {
30
- type: "number",
31
- description: "Number of signatures required to execute",
30
+ type: 'number',
31
+ description: 'Number of signatures required to execute',
32
32
  },
33
33
  proposalTTLMs: {
34
- type: "number",
35
- description: "Proposal expiry window in milliseconds",
34
+ type: 'number',
35
+ description: 'Proposal expiry window in milliseconds',
36
36
  },
37
37
  },
38
38
  },
39
39
  stateSchema: {
40
40
  properties: {
41
- signers: { type: "array" },
42
- threshold: { type: "number" },
43
- proposalTTLMs: { type: "number" },
44
- proposal: { type: "object" },
45
- signatures: { type: "object", computed: true },
46
- actions: { type: "array", computed: true },
47
- cancelledProposals: { type: "array", computed: true },
48
- status: { type: "string", computed: true },
41
+ signers: { type: 'array' },
42
+ threshold: { type: 'number' },
43
+ proposalTTLMs: { type: 'number' },
44
+ proposal: { type: 'object' },
45
+ signatures: { type: 'object', computed: true },
46
+ actions: { type: 'array', computed: true },
47
+ cancelledProposals: { type: 'array', computed: true },
48
+ status: { type: 'string', computed: true },
49
49
  },
50
50
  },
51
51
  eventSchemas: {
52
52
  propose: {
53
- description: "Propose an action (signer only)",
54
- required: ["proposalId", "actionType", "payload"],
53
+ description: 'Propose an action (signer only)',
54
+ required: ['proposalId', 'actionType', 'payload'],
55
55
  properties: {
56
- agent: { type: "address" },
57
- proposalId: { type: "string" },
58
- actionType: { type: "string" },
59
- payload: { type: "object" },
56
+ agent: { type: 'address' },
57
+ proposalId: { type: 'string' },
58
+ actionType: { type: 'string' },
59
+ payload: { type: 'object' },
60
60
  },
61
61
  },
62
62
  sign: {
63
- description: "Sign the current proposal (signer only, no double-signing)",
63
+ description: 'Sign the current proposal (signer only, no double-signing)',
64
64
  properties: {
65
- agent: { type: "address" },
65
+ agent: { type: 'address' },
66
66
  },
67
67
  },
68
68
  execute: {
69
- description: "Execute once threshold signatures collected",
69
+ description: 'Execute once threshold signatures collected',
70
70
  properties: {
71
- agent: { type: "address" },
71
+ agent: { type: 'address' },
72
72
  },
73
73
  },
74
74
  cancel: {
75
- description: "Cancel proposal (expired or proposer)",
75
+ description: 'Cancel proposal (expired or proposer)',
76
76
  properties: {
77
- agent: { type: "address" },
77
+ agent: { type: 'address' },
78
78
  },
79
79
  },
80
80
  propose_add_signer: {
81
- description: "Propose adding a new signer (signer only)",
82
- required: ["proposalId", "newSigner"],
81
+ description: 'Propose adding a new signer (signer only)',
82
+ required: ['proposalId', 'newSigner'],
83
83
  properties: {
84
- agent: { type: "address" },
85
- proposalId: { type: "string" },
86
- newSigner: { type: "address" },
84
+ agent: { type: 'address' },
85
+ proposalId: { type: 'string' },
86
+ newSigner: { type: 'address' },
87
87
  },
88
88
  },
89
89
  propose_remove_signer: {
90
- description: "Propose removing a signer (signer only, must keep > threshold signers)",
91
- required: ["proposalId", "removeSigner"],
90
+ description: 'Propose removing a signer (signer only, must keep > threshold signers)',
91
+ required: ['proposalId', 'removeSigner'],
92
92
  properties: {
93
- agent: { type: "address" },
94
- proposalId: { type: "string" },
95
- removeSigner: { type: "address" },
93
+ agent: { type: 'address' },
94
+ proposalId: { type: 'string' },
95
+ removeSigner: { type: 'address' },
96
96
  },
97
97
  },
98
98
  propose_change_threshold: {
99
- description: "Propose changing the signature threshold",
100
- required: ["proposalId", "newThreshold"],
99
+ description: 'Propose changing the signature threshold',
100
+ required: ['proposalId', 'newThreshold'],
101
101
  properties: {
102
- agent: { type: "address" },
103
- proposalId: { type: "string" },
104
- newThreshold: { type: "number", minimum: 1 },
102
+ agent: { type: 'address' },
103
+ proposalId: { type: 'string' },
104
+ newThreshold: { type: 'number', minimum: 1 },
105
105
  },
106
106
  },
107
107
  apply_signer_change: {
108
- description: "Apply approved signer-set or threshold change",
108
+ description: 'Apply approved signer-set or threshold change',
109
109
  properties: {
110
- agent: { type: "address" },
110
+ agent: { type: 'address' },
111
111
  },
112
112
  },
113
113
  dissolve: {
114
- description: "Dissolve the DAO (requires every signer to sign this op — verified unanimity)",
114
+ description: 'Dissolve the DAO (requires every signer to sign this op — verified unanimity)',
115
115
  properties: {},
116
116
  },
117
117
  },
118
118
  states: {
119
119
  ACTIVE: {
120
- id: "ACTIVE",
120
+ id: 'ACTIVE',
121
121
  isFinal: false,
122
122
  metadata: {
123
- label: "Active",
124
- description: "Multisig is idle and ready to propose an action",
125
- category: "initial",
123
+ label: 'Active',
124
+ description: 'Multisig is idle and ready to propose an action',
125
+ category: 'initial',
126
126
  },
127
127
  },
128
128
  PENDING: {
129
- id: "PENDING",
129
+ id: 'PENDING',
130
130
  isFinal: false,
131
131
  metadata: {
132
- label: "Pending",
133
- description: "An action is awaiting the required signature threshold",
134
- category: "pending",
132
+ label: 'Pending',
133
+ description: 'An action is awaiting the required signature threshold',
134
+ category: 'pending',
135
135
  },
136
136
  },
137
137
  DISSOLVED: {
138
- id: "DISSOLVED",
138
+ id: 'DISSOLVED',
139
139
  isFinal: true,
140
140
  metadata: {
141
- label: "Dissolved",
142
- description: "Multisig DAO dissolved (terminal)",
143
- category: "terminal",
141
+ label: 'Dissolved',
142
+ description: 'Multisig DAO dissolved (terminal)',
143
+ category: 'terminal',
144
144
  },
145
145
  },
146
146
  },
147
- initialState: "ACTIVE",
147
+ initialState: 'ACTIVE',
148
148
  transitions: [
149
149
  // ACTIVE → PENDING: propose (signer only)
150
150
  {
151
- from: "ACTIVE",
152
- to: "PENDING",
153
- eventName: "propose",
154
- guard: actorInSet("state.signers"),
151
+ from: 'ACTIVE',
152
+ to: 'PENDING',
153
+ eventName: 'propose',
154
+ guard: actorInSet('state.signers'),
155
155
  effect: {
156
156
  merge: [
157
- { var: "state" },
157
+ { var: 'state' },
158
158
  {
159
159
  proposal: {
160
- id: { var: "event.proposalId" },
161
- actionType: { var: "event.actionType" },
162
- payload: { var: "event.payload" },
163
- proposer: { var: "event.agent" },
164
- proposedAt: { var: "$ordinal" },
160
+ id: { var: 'event.proposalId' },
161
+ actionType: { var: 'event.actionType' },
162
+ payload: { var: 'event.payload' },
163
+ proposer: { var: 'event.agent' },
164
+ proposedAt: { var: '$ordinal' },
165
165
  expiresAt: {
166
- "+": [{ var: "$ordinal" }, { var: "state.proposalTTLMs" }],
166
+ '+': [{ var: '$ordinal' }, { var: 'state.proposalTTLMs' }],
167
167
  },
168
168
  },
169
169
  signatures: {
170
- set: [{}, { var: "event.agent" }, { var: "$ordinal" }],
170
+ set: [{}, { var: 'event.agent' }, { var: '$ordinal' }],
171
171
  },
172
172
  },
173
173
  ],
@@ -176,35 +176,26 @@ export const daoMultisigDef = defineFiberApp({
176
176
  },
177
177
  // PENDING → PENDING: sign (signer, no double-sign, not yet at threshold)
178
178
  {
179
- from: "PENDING",
180
- to: "PENDING",
181
- eventName: "sign",
179
+ from: 'PENDING',
180
+ to: 'PENDING',
181
+ eventName: 'sign',
182
182
  guard: {
183
183
  and: [
184
- actorInSet("state.signers"),
184
+ actorInSet('state.signers'),
185
185
  {
186
- "!": [
187
- { has: [{ var: "state.signatures" }, { var: "event.agent" }] },
188
- ],
186
+ '!': [{ has: [{ var: 'state.signatures' }, { var: 'event.agent' }] }],
189
187
  },
190
188
  {
191
- "<": [
192
- { length: [{ keys: [{ var: "state.signatures" }] }] },
193
- { var: "state.threshold" },
194
- ],
189
+ '<': [{ length: [{ keys: [{ var: 'state.signatures' }] }] }, { var: 'state.threshold' }],
195
190
  },
196
191
  ],
197
192
  },
198
193
  effect: {
199
194
  merge: [
200
- { var: "state" },
195
+ { var: 'state' },
201
196
  {
202
197
  signatures: {
203
- set: [
204
- { var: "state.signatures" },
205
- { var: "event.agent" },
206
- { var: "$ordinal" },
207
- ],
198
+ set: [{ var: 'state.signatures' }, { var: 'event.agent' }, { var: '$ordinal' }],
208
199
  },
209
200
  },
210
201
  ],
@@ -213,29 +204,26 @@ export const daoMultisigDef = defineFiberApp({
213
204
  },
214
205
  // PENDING → ACTIVE: execute (threshold met)
215
206
  {
216
- from: "PENDING",
217
- to: "ACTIVE",
218
- eventName: "execute",
207
+ from: 'PENDING',
208
+ to: 'ACTIVE',
209
+ eventName: 'execute',
219
210
  guard: {
220
- ">=": [
221
- { length: [{ keys: [{ var: "state.signatures" }] }] },
222
- { var: "state.threshold" },
223
- ],
211
+ '>=': [{ length: [{ keys: [{ var: 'state.signatures' }] }] }, { var: 'state.threshold' }],
224
212
  },
225
213
  effect: {
226
214
  merge: [
227
- { var: "state" },
215
+ { var: 'state' },
228
216
  {
229
217
  actions: {
230
218
  cat: [
231
- { var: "state.actions" },
219
+ { var: 'state.actions' },
232
220
  [
233
221
  {
234
- id: { var: "state.proposal.id" },
235
- type: { var: "state.proposal.actionType" },
236
- payload: { var: "state.proposal.payload" },
237
- signatures: { var: "state.signatures" },
238
- executedAt: { var: "$ordinal" },
222
+ id: { var: 'state.proposal.id' },
223
+ type: { var: 'state.proposal.actionType' },
224
+ payload: { var: 'state.proposal.payload' },
225
+ signatures: { var: 'state.signatures' },
226
+ executedAt: { var: '$ordinal' },
239
227
  },
240
228
  ],
241
229
  ],
@@ -246,9 +234,9 @@ export const daoMultisigDef = defineFiberApp({
246
234
  // under the reserved `_emit` key (extracted as an EmittedEvent, stripped from state).
247
235
  _emit: [
248
236
  {
249
- name: "multisig_executed",
250
- data: { proposalId: { var: "state.proposal.id" } },
251
- destination: "external",
237
+ name: 'multisig_executed',
238
+ data: { proposalId: { var: 'state.proposal.id' } },
239
+ destination: 'external',
252
240
  },
253
241
  ],
254
242
  },
@@ -258,28 +246,25 @@ export const daoMultisigDef = defineFiberApp({
258
246
  },
259
247
  // PENDING → ACTIVE: cancel (expired or proposer)
260
248
  {
261
- from: "PENDING",
262
- to: "ACTIVE",
263
- eventName: "cancel",
249
+ from: 'PENDING',
250
+ to: 'ACTIVE',
251
+ eventName: 'cancel',
264
252
  guard: {
265
253
  or: [
266
- { ">": [{ var: "$ordinal" }, { var: "state.proposal.expiresAt" }] },
267
- signerIsParty("state.proposal.proposer"),
254
+ { '>': [{ var: '$ordinal' }, { var: 'state.proposal.expiresAt' }] },
255
+ signerIsParty('state.proposal.proposer'),
268
256
  ],
269
257
  },
270
258
  effect: {
271
259
  merge: [
272
- { var: "state" },
260
+ { var: 'state' },
273
261
  {
274
262
  cancelledProposals: {
275
263
  cat: [
276
- { var: "state.cancelledProposals" },
264
+ { var: 'state.cancelledProposals' },
277
265
  [
278
266
  {
279
- merge: [
280
- { var: "state.proposal" },
281
- { cancelledAt: { var: "$ordinal" } },
282
- ],
267
+ merge: [{ var: 'state.proposal' }, { cancelledAt: { var: '$ordinal' } }],
283
268
  },
284
269
  ],
285
270
  ],
@@ -293,26 +278,26 @@ export const daoMultisigDef = defineFiberApp({
293
278
  },
294
279
  // ACTIVE → PENDING: propose_add_signer
295
280
  {
296
- from: "ACTIVE",
297
- to: "PENDING",
298
- eventName: "propose_add_signer",
299
- guard: actorInSet("state.signers"),
281
+ from: 'ACTIVE',
282
+ to: 'PENDING',
283
+ eventName: 'propose_add_signer',
284
+ guard: actorInSet('state.signers'),
300
285
  effect: {
301
286
  merge: [
302
- { var: "state" },
287
+ { var: 'state' },
303
288
  {
304
289
  proposal: {
305
- id: { var: "event.proposalId" },
306
- actionType: "add_signer",
307
- payload: { newSigner: { var: "event.newSigner" } },
308
- proposer: { var: "event.agent" },
309
- proposedAt: { var: "$ordinal" },
290
+ id: { var: 'event.proposalId' },
291
+ actionType: 'add_signer',
292
+ payload: { newSigner: { var: 'event.newSigner' } },
293
+ proposer: { var: 'event.agent' },
294
+ proposedAt: { var: '$ordinal' },
310
295
  expiresAt: {
311
- "+": [{ var: "$ordinal" }, { var: "state.proposalTTLMs" }],
296
+ '+': [{ var: '$ordinal' }, { var: 'state.proposalTTLMs' }],
312
297
  },
313
298
  },
314
299
  signatures: {
315
- set: [{}, { var: "event.agent" }, { var: "$ordinal" }],
300
+ set: [{}, { var: 'event.agent' }, { var: '$ordinal' }],
316
301
  },
317
302
  },
318
303
  ],
@@ -321,36 +306,33 @@ export const daoMultisigDef = defineFiberApp({
321
306
  },
322
307
  // ACTIVE → PENDING: propose_remove_signer (signers > threshold)
323
308
  {
324
- from: "ACTIVE",
325
- to: "PENDING",
326
- eventName: "propose_remove_signer",
309
+ from: 'ACTIVE',
310
+ to: 'PENDING',
311
+ eventName: 'propose_remove_signer',
327
312
  guard: {
328
313
  and: [
329
- actorInSet("state.signers"),
314
+ actorInSet('state.signers'),
330
315
  {
331
- ">": [
332
- { length: [{ var: "state.signers" }] },
333
- { var: "state.threshold" },
334
- ],
316
+ '>': [{ length: [{ var: 'state.signers' }] }, { var: 'state.threshold' }],
335
317
  },
336
318
  ],
337
319
  },
338
320
  effect: {
339
321
  merge: [
340
- { var: "state" },
322
+ { var: 'state' },
341
323
  {
342
324
  proposal: {
343
- id: { var: "event.proposalId" },
344
- actionType: "remove_signer",
345
- payload: { removeSigner: { var: "event.removeSigner" } },
346
- proposer: { var: "event.agent" },
347
- proposedAt: { var: "$ordinal" },
325
+ id: { var: 'event.proposalId' },
326
+ actionType: 'remove_signer',
327
+ payload: { removeSigner: { var: 'event.removeSigner' } },
328
+ proposer: { var: 'event.agent' },
329
+ proposedAt: { var: '$ordinal' },
348
330
  expiresAt: {
349
- "+": [{ var: "$ordinal" }, { var: "state.proposalTTLMs" }],
331
+ '+': [{ var: '$ordinal' }, { var: 'state.proposalTTLMs' }],
350
332
  },
351
333
  },
352
334
  signatures: {
353
- set: [{}, { var: "event.agent" }, { var: "$ordinal" }],
335
+ set: [{}, { var: 'event.agent' }, { var: '$ordinal' }],
354
336
  },
355
337
  },
356
338
  ],
@@ -359,37 +341,34 @@ export const daoMultisigDef = defineFiberApp({
359
341
  },
360
342
  // ACTIVE → PENDING: propose_change_threshold (1 <= new <= signers count)
361
343
  {
362
- from: "ACTIVE",
363
- to: "PENDING",
364
- eventName: "propose_change_threshold",
344
+ from: 'ACTIVE',
345
+ to: 'PENDING',
346
+ eventName: 'propose_change_threshold',
365
347
  guard: {
366
348
  and: [
367
- actorInSet("state.signers"),
368
- { ">=": [{ var: "event.newThreshold" }, 1] },
349
+ actorInSet('state.signers'),
350
+ { '>=': [{ var: 'event.newThreshold' }, 1] },
369
351
  {
370
- "<=": [
371
- { var: "event.newThreshold" },
372
- { length: [{ var: "state.signers" }] },
373
- ],
352
+ '<=': [{ var: 'event.newThreshold' }, { length: [{ var: 'state.signers' }] }],
374
353
  },
375
354
  ],
376
355
  },
377
356
  effect: {
378
357
  merge: [
379
- { var: "state" },
358
+ { var: 'state' },
380
359
  {
381
360
  proposal: {
382
- id: { var: "event.proposalId" },
383
- actionType: "change_threshold",
384
- payload: { newThreshold: { var: "event.newThreshold" } },
385
- proposer: { var: "event.agent" },
386
- proposedAt: { var: "$ordinal" },
361
+ id: { var: 'event.proposalId' },
362
+ actionType: 'change_threshold',
363
+ payload: { newThreshold: { var: 'event.newThreshold' } },
364
+ proposer: { var: 'event.agent' },
365
+ proposedAt: { var: '$ordinal' },
387
366
  expiresAt: {
388
- "+": [{ var: "$ordinal" }, { var: "state.proposalTTLMs" }],
367
+ '+': [{ var: '$ordinal' }, { var: 'state.proposalTTLMs' }],
389
368
  },
390
369
  },
391
370
  signatures: {
392
- set: [{}, { var: "event.agent" }, { var: "$ordinal" }],
371
+ set: [{}, { var: 'event.agent' }, { var: '$ordinal' }],
393
372
  },
394
373
  },
395
374
  ],
@@ -398,56 +377,44 @@ export const daoMultisigDef = defineFiberApp({
398
377
  },
399
378
  // PENDING → ACTIVE: apply_signer_change (threshold met, signer-type proposal)
400
379
  {
401
- from: "PENDING",
402
- to: "ACTIVE",
403
- eventName: "apply_signer_change",
380
+ from: 'PENDING',
381
+ to: 'ACTIVE',
382
+ eventName: 'apply_signer_change',
404
383
  guard: {
405
384
  and: [
406
385
  {
407
- ">=": [
408
- { length: [{ keys: [{ var: "state.signatures" }] }] },
409
- { var: "state.threshold" },
410
- ],
386
+ '>=': [{ length: [{ keys: [{ var: 'state.signatures' }] }] }, { var: 'state.threshold' }],
411
387
  },
412
388
  {
413
- in: [
414
- { var: "state.proposal.actionType" },
415
- ["add_signer", "remove_signer", "change_threshold"],
416
- ],
389
+ in: [{ var: 'state.proposal.actionType' }, ['add_signer', 'remove_signer', 'change_threshold']],
417
390
  },
418
391
  ],
419
392
  },
420
393
  effect: {
421
394
  if: [
422
- { "===": [{ var: "state.proposal.actionType" }, "add_signer"] },
395
+ { '===': [{ var: 'state.proposal.actionType' }, 'add_signer'] },
423
396
  {
424
397
  merge: [
425
- { var: "state" },
398
+ { var: 'state' },
426
399
  {
427
400
  signers: {
428
- cat: [
429
- { var: "state.signers" },
430
- [{ var: "state.proposal.payload.newSigner" }],
431
- ],
401
+ cat: [{ var: 'state.signers' }, [{ var: 'state.proposal.payload.newSigner' }]],
432
402
  },
433
403
  proposal: null,
434
404
  signatures: {},
435
405
  },
436
406
  ],
437
407
  },
438
- { "===": [{ var: "state.proposal.actionType" }, "remove_signer"] },
408
+ { '===': [{ var: 'state.proposal.actionType' }, 'remove_signer'] },
439
409
  {
440
410
  merge: [
441
- { var: "state" },
411
+ { var: 'state' },
442
412
  {
443
413
  signers: {
444
414
  filter: [
445
- { var: "state.signers" },
415
+ { var: 'state.signers' },
446
416
  {
447
- "!==": [
448
- { var: "" },
449
- { var: "state.proposal.payload.removeSigner" },
450
- ],
417
+ '!==': [{ var: '' }, { var: 'state.proposal.payload.removeSigner' }],
451
418
  },
452
419
  ],
453
420
  },
@@ -458,9 +425,9 @@ export const daoMultisigDef = defineFiberApp({
458
425
  },
459
426
  {
460
427
  merge: [
461
- { var: "state" },
428
+ { var: 'state' },
462
429
  {
463
- threshold: { var: "state.proposal.payload.newThreshold" },
430
+ threshold: { var: 'state.proposal.payload.newThreshold' },
464
431
  proposal: null,
465
432
  signatures: {},
466
433
  },
@@ -472,33 +439,27 @@ export const daoMultisigDef = defineFiberApp({
472
439
  },
473
440
  // ACTIVE → DISSOLVED: dissolve (unanimous)
474
441
  {
475
- from: "ACTIVE",
476
- to: "DISSOLVED",
477
- eventName: "dissolve",
442
+ from: 'ACTIVE',
443
+ to: 'DISSOLVED',
444
+ eventName: 'dissolve',
478
445
  // S2 fix: dissolution must not trust an attacker-supplied count. Derive
479
446
  // unanimity from the CHAIN-VERIFIED signers — every signer in state.signers
480
447
  // must be among proofs[].address (with a non-empty belt). signers is an array.
481
448
  guard: {
482
449
  and: [
483
- { ">": [{ length: [{ var: "state.signers" }] }, 0] },
450
+ { '>': [{ length: [{ var: 'state.signers' }] }, 0] },
484
451
  {
485
452
  all: [
486
- { var: "state.signers" },
453
+ { var: 'state.signers' },
487
454
  {
488
- in: [
489
- { var: "" },
490
- { map: [{ var: "proofs" }, { var: "address" }] },
491
- ],
455
+ in: [{ var: '' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
492
456
  },
493
457
  ],
494
458
  },
495
459
  ],
496
460
  },
497
461
  effect: {
498
- merge: [
499
- { var: "state" },
500
- { dissolvedAt: { var: "$ordinal" }, status: "DISSOLVED" },
501
- ],
462
+ merge: [{ var: 'state' }, { dissolvedAt: { var: '$ordinal' }, status: 'DISSOLVED' }],
502
463
  },
503
464
  dependencies: [],
504
465
  },