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