@hyperscale0/hsx 1.0.0 → 1.0.124

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 (316) hide show
  1. package/CHANGELOG.md +5 -256
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +44 -44
  5. package/bin/hsx.ts +0 -7
  6. package/dist/bin/hsx.d.ts +0 -4
  7. package/dist/bin/hsx.d.ts.map +1 -1
  8. package/dist/bin/hsx.js +0 -6
  9. package/dist/bin/hsx.js.map +1 -1
  10. package/dist/src/ast.d.ts +113 -308
  11. package/dist/src/ast.d.ts.map +1 -1
  12. package/dist/src/ast.js +7 -71
  13. package/dist/src/ast.js.map +1 -1
  14. package/dist/src/attachment-economics.d.ts +5 -0
  15. package/dist/src/attachment-economics.d.ts.map +1 -0
  16. package/dist/src/attachment-economics.js +55 -0
  17. package/dist/src/attachment-economics.js.map +1 -0
  18. package/dist/src/binding-contract.d.ts +22 -0
  19. package/dist/src/binding-contract.d.ts.map +1 -0
  20. package/dist/src/binding-contract.js +74 -0
  21. package/dist/src/binding-contract.js.map +1 -0
  22. package/dist/src/cli.d.ts +4 -19
  23. package/dist/src/cli.d.ts.map +1 -1
  24. package/dist/src/cli.js +89 -276
  25. package/dist/src/cli.js.map +1 -1
  26. package/dist/src/compile.d.ts +34 -66
  27. package/dist/src/compile.d.ts.map +1 -1
  28. package/dist/src/compile.js +2949 -117
  29. package/dist/src/compile.js.map +1 -1
  30. package/dist/src/cost.d.ts +8 -75
  31. package/dist/src/cost.d.ts.map +1 -1
  32. package/dist/src/cost.js +54 -364
  33. package/dist/src/cost.js.map +1 -1
  34. package/dist/src/diagnostics.d.ts +14 -9
  35. package/dist/src/diagnostics.d.ts.map +1 -1
  36. package/dist/src/diagnostics.js +39 -416
  37. package/dist/src/diagnostics.js.map +1 -1
  38. package/dist/src/examples-bundle.d.ts +3 -0
  39. package/dist/src/examples-bundle.d.ts.map +1 -0
  40. package/dist/src/examples-bundle.js +18 -0
  41. package/dist/src/examples-bundle.js.map +1 -0
  42. package/dist/src/examples.d.ts +10 -0
  43. package/dist/src/examples.d.ts.map +1 -0
  44. package/dist/src/examples.js +2 -0
  45. package/dist/src/examples.js.map +1 -0
  46. package/dist/src/format.d.ts +8 -7
  47. package/dist/src/format.d.ts.map +1 -1
  48. package/dist/src/format.js +9 -175
  49. package/dist/src/format.js.map +1 -1
  50. package/dist/src/header-source.d.ts +3 -0
  51. package/dist/src/header-source.d.ts.map +1 -0
  52. package/dist/src/header-source.js +41 -0
  53. package/dist/src/header-source.js.map +1 -0
  54. package/dist/src/headers.d.ts +64 -0
  55. package/dist/src/headers.d.ts.map +1 -0
  56. package/dist/src/headers.js +167 -0
  57. package/dist/src/headers.js.map +1 -0
  58. package/dist/src/index.d.ts +7 -11
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/index.js +4 -9
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/keywords.d.ts +56 -0
  63. package/dist/src/keywords.d.ts.map +1 -0
  64. package/dist/src/keywords.js +133 -0
  65. package/dist/src/keywords.js.map +1 -0
  66. package/dist/src/language.d.ts +26 -0
  67. package/dist/src/language.d.ts.map +1 -0
  68. package/dist/src/language.js +440 -0
  69. package/dist/src/language.js.map +1 -0
  70. package/dist/src/lex.d.ts +13 -28
  71. package/dist/src/lex.d.ts.map +1 -1
  72. package/dist/src/lex.js +119 -145
  73. package/dist/src/lex.js.map +1 -1
  74. package/dist/src/parse.d.ts +4 -17
  75. package/dist/src/parse.d.ts.map +1 -1
  76. package/dist/src/parse.js +484 -1036
  77. package/dist/src/parse.js.map +1 -1
  78. package/dist/src/std-bundle.d.ts.map +1 -1
  79. package/dist/src/std-bundle.js +11 -84
  80. package/dist/src/std-bundle.js.map +1 -1
  81. package/dist/src/std-library.d.ts +1 -1
  82. package/dist/src/std-library.d.ts.map +1 -1
  83. package/dist/src/std-library.js +1 -5
  84. package/dist/src/std-library.js.map +1 -1
  85. package/dist/src/tunables.d.ts +7 -0
  86. package/dist/src/tunables.d.ts.map +1 -0
  87. package/dist/src/tunables.js +27 -0
  88. package/dist/src/tunables.js.map +1 -0
  89. package/docs/README.md +528 -26
  90. package/docs/assets/brand/hsx-horizontal-white.svg +1 -0
  91. package/docs/assets/brand/hsx-horizontal.svg +1 -0
  92. package/docs/assets/brand/hsx-stacked-white.svg +1 -0
  93. package/docs/assets/brand/hsx-stacked.svg +1 -0
  94. package/docs/assets/brand/manifest.json +30 -0
  95. package/docs/assets/hsx.svg +11 -0
  96. package/examples/cards.hsx +34 -0
  97. package/examples/collections.hsx +37 -0
  98. package/examples/cost-table.json +633 -385
  99. package/examples/escrow.hsx +24 -0
  100. package/examples/financing.hsx +32 -0
  101. package/examples/insurance.hsx +30 -0
  102. package/examples/lending.hsx +57 -0
  103. package/examples/library.hsx +15 -0
  104. package/examples/marketplace.hsx +32 -0
  105. package/examples/money.hsx +19 -0
  106. package/examples/rental-deposit.hsx +60 -0
  107. package/examples/repair-approval.hsx +44 -0
  108. package/examples/reporting.hsx +28 -0
  109. package/examples/savings.hsx +21 -0
  110. package/examples/serviced.hsx +25 -0
  111. package/examples/wallet.hsx +24 -0
  112. package/package.json +25 -23
  113. package/src/ast.ts +83 -440
  114. package/src/attachment-economics.ts +103 -0
  115. package/src/binding-contract.ts +104 -0
  116. package/src/cli.ts +95 -325
  117. package/src/compile.ts +4063 -209
  118. package/src/cost.ts +71 -574
  119. package/src/diagnostics.ts +57 -437
  120. package/src/examples-bundle.ts +19 -0
  121. package/src/examples.ts +9 -0
  122. package/src/format.ts +12 -256
  123. package/src/header-source.ts +54 -0
  124. package/src/headers.ts +195 -0
  125. package/src/index.ts +18 -33
  126. package/src/keywords.ts +134 -0
  127. package/src/language.ts +629 -0
  128. package/src/lex.ts +131 -192
  129. package/src/parse.ts +489 -1195
  130. package/src/std-bundle.ts +12 -88
  131. package/src/std-library.ts +2 -7
  132. package/src/tunables.ts +36 -0
  133. package/std/cards.hsx +85 -0
  134. package/std/collections.hsx +90 -0
  135. package/std/escrow.hsx +73 -0
  136. package/std/financing.hsx +683 -0
  137. package/std/insurance.hsx +89 -0
  138. package/std/lending.hsx +138 -0
  139. package/std/marketplace.hsx +123 -0
  140. package/std/money.hsx +173 -0
  141. package/std/reporting.hsx +753 -0
  142. package/std/savings.hsx +68 -0
  143. package/std/wallet.hsx +57 -0
  144. package/LICENSE +0 -661
  145. package/LICENSING.md +0 -52
  146. package/TRADEMARKS.md +0 -35
  147. package/dist/src/emit.d.ts +0 -34
  148. package/dist/src/emit.d.ts.map +0 -1
  149. package/dist/src/emit.js +0 -137
  150. package/dist/src/emit.js.map +0 -1
  151. package/dist/src/entry-overrides.d.ts +0 -58
  152. package/dist/src/entry-overrides.d.ts.map +0 -1
  153. package/dist/src/entry-overrides.js +0 -284
  154. package/dist/src/entry-overrides.js.map +0 -1
  155. package/dist/src/ir.d.ts +0 -66
  156. package/dist/src/ir.d.ts.map +0 -1
  157. package/dist/src/ir.js +0 -15
  158. package/dist/src/ir.js.map +0 -1
  159. package/dist/src/limits.d.ts +0 -21
  160. package/dist/src/limits.d.ts.map +0 -1
  161. package/dist/src/limits.js +0 -21
  162. package/dist/src/limits.js.map +0 -1
  163. package/dist/src/lsp/server.d.ts +0 -32
  164. package/dist/src/lsp/server.d.ts.map +0 -1
  165. package/dist/src/lsp/server.js +0 -391
  166. package/dist/src/lsp/server.js.map +0 -1
  167. package/dist/src/modules.d.ts +0 -38
  168. package/dist/src/modules.d.ts.map +0 -1
  169. package/dist/src/modules.js +0 -368
  170. package/dist/src/modules.js.map +0 -1
  171. package/dist/src/typecheck.d.ts +0 -8
  172. package/dist/src/typecheck.d.ts.map +0 -1
  173. package/dist/src/typecheck.js +0 -2958
  174. package/dist/src/typecheck.js.map +0 -1
  175. package/dist/src/version.d.ts +0 -5
  176. package/dist/src/version.d.ts.map +0 -1
  177. package/dist/src/version.js +0 -5
  178. package/dist/src/version.js.map +0 -1
  179. package/docs/guide/01-first-program.md +0 -24
  180. package/docs/guide/02-money.md +0 -25
  181. package/docs/guide/03-instruments.md +0 -22
  182. package/docs/guide/04-lifecycles.md +0 -25
  183. package/docs/guide/05-fees-and-splits.md +0 -45
  184. package/docs/guide/06-schedules.md +0 -22
  185. package/docs/guide/07-composition.md +0 -46
  186. package/docs/guide/08-writing-a-module.md +0 -26
  187. package/docs/guide/09-cost.md +0 -24
  188. package/docs/guide/10-diagnostics.md +0 -27
  189. package/docs/llms-full.txt +0 -1739
  190. package/docs/llms.txt +0 -45
  191. package/docs/playground.md +0 -54
  192. package/docs/reference/cli.md +0 -35
  193. package/docs/reference/diagnostics.md +0 -619
  194. package/docs/reference/grammar.md +0 -39
  195. package/docs/reference/std/advance.md +0 -35
  196. package/docs/reference/std/cancellable_booking.md +0 -35
  197. package/docs/reference/std/captured_payment.md +0 -43
  198. package/docs/reference/std/conditional_disbursement.md +0 -33
  199. package/docs/reference/std/credit_facility.md +0 -35
  200. package/docs/reference/std/held_payment.md +0 -64
  201. package/docs/reference/std/instant_transfer.md +0 -30
  202. package/docs/reference/std/metered.md +0 -27
  203. package/docs/reference/std/pooled_split.md +0 -26
  204. package/docs/reference/std/premium_forward.md +0 -39
  205. package/docs/reference/std/reconciled_payout.md +0 -33
  206. package/docs/reference/std/recurring_collection.md +0 -25
  207. package/docs/reference/std/rotating_pool.md +0 -42
  208. package/docs/reference/std/scheduled.md +0 -51
  209. package/docs/reference/std/security_deposit.md +0 -46
  210. package/docs/reference/std/settlement_batch.md +0 -42
  211. package/docs/reference/std/swap.md +0 -46
  212. package/docs/reference/std/threshold_pool.md +0 -47
  213. package/docs/reference/std/weighted_distribution.md +0 -39
  214. package/docs/reference/types.md +0 -20
  215. package/docs/reference/udl-output.md +0 -13
  216. package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
  217. package/docs/sessions/2026-09-02-two-instruments.md +0 -41
  218. package/examples/01-first-program/README.md +0 -45
  219. package/examples/01-first-program/tip-jar.hsx +0 -17
  220. package/examples/02-imports-and-archetypes/README.md +0 -96
  221. package/examples/02-imports-and-archetypes/photo-booth.hsx +0 -37
  222. package/examples/03-diagnostics/README.md +0 -68
  223. package/examples/03-diagnostics/corner-shop-fixed.hsx +0 -22
  224. package/examples/03-diagnostics/corner-shop.hsx +0 -19
  225. package/examples/04-complete-product/README.md +0 -84
  226. package/examples/04-complete-product/study-hall.hsx +0 -67
  227. package/examples/05-watch-club/README.md +0 -9
  228. package/examples/05-watch-club/watch-club.hsx +0 -124
  229. package/examples/README.md +0 -18
  230. package/examples/advance/README.md +0 -3
  231. package/examples/advance/advance.hsx +0 -13
  232. package/examples/advance/advance.udl +0 -339
  233. package/examples/cancellable_booking/README.md +0 -3
  234. package/examples/cancellable_booking/cancellable_booking.hsx +0 -14
  235. package/examples/cancellable_booking/cancellable_booking.udl +0 -391
  236. package/examples/captured_payment/README.md +0 -3
  237. package/examples/captured_payment/captured_payment.hsx +0 -21
  238. package/examples/captured_payment/captured_payment.udl +0 -677
  239. package/examples/conditional_disbursement/README.md +0 -3
  240. package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -17
  241. package/examples/conditional_disbursement/conditional_disbursement.udl +0 -412
  242. package/examples/credit_facility/README.md +0 -3
  243. package/examples/credit_facility/credit_facility.hsx +0 -27
  244. package/examples/credit_facility/credit_facility.udl +0 -1373
  245. package/examples/held_payment/README.md +0 -3
  246. package/examples/held_payment/held_payment.hsx +0 -13
  247. package/examples/held_payment/held_payment.udl +0 -507
  248. package/examples/instant_transfer/README.md +0 -3
  249. package/examples/instant_transfer/instant_transfer.hsx +0 -16
  250. package/examples/instant_transfer/instant_transfer.udl +0 -364
  251. package/examples/metered/README.md +0 -3
  252. package/examples/metered/metered.hsx +0 -13
  253. package/examples/metered/metered.udl +0 -247
  254. package/examples/pooled_split/README.md +0 -3
  255. package/examples/pooled_split/pooled_split.hsx +0 -15
  256. package/examples/pooled_split/pooled_split.udl +0 -425
  257. package/examples/premium_forward/README.md +0 -3
  258. package/examples/premium_forward/premium_forward.hsx +0 -19
  259. package/examples/premium_forward/premium_forward.udl +0 -594
  260. package/examples/reconciled_payout/README.md +0 -3
  261. package/examples/reconciled_payout/reconciled_payout.hsx +0 -13
  262. package/examples/reconciled_payout/reconciled_payout.udl +0 -303
  263. package/examples/recurring_collection/README.md +0 -3
  264. package/examples/recurring_collection/recurring_collection.hsx +0 -21
  265. package/examples/recurring_collection/recurring_collection.udl +0 -1130
  266. package/examples/rotating_pool/README.md +0 -3
  267. package/examples/rotating_pool/rotating_pool.hsx +0 -18
  268. package/examples/rotating_pool/rotating_pool.udl +0 -4352
  269. package/examples/scheduled/README.md +0 -3
  270. package/examples/scheduled/scheduled.hsx +0 -12
  271. package/examples/scheduled/scheduled.udl +0 -335
  272. package/examples/security_deposit/README.md +0 -3
  273. package/examples/security_deposit/security_deposit.hsx +0 -21
  274. package/examples/security_deposit/security_deposit.udl +0 -293
  275. package/examples/settlement_batch/README.md +0 -3
  276. package/examples/settlement_batch/settlement_batch.hsx +0 -19
  277. package/examples/settlement_batch/settlement_batch.udl +0 -753
  278. package/examples/swap/README.md +0 -3
  279. package/examples/swap/swap.hsx +0 -19
  280. package/examples/swap/swap.udl +0 -876
  281. package/examples/threshold_pool/README.md +0 -3
  282. package/examples/threshold_pool/threshold_pool.hsx +0 -16
  283. package/examples/threshold_pool/threshold_pool.udl +0 -667
  284. package/examples/weighted_distribution/README.md +0 -3
  285. package/examples/weighted_distribution/weighted_distribution.hsx +0 -20
  286. package/examples/weighted_distribution/weighted_distribution.udl +0 -337
  287. package/skills/hsx/SKILL.md +0 -483
  288. package/src/emit.ts +0 -201
  289. package/src/entry-overrides.ts +0 -428
  290. package/src/ir.ts +0 -99
  291. package/src/limits.ts +0 -20
  292. package/src/lsp/server.ts +0 -460
  293. package/src/modules.ts +0 -446
  294. package/src/typecheck.ts +0 -3876
  295. package/src/version.ts +0 -5
  296. package/std/SEMANTICS.md +0 -130
  297. package/std/settlements/advance.hsx +0 -177
  298. package/std/settlements/cancellable_booking.hsx +0 -87
  299. package/std/settlements/captured_payment.hsx +0 -144
  300. package/std/settlements/conditional_disbursement.hsx +0 -185
  301. package/std/settlements/credit_facility.hsx +0 -167
  302. package/std/settlements/held_payment.hsx +0 -578
  303. package/std/settlements/index.hsx +0 -3
  304. package/std/settlements/instant_transfer.hsx +0 -190
  305. package/std/settlements/metered.hsx +0 -67
  306. package/std/settlements/pooled_split.hsx +0 -68
  307. package/std/settlements/premium_forward.hsx +0 -257
  308. package/std/settlements/reconciled_payout.hsx +0 -77
  309. package/std/settlements/recurring_collection.hsx +0 -27
  310. package/std/settlements/rotating_pool.hsx +0 -252
  311. package/std/settlements/scheduled.hsx +0 -641
  312. package/std/settlements/security_deposit.hsx +0 -166
  313. package/std/settlements/settlement_batch.hsx +0 -122
  314. package/std/settlements/swap.hsx +0 -1114
  315. package/std/settlements/threshold_pool.hsx +0 -221
  316. package/std/settlements/weighted_distribution.hsx +0 -141
