@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
@@ -7,119 +7,113 @@ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
7
7
  */
8
8
  exports.marketUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
9
9
  metadata: {
10
- name: "MarketUniversal",
11
- app: "markets",
12
- type: "universal",
13
- version: "1.0.0",
14
- description: "Minimal market state machine - extend for custom use cases",
10
+ name: 'MarketUniversal',
11
+ app: 'markets',
12
+ type: 'universal',
13
+ version: '1.0.0',
14
+ description: 'Minimal market state machine - extend for custom use cases',
15
15
  },
16
16
  createSchema: {
17
17
  properties: {},
18
18
  },
19
19
  stateSchema: {
20
20
  properties: {
21
- status: { type: "string" },
22
- totalCommitted: { type: "number", computed: true },
21
+ status: { type: 'string' },
22
+ totalCommitted: { type: 'number', computed: true },
23
23
  },
24
24
  },
25
25
  eventSchemas: {
26
- open: { description: "Open the market for participation" },
27
- cancel: { description: "Cancel the market" },
26
+ open: { description: 'Open the market for participation' },
27
+ cancel: { description: 'Cancel the market' },
28
28
  commit: {
29
- description: "Commit funds to the market",
29
+ description: 'Commit funds to the market',
30
30
  properties: {
31
- amount: { type: "number", minimum: 0 },
31
+ amount: { type: 'number', minimum: 0 },
32
32
  },
33
33
  },
34
- close: { description: "Close the market to new commits" },
35
- settle: { description: "Settle the market" },
34
+ close: { description: 'Close the market to new commits' },
35
+ settle: { description: 'Settle the market' },
36
36
  },
37
37
  states: {
38
38
  PROPOSED: {
39
- id: "PROPOSED",
39
+ id: 'PROPOSED',
40
40
  isFinal: false,
41
41
  metadata: {
42
- label: "Proposed",
43
- description: "Market created but not yet open",
44
- category: "initial",
42
+ label: 'Proposed',
43
+ description: 'Market created but not yet open',
44
+ category: 'initial',
45
45
  },
46
46
  },
47
47
  OPEN: {
48
- id: "OPEN",
48
+ id: 'OPEN',
49
49
  isFinal: false,
50
50
  metadata: {
51
- label: "Open",
52
- description: "Market is open for participation",
53
- category: "active",
51
+ label: 'Open',
52
+ description: 'Market is open for participation',
53
+ category: 'active',
54
54
  },
55
55
  },
56
56
  CLOSED: {
57
- id: "CLOSED",
57
+ id: 'CLOSED',
58
58
  isFinal: false,
59
59
  metadata: {
60
- label: "Closed",
61
- description: "Participation closed; awaiting settlement",
62
- category: "pending",
60
+ label: 'Closed',
61
+ description: 'Participation closed; awaiting settlement',
62
+ category: 'pending',
63
63
  },
64
64
  },
65
65
  SETTLED: {
66
- id: "SETTLED",
66
+ id: 'SETTLED',
67
67
  isFinal: true,
68
68
  metadata: {
69
- label: "Settled",
70
- description: "Market settled and payouts available (terminal)",
71
- category: "terminal",
69
+ label: 'Settled',
70
+ description: 'Market settled and payouts available (terminal)',
71
+ category: 'terminal',
72
72
  },
73
73
  },
74
74
  CANCELLED: {
75
- id: "CANCELLED",
75
+ id: 'CANCELLED',
76
76
  isFinal: true,
77
77
  metadata: {
78
- label: "Cancelled",
79
- description: "Market cancelled before settlement (terminal)",
80
- category: "terminal",
78
+ label: 'Cancelled',
79
+ description: 'Market cancelled before settlement (terminal)',
80
+ category: 'terminal',
81
81
  },
82
82
  },
83
83
  },
