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