@ottochain/sdk 2.0.0 → 2.1.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 (142) hide show
  1. package/dist/cjs/apps/contracts/index.js +1 -1
  2. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +272 -0
  3. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +284 -0
  4. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +93 -0
  5. package/dist/cjs/apps/contracts/state-machines/index.js +177 -1
  6. package/dist/cjs/apps/corporate/state-machines/corp-board.js +1022 -0
  7. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +671 -0
  8. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +998 -0
  9. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +1102 -0
  10. package/dist/cjs/apps/corporate/state-machines/index.js +20 -4440
  11. package/dist/cjs/apps/governance/index.js +7 -7
  12. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +467 -0
  13. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +458 -0
  14. package/dist/cjs/apps/governance/state-machines/dao-single.js +199 -0
  15. package/dist/cjs/apps/governance/state-machines/dao-token.js +503 -0
  16. package/dist/cjs/apps/governance/state-machines/governance-simple.js +482 -0
  17. package/dist/cjs/apps/governance/state-machines/governance-universal.js +138 -0
  18. package/dist/cjs/apps/governance/state-machines/index.js +16 -2934
  19. package/dist/cjs/apps/identity/constants.js +28 -14
  20. package/dist/cjs/apps/identity/index.js +27 -12
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +256 -0
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +321 -0
  23. package/dist/cjs/apps/identity/state-machines/identity-universal.js +106 -0
  24. package/dist/cjs/apps/identity/state-machines/index.js +15 -784
  25. package/dist/cjs/apps/markets/index.js +1 -1
  26. package/dist/cjs/apps/markets/state-machines/index.js +14 -2298
  27. package/dist/cjs/apps/markets/state-machines/market-auction.js +283 -0
  28. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +312 -0
  29. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +407 -0
  30. package/dist/cjs/apps/markets/state-machines/market-prediction.js +485 -0
  31. package/dist/cjs/apps/markets/state-machines/market-universal.js +129 -0
  32. package/dist/cjs/apps/oracles/index.js +36 -0
  33. package/dist/cjs/generated/google/protobuf/struct.js +1 -1
  34. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  35. package/dist/cjs/generated/index.js +26 -22
  36. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  37. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  38. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  39. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +12 -12
  40. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1688 -0
  41. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  42. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  43. package/dist/cjs/generated/ottochain/v1/fiber.js +1 -1
  44. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  45. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  46. package/dist/cjs/schema/fiber-app.js +55 -0
  47. package/dist/cjs/schema/index.js +20 -0
  48. package/dist/esm/apps/contracts/index.js +3 -3
  49. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +269 -0
  50. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +281 -0
  51. package/dist/esm/apps/contracts/state-machines/contract-universal.js +90 -0
  52. package/dist/esm/apps/contracts/state-machines/index.js +177 -1
  53. package/dist/esm/apps/corporate/index.js +3 -3
  54. package/dist/esm/apps/corporate/state-machines/corp-board.js +1019 -0
  55. package/dist/esm/apps/corporate/state-machines/corp-entity.js +668 -0
  56. package/dist/esm/apps/corporate/state-machines/corp-securities.js +995 -0
  57. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +1099 -0
  58. package/dist/esm/apps/corporate/state-machines/index.js +15 -4439
  59. package/dist/esm/apps/governance/index.js +9 -9
  60. package/dist/esm/apps/governance/state-machines/dao-multisig.js +464 -0
  61. package/dist/esm/apps/governance/state-machines/dao-reputation.js +455 -0
  62. package/dist/esm/apps/governance/state-machines/dao-single.js +196 -0
  63. package/dist/esm/apps/governance/state-machines/dao-token.js +500 -0
  64. package/dist/esm/apps/governance/state-machines/governance-simple.js +479 -0
  65. package/dist/esm/apps/governance/state-machines/governance-universal.js +135 -0
  66. package/dist/esm/apps/governance/state-machines/index.js +9 -2933
  67. package/dist/esm/apps/identity/constants.js +28 -14
  68. package/dist/esm/apps/identity/index.js +7 -5
  69. package/dist/esm/apps/identity/state-machines/identity-agent.js +253 -0
  70. package/dist/esm/apps/identity/state-machines/identity-oracle.js +318 -0
  71. package/dist/esm/apps/identity/state-machines/identity-universal.js +103 -0
  72. package/dist/esm/apps/identity/state-machines/index.js +11 -783
  73. package/dist/esm/apps/index.js +5 -5
  74. package/dist/esm/apps/markets/index.js +3 -3
  75. package/dist/esm/apps/markets/state-machines/index.js +8 -2297
  76. package/dist/esm/apps/markets/state-machines/market-auction.js +280 -0
  77. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +309 -0
  78. package/dist/esm/apps/markets/state-machines/market-group-buy.js +404 -0
  79. package/dist/esm/apps/markets/state-machines/market-prediction.js +482 -0
  80. package/dist/esm/apps/markets/state-machines/market-universal.js +126 -0
  81. package/dist/esm/apps/oracles/index.js +21 -0
  82. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  83. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  84. package/dist/esm/generated/index.js +8 -4
  85. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  86. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  87. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  88. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +2 -2
  89. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1676 -0
  90. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  91. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  92. package/dist/esm/generated/ottochain/v1/fiber.js +1 -1
  93. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  94. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  95. package/dist/esm/schema/fiber-app.js +47 -0
  96. package/dist/esm/schema/index.js +4 -0
  97. package/dist/types/apps/contracts/index.d.ts +151 -2
  98. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +462 -0
  99. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +511 -0
  100. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +147 -0
  101. package/dist/types/apps/contracts/state-machines/index.d.ts +149 -0
  102. package/dist/types/apps/corporate/index.d.ts +5263 -3825
  103. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +1479 -0
  104. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +970 -0
  105. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +1381 -0
  106. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +1631 -0
  107. package/dist/types/apps/corporate/state-machines/index.d.ts +5245 -3802
  108. package/dist/types/apps/governance/index.d.ts +875 -37
  109. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +644 -0
  110. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +610 -0
  111. package/dist/types/apps/governance/state-machines/dao-single.d.ts +276 -0
  112. package/dist/types/apps/governance/state-machines/dao-token.d.ts +601 -0
  113. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +652 -0
  114. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +181 -0
  115. package/dist/types/apps/governance/state-machines/index.d.ts +9 -2136
  116. package/dist/types/apps/identity/constants.d.ts +8 -6
  117. package/dist/types/apps/identity/index.d.ts +1078 -577
  118. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +401 -0
  119. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +550 -0
  120. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +151 -0
  121. package/dist/types/apps/identity/state-machines/index.d.ts +1069 -567
  122. package/dist/types/apps/index.d.ts +5 -5
  123. package/dist/types/apps/markets/index.d.ts +535 -7
  124. package/dist/types/apps/markets/state-machines/index.d.ts +8 -1678
  125. package/dist/types/apps/markets/state-machines/market-auction.d.ts +392 -0
  126. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +443 -0
  127. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +539 -0
  128. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +651 -0
  129. package/dist/types/apps/markets/state-machines/market-universal.d.ts +191 -0
  130. package/dist/types/apps/oracles/index.d.ts +18 -0
  131. package/dist/types/generated/index.d.ts +3 -2
  132. package/dist/types/generated/ottochain/apps/identity/v1/attestation.d.ts +1 -1
  133. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +187 -0
  134. package/dist/types/schema/fiber-app.d.ts +139 -0
  135. package/dist/types/schema/index.d.ts +4 -0
  136. package/package.json +1 -1
  137. package/dist/cjs/generated/ottochain/apps/identity/v1/agent.js +0 -619
  138. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle.js +0 -1223
  139. package/dist/esm/generated/ottochain/apps/identity/v1/agent.js +0 -610
  140. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle.js +0 -1217
  141. package/dist/types/generated/ottochain/apps/identity/v1/agent.d.ts +0 -94
  142. package/dist/types/generated/ottochain/apps/oracles/v1/oracle.d.ts +0 -150
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.marketAuctionDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Auction market supporting English, Dutch, and sealed-bid variants.
7
+ */
8
+ exports.marketAuctionDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "MarketAuction",
11
+ app: "markets",
12
+ type: "auction",
13
+ version: "1.0.0",
14
+ description: "Auction market supporting English, Dutch, and sealed-bid variants",
15
+ crossReferences: {
16
+ sellerIdentityId: "Links to seller's IdentityAgent",
17
+ escrowId: "Links to ContractEscrow for asset custody",
18
+ },
19
+ },
20
+ createSchema: {
21
+ required: ["seller", "minBid"],
22
+ properties: {
23
+ seller: {
24
+ type: "address",
25
+ description: "DAG address of the seller",
26
+ immutable: true,
27
+ },
28
+ minBid: {
29
+ type: "number",
30
+ minimum: 0,
31
+ description: "Minimum opening bid",
32
+ immutable: true,
33
+ },
34
+ bidIncrement: {
35
+ type: "number",
36
+ minimum: 0,
37
+ description: "Minimum bid increment",
38
+ },
39
+ reservePrice: {
40
+ type: "number",
41
+ minimum: 0,
42
+ description: "Reserve price (if any)",
43
+ },
44
+ deadline: { type: "timestamp", description: "Auction deadline" },
45
+ },
46
+ },
47
+ stateSchema: {
48
+ properties: {
49
+ status: { type: "string", computed: true },
50
+ seller: { type: "address", immutable: true },
51
+ minBid: { type: "number", immutable: true },
52
+ bidIncrement: { type: "number" },
53
+ reservePrice: { type: "number" },
54
+ deadline: { type: "timestamp" },
55
+ bids: { type: "array", computed: true },
56
+ highBid: { type: "number", computed: true },
57
+ highBidder: { type: "address", computed: true },
58
+ },
59
+ },
60
+ eventSchemas: {
61
+ open: { description: "Open the auction" },
62
+ cancel: { description: "Cancel the auction" },
63
+ bid: {
64
+ description: "Place a bid",
65
+ required: ["amount"],
66
+ properties: { amount: { type: "number", minimum: 0 } },
67
+ },
68
+ close: { description: "Close bidding" },
69
+ settle: { description: "Settle with winning bidder" },
70
+ no_sale: { description: "Declare no sale (reserve not met or no bids)" },
71
+ },
72
+ states: {
73
+ PROPOSED: {
74
+ id: "PROPOSED",
75
+ isFinal: false,
76
+ metadata: { description: "Auction created but not yet open" },
77
+ },
78
+ OPEN: {
79
+ id: "OPEN",
80
+ isFinal: false,
81
+ metadata: { description: "Accepting bids" },
82
+ },
83
+ CLOSING: {
84
+ id: "CLOSING",
85
+ isFinal: false,
86
+ metadata: { description: "Bid period ended, determining winner" },
87
+ },
88
+ SETTLED: {
89
+ id: "SETTLED",
90
+ isFinal: true,
91
+ metadata: { description: "Winner determined, transfer complete" },
92
+ },
93
+ NO_SALE: {
94
+ id: "NO_SALE",
95
+ isFinal: true,
96
+ metadata: { description: "Reserve not met or no valid bids" },
97
+ },
98
+ CANCELLED: {
99
+ id: "CANCELLED",
100
+ isFinal: true,
101
+ metadata: { description: "Auction cancelled by seller" },
102
+ },
103
+ },
104
+ initialState: "PROPOSED",
105
+ transitions: [
106
+ {
107
+ from: "PROPOSED",
108
+ to: "OPEN",
109
+ eventName: "open",
110
+ guard: { "===": [{ var: "event.agent" }, { var: "state.seller" }] },
111
+ effect: {
112
+ merge: [
113
+ { var: "state" },
114
+ {
115
+ status: "OPEN",
116
+ openedAt: { var: "$timestamp" },
117
+ bids: [],
118
+ highBid: null,
119
+ highBidder: null,
120
+ },
121
+ ],
122
+ },
123
+ dependencies: [],
124
+ },
125
+ {
126
+ from: "PROPOSED",
127
+ to: "CANCELLED",
128
+ eventName: "cancel",
129
+ guard: { "===": [{ var: "event.agent" }, { var: "state.seller" }] },
130
+ effect: {
131
+ merge: [
132
+ { var: "state" },
133
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
134
+ ],
135
+ },
136
+ dependencies: [],
137
+ },
138
+ {
139
+ from: "OPEN",
140
+ to: "OPEN",
141
+ eventName: "bid",
142
+ guard: {
143
+ and: [
144
+ { "!==": [{ var: "event.agent" }, { var: "state.seller" }] },
145
+ { ">=": [{ var: "event.amount" }, { var: "state.minBid" }] },
146
+ {
147
+ or: [
148
+ { "!": [{ var: "state.highBid" }] },
149
+ {
150
+ ">=": [
151
+ { var: "event.amount" },
152
+ {
153
+ "+": [
154
+ { var: "state.highBid" },
155
+ { var: "state.bidIncrement" },
156
+ ],
157
+ },
158
+ ],
159
+ },
160
+ ],
161
+ },
162
+ {
163
+ or: [
164
+ { "!": [{ var: "state.deadline" }] },
165
+ { "<=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
166
+ ],
167
+ },
168
+ ],
169
+ },
170
+ effect: {
171
+ merge: [
172
+ { var: "state" },
173
+ {
174
+ bids: {
175
+ cat: [
176
+ { var: "state.bids" },
177
+ [
178
+ {
179
+ bidder: { var: "event.agent" },
180
+ amount: { var: "event.amount" },
181
+ bidAt: { var: "$timestamp" },
182
+ },
183
+ ],
184
+ ],
185
+ },
186
+ highBid: { var: "event.amount" },
187
+ highBidder: { var: "event.agent" },
188
+ lastBidAt: { var: "$timestamp" },
189
+ },
190
+ ],
191
+ },
192
+ dependencies: [],
193
+ },
194
+ {
195
+ from: "OPEN",
196
+ to: "CLOSING",
197
+ eventName: "close",
198
+ guard: {
199
+ or: [
200
+ { "===": [{ var: "event.agent" }, { var: "state.seller" }] },
201
+ {
202
+ and: [
203
+ { var: "state.deadline" },
204
+ { ">=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
205
+ ],
206
+ },
207
+ ],
208
+ },
209
+ effect: {
210
+ merge: [
211
+ { var: "state" },
212
+ { status: "CLOSING", closedAt: { var: "$timestamp" } },
213
+ ],
214
+ },
215
+ dependencies: [],
216
+ },
217
+ {
218
+ from: "CLOSING",
219
+ to: "SETTLED",
220
+ eventName: "settle",
221
+ guard: {
222
+ and: [
223
+ { var: "state.highBidder" },
224
+ {
225
+ or: [
226
+ { "!": [{ var: "state.reservePrice" }] },
227
+ {
228
+ ">=": [{ var: "state.highBid" }, { var: "state.reservePrice" }],
229
+ },
230
+ ],
231
+ },
232
+ ],
233
+ },
234
+ effect: {
235
+ merge: [
236
+ { var: "state" },
237
+ {
238
+ status: "SETTLED",
239
+ settledAt: { var: "$timestamp" },
240
+ winner: { var: "state.highBidder" },
241
+ finalPrice: { var: "state.highBid" },
242
+ },
243
+ ],
244
+ },
245
+ dependencies: [],
246
+ },
247
+ {
248
+ from: "CLOSING",
249
+ to: "NO_SALE",
250
+ eventName: "no_sale",
251
+ guard: {
252
+ or: [
253
+ { "!": [{ var: "state.highBidder" }] },
254
+ {
255
+ and: [
256
+ { var: "state.reservePrice" },
257
+ {
258
+ "<": [{ var: "state.highBid" }, { var: "state.reservePrice" }],
259
+ },
260
+ ],
261
+ },
262
+ ],
263
+ },
264
+ effect: {
265
+ merge: [
266
+ { var: "state" },
267
+ {
268
+ status: "NO_SALE",
269
+ closedAt: { var: "$timestamp" },
270
+ reason: {
271
+ if: [
272
+ { "!": [{ var: "state.highBidder" }] },
273
+ "no_bids",
274
+ "reserve_not_met",
275
+ ],
276
+ },
277
+ },
278
+ ],
279
+ },
280
+ dependencies: [],
281
+ },
282
+ ],
283
+ });
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.marketCrowdfundDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * All-or-nothing crowdfunding with threshold, deadline, and stretch goals.
7
+ */
8
+ exports.marketCrowdfundDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "MarketCrowdfund",
11
+ app: "markets",
12
+ type: "crowdfund",
13
+ version: "1.0.0",
14
+ description: "All-or-nothing crowdfunding with threshold, deadline, and stretch goals",
15
+ crossReferences: {
16
+ creatorIdentityId: "Links to creator's IdentityAgent",
17
+ treasuryId: "Links to Treasury for fund custody",
18
+ },
19
+ },
20
+ createSchema: {
21
+ required: ["creator", "threshold", "deadline"],
22
+ properties: {
23
+ creator: {
24
+ type: "address",
25
+ description: "DAG address of campaign creator",
26
+ immutable: true,
27
+ },
28
+ threshold: {
29
+ type: "number",
30
+ minimum: 0,
31
+ description: "Funding goal amount",
32
+ immutable: true,
33
+ },
34
+ deadline: {
35
+ type: "timestamp",
36
+ description: "Campaign deadline",
37
+ immutable: true,
38
+ },
39
+ minPledge: {
40
+ type: "number",
41
+ minimum: 0,
42
+ description: "Minimum pledge amount",
43
+ },
44
+ stretchGoals: { type: "array", description: "Stretch goal targets" },
45
+ },
46
+ },
47
+ stateSchema: {
48
+ properties: {
49
+ status: { type: "string", computed: true },
50
+ creator: { type: "address", immutable: true },
51
+ threshold: { type: "number", immutable: true },
52
+ deadline: { type: "timestamp", immutable: true },
53
+ minPledge: { type: "number" },
54
+ stretchGoals: { type: "array" },
55
+ pledges: { type: "array", computed: true },
56
+ totalPledged: { type: "number", computed: true },
57
+ backerCount: { type: "number", computed: true },
58
+ refundsClaimed: { type: "array", computed: true },
59
+ },
60
+ },
61
+ eventSchemas: {
62
+ launch: { description: "Launch the campaign" },
63
+ cancel: { description: "Cancel the campaign" },
64
+ pledge: {
65
+ description: "Make a pledge",
66
+ required: ["amount"],
67
+ properties: {
68
+ amount: { type: "number", minimum: 0 },
69
+ rewardTier: { type: "string" },
70
+ },
71
+ },
72
+ increase_pledge: {
73
+ description: "Increase an existing pledge",
74
+ required: ["additionalAmount"],
75
+ properties: { additionalAmount: { type: "number", minimum: 0 } },
76
+ },
77
+ finalize: { description: "Finalize the campaign after deadline" },
78
+ claim_refund: { description: "Claim refund in failed campaign" },
79
+ },
80
+ states: {
81
+ PROPOSED: {
82
+ id: "PROPOSED",
83
+ isFinal: false,
84
+ metadata: { description: "Campaign created but not yet open" },
85
+ },
86
+ OPEN: {
87
+ id: "OPEN",
88
+ isFinal: false,
89
+ metadata: { description: "Accepting pledges" },
90
+ },
91
+ FUNDED: {
92
+ id: "FUNDED",
93
+ isFinal: true,
94
+ metadata: { description: "Threshold met, funds released to creator" },
95
+ },
96
+ REFUNDED: {
97
+ id: "REFUNDED",
98
+ isFinal: true,
99
+ metadata: { description: "Threshold not met, all pledges refunded" },
100
+ },
101
+ CANCELLED: {
102
+ id: "CANCELLED",
103
+ isFinal: true,
104
+ metadata: { description: "Campaign cancelled by creator" },
105
+ },
106
+ },
107
+ initialState: "PROPOSED",
108
+ transitions: [
109
+ {
110
+ from: "PROPOSED",
111
+ to: "OPEN",
112
+ eventName: "launch",
113
+ guard: { "===": [{ var: "event.agent" }, { var: "state.creator" }] },
114
+ effect: {
115
+ merge: [
116
+ { var: "state" },
117
+ {
118
+ status: "OPEN",
119
+ launchedAt: { var: "$timestamp" },
120
+ pledges: [],
121
+ totalPledged: 0,
122
+ backerCount: 0,
123
+ },
124
+ ],
125
+ },
126
+ dependencies: [],
127
+ },
128
+ {
129
+ from: "PROPOSED",
130
+ to: "CANCELLED",
131
+ eventName: "cancel",
132
+ guard: { "===": [{ var: "event.agent" }, { var: "state.creator" }] },
133
+ effect: {
134
+ merge: [
135
+ { var: "state" },
136
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
137
+ ],
138
+ },
139
+ dependencies: [],
140
+ },
141
+ {
142
+ from: "OPEN",
143
+ to: "OPEN",
144
+ eventName: "pledge",
145
+ guard: {
146
+ and: [
147
+ { ">": [{ var: "event.amount" }, 0] },
148
+ { "!==": [{ var: "event.agent" }, { var: "state.creator" }] },
149
+ {
150
+ or: [
151
+ { "!": [{ var: "state.minPledge" }] },
152
+ { ">=": [{ var: "event.amount" }, { var: "state.minPledge" }] },
153
+ ],
154
+ },
155
+ { "<=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
156
+ ],
157
+ },
158
+ effect: {
159
+ merge: [
160
+ { var: "state" },
161
+ {
162
+ pledges: {
163
+ cat: [
164
+ { var: "state.pledges" },
165
+ [
166
+ {
167
+ backer: { var: "event.agent" },
168
+ amount: { var: "event.amount" },
169
+ rewardTier: { var: "event.rewardTier" },
170
+ pledgedAt: { var: "$timestamp" },
171
+ },
172
+ ],
173
+ ],
174
+ },
175
+ totalPledged: {
176
+ "+": [{ var: "state.totalPledged" }, { var: "event.amount" }],
177
+ },
178
+ backerCount: { "+": [{ var: "state.backerCount" }, 1] },
179
+ },
180
+ ],
181
+ },
182
+ dependencies: [],
183
+ },
184
+ {
185
+ from: "OPEN",
186
+ to: "OPEN",
187
+ eventName: "increase_pledge",
188
+ guard: {
189
+ and: [
190
+ { ">": [{ var: "event.additionalAmount" }, 0] },
191
+ { "<=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
192
+ {
193
+ ">": [
194
+ {
195
+ size: {
196
+ filter: [
197
+ { var: "state.pledges" },
198
+ { "===": [{ var: "backer" }, { var: "event.agent" }] },
199
+ ],
200
+ },
201
+ },
202
+ 0,
203
+ ],
204
+ },
205
+ ],
206
+ },
207
+ effect: {
208
+ merge: [
209
+ { var: "state" },
210
+ {
211
+ totalPledged: {
212
+ "+": [
213
+ { var: "state.totalPledged" },
214
+ { var: "event.additionalAmount" },
215
+ ],
216
+ },
217
+ },
218
+ ],
219
+ },
220
+ dependencies: [],
221
+ },
222
+ {
223
+ from: "OPEN",
224
+ to: "FUNDED",
225
+ eventName: "finalize",
226
+ guard: {
227
+ and: [
228
+ { ">=": [{ var: "state.totalPledged" }, { var: "state.threshold" }] },
229
+ { ">=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
230
+ ],
231
+ },
232
+ effect: {
233
+ merge: [
234
+ { var: "state" },
235
+ {
236
+ status: "FUNDED",
237
+ fundedAt: { var: "$timestamp" },
238
+ stretchGoalsReached: {
239
+ filter: [
240
+ { var: "state.stretchGoals" },
241
+ { "<=": [{ var: "target" }, { var: "state.totalPledged" }] },
242
+ ],
243
+ },
244
+ },
245
+ ],
246
+ },
247
+ dependencies: [],
248
+ },
249
+ {
250
+ from: "OPEN",
251
+ to: "REFUNDED",
252
+ eventName: "finalize",
253
+ guard: {
254
+ and: [
255
+ { "<": [{ var: "state.totalPledged" }, { var: "state.threshold" }] },
256
+ { ">=": [{ var: "$timestamp" }, { var: "state.deadline" }] },
257
+ ],
258
+ },
259
+ effect: {
260
+ merge: [
261
+ { var: "state" },
262
+ {
263
+ status: "REFUNDED",
264
+ refundedAt: { var: "$timestamp" },
265
+ reason: "threshold_not_met",
266
+ },
267
+ ],
268
+ },
269
+ dependencies: [],
270
+ },
271
+ {
272
+ from: "REFUNDED",
273
+ to: "REFUNDED",
274
+ eventName: "claim_refund",
275
+ guard: {
276
+ and: [
277
+ {
278
+ ">": [
279
+ {
280
+ size: {
281
+ filter: [
282
+ { var: "state.pledges" },
283
+ { "===": [{ var: "backer" }, { var: "event.agent" }] },
284
+ ],
285
+ },
286
+ },
287
+ 0,
288
+ ],
289
+ },
290
+ {
291
+ "!": [
292
+ {
293
+ in: [{ var: "event.agent" }, { var: "state.refundsClaimed" }],
294
+ },
295
+ ],
296
+ },
297
+ ],
298
+ },
299
+ effect: {
300
+ merge: [
301
+ { var: "state" },
302
+ {
303
+ refundsClaimed: {
304
+ cat: [{ var: "state.refundsClaimed" }, [{ var: "event.agent" }]],
305
+ },
306
+ },
307
+ ],
308
+ },
309
+ dependencies: [],
310
+ },
311
+ ],
312
+ });