84
- initialState: "PROPOSED",
84
+ initialState: 'PROPOSED',
85
85
  transitions: [
86
86
  {
87
- from: "PROPOSED",
88
- to: "OPEN",
89
- eventName: "open",
90
- guard: { "==": [1, 1] },
87
+ from: 'PROPOSED',
88
+ to: 'OPEN',
89
+ eventName: 'open',
90
+ guard: { '==': [1, 1] },
91
91
  effect: {
92
- merge: [
93
- { var: "state" },
94
- { status: "OPEN", openedAt: { var: "$ordinal" } },
95
- ],
92
+ merge: [{ var: 'state' }, { status: 'OPEN', openedAt: { var: '$ordinal' } }],
96
93
  },
97
94
  dependencies: [],
98
95
  },
99
96
  {
100
- from: "PROPOSED",
101
- to: "CANCELLED",
102
- eventName: "cancel",
103
- guard: { "==": [1, 1] },
97
+ from: 'PROPOSED',
98
+ to: 'CANCELLED',
99
+ eventName: 'cancel',
100
+ guard: { '==': [1, 1] },
104
101
  effect: {
105
- merge: [
106
- { var: "state" },
107
- { status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
108
- ],
102
+ merge: [{ var: 'state' }, { status: 'CANCELLED', cancelledAt: { var: '$ordinal' } }],
109
103
  },
110
104
  dependencies: [],
111
105
  },
112
106
  {
113
- from: "OPEN",
114
- to: "OPEN",
115
- eventName: "commit",
116
- guard: { ">": [{ var: "event.amount" }, 0] },
107
+ from: 'OPEN',
108
+ to: 'OPEN',
109
+ eventName: 'commit',
110
+ guard: { '>': [{ var: 'event.amount' }, 0] },
117
111
  effect: {
118
112
  merge: [
119
- { var: "state" },
113
+ { var: 'state' },
120
114
  {
121
115
  totalCommitted: {
122
- "+": [{ var: "state.totalCommitted" }, { var: "event.amount" }],
116
+ '+': [{ var: 'state.totalCommitted' }, { var: 'event.amount' }],
123
117
  },
124
118
  },
125
119
  ],
@@ -127,41 +121,32 @@ exports.marketUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
127
121
  dependencies: [],
128
122
  },
129
123
  {
130
- from: "OPEN",
131
- to: "CLOSED",
132
- eventName: "close",
133
- guard: { "==": [1, 1] },
124
+ from: 'OPEN',
125
+ to: 'CLOSED',
126
+ eventName: 'close',
127
+ guard: { '==': [1, 1] },
134
128
  effect: {
135
- merge: [
136
- { var: "state" },
137
- { status: "CLOSED", closedAt: { var: "$ordinal" } },
138
- ],
129
+ merge: [{ var: 'state' }, { status: 'CLOSED', closedAt: { var: '$ordinal' } }],
139
130
  },
140
131
  dependencies: [],
141
132
  },
142
133
  {
143
- from: "CLOSED",
144
- to: "SETTLED",
145
- eventName: "settle",
146
- guard: { "==": [1, 1] },
134
+ from: 'CLOSED',
135
+ to: 'SETTLED',
136
+ eventName: 'settle',
137
+ guard: { '==': [1, 1] },
147
138
  effect: {
148
- merge: [
149
- { var: "state" },
150
- { status: "SETTLED", settledAt: { var: "$ordinal" } },
151
- ],
139
+ merge: [{ var: 'state' }, { status: 'SETTLED', settledAt: { var: '$ordinal' } }],
152
140
  },
153
141
  dependencies: [],
154
142
  },
155
143
  {
156
- from: "CLOSED",
157
- to: "CANCELLED",
158
- eventName: "cancel",
159
- guard: { "==": [1, 1] },
144
+ from: 'CLOSED',
145
+ to: 'CANCELLED',
146
+ eventName: 'cancel',
147
+ guard: { '==': [1, 1] },
160
148
  effect: {
161
- merge: [
162
- { var: "state" },
163
- { status: "CANCELLED", cancelledAt: { var: "$ordinal" } },
164
- ],
149
+ merge: [{ var: 'state' }, { status: 'CANCELLED', cancelledAt: { var: '$ordinal' } }],
165
150
  },
166
151
  dependencies: [],
167
152
  },
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "oracleStateToJSON", { enumerable: true, get: fun
26
26
  const index_js_2 = require("../identity/index.js");
27
27
  /** @deprecated Use `getIdentityDefinition('oracle')` from `@ottochain/sdk/apps/identity` */
28
28
  function getOracleDefinition(_type) {
29
- return (0, index_js_2.getIdentityDefinition)("oracle");
29
+ return (0, index_js_2.getIdentityDefinition)('oracle');
30
30
  }
31
31
  /** @deprecated Use `DEFAULT_REPUTATION_CONFIG` from `@ottochain/sdk/apps/identity` */
32
32
  exports.DEFAULT_ORACLE_CONFIG = {
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Privacy Application — note-layer privacy primitives.
4
+ *
5
+ * Σ-protocol / ZK-backed fibers that carry real privacy on the OttoChain note
6
+ * layer. The flagship is `sigma-mixer`, a CDS OR-of-`dhtuple` ring mixer whose
7
+ * anonymity comes from a `sigma_verify` ring proof and whose double-spend safety
8
+ * comes from a witness-bound nullifier (`Nf = x_j·H`, `H` a NUMS base of unknown
9
+ * dlog w.r.t. `G`).
10
+ *
11
+ * The std-lib UTXO primitive is `shielded-note-pool` ({@link notePoolDef}): a
12
+ * fixed-denomination Tornado-style private asset pool over the `zk-shielded`
13
+ * Groth16 circuit. ⚠ UNAUDITED / TEST-ASSETS-ONLY (BN254 ~100-bit, single trusted
14
+ * relayer for root advancement) — see note-pool.ts.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { getPrivacyDefinition, PRIVACY_DEFINITIONS, sigmaDdhRingOf, notePoolDef } from '@ottochain/sdk/apps/privacy';
19
+ *
20
+ * const mixerDef = getPrivacyDefinition('sigma-mixer');
21
+ * // Build a custom n-member OR-of-dhtuple proposition for an audited H:
22
+ * const prop = sigmaDdhRingOf('state.points', 'event.nullifier', G_HEX, H_HEX, 8);
23
+ * // Instantiate a shielded note-pool (pin the circuit vkey + denomination + relayer):
24
+ * const pool = notePoolDef({ vkey, depth: 8, denom: 100, poolPolicyRef, feeAsset, relayer });
25
+ * ```
26
+ *
27
+ * @packageDocumentation
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.PRIVACY_DEFINITIONS = exports.shieldedNotePoolDef = exports.pmtMembership = exports.pvField = exports.ZERO_WORD = exports.PV_LAYOUT = exports.NOTE_POOL_STATE = exports.notePoolDef = exports.sigmaDdhRingOf = exports.mixerDdhRingDef = void 0;
31
+ exports.getPrivacyDefinition = getPrivacyDefinition;
32
+ const index_js_1 = require("./state-machines/index.js");
33
+ Object.defineProperty(exports, "mixerDdhRingDef", { enumerable: true, get: function () { return index_js_1.mixerDdhRingDef; } });
34
+ Object.defineProperty(exports, "sigmaDdhRingOf", { enumerable: true, get: function () { return index_js_1.sigmaDdhRingOf; } });
35
+ Object.defineProperty(exports, "notePoolDef", { enumerable: true, get: function () { return index_js_1.notePoolDef; } });
36
+ Object.defineProperty(exports, "NOTE_POOL_STATE", { enumerable: true, get: function () { return index_js_1.NOTE_POOL_STATE; } });
37
+ Object.defineProperty(exports, "PV_LAYOUT", { enumerable: true, get: function () { return index_js_1.PV_LAYOUT; } });
38
+ Object.defineProperty(exports, "ZERO_WORD", { enumerable: true, get: function () { return index_js_1.ZERO_WORD; } });
39
+ Object.defineProperty(exports, "pvField", { enumerable: true, get: function () { return index_js_1.pvField; } });
40
+ Object.defineProperty(exports, "pmtMembership", { enumerable: true, get: function () { return index_js_1.pmtMembership; } });
41
+ /**
42
+ * A documented DEFAULT shielded-note-pool instance for the registry/lint surface, with PLACEHOLDER
43
+ * pin values (the real vkey comes from the SP1 `zk-shielded` toolchain; relayer/policy are
44
+ * deployment-specific). Downstream callers should build their own via {@link notePoolDef}; this
45
+ * instance exists so the privacy app group exposes a concrete `shielded-note-pool` definition.
46
+ * ⚠ UNAUDITED / TEST-ASSETS-ONLY.
47
+ */
48
+ exports.shieldedNotePoolDef = (0, index_js_1.notePoolDef)({
49
+ vkey: index_js_1.ZERO_WORD,
50
+ depth: 8,
51
+ denom: 100,
52
+ poolPolicyRef: 'std.privacy.note-pool',
53
+ feeAsset: index_js_1.ZERO_WORD,
54
+ relayer: 'DAG0000000000000000000000000000000000000000',
55
+ });
56
+ /** All privacy (note-layer) state machine definitions. */
57
+ exports.PRIVACY_DEFINITIONS = {
58
+ 'sigma-mixer': index_js_1.mixerDdhRingDef,
59
+ 'shielded-note-pool': exports.shieldedNotePoolDef,
60
+ };
61
+ /**
62
+ * Get a privacy state machine definition by type.
63
+ * @param type - 'sigma-mixer' (default) | 'shielded-note-pool'.
64
+ */
65
+ function getPrivacyDefinition(type = 'sigma-mixer') {
66
+ return exports.PRIVACY_DEFINITIONS[type];
67
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * Privacy (note-layer) state machine definitions.
4
+ * Re-exports from TypeScript definition files.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.pmtMembership = exports.pvField = exports.ZERO_WORD = exports.PV_LAYOUT = exports.NOTE_POOL_STATE = exports.notePoolDef = exports.sigmaDdhRingOf = exports.mixerDdhRingDef = void 0;
8
+ var mixer_ddhRing_js_1 = require("./mixer-ddhRing.js");
9
+ Object.defineProperty(exports, "mixerDdhRingDef", { enumerable: true, get: function () { return mixer_ddhRing_js_1.mixerDdhRingDef; } });
10
+ Object.defineProperty(exports, "sigmaDdhRingOf", { enumerable: true, get: function () { return mixer_ddhRing_js_1.sigmaDdhRingOf; } });
11
+ var note_pool_js_1 = require("./note-pool.js");
12
+ Object.defineProperty(exports, "notePoolDef", { enumerable: true, get: function () { return note_pool_js_1.notePoolDef; } });
13
+ Object.defineProperty(exports, "NOTE_POOL_STATE", { enumerable: true, get: function () { return note_pool_js_1.NOTE_POOL_STATE; } });
14
+ Object.defineProperty(exports, "PV_LAYOUT", { enumerable: true, get: function () { return note_pool_js_1.PV_LAYOUT; } });
15
+ Object.defineProperty(exports, "ZERO_WORD", { enumerable: true, get: function () { return note_pool_js_1.ZERO_WORD; } });
16
+ Object.defineProperty(exports, "pvField", { enumerable: true, get: function () { return note_pool_js_1.pvField; } });
17
+ Object.defineProperty(exports, "pmtMembership", { enumerable: true, get: function () { return note_pool_js_1.pmtMembership; } });
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mixerDdhRingDef = void 0;
4
+ exports.sigmaDdhRingOf = sigmaDdhRingOf;
5
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
6
+ /**
7
+ * sigma-mixer — a CDS OR-of-`dhtuple` Σ-protocol ring mixer.
8
+ *
9
+ * Anonymity comes from a Cramer–Damgård–Schoenmakers OR-proof over the deposited
10
+ * ring, verified by the `sigma_verify` JLVM opcode; double-spend safety comes
11
+ * from a WITNESS-BOUND nullifier carried as the shared DDH point of an
12
+ * OR-of-`dhtuple` proposition.
13
+ *
14
+ * Each ring branch is a DDH tuple `dhtuple(G, H, P_i, Nf)`. A satisfied dhtuple
15
+ * proves knowledge of one `x` with `P_i = x·G` AND `Nf = x·H` (the verifier uses
16
+ * a SINGLE shared response `z` for both coordinate reconstructions
17
+ * `a1 = z·G − e·P_i`, `a2 = z·H − e·Nf`). The OR uses the SAME
18
+ * `v = event.nullifier` in every branch, so it hides which branch while forcing
19
+ * `event.nullifier = x_j·H` for the one real branch `j`. With `H` a NUMS base of
20
+ * unknown dlog w.r.t. `G`, the map `x ↦ x·H` is injective, so the nullifier is
21
+ * cryptographically bound to the proven secret — closing the
22
+ * witness-unbound-nullifier double-spend hole an OR-of-`dlog` ring leaves open.
23
+ *
24
+ * Verified against `@constellation-network/metagraph-sdk-jlvm@1.8.0-rc.5`: the
25
+ * `sigma_verify` dhtuple operands are exactly `["type","g","h","u","v"]` (each a
26
+ * 64-byte G1 hex), the OR child challenges XOR to the node challenge, and the
27
+ * strong-FS root challenge folds the bound message. Array append uses `merge`
28
+ * (`merge([arr,[item]])` flattens one level == append). All operators used
29
+ * (`sigma_verify`, `has`, `set`, `none`, `cat`, `substr`, `merge`) are in
30
+ * KNOWN_OPERATORS.
31
+ *
32
+ * SCOPE: this base definition is CRYPTO + LIFECYCLE. Production custody
33
+ * (`_transferAsset` in on deposit / out on withdraw), a signer-bound deposit-auth
34
+ * clause, and a `mixerId`-prefixed bound message are layered on by a downstream
35
+ * specialization (see the §8 production-hardening note in the design doc).
36
+ */
37
+ // =============================================================================
38
+ // sigmaDdhRingOf — the OR-of-dhtuple proposition builder
39
+ // =============================================================================
40
+ /**
41
+ * Emit the `or`-of-`dhtuple` proposition for an `n`-member ring, unrolling
42
+ * `{"var":"<pointsVar>.k"}` for `k in 0..n-1` as the `u` (commitment) of each
43
+ * branch, with `g = gHex`, `h = hHex` (literal 64-byte G1 hex) and a shared
44
+ * `v = {"var":"<nullifierVar>"}` across ALL branches.
45
+ *
46
+ * `n` is FIXED at definition time (the proposition shape is closed). `u` and `v`
47
+ * are `{"var":...}` map-node values that the evaluator resolves element-wise.
48
+ *
49
+ * @param pointsVar state var holding the ordered ring points, e.g. `"state.points"`.
50
+ * @param nullifierVar event var holding the revealed nullifier, e.g. `"event.nullifier"`.
51
+ * @param gHex the verifier generator `G=(1,2)` as 64-byte `0x` hex.
52
+ * @param hHex the NUMS second base `H` as 64-byte `0x` hex (unknown dlog wrt G).
53
+ * @param n ring size (number of unrolled branches).
54
+ */
55
+ function sigmaDdhRingOf(pointsVar, nullifierVar, gHex, hHex, n) {
56
+ const children = [];
57
+ for (let k = 0; k < n; k++) {
58
+ children.push({
59
+ type: 'dhtuple',
60
+ g: gHex,
61
+ h: hHex,
62
+ u: { var: `${pointsVar}.${k}` },
63
+ v: { var: nullifierVar },
64
+ });
65
+ }
66
+ return { type: 'or', children };
67
+ }
68
+ /**
69
+ * The shared withdraw verify clauses (ring proof ∧ freshness ∧ recipient-bind).
70
+ * The lifecycle clause (`→drained` vs `→open`) is appended per transition.
71
+ */
72
+ function withdrawVerifyClauses(gHex, hHex, n) {
73
+ return [
74
+ {
75
+ sigma_verify: [
76
+ sigmaDdhRingOf('state.points', 'event.nullifier', gHex, hHex, n),
77
+ { var: 'event.proof' },
78
+ { var: 'event.message' },
79
+ ],
80
+ },
81
+ // Double-withdraw prevention: the witness-bound nullifier must be unseen.
82
+ { '!': { has: [{ var: 'state.spentNullifiers' }, { var: 'event.nullifier' }] } },
83
+ // Recipient binding (anti-front-run): message == Nf ‖ recipientHex.
84
+ {
85
+ '===': [
86
+ { var: 'event.message' },
87
+ {
88
+ cat: ['0x', { substr: [{ var: 'event.nullifier' }, 2] }, { substr: [{ var: 'event.recipientHex' }, 2] }],
89
+ },
90
+ ],
91
+ },
92
+ ];
93
+ }
94
+ // The withdraw effect: record the nullifier, advance the counter (+ optional status).
95
+ function withdrawEffect(extra) {
96
+ return {
97
+ merge: [
98
+ { var: 'state' },
99
+ {
100
+ spentNullifiers: {
101
+ set: [{ var: 'state.spentNullifiers' }, { var: 'event.nullifier' }, true],
102
+ },
103
+ withdrawCount: { '+': [{ var: 'state.withdrawCount' }, 1] },
104
+ ...extra,
105
+ },
106
+ ],
107
+ };
108
+ }
109
+ // G=(1,2) and the NUMS H are the e2e defaults (derived by scripts/gen-sigma-mixer-fixture.ts).
110
+ // Downstream apps pass their own audited H via the builder; these are the pinned-ring v1 demo values.
111
+ const G_HEX = '0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002';
112
+ const H_HEX = '0x039c846e3a79217fd140d094eec09fe4f398085d01dee70506edde1eb6a9d81608922722cc3a6c3a7ae4929e78e82dc5f25e91598a69f7f8b9b3adb95badb3d0';
113
+ const RING_N = 4;
114
+ /**
115
+ * sigma-mixer fiber definition (pinned-ring v1, n=4).
116
+ *
117
+ * Trust model: PUBLIC. Anyone may deposit a ring point or submit a withdrawal.
118
+ * Privacy = a CDS OR-proof hides which of the n branches is being spent;
119
+ * anonymity set = exactly n (the ring size is public). Double-spend safety =
120
+ * the witness-bound nullifier + spent-set. Replay/front-run safety = the
121
+ * message-bound recipient.
122
+ */
123
+ exports.mixerDdhRingDef = (0, fiber_app_js_1.defineFiberApp)({
124
+ metadata: {
125
+ name: 'MixerDdhRing',
126
+ app: 'privacy',
127
+ type: 'sigma-mixer',
128
+ version: '1.0.0',
129
+ description: 'CDS OR-of-dhtuple Σ-protocol ring mixer. Anonymity via sigma_verify over an ' +
130
+ 'OR of DDH tuples (G,H,P_i,nullifier); the revealed nullifier Nf=x_j·H is ' +
131
+ 'witness-bound (H has unknown dlog wrt G), closing the ring-drain double-spend. ' +
132
+ 'Frozen-ring lifecycle (filling→open→drained) + message-bound recipient.',
133
+ },
134
+ createSchema: {
135
+ required: ['mixerId', 'denomination', 'anonymityTarget'],
136
+ properties: {
137
+ mixerId: { type: 'string', immutable: true, description: 'Mixer instance id.' },
138
+ denomination: {
139
+ type: 'integer',
140
+ immutable: true,
141
+ description: 'Equal denomination per deposit/withdraw (production custody).',
142
+ },
143
+ nullifierBaseH: {
144
+ type: 'string',
145
+ immutable: true,
146
+ description: 'The NUMS second base H (64B G1 hex); informational — H is inlined in the proposition.',
147
+ },
148
+ anonymityTarget: {
149
+ type: 'integer',
150
+ immutable: true,
151
+ description: 'Ring size n; the ring opens once depositCount == anonymityTarget.',
152
+ },
153
+ points: {
154
+ type: 'array',
155
+ items: { type: 'string' },
156
+ default: [],
157
+ description: 'Ordered ring commitments P_i = x_i·G (64B G1 hex).',
158
+ },
159
+ spentNullifiers: {
160
+ type: 'object',
161
+ default: {},
162
+ description: 'FLAT map nullifierHex -> true. MUST be {} (never null): has/set throw on null.',
163
+ },
164
+ depositCount: { type: 'integer', default: 0 },
165
+ withdrawCount: { type: 'integer', default: 0 },
166
+ status: { type: 'string', default: 'filling', description: 'filling → open → drained.' },
167
+ },
168
+ },
169
+ stateSchema: {
170
+ properties: {
171
+ mixerId: { type: 'string', immutable: true },
172
+ denomination: { type: 'integer', immutable: true },
173
+ nullifierBaseH: { type: 'string', immutable: true },
174
+ anonymityTarget: { type: 'integer', immutable: true },
175
+ points: { type: 'array', items: { type: 'string' }, computed: true },
176
+ spentNullifiers: { type: 'object', computed: true },
177
+ depositCount: { type: 'integer', computed: true },
178
+ withdrawCount: { type: 'integer', computed: true },
179
+ status: { type: 'string', computed: true },
180
+ },
181
+ },
182
+ eventSchemas: {
183
+ deposit: { description: 'Register a ring commitment point P_i = x_i·G.' },
184
+ withdraw: {
185
+ description: 'Spend one ring slot: a CDS OR-of-dhtuple proof + witness-bound nullifier + bound recipient.',
186
+ },
187
+ },
188
+ states: {
189
+ filling: {
190
+ id: 'filling',
191
+ isFinal: false,
192
+ metadata: { label: 'Filling', description: 'Ring accepting deposits.', category: 'active' },
193
+ },
194
+ open: {
195
+ id: 'open',
196
+ isFinal: false,
197
+ metadata: { label: 'Open', description: 'Ring frozen; withdrawals allowed.', category: 'active' },
198
+ },
199
+ drained: {
200
+ id: 'drained',
201
+ isFinal: true,
202
+ metadata: { label: 'Drained', description: 'All slots withdrawn; one-shot.', category: 'terminal' },
203
+ },
204
+ },
205
+ initialState: 'filling',
206
+ // ORDER IS LOAD-BEARING: the open-flip deposit is declared FIRST (exact
207
+ // boundary), the drained-flip withdraw is declared FIRST (exact boundary).
208
+ transitions: [
209
+ // Deposit A — the LAST deposit: filling → open. Declared FIRST.
210
+ {
211
+ from: 'filling',
212
+ to: 'open',
213
+ eventName: 'deposit',
214
+ guard: {
215
+ and: [
216
+ { '===': [{ '+': [{ var: 'state.depositCount' }, 1] }, { var: 'state.anonymityTarget' }] },
217
+ { '!!': [{ var: 'event.point' }] },
218
+ { none: [{ var: 'state.points' }, { '===': [{ var: '' }, { var: 'event.point' }] }] },
219
+ ],
220
+ },
221
+ effect: {
222
+ merge: [
223
+ { var: 'state' },
224
+ {
225
+ // Array append = merge([arr,[item]]) (verified: opMerge flattens one level).
226
+ points: { merge: [{ var: 'state.points' }, [{ var: 'event.point' }]] },
227
+ depositCount: { '+': [{ var: 'state.depositCount' }, 1] },
228
+ status: 'open',
229
+ },
230
+ ],
231
+ },
232
+ dependencies: [],
233
+ },
234
+ // Deposit B — not-yet-last: filling → filling. Declared SECOND.
235
+ {
236
+ from: 'filling',
237
+ to: 'filling',
238
+ eventName: 'deposit',
239
+ guard: {
240
+ and: [
241
+ { '<': [{ '+': [{ var: 'state.depositCount' }, 1] }, { var: 'state.anonymityTarget' }] },
242
+ { '!!': [{ var: 'event.point' }] },
243
+ { none: [{ var: 'state.points' }, { '===': [{ var: '' }, { var: 'event.point' }] }] },
244
+ ],
245
+ },
246
+ effect: {
247
+ merge: [
248
+ { var: 'state' },
249
+ {
250
+ points: { merge: [{ var: 'state.points' }, [{ var: 'event.point' }]] },
251
+ depositCount: { '+': [{ var: 'state.depositCount' }, 1] },
252
+ },
253
+ ],
254
+ },
255
+ dependencies: [],
256
+ },
257
+ // Withdraw → drained (the LAST withdrawal). Declared FIRST.
258
+ {
259
+ from: 'open',
260
+ to: 'drained',
261
+ eventName: 'withdraw',
262
+ guard: {
263
+ and: [
264
+ ...withdrawVerifyClauses(G_HEX, H_HEX, RING_N),
265
+ { '===': [{ '+': [{ var: 'state.withdrawCount' }, 1] }, { var: 'state.anonymityTarget' }] },
266
+ ],
267
+ },
268
+ effect: withdrawEffect({ status: 'drained' }),
269
+ dependencies: [],
270
+ },
271
+ // Withdraw → open (not-yet-last). Declared SECOND.
272
+ {
273
+ from: 'open',
274
+ to: 'open',
275
+ eventName: 'withdraw',
276
+ guard: {
277
+ and: [
278
+ ...withdrawVerifyClauses(G_HEX, H_HEX, RING_N),
279
+ { '<': [{ '+': [{ var: 'state.withdrawCount' }, 1] }, { var: 'state.anonymityTarget' }] },
280
+ ],
281
+ },
282
+ effect: withdrawEffect({}),
283
+ dependencies: [],
284
+ },
285
+ ],
286
+ });