@@ -1,876 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "abandon",
6
- "cancel",
7
- "create",
8
- "dispute",
9
- "fund",
10
- "post",
11
- "release"
12
- ],
13
- "actions": {
14
- "abandon": {
15
- "agentDescription": "Walk away from a trade that never funded. Only a created trade abandons, and its escrow account must hold nothing, so there is nothing to refund. No money moves.",
16
- "moves": [],
17
- "publicAction": "abandonExchange",
18
- "requiresDrainedAccount": {
19
- "path": "refs.escrowAccountId"
20
- },
21
- "steps": [],
22
- "summary": "Abandon the trade before its atomic funding batch"
23
- },
24
- "cancel": {
25
- "agentDescription": "Unwind a funded trade before release. Both principals return from escrow to their own sides in one batch. The trade must be funded and not yet released. The service fees taken at funding stay with the platform.",
26
- "effects": {
27
- "moves": [
28
- {
29
- "signature": "moves.transfer.internal",
30
- "source": "moves[0]"
31
- },
32
- {
33
- "signature": "moves.transfer.internal",
34
- "source": "moves[1]"
35
- }
36
- ]
37
- },
38
- "moves": [
39
- {
40
- "bind": {
41
- "amount": {
42
- "from": "instance",
43
- "path": "fields.buyerAmount"
44
- },
45
- "currency": {
46
- "from": "instance",
47
- "path": "fields.currency"
48
- },
49
- "destinationAccountId": {
50
- "from": "instance",
51
- "path": "fields.buyerAccountId"
52
- },
53
- "metadata.instrumentId": {
54
- "from": "const",
55
- "value": "exchange"
56
- },
57
- "metadata.instrumentInstanceId": {
58
- "from": "instance",
59
- "path": "instrumentInstanceId"
60
- },
61
- "metadata.phase": {
62
- "from": "const",
63
- "value": "cancel"
64
- },
65
- "productId": {
66
- "from": "instance",
67
- "path": "productId"
68
- },
69
- "sourceAccountId": {
70
- "from": "instance",
71
- "path": "refs.escrowAccountId"
72
- }
73
- },
74
- "capture": {
75
- "cancelSideARefundTransferId": "transferId"
76
- },
77
- "key": "side_a_refund",
78
- "operation": "internal_transfer.create"
79
- },
80
- {
81
- "bind": {
82
- "amount": {
83
- "from": "instance",
84
- "path": "fields.sellerAmount"
85
- },
86
- "currency": {
87
- "from": "instance",
88
- "path": "fields.currency"
89
- },
90
- "destinationAccountId": {
91
- "from": "instance",
92
- "path": "fields.sellerAccountId"
93
- },
94
- "metadata.instrumentId": {
95
- "from": "const",
96
- "value": "exchange"
97
- },
98
- "metadata.instrumentInstanceId": {
99
- "from": "instance",
100
- "path": "instrumentInstanceId"
101
- },
102
- "metadata.phase": {
103
- "from": "const",
104
- "value": "cancel"
105
- },
106
- "productId": {
107
- "from": "instance",
108
- "path": "productId"
109
- },
110
- "sourceAccountId": {
111
- "from": "instance",
112
- "path": "refs.escrowAccountId"
113
- }
114
- },
115
- "capture": {
116
- "cancelSideBRefundTransferId": "transferId"
117
- },
118
- "key": "side_b_refund",
119
- "operation": "internal_transfer.create"
120
- }
121
- ],
122
- "publicAction": "cancelExchange",
123
- "steps": [],
124
- "summary": "Cancel and return both trade principals atomically"
125
- },
126
- "create": {
127
- "agentDescription": "Open a trade and provision its escrow account. No money moves. Both principals and both exact service fees are fixed here and cannot change afterwards.",
128
- "moves": [],
129
- "publicAction": "createExchange",
130
- "steps": [
131
- {
132
- "bind": {
133
- "currency": {
134
- "from": "instance",
135
- "path": "fields.currency"
136
- },
137
- "owner.id": {
138
- "from": "instance",
139
- "path": "productId"
140
- },
141
- "owner.type": {
142
- "from": "const",
143
- "value": "product"
144
- },
145
- "productId": {
146
- "from": "instance",
147
- "path": "productId"
148
- },
149
- "role": {
150
- "from": "const",
151
- "value": "product_escrow"
152
- }
153
- },
154
- "capture": {
155
- "escrowAccountId": "accountId"
156
- },
157
- "operation": "account.escrow.provision"
158
- }
159
- ],
160
- "summary": "Create a exchange atomic trade"
161
- },
162
- "dispute": {
163
- "agentDescription": "Claw back a released trade inside its dispute window. Both cross-payment reservations void and both principals return from escrow in one batch. The trade must be released and the clawback moment must not have passed. Either trading party may call it.",
164
- "deadline": {
165
- "field": "clawbackAt"
166
- },
167
- "effects": {
168
- "decides": [
169
- {
170
- "signature": "decides.tenant_port",
171
- "source": "port"
172
- }
173
- ],
174
- "moves": [
175
- {
176
- "signature": "moves.transfer.internal",
177
- "source": "moves[0]"
178
- },
179
- {
180
- "signature": "moves.transfer.internal",
181
- "source": "moves[1]"
182
- },
183
- {
184
- "signature": "moves.transfer.internal",
185
- "source": "moves[2]"
186
- },
187
- {
188
- "signature": "moves.transfer.internal",
189
- "source": "moves[3]"
190
- }
191
- ],
192
- "schedules": [
193
- {
194
- "signature": "schedules.deadline",
195
- "source": "deadline"
196
- }
197
- ]
198
- },
199
- "moves": [
200
- {
201
- "bind": {
202
- "reason": {
203
- "from": "const",
204
- "value": "Whole trade disputed inside the clawback window"
205
- },
206
- "transferId": {
207
- "from": "instance",
208
- "path": "refs.releaseSideATransferId"
209
- }
210
- },
211
- "key": "side_a_void",
212
- "operation": "internal_transfer.void"
213
- },
214
- {
215
- "bind": {
216
- "reason": {
217
- "from": "const",
218
- "value": "Whole trade disputed inside the clawback window"
219
- },
220
- "transferId": {
221
- "from": "instance",
222
- "path": "refs.releaseSideBTransferId"
223
- }
224
- },
225
- "key": "side_b_void",
226
- "operation": "internal_transfer.void"
227
- },
228
- {
229
- "bind": {
230
- "amount": {
231
- "from": "instance",
232
- "path": "fields.buyerAmount"
233
- },
234
- "currency": {
235
- "from": "instance",
236
- "path": "fields.currency"
237
- },
238
- "destinationAccountId": {
239
- "from": "instance",
240
- "path": "fields.buyerAccountId"
241
- },
242
- "metadata.clawbackOfTransferId": {
243
- "from": "instance",
244
- "path": "refs.releaseSideATransferId"
245
- },
246
- "metadata.instrumentId": {
247
- "from": "const",
248
- "value": "exchange"
249
- },
250
- "metadata.instrumentInstanceId": {
251
- "from": "instance",
252
- "path": "instrumentInstanceId"
253
- },
254
- "metadata.phase": {
255
- "from": "const",
256
- "value": "dispute"
257
- },
258
- "productId": {
259
- "from": "instance",
260
- "path": "productId"
261
- },
262
- "sourceAccountId": {
263
- "from": "instance",
264
- "path": "refs.escrowAccountId"
265
- }
266
- },
267
- "capture": {
268
- "disputeSideARefundTransferId": "transferId"
269
- },
270
- "key": "side_a_refund",
271
- "operation": "internal_transfer.create"
272
- },
273
- {
274
- "bind": {
275
- "amount": {
276
- "from": "instance",
277
- "path": "fields.sellerAmount"
278
- },
279
- "currency": {
280
- "from": "instance",
281
- "path": "fields.currency"
282
- },
283
- "destinationAccountId": {
284
- "from": "instance",
285
- "path": "fields.sellerAccountId"
286
- },
287
- "metadata.clawbackOfTransferId": {
288
- "from": "instance",
289
- "path": "refs.releaseSideBTransferId"
290
- },
291
- "metadata.instrumentId": {
292
- "from": "const",
293
- "value": "exchange"
294
- },
295
- "metadata.instrumentInstanceId": {
296
- "from": "instance",
297
- "path": "instrumentInstanceId"
298
- },
299
- "metadata.phase": {
300
- "from": "const",
301
- "value": "dispute"
302
- },
303
- "productId": {
304
- "from": "instance",
305
- "path": "productId"
306
- },
307
- "sourceAccountId": {
308
- "from": "instance",
309
- "path": "refs.escrowAccountId"
310
- }
311
- },
312
- "capture": {
313
- "disputeSideBRefundTransferId": "transferId"
314
- },
315
- "key": "side_b_refund",
316
- "operation": "internal_transfer.create"
317
- }
318
- ],
319
- "port": {
320
- "allowedParties": [
321
- "payer",
322
- "beneficiary"
323
- ]
324
- },
325
- "publicAction": "disputeExchange",
326
- "steps": [],
327
- "summary": "Void both reservations, then refund both principals atomically"
328
- },
329
- "fund": {
330
- "agentDescription": "Fund both sides at once. Each side pays its principal into escrow and its service fee to the platform account, four transfers in one batch. The trade must be created and unfunded. This moves real money from both parties.",
331
- "effects": {
332
- "moves": [
333
- {
334
- "signature": "moves.collection.pay_in",
335
- "source": "moves[0]"
336
- },
337
- {
338
- "signature": "moves.collection.pay_in",
339
- "source": "moves[1]"
340
- },
341
- {
342
- "signature": "moves.transfer.internal",
343
- "source": "moves[2]"
344
- },
345
- {
346
- "signature": "moves.transfer.internal",
347
- "source": "moves[3]"
348
- }
349
- ]
350
- },
351
- "moves": [
352
- {
353
- "bind": {
354
- "amount": {
355
- "from": "instance",
356
- "path": "fields.buyerAmount"
357
- },
358
- "currency": {
359
- "from": "instance",
360
- "path": "fields.currency"
361
- },
362
- "destinationAccountId": {
363
- "from": "instance",
364
- "path": "refs.escrowAccountId"
365
- },
366
- "metadata.instrumentId": {
367
- "from": "const",
368
- "value": "exchange"
369
- },
370
- "metadata.instrumentInstanceId": {
371
- "from": "instance",
372
- "path": "instrumentInstanceId"
373
- },
374
- "metadata.phase": {
375
- "from": "const",
376
- "value": "fund"
377
- },
378
- "productId": {
379
- "from": "instance",
380
- "path": "productId"
381
- },
382
- "sourceAccountId": {
383
- "from": "instance",
384
- "path": "fields.buyerAccountId"
385
- }
386
- },
387
- "capture": {
388
- "fundSideAPrincipalTransferId": "transferId"
389
- },
390
- "key": "side_a_principal",
391
- "operation": "internal_transfer.create"
392
- },
393
- {
394
- "bind": {
395
- "amount": {
396
- "from": "instance",
397
- "path": "fields.sellerAmount"
398
- },
399
- "currency": {
400
- "from": "instance",
401
- "path": "fields.currency"
402
- },
403
- "destinationAccountId": {
404
- "from": "instance",
405
- "path": "refs.escrowAccountId"
406
- },
407
- "metadata.instrumentId": {
408
- "from": "const",
409
- "value": "exchange"
410
- },
411
- "metadata.instrumentInstanceId": {
412
- "from": "instance",
413
- "path": "instrumentInstanceId"
414
- },
415
- "metadata.phase": {
416
- "from": "const",
417
- "value": "fund"
418
- },
419
- "productId": {
420
- "from": "instance",
421
- "path": "productId"
422
- },
423
- "sourceAccountId": {
424
- "from": "instance",
425
- "path": "fields.sellerAccountId"
426
- }
427
- },
428
- "capture": {
429
- "fundSideBPrincipalTransferId": "transferId"
430
- },
431
- "key": "side_b_principal",
432
- "operation": "internal_transfer.create"
433
- },
434
- {
435
- "bind": {
436
- "amount": {
437
- "from": "instance",
438
- "path": "fields.buyerFee"
439
- },
440
- "currency": {
441
- "from": "instance",
442
- "path": "fields.currency"
443
- },
444
- "destinationAccountId": {
445
- "from": "instance",
446
- "path": "fields.platformAccountId"
447
- },
448
- "metadata.instrumentId": {
449
- "from": "const",
450
- "value": "exchange"
451
- },
452
- "metadata.instrumentInstanceId": {
453
- "from": "instance",
454
- "path": "instrumentInstanceId"
455
- },
456
- "metadata.phase": {
457
- "from": "const",
458
- "value": "fund"
459
- },
460
- "productId": {
461
- "from": "instance",
462
- "path": "productId"
463
- },
464
- "sourceAccountId": {
465
- "from": "instance",
466
- "path": "fields.buyerAccountId"
467
- }
468
- },
469
- "capture": {
470
- "fundSideAServiceFeeTransferId": "transferId"
471
- },
472
- "key": "side_a_service_fee",
473
- "operation": "internal_transfer.create"
474
- },
475
- {
476
- "bind": {
477
- "amount": {
478
- "from": "instance",
479
- "path": "fields.sellerFee"
480
- },
481
- "currency": {
482
- "from": "instance",
483
- "path": "fields.currency"
484
- },
485
- "destinationAccountId": {
486
- "from": "instance",
487
- "path": "fields.platformAccountId"
488
- },
489
- "metadata.instrumentId": {
490
- "from": "const",
491
- "value": "exchange"
492
- },
493
- "metadata.instrumentInstanceId": {
494
- "from": "instance",
495
- "path": "instrumentInstanceId"
496
- },
497
- "metadata.phase": {
498
- "from": "const",
499
- "value": "fund"
500
- },
501
- "productId": {
502
- "from": "instance",
503
- "path": "productId"
504
- },
505
- "sourceAccountId": {
506
- "from": "instance",
507
- "path": "fields.sellerAccountId"
508
- }
509
- },
510
- "capture": {
511
- "fundSideBServiceFeeTransferId": "transferId"
512
- },
513
- "key": "side_b_service_fee",
514
- "operation": "internal_transfer.create"
515
- }
516
- ],
517
- "publicAction": "fundExchange",
518
- "steps": [],
519
- "summary": "Fund both trade sides and collect on-top fees atomically"
520
- },
521
- "post": {
522
- "due": {
523
- "field": "clawbackAt"
524
- },
525
- "effects": {
526
- "moves": [
527
- {
528
- "signature": "moves.transfer.internal",
529
- "source": "moves[0]"
530
- },
531
- {
532
- "signature": "moves.transfer.internal",
533
- "source": "moves[1]"
534
- }
535
- ],
536
- "schedules": [
537
- {
538
- "signature": "schedules.due",
539
- "source": "due"
540
- }
541
- ]
542
- },
543
- "moves": [
544
- {
545
- "bind": {
546
- "transferId": {
547
- "from": "instance",
548
- "path": "refs.releaseSideATransferId"
549
- }
550
- },
551
- "key": "side_a",
552
- "operation": "internal_transfer.post"
553
- },
554
- {
555
- "bind": {
556
- "transferId": {
557
- "from": "instance",
558
- "path": "refs.releaseSideBTransferId"
559
- }
560
- },
561
- "key": "side_b",
562
- "operation": "internal_transfer.post"
563
- }
564
- ],
565
- "steps": [],
566
- "summary": "Post both trade reservations when the clawback window matures"
567
- },
568
- "release": {
569
- "agentDescription": "Reserve each side's principal for the other side and start the dispute window. The trade must be funded. Money is reserved, not settled. It posts on its own when the window matures, and dispute unwinds it before then. Either trading party may call it.",
570
- "effects": {
571
- "decides": [
572
- {
573
- "signature": "decides.tenant_port",
574
- "source": "port"
575
- }
576
- ],
577
- "holds": [
578
- {
579
- "signature": "holds.reserve",
580
- "source": "moves[0]"
581
- },
582
- {
583
- "signature": "holds.reserve",
584
- "source": "moves[1]"
585
- }
586
- ],
587
- "moves": [
588
- {
589
- "signature": "moves.transfer.internal",
590
- "source": "moves[0]"
591
- },
592
- {
593
- "signature": "moves.transfer.internal",
594
- "source": "moves[1]"
595
- }
596
- ]
597
- },
598
- "moves": [
599
- {
600
- "bind": {
601
- "amount": {
602
- "from": "instance",
603
- "path": "fields.buyerAmount"
604
- },
605
- "currency": {
606
- "from": "instance",
607
- "path": "fields.currency"
608
- },
609
- "destinationAccountId": {
610
- "from": "instance",
611
- "path": "fields.sellerAccountId"
612
- },
613
- "metadata.clawbackAt": {
614
- "from": "instance",
615
- "path": "fields.clawbackAt"
616
- },
617
- "metadata.instrumentId": {
618
- "from": "const",
619
- "value": "exchange"
620
- },
621
- "metadata.instrumentInstanceId": {
622
- "from": "instance",
623
- "path": "instrumentInstanceId"
624
- },
625
- "metadata.phase": {
626
- "from": "const",
627
- "value": "release"
628
- },
629
- "productId": {
630
- "from": "instance",
631
- "path": "productId"
632
- },
633
- "sourceAccountId": {
634
- "from": "instance",
635
- "path": "refs.escrowAccountId"
636
- }
637
- },
638
- "capture": {
639
- "releaseSideATransferId": "transferId"
640
- },
641
- "key": "side_a",
642
- "operation": "internal_transfer.reserve"
643
- },
644
- {
645
- "bind": {
646
- "amount": {
647
- "from": "instance",
648
- "path": "fields.sellerAmount"
649
- },
650
- "currency": {
651
- "from": "instance",
652
- "path": "fields.currency"
653
- },
654
- "destinationAccountId": {
655
- "from": "instance",
656
- "path": "fields.buyerAccountId"
657
- },
658
- "metadata.clawbackAt": {
659
- "from": "instance",
660
- "path": "fields.clawbackAt"
661
- },
662
- "metadata.instrumentId": {
663
- "from": "const",
664
- "value": "exchange"
665
- },
666
- "metadata.instrumentInstanceId": {
667
- "from": "instance",
668
- "path": "instrumentInstanceId"
669
- },
670
- "metadata.phase": {
671
- "from": "const",
672
- "value": "release"
673
- },
674
- "productId": {
675
- "from": "instance",
676
- "path": "productId"
677
- },
678
- "sourceAccountId": {
679
- "from": "instance",
680
- "path": "refs.escrowAccountId"
681
- }
682
- },
683
- "capture": {
684
- "releaseSideBTransferId": "transferId"
685
- },
686
- "key": "side_b",
687
- "operation": "internal_transfer.reserve"
688
- }
689
- ],
690
- "port": {
691
- "allowedParties": [
692
- "payer",
693
- "beneficiary"
694
- ]
695
- },
696
- "publicAction": "releaseExchange",
697
- "setsAt": {
698
- "field": "clawbackAt",
699
- "offset": "P7D"
700
- },
701
- "steps": [],
702
- "summary": "Reserve both cross-payments for the whole-trade clawback window"
703
- }
704
- },
705
- "agentDescription": "Reach for swap when two named parties pay each other in one atomic trade and neither leg may settle alone. Both principals fund one escrow together, both cross-payments reserve together, and one dispute unwinds both. A single payer paying a single payee is instant transfer instead.",
706
- "description": "Atomic swap between buyer and seller; half-funded and half-released states do not exist",
707
- "distinctParties": true,
708
- "feeRules": [
709
- {
710
- "amountField": "buyerFee",
711
- "baseField": "buyerAmount",
712
- "bearerField": "buyerAccountId",
713
- "position": "on_top",
714
- "rule": {
715
- "currencyField": "currency",
716
- "field": "buyerFee",
717
- "kind": "exact"
718
- }
719
- },
720
- {
721
- "amountField": "sellerFee",
722
- "baseField": "sellerAmount",
723
- "bearerField": "sellerAccountId",
724
- "position": "on_top",
725
- "rule": {
726
- "currencyField": "currency",
727
- "field": "sellerFee",
728
- "kind": "exact"
729
- }
730
- }
731
- ],
732
- "fields": {
733
- "buyerAccountId": {
734
- "description": "The buyer account",
735
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
736
- "type": "string",
737
- "x-hyperscale-reference-filter": {
738
- "column": "role",
739
- "values": [
740
- "customer_balance"
741
- ]
742
- }
743
- },
744
- "buyerAmount": {
745
- "description": "Side A amount in SAR minor units, held against the whole trade",
746
- "pattern": "^[1-9][0-9]{0,17}$",
747
- "type": "string"
748
- },
749
- "buyerFee": {
750
- "description": "Immutable exact buyer service fee in SAR minor units",
751
- "pattern": "^[1-9][0-9]{0,17}$",
752
- "type": "string"
753
- },
754
- "clawbackAt": {
755
- "description": "Machine-owned end of the P7D whole-trade dispute window",
756
- "format": "hyperscale-date-time",
757
- "type": "string"
758
- },
759
- "currency": {
760
- "description": "ISO 4217 currency code",
761
- "maxLength": 3,
762
- "minLength": 3,
763
- "pattern": "^[A-Z]{3}$",
764
- "type": "string"
765
- },
766
- "platformAccountId": {
767
- "description": "The product fee collection account",
768
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
769
- "type": "string",
770
- "x-hyperscale-fee-collection-port": true,
771
- "x-hyperscale-reference-filter": {
772
- "column": "role",
773
- "values": [
774
- "customer_balance",
775
- "product_revenue"
776
- ]
777
- }
778
- },
779
- "sellerAccountId": {
780
- "description": "The seller account",
781
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
782
- "type": "string",
783
- "x-hyperscale-reference-filter": {
784
- "column": "role",
785
- "values": [
786
- "customer_balance"
787
- ]
788
- }
789
- },
790
- "sellerAmount": {
791
- "description": "Side B amount in SAR minor units, held against the whole trade",
792
- "pattern": "^[1-9][0-9]{0,17}$",
793
- "type": "string"
794
- },
795
- "sellerFee": {
796
- "description": "Immutable exact seller service fee in SAR minor units",
797
- "pattern": "^[1-9][0-9]{0,17}$",
798
- "type": "string"
799
- }
800
- },
801
- "id": "exchange",
802
- "idPrefix": "exch",
803
- "lifecycle": {
804
- "initial": "created",
805
- "states": [
806
- "created",
807
- "abandoned",
808
- "funded",
809
- "cancelled",
810
- "released",
811
- "settled",
812
- "clawed_back"
813
- ],
814
- "transitions": {
815
- "abandon": {
816
- "from": [
817
- "created"
818
- ],
819
- "to": "abandoned"
820
- },
821
- "cancel": {
822
- "from": [
823
- "funded"
824
- ],
825
- "to": "cancelled"
826
- },
827
- "dispute": {
828
- "from": [
829
- "released"
830
- ],
831
- "to": "clawed_back"
832
- },
833
- "fund": {
834
- "from": [
835
- "created"
836
- ],
837
- "to": "funded"
838
- },
839
- "post": {
840
- "from": [
841
- "released"
842
- ],
843
- "to": "settled"
844
- },
845
- "release": {
846
- "from": [
847
- "funded"
848
- ],
849
- "to": "released"
850
- }
851
- }
852
- },
853
- "parties": {
854
- "beneficiary": "sellerAccountId",
855
- "payer": "buyerAccountId"
856
- },
857
- "required": [
858
- "buyerAccountId",
859
- "sellerAccountId",
860
- "platformAccountId",
861
- "buyerAmount",
862
- "sellerAmount",
863
- "buyerFee",
864
- "sellerFee",
865
- "currency"
866
- ],
867
- "summary": "Two-party atomic trade between buyer and seller",
868
- "title": "Exchange"
869
- }
870
- ],
871
- "product": "swap_example",
872
- "subjects": [],
873
- "title": "Swap example",
874
- "udl": 1,
875
- "version": 1
876
